[planner] cache primitive offers
This commit is contained in:
parent
583bd5bd77
commit
b6c222cdc2
1 changed files with 16 additions and 1 deletions
|
|
@ -288,6 +288,10 @@ class Solver:
|
|||
def __init__(self, request: RouteRequest) -> None:
|
||||
self.request = request
|
||||
self.eval_cache: dict[tuple[int, float, str | None, str | None, str, str, PrimitiveKind | None], SelectedPrimitive] = {}
|
||||
self.offer_cache: dict[
|
||||
tuple[PrimitiveKind, str | None, str | None, tuple[tuple[str, Any], ...]],
|
||||
tuple[PrimitiveOffer, ...],
|
||||
] = {}
|
||||
self.order = 0
|
||||
|
||||
def solve(self) -> Candidate:
|
||||
|
|
@ -384,8 +388,19 @@ class Solver:
|
|||
kwargs.pop('out_ptype', None)
|
||||
if extra:
|
||||
kwargs.update(extra)
|
||||
try:
|
||||
cache_key = (kind, in_ptype, out_ptype, tuple(sorted(kwargs.items())))
|
||||
hash(cache_key)
|
||||
except TypeError:
|
||||
return self.request.tool.primitive_offers(kind, in_ptype=in_ptype, out_ptype=out_ptype, **kwargs)
|
||||
|
||||
cached = self.offer_cache.get(cache_key)
|
||||
if cached is not None:
|
||||
return cached
|
||||
offers = self.request.tool.primitive_offers(kind, in_ptype=in_ptype, out_ptype=out_ptype, **kwargs)
|
||||
self.offer_cache[cache_key] = offers
|
||||
return offers
|
||||
|
||||
def evaluate(
|
||||
self,
|
||||
offer: PrimitiveOffer,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue