hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit c8f9ac70c10489931a8f8aab584498ba776523b3
parent eaa48d4405bb27a3efda400051e8c385ae3d1595
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 13:56:14 +0000

core: represent alternative plans and planner limitations

Diffstat:
Msrc/hyf_application/match_plan.mojo | 29+++++++++++++++++++++++++++++
Mtests/test_application.mojo | 23++++++++++++++++++++++-
2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/hyf_application/match_plan.mojo b/src/hyf_application/match_plan.mojo @@ -133,3 +133,32 @@ def partial_outcome( def partial_discloses_deficit() -> Bool: return True + + +@fieldwise_init +struct PlannerOffer(Copyable, Movable): + var plans: List[MatchPlan] + var supported_mode: String + var unsupported: List[String] + var alternatives_are_simultaneous: Bool + + +def alternative_plans( + plans: List[MatchPlan], unsupported: List[String] +) raises -> PlannerOffer: + var copied = List[MatchPlan]() + for plan in plans: + copied.append(plan.copy()) + var unsupported_copied = List[String]() + for entry in unsupported: + unsupported_copied.append(String(entry)) + return PlannerOffer( + plans=copied^, + supported_mode="single_supplier_compatible_lots", + unsupported=unsupported_copied^, + alternatives_are_simultaneous=False, + ) + + +def unsupported_mode_means_no_supply() -> Bool: + return False diff --git a/tests/test_application.mojo b/tests/test_application.mojo @@ -515,7 +515,7 @@ from hyf_application.match_plan import ( group_lots_by_supplier, multi_supplier_is_supported, ) -from hyf_core.domain.plan import LotCapacity, plan_conservation_violations +from hyf_core.domain.plan import LotCapacity, MatchPlan, plan_conservation_violations def test_supplier_grouping_and_bounded_allocation() raises: @@ -590,3 +590,24 @@ def test_explicit_partial_fulfillment_outcome() raises: var disallowed = partial_outcome(50, 30, False) assert_true(not disallowed.permitted) assert_true(partial_discloses_deficit()) + + +from hyf_application.match_plan import ( + alternative_plans, + unsupported_mode_means_no_supply, +) + + +def test_alternative_plans_and_planner_limitations() raises: + var capacities = List[LotCapacity]() + capacities.append(LotCapacity(lot_id="lot-1", revision="l1", value=50, scale=0)) + var plans = List[MatchPlan]() + plans.append(allocate_single_line("p1", "line-1", "farm-1", 25, 0, capacities)) + plans.append(allocate_single_line("p2", "line-1", "farm-1", 30, 0, capacities)) + var unsupported = List[String]() + unsupported.append("multi_supplier") + var offer = alternative_plans(plans, unsupported) + assert_equal(len(offer.plans), 2) + assert_true(not offer.alternatives_are_simultaneous) + assert_equal(len(offer.unsupported), 1) + assert_true(not unsupported_mode_means_no_supply())