[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:
|
def __init__(self, request: RouteRequest) -> None:
|
||||||
self.request = request
|
self.request = request
|
||||||
self.eval_cache: dict[tuple[int, float, str | None, str | None, str, str, PrimitiveKind | None], SelectedPrimitive] = {}
|
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
|
self.order = 0
|
||||||
|
|
||||||
def solve(self) -> Candidate:
|
def solve(self) -> Candidate:
|
||||||
|
|
@ -384,8 +388,19 @@ class Solver:
|
||||||
kwargs.pop('out_ptype', None)
|
kwargs.pop('out_ptype', None)
|
||||||
if extra:
|
if extra:
|
||||||
kwargs.update(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)
|
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(
|
def evaluate(
|
||||||
self,
|
self,
|
||||||
offer: PrimitiveOffer,
|
offer: PrimitiveOffer,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue