From 21a625b05441c72e4eb6c788bf608c0c43e301fc Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Thu, 25 Jun 2026 12:40:29 +0800 Subject: [PATCH] fix: use circuit compute trait in lut resolver --- legacy/src/lcr_connector/resolver/lut.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/legacy/src/lcr_connector/resolver/lut.py b/legacy/src/lcr_connector/resolver/lut.py index a942150..b399258 100644 --- a/legacy/src/lcr_connector/resolver/lut.py +++ b/legacy/src/lcr_connector/resolver/lut.py @@ -1,10 +1,9 @@ import bisect -from itertools import chain, product -from functools import cached_property +from itertools import chain from .common import Resolver from .bfs import BfsResolver from ..dataset import DatasetCollection, Dataset -from ..common import Circuit, DeviceKind, JointKind, CircuitValueTrait +from ..common import Circuit, DeviceKind, CircuitValueTrait from ..query import Request, Response @@ -91,6 +90,7 @@ class LutResolver(Resolver): # target. This guarantees items are visited in strictly increasing # difference order, so the first N items within tolerance are exactly # the N best matches. + cv_trait = CircuitValueTrait(request.device_kind, target) while left >= 0 or right < len(lut): if len(bucket) >= count_limit: break @@ -100,7 +100,15 @@ class LutResolver(Resolver): elif right >= len(lut): go_left = True else: - go_left = (target - lut[left].value) <= (lut[right].value - target) + left_instance = lut[left] + left_diff = cv_trait.unsigned_difference( + left_instance.circuit, value=left_instance.value + ) + right_instance = lut[right] + right_diff = cv_trait.unsigned_difference( + right_instance.circuit, value=right_instance.value + ) + go_left = left_diff <= right_diff if go_left: item = lut[left] @@ -109,7 +117,7 @@ class LutResolver(Resolver): item = lut[right] right += 1 - diff = abs(target - item.value) + diff = cv_trait.unsigned_difference(item.circuit, value=item.value) # Since the LUT is sorted, values on each side only move further # from target as we advance. Once one side exceeds tolerance, # the rest of that side is guaranteed out of range — disable it.