agentevolve-optimizer 0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agent_evolve/__init__.py +722 -0
- agent_evolve/agentic.py +2800 -0
- agent_evolve/api.py +767 -0
- agent_evolve/application/__init__.py +1580 -0
- agent_evolve/application/action_allocation.py +744 -0
- agent_evolve/application/action_allocation_frame.py +347 -0
- agent_evolve/application/action_allocation_frame_commit.py +185 -0
- agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
- agent_evolve/application/action_allocation_frame_v3.py +338 -0
- agent_evolve/application/action_archive_value.py +497 -0
- agent_evolve/application/action_evidence_consistency.py +455 -0
- agent_evolve/application/action_forecast_partitioning.py +1471 -0
- agent_evolve/application/action_metric_projection.py +211 -0
- agent_evolve/application/action_role_value.py +680 -0
- agent_evolve/application/action_score_authorities.py +363 -0
- agent_evolve/application/action_structural_signature.py +116 -0
- agent_evolve/application/action_target_realization.py +402 -0
- agent_evolve/application/agentic_evolution.py +7734 -0
- agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
- agent_evolve/application/anchor_residual_identification.py +463 -0
- agent_evolve/application/archive_conditioned_action_target.py +208 -0
- agent_evolve/application/artifact_journal.py +246 -0
- agent_evolve/application/artifact_replay.py +347 -0
- agent_evolve/application/budgeted_optimizer.py +1828 -0
- agent_evolve/application/calibrated_campaign.py +485 -0
- agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
- agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
- agent_evolve/application/campaign_capacity_recourse.py +254 -0
- agent_evolve/application/campaign_contextual_outcomes.py +119 -0
- agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
- agent_evolve/application/campaign_evidence_registry.py +262 -0
- agent_evolve/application/campaign_execution.py +2537 -0
- agent_evolve/application/campaign_generation_audit.py +942 -0
- agent_evolve/application/campaign_learning.py +1812 -0
- agent_evolve/application/campaign_learning_runtime.py +1977 -0
- agent_evolve/application/campaign_search_phase.py +227 -0
- agent_evolve/application/campaign_selector_context_extension.py +220 -0
- agent_evolve/application/campaign_variation_envelope.py +649 -0
- agent_evolve/application/campaign_variation_trace.py +451 -0
- agent_evolve/application/candidate_archive_consequence.py +128 -0
- agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
- agent_evolve/application/composite_outcome_updater.py +145 -0
- agent_evolve/application/composition_portfolio_selection.py +363 -0
- agent_evolve/application/concurrent_stage.py +144 -0
- agent_evolve/application/contextual_action_allocation.py +181 -0
- agent_evolve/application/contextual_campaign_outcomes.py +267 -0
- agent_evolve/application/contextual_campaign_planning.py +1366 -0
- agent_evolve/application/contextual_delayed_credit.py +651 -0
- agent_evolve/application/contextual_search_controller.py +2374 -0
- agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
- agent_evolve/application/decision_metric_projection.py +112 -0
- agent_evolve/application/derived_action_semantics.py +129 -0
- agent_evolve/application/detailed_evaluation.py +449 -0
- agent_evolve/application/earned_lineage.py +1011 -0
- agent_evolve/application/effective_choice_audit.py +484 -0
- agent_evolve/application/empirical_consequence_calibration.py +908 -0
- agent_evolve/application/evaluation_accounting.py +325 -0
- agent_evolve/application/evaluation_cache.py +199 -0
- agent_evolve/application/evaluation_escrow.py +547 -0
- agent_evolve/application/evaluation_recourse.py +253 -0
- agent_evolve/application/event_recorder.py +151 -0
- agent_evolve/application/evolution_campaign.py +1840 -0
- agent_evolve/application/executable_hypothesis.py +323 -0
- agent_evolve/application/factorial_branch_pilot.py +772 -0
- agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
- agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
- agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
- agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
- agent_evolve/application/finite_action_selection.py +188 -0
- agent_evolve/application/finite_action_set.py +306 -0
- agent_evolve/application/finite_action_transition.py +537 -0
- agent_evolve/application/finite_variation_eligibility.py +296 -0
- agent_evolve/application/forecast_geometry_portfolio.py +799 -0
- agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
- agent_evolve/application/front_proximity_admission.py +311 -0
- agent_evolve/application/front_proximity_parent_basis.py +458 -0
- agent_evolve/application/frozen_hurdle_score.py +659 -0
- agent_evolve/application/g3_causal_screen.py +2257 -0
- agent_evolve/application/g3_causal_validation.py +1046 -0
- agent_evolve/application/g3_postseal_curation.py +818 -0
- agent_evolve/application/gated_agentic_generator.py +205 -0
- agent_evolve/application/generation_feedback.py +293 -0
- agent_evolve/application/generative_proposal_journal.py +185 -0
- agent_evolve/application/geometry_conditional_elasticity.py +453 -0
- agent_evolve/application/global_wave_action_allocation.py +1151 -0
- agent_evolve/application/head_mass_conditional_seat.py +268 -0
- agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
- agent_evolve/application/identifiable_reflection_learning.py +395 -0
- agent_evolve/application/identifiable_reflection_request.py +364 -0
- agent_evolve/application/in_memory_residual_archive.py +341 -0
- agent_evolve/application/insight_memory.py +1804 -0
- agent_evolve/application/live_runtime_manifest.py +758 -0
- agent_evolve/application/llm_task_queue.py +769 -0
- agent_evolve/application/matched_finite_action_block.py +409 -0
- agent_evolve/application/materialized_action_broker.py +2328 -0
- agent_evolve/application/materialized_action_constraints.py +83 -0
- agent_evolve/application/materialized_variation.py +211 -0
- agent_evolve/application/multi_option_evolution.py +1536 -0
- agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
- agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
- agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
- agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
- agent_evolve/application/outcome_relation.py +193 -0
- agent_evolve/application/paired_allocation_comparison.py +241 -0
- agent_evolve/application/paired_block_schedule.py +127 -0
- agent_evolve/application/parent_measurement.py +226 -0
- agent_evolve/application/pareto_archive.py +811 -0
- agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
- agent_evolve/application/portfolio_evolution.py +2950 -0
- agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
- agent_evolve/application/portfolio_memory_attribution.py +581 -0
- agent_evolve/application/portfolio_memory_dose.py +788 -0
- agent_evolve/application/portfolio_memory_matched_control.py +938 -0
- agent_evolve/application/portfolio_memory_transfer.py +297 -0
- agent_evolve/application/portfolio_optimization_memory.py +363 -0
- agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
- agent_evolve/application/portfolio_projection.py +335 -0
- agent_evolve/application/portfolio_recombination.py +2032 -0
- agent_evolve/application/post_evolution_reflection.py +834 -0
- agent_evolve/application/postcommit_rank_authority.py +245 -0
- agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
- agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
- agent_evolve/application/prequential_residual_exploration.py +343 -0
- agent_evolve/application/prequential_score_portfolio.py +954 -0
- agent_evolve/application/projections.py +292 -0
- agent_evolve/application/protected_action_committee.py +1027 -0
- agent_evolve/application/protected_branch_pilot.py +376 -0
- agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
- agent_evolve/application/provider_replay.py +910 -0
- agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
- agent_evolve/application/recombination_residual_expert.py +403 -0
- agent_evolve/application/reflection_workflow.py +571 -0
- agent_evolve/application/region_conditional_credit.py +911 -0
- agent_evolve/application/residual_campaign_runtime.py +531 -0
- agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
- agent_evolve/application/residual_headroom_ledger.py +1544 -0
- agent_evolve/application/residual_learning_transaction.py +396 -0
- agent_evolve/application/residual_portfolio_evolution.py +1228 -0
- agent_evolve/application/residual_reachability.py +749 -0
- agent_evolve/application/residual_stage_credit.py +499 -0
- agent_evolve/application/same_prefix_paired_audit.py +1580 -0
- agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
- agent_evolve/application/sequential_lineage_allocation.py +1017 -0
- agent_evolve/application/sequential_market_replay.py +1395 -0
- agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
- agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
- agent_evolve/application/single_score_action_allocation.py +299 -0
- agent_evolve/application/source_exposure_allocation.py +906 -0
- agent_evolve/application/staged_memory.py +210 -0
- agent_evolve/application/stratified_cold_start_allocation.py +732 -0
- agent_evolve/application/support_guarded_hurdle_score.py +549 -0
- agent_evolve/application/target_conditioned_action_forecast.py +595 -0
- agent_evolve/application/target_conditioned_campaign.py +566 -0
- agent_evolve/application/treatment_assignment.py +201 -0
- agent_evolve/application/trusted_objective_evidence.py +217 -0
- agent_evolve/application/two_stage_action_evolution.py +1131 -0
- agent_evolve/application/v8lite_allocation_policy.py +1083 -0
- agent_evolve/application/v9_candidate_policy.py +1303 -0
- agent_evolve/bootstrap.py +108 -0
- agent_evolve/campaign_presets.py +517 -0
- agent_evolve/campaign_profiles.py +452 -0
- agent_evolve/campaign_variation_topology.py +288 -0
- agent_evolve/campaign_workload.py +950 -0
- agent_evolve/cli.py +797 -0
- agent_evolve/contract.py +241 -0
- agent_evolve/core/__init__.py +91 -0
- agent_evolve/core/action_semantics.py +411 -0
- agent_evolve/core/authored.py +105 -0
- agent_evolve/core/formatting.py +286 -0
- agent_evolve/core/optimization_semantics.py +324 -0
- agent_evolve/core/problem.py +167 -0
- agent_evolve/core/results.py +323 -0
- agent_evolve/core/stats.py +70 -0
- agent_evolve/core/telemetry.py +100 -0
- agent_evolve/domain/__init__.py +89 -0
- agent_evolve/domain/artifact.py +162 -0
- agent_evolve/domain/durable_text.py +68 -0
- agent_evolve/domain/event.py +1454 -0
- agent_evolve/domain/finite_action_set.py +426 -0
- agent_evolve/domain/finite_variation.py +526 -0
- agent_evolve/domain/generative_emission.py +559 -0
- agent_evolve/domain/ids.py +163 -0
- agent_evolve/domain/inline_text.py +106 -0
- agent_evolve/domain/insight.py +27 -0
- agent_evolve/domain/lineage.py +737 -0
- agent_evolve/domain/llm_task_queue.py +960 -0
- agent_evolve/domain/outcome.py +96 -0
- agent_evolve/domain/patch.py +854 -0
- agent_evolve/domain/typed_json.py +542 -0
- agent_evolve/domain/variation_space.py +158 -0
- agent_evolve/driver.py +1014 -0
- agent_evolve/harness/__init__.py +29 -0
- agent_evolve/harness/base.py +242 -0
- agent_evolve/harness/directives.py +163 -0
- agent_evolve/harness/generative_seal.py +479 -0
- agent_evolve/harness/registry.py +41 -0
- agent_evolve/infrastructure/__init__.py +39 -0
- agent_evolve/infrastructure/artifacts/__init__.py +6 -0
- agent_evolve/infrastructure/artifacts/_verification.py +67 -0
- agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
- agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
- agent_evolve/infrastructure/asyncio_runtime.py +109 -0
- agent_evolve/infrastructure/authored_runtime.py +188 -0
- agent_evolve/infrastructure/authored_worker.py +171 -0
- agent_evolve/infrastructure/clock.py +53 -0
- agent_evolve/infrastructure/events/__init__.py +6 -0
- agent_evolve/infrastructure/events/_validation.py +89 -0
- agent_evolve/infrastructure/events/in_memory.py +56 -0
- agent_evolve/infrastructure/events/jsonl.py +193 -0
- agent_evolve/infrastructure/exception_provenance.py +215 -0
- agent_evolve/infrastructure/ids.py +118 -0
- agent_evolve/infrastructure/lineage_codec.py +1836 -0
- agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
- agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
- agent_evolve/infrastructure/resource_lease.py +370 -0
- agent_evolve/infrastructure/sanitization/__init__.py +8 -0
- agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
- agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
- agent_evolve/infrastructure/stream_liveness.py +383 -0
- agent_evolve/infrastructure/subprocess_boundary.py +136 -0
- agent_evolve/integrations/__init__.py +1 -0
- agent_evolve/integrations/botorch/__init__.py +28 -0
- agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
- agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
- agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
- agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
- agent_evolve/integrations/completion.py +242 -0
- agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
- agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
- agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
- agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
- agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
- agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
- agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
- agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
- agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
- agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
- agent_evolve/integrations/pydantic_ai/harness.py +159 -0
- agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
- agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
- agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
- agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
- agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
- agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
- agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
- agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
- agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
- agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
- agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
- agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
- agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
- agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
- agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
- agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
- agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
- agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
- agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
- agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
- agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
- agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
- agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
- agent_evolve/integrations/pymoo_adapter.py +242 -0
- agent_evolve/policies/__init__.py +17 -0
- agent_evolve/policies/check.py +469 -0
- agent_evolve/policies/emit_scaffold.py +451 -0
- agent_evolve/policies/feedback/__init__.py +37 -0
- agent_evolve/policies/feedback/held_out_asn.py +1325 -0
- agent_evolve/policies/genetic.py +607 -0
- agent_evolve/policies/llm_backoff.py +183 -0
- agent_evolve/policies/llm_chooser.py +226 -0
- agent_evolve/policies/llm_generator.py +1760 -0
- agent_evolve/policies/llm_init.py +267 -0
- agent_evolve/policies/llm_operator.py +109 -0
- agent_evolve/policies/llm_prior.py +194 -0
- agent_evolve/policies/llm_surrogate.py +334 -0
- agent_evolve/policies/measurement_evidence.py +704 -0
- agent_evolve/policies/memory/__init__.py +223 -0
- agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
- agent_evolve/policies/memory/compatibility_matching.py +593 -0
- agent_evolve/policies/memory/global_falsification.py +1841 -0
- agent_evolve/policies/memory/prompt_shape.py +503 -0
- agent_evolve/policies/memory/randomized_subset.py +714 -0
- agent_evolve/policies/memory/staged_causal.py +1270 -0
- agent_evolve/policies/memory/treatment_compliance.py +759 -0
- agent_evolve/policies/objective_resolution/__init__.py +17 -0
- agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
- agent_evolve/policies/operator_portfolio.py +407 -0
- agent_evolve/policies/reguidance.py +1133 -0
- agent_evolve/policies/reward/__init__.py +83 -0
- agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
- agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
- agent_evolve/policies/reward/affine_hypervolume.py +490 -0
- agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
- agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
- agent_evolve/policies/reward/frozen_archive.py +360 -0
- agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
- agent_evolve/policies/search_state.py +208 -0
- agent_evolve/policies/selection/__init__.py +345 -0
- agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
- agent_evolve/policies/selection/affine_frontier_context.py +330 -0
- agent_evolve/policies/selection/affine_frontier_target.py +473 -0
- agent_evolve/policies/selection/archive_elite.py +1346 -0
- agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
- agent_evolve/policies/selection/calibrated_slate.py +1394 -0
- agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
- agent_evolve/policies/selection/common_candidate_pool.py +685 -0
- agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
- agent_evolve/policies/selection/disjoint_pairs.py +479 -0
- agent_evolve/policies/selection/elite_explorer.py +719 -0
- agent_evolve/policies/selection/finite_action.py +187 -0
- agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
- agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
- agent_evolve/policies/selection/forecast_calibration.py +922 -0
- agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
- agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
- agent_evolve/policies/selection/full_support_slate.py +91 -0
- agent_evolve/policies/selection/meaningful_direction.py +240 -0
- agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
- agent_evolve/policies/selection/model_anchored_slate.py +826 -0
- agent_evolve/policies/selection/phenotype_recourse.py +979 -0
- agent_evolve/policies/selection/proposal_support.py +368 -0
- agent_evolve/policies/selection/random_portfolio.py +254 -0
- agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
- agent_evolve/policies/selection/residual_frontier.py +463 -0
- agent_evolve/policies/selection/residual_frontier_target.py +605 -0
- agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
- agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
- agent_evolve/policies/selection/target_conditioned_features.py +812 -0
- agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
- agent_evolve/policies/selection/task_keyed_palette.py +906 -0
- agent_evolve/policies/semantics.py +147 -0
- agent_evolve/policies/structure.py +362 -0
- agent_evolve/policies/structured_output_budget.py +62 -0
- agent_evolve/policies/surrogate.py +696 -0
- agent_evolve/policies/variation/__init__.py +1 -0
- agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
- agent_evolve/policies/variation/crossover_inheritance.py +575 -0
- agent_evolve/policies/variation/disjoint_recombination.py +611 -0
- agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
- agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
- agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
- agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
- agent_evolve/policies/variation/typed_patch.py +1981 -0
- agent_evolve/policies/weighted_prior.py +394 -0
- agent_evolve/ports/__init__.py +383 -0
- agent_evolve/ports/action_allocation.py +733 -0
- agent_evolve/ports/action_allocation_frame.py +1153 -0
- agent_evolve/ports/action_allocation_frame_commit.py +294 -0
- agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
- agent_evolve/ports/action_allocation_frame_v3.py +995 -0
- agent_evolve/ports/action_forecast.py +1568 -0
- agent_evolve/ports/action_metric_projection.py +165 -0
- agent_evolve/ports/agentic_generator.py +1561 -0
- agent_evolve/ports/archive_context.py +136 -0
- agent_evolve/ports/artifact_sanitizer.py +44 -0
- agent_evolve/ports/artifact_store.py +225 -0
- agent_evolve/ports/clock.py +13 -0
- agent_evolve/ports/contextual_search_allocation.py +827 -0
- agent_evolve/ports/decision_metric_projection.py +258 -0
- agent_evolve/ports/event_store.py +55 -0
- agent_evolve/ports/executable_hypothesis.py +557 -0
- agent_evolve/ports/finite_acquisition.py +377 -0
- agent_evolve/ports/finite_acquisition_batch.py +296 -0
- agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
- agent_evolve/ports/finite_acquisition_json.py +247 -0
- agent_evolve/ports/finite_acquisition_space.py +168 -0
- agent_evolve/ports/finite_action_selection.py +348 -0
- agent_evolve/ports/finite_action_set.py +256 -0
- agent_evolve/ports/frontier_target.py +396 -0
- agent_evolve/ports/generation_failure.py +43 -0
- agent_evolve/ports/hard_feasibility.py +233 -0
- agent_evolve/ports/id_factory.py +34 -0
- agent_evolve/ports/llm_task_queue.py +93 -0
- agent_evolve/ports/objective_resolution.py +419 -0
- agent_evolve/ports/paired_allocation_comparison.py +401 -0
- agent_evolve/ports/paired_block_schedule.py +475 -0
- agent_evolve/ports/parent_measurement.py +336 -0
- agent_evolve/ports/portfolio_memory_dose.py +643 -0
- agent_evolve/ports/portfolio_selection.py +3169 -0
- agent_evolve/ports/postcommit_rank_authority.py +467 -0
- agent_evolve/ports/presented_action_evidence.py +794 -0
- agent_evolve/ports/resource_lease.py +162 -0
- agent_evolve/ports/structured_generator.py +734 -0
- agent_evolve/ports/structured_output_budget.py +120 -0
- agent_evolve/ports/subprocess_boundary.py +138 -0
- agent_evolve/ports/treatment_assignment.py +466 -0
- agent_evolve/ports/variation_catalog.py +76 -0
- agent_evolve/ports/variation_source.py +226 -0
- agent_evolve/proposal_mode.py +157 -0
- agent_evolve/proposers/__init__.py +10 -0
- agent_evolve/proposers/random_proposer.py +188 -0
- agent_evolve/provider_accounting.py +163 -0
- agent_evolve/py.typed +0 -0
- agent_evolve/reference_method.py +1570 -0
- agent_evolve/session/__init__.py +11 -0
- agent_evolve/session/authorship.py +864 -0
- agent_evolve/session/evaluate.py +236 -0
- agent_evolve/session/fidelity.py +237 -0
- agent_evolve/session/genetic_loop.py +742 -0
- agent_evolve/session/loop.py +803 -0
- agent_evolve/session/screening.py +671 -0
- agent_evolve/settings.py +376 -0
- agent_evolve/workload_kit.py +368 -0
- agent_evolve/workload_prompt.py +398 -0
- agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
- agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
- agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
- agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
- agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
- agentevolve_optimizer-0.5.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
"""Immutable, outcome-blind finite action sets for matched selector tests.
|
|
2
|
+
|
|
3
|
+
The exact recommendation attached to an insight remains an anchor. A finite
|
|
4
|
+
action set is a separate experimental authority that exposes a small local
|
|
5
|
+
neighbourhood around that anchor to both a model and an engine comparator.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import hashlib
|
|
11
|
+
import json
|
|
12
|
+
import re
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from enum import Enum
|
|
15
|
+
|
|
16
|
+
from agent_evolve.domain.finite_variation import (
|
|
17
|
+
FiniteVariationContract,
|
|
18
|
+
FiniteVariationOption,
|
|
19
|
+
validate_finite_variation_contract,
|
|
20
|
+
validate_finite_variation_option,
|
|
21
|
+
)
|
|
22
|
+
from agent_evolve.domain.ids import CandidateId
|
|
23
|
+
from agent_evolve.domain.insight import InsightRef
|
|
24
|
+
from agent_evolve.domain.patch import require_sha256
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
MIN_MATCHED_FINITE_ACTIONS = 4
|
|
28
|
+
MAX_MATCHED_FINITE_ACTIONS = 8
|
|
29
|
+
|
|
30
|
+
_TOKEN = re.compile(r"^[a-z][a-z0-9_.-]{0,95}$")
|
|
31
|
+
_PATH = re.compile(
|
|
32
|
+
r"^\$\.[^.\[\]\s]+(?:\.[^.\[\]\s]+|\[(?:0|[1-9][0-9]*)\])*$"
|
|
33
|
+
)
|
|
34
|
+
_OPTION_PROMPT_DOMAIN = b"agent-evolve:finite-action-option-prompt:v1\x00"
|
|
35
|
+
_PRESENTATION_DOMAIN = b"agent-evolve:finite-action-presentation:v1\x00"
|
|
36
|
+
_SUPPORT_DOMAIN = b"agent-evolve:finite-action-support:v1\x00"
|
|
37
|
+
_CARD_DOMAIN = b"agent-evolve:finite-action-card:v1\x00"
|
|
38
|
+
_AUTHORITY_DOMAIN = b"agent-evolve:finite-action-set-authority:v1\x00"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _canonical_json(value: object) -> bytes:
|
|
42
|
+
return json.dumps(
|
|
43
|
+
value,
|
|
44
|
+
ensure_ascii=True,
|
|
45
|
+
allow_nan=False,
|
|
46
|
+
separators=(",", ":"),
|
|
47
|
+
sort_keys=True,
|
|
48
|
+
).encode("ascii")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _hash(domain: bytes, value: object) -> str:
|
|
52
|
+
return hashlib.sha256(domain + _canonical_json(value)).hexdigest()
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _policy_identity(
|
|
56
|
+
policy_id: str,
|
|
57
|
+
policy_version: int,
|
|
58
|
+
definition_sha256: str,
|
|
59
|
+
*,
|
|
60
|
+
name: str,
|
|
61
|
+
) -> None:
|
|
62
|
+
if type(policy_id) is not str or _TOKEN.fullmatch(policy_id) is None:
|
|
63
|
+
raise ValueError(f"{name} policy_id must use the token grammar")
|
|
64
|
+
if type(policy_version) is not int or policy_version <= 0:
|
|
65
|
+
raise ValueError(f"{name} policy_version must be positive")
|
|
66
|
+
require_sha256(definition_sha256, f"{name} definition_sha256")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _canonical_paths(values: tuple[str, ...]) -> None:
|
|
70
|
+
if type(values) is not tuple or not values:
|
|
71
|
+
raise ValueError("changed_paths must be a non-empty exact tuple")
|
|
72
|
+
if any(type(value) is not str or _PATH.fullmatch(value) is None for value in values):
|
|
73
|
+
raise TypeError("changed_paths must contain canonical rooted JSON paths")
|
|
74
|
+
if values != tuple(sorted(set(values))):
|
|
75
|
+
raise ValueError("changed_paths must be unique and canonical")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class FiniteActionSourceMode(str, Enum):
|
|
79
|
+
COMPILED_ACTIVE_CARD = "compiled_active_card"
|
|
80
|
+
COMPILED_SHUFFLED_CARD = "compiled_shuffled_card"
|
|
81
|
+
EVIDENCE_FREE_CARD = "evidence_free_card"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass(frozen=True, slots=True)
|
|
85
|
+
class FiniteActionOptionAuthority:
|
|
86
|
+
"""One full child plus its path, phenotype, and prompt identities."""
|
|
87
|
+
|
|
88
|
+
option: FiniteVariationOption
|
|
89
|
+
changed_paths: tuple[str, ...]
|
|
90
|
+
phenotype_policy_id: str
|
|
91
|
+
phenotype_policy_version: int
|
|
92
|
+
phenotype_identity_sha256: str
|
|
93
|
+
prompt_record_sha256: str = field(init=False)
|
|
94
|
+
|
|
95
|
+
def __post_init__(self) -> None:
|
|
96
|
+
if type(self.option) is not FiniteVariationOption:
|
|
97
|
+
raise TypeError("option must be an exact FiniteVariationOption")
|
|
98
|
+
validate_finite_variation_option(self.option)
|
|
99
|
+
_canonical_paths(self.changed_paths)
|
|
100
|
+
if type(self.phenotype_policy_id) is not str or _TOKEN.fullmatch(
|
|
101
|
+
self.phenotype_policy_id
|
|
102
|
+
) is None:
|
|
103
|
+
raise ValueError("phenotype_policy_id must use the token grammar")
|
|
104
|
+
if type(self.phenotype_policy_version) is not int or self.phenotype_policy_version <= 0:
|
|
105
|
+
raise ValueError("phenotype_policy_version must be positive")
|
|
106
|
+
require_sha256(
|
|
107
|
+
self.phenotype_identity_sha256,
|
|
108
|
+
"phenotype_identity_sha256",
|
|
109
|
+
)
|
|
110
|
+
object.__setattr__(
|
|
111
|
+
self,
|
|
112
|
+
"prompt_record_sha256",
|
|
113
|
+
_hash(_OPTION_PROMPT_DOMAIN, self.option.prompt_record()),
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
def to_record(self) -> dict[str, object]:
|
|
117
|
+
return {
|
|
118
|
+
"option": self.option.evidence_record(),
|
|
119
|
+
"changed_paths": list(self.changed_paths),
|
|
120
|
+
"phenotype_policy_id": self.phenotype_policy_id,
|
|
121
|
+
"phenotype_policy_version": self.phenotype_policy_version,
|
|
122
|
+
"phenotype_identity_sha256": self.phenotype_identity_sha256,
|
|
123
|
+
"prompt_record_sha256": self.prompt_record_sha256,
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@dataclass(frozen=True, slots=True)
|
|
128
|
+
class FiniteActionPresentationAuthority:
|
|
129
|
+
"""Exact provider-visible ordering and structural prompt commitment."""
|
|
130
|
+
|
|
131
|
+
policy_id: str
|
|
132
|
+
policy_version: int
|
|
133
|
+
definition_sha256: str
|
|
134
|
+
ordered_option_ids: tuple[str, ...]
|
|
135
|
+
ordered_prompt_record_sha256s: tuple[str, ...]
|
|
136
|
+
prompt_shape_sha256: str
|
|
137
|
+
presentation_sha256: str = field(init=False)
|
|
138
|
+
|
|
139
|
+
def __post_init__(self) -> None:
|
|
140
|
+
_policy_identity(
|
|
141
|
+
self.policy_id,
|
|
142
|
+
self.policy_version,
|
|
143
|
+
self.definition_sha256,
|
|
144
|
+
name="presentation",
|
|
145
|
+
)
|
|
146
|
+
count = len(self.ordered_option_ids)
|
|
147
|
+
if type(self.ordered_option_ids) is not tuple or not self.ordered_option_ids:
|
|
148
|
+
raise ValueError("ordered_option_ids must be a non-empty exact tuple")
|
|
149
|
+
if any(type(value) is not str or not value for value in self.ordered_option_ids):
|
|
150
|
+
raise TypeError("ordered_option_ids must contain non-empty strings")
|
|
151
|
+
if len(set(self.ordered_option_ids)) != count:
|
|
152
|
+
raise ValueError("ordered_option_ids must be unique")
|
|
153
|
+
if (
|
|
154
|
+
type(self.ordered_prompt_record_sha256s) is not tuple
|
|
155
|
+
or len(self.ordered_prompt_record_sha256s) != count
|
|
156
|
+
):
|
|
157
|
+
raise ValueError("prompt-record identities must cover every option")
|
|
158
|
+
for value in self.ordered_prompt_record_sha256s:
|
|
159
|
+
require_sha256(value, "ordered_prompt_record_sha256")
|
|
160
|
+
require_sha256(self.prompt_shape_sha256, "prompt_shape_sha256")
|
|
161
|
+
object.__setattr__(
|
|
162
|
+
self,
|
|
163
|
+
"presentation_sha256",
|
|
164
|
+
_hash(_PRESENTATION_DOMAIN, self.to_record()),
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
def to_record(self) -> dict[str, object]:
|
|
168
|
+
return {
|
|
169
|
+
"schema_version": 1,
|
|
170
|
+
"policy_id": self.policy_id,
|
|
171
|
+
"policy_version": self.policy_version,
|
|
172
|
+
"definition_sha256": self.definition_sha256,
|
|
173
|
+
"ordered_option_ids": list(self.ordered_option_ids),
|
|
174
|
+
"ordered_prompt_record_sha256s": list(
|
|
175
|
+
self.ordered_prompt_record_sha256s
|
|
176
|
+
),
|
|
177
|
+
"prompt_shape_sha256": self.prompt_shape_sha256,
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
@dataclass(frozen=True, slots=True)
|
|
182
|
+
class FiniteActionSupportAuthority:
|
|
183
|
+
"""The exact K children shared by every matched selector on one parent."""
|
|
184
|
+
|
|
185
|
+
parent_candidate_id: CandidateId
|
|
186
|
+
source_contract_sha256: str
|
|
187
|
+
support_contract: FiniteVariationContract
|
|
188
|
+
endpoint_definition_sha256: str
|
|
189
|
+
context_projection_sha256: str
|
|
190
|
+
options: tuple[FiniteActionOptionAuthority, ...]
|
|
191
|
+
anchor_option_id: str
|
|
192
|
+
presentation: FiniteActionPresentationAuthority
|
|
193
|
+
compatible_option_count: int
|
|
194
|
+
support_sha256: str = field(init=False)
|
|
195
|
+
|
|
196
|
+
def __post_init__(self) -> None:
|
|
197
|
+
if type(self.parent_candidate_id) is not CandidateId:
|
|
198
|
+
raise TypeError("parent_candidate_id must be an exact CandidateId")
|
|
199
|
+
CandidateId.__post_init__(self.parent_candidate_id)
|
|
200
|
+
require_sha256(self.source_contract_sha256, "source_contract_sha256")
|
|
201
|
+
validate_finite_variation_contract(self.support_contract)
|
|
202
|
+
for name in ("endpoint_definition_sha256", "context_projection_sha256"):
|
|
203
|
+
require_sha256(getattr(self, name), name)
|
|
204
|
+
count = len(self.options)
|
|
205
|
+
if type(self.options) is not tuple or not (
|
|
206
|
+
MIN_MATCHED_FINITE_ACTIONS <= count <= MAX_MATCHED_FINITE_ACTIONS
|
|
207
|
+
):
|
|
208
|
+
raise ValueError(
|
|
209
|
+
"finite action support cardinality must lie in "
|
|
210
|
+
f"[{MIN_MATCHED_FINITE_ACTIONS},{MAX_MATCHED_FINITE_ACTIONS}]"
|
|
211
|
+
)
|
|
212
|
+
if any(type(value) is not FiniteActionOptionAuthority for value in self.options):
|
|
213
|
+
raise TypeError("options must contain exact option authorities")
|
|
214
|
+
for value in self.options:
|
|
215
|
+
FiniteActionOptionAuthority.__post_init__(value)
|
|
216
|
+
if tuple(value.option for value in self.options) != self.support_contract.options:
|
|
217
|
+
raise ValueError("option authorities differ from the support contract")
|
|
218
|
+
if len({value.option.option_id for value in self.options}) != count:
|
|
219
|
+
raise ValueError("support option IDs must be unique")
|
|
220
|
+
if len({value.option.identity_sha256 for value in self.options}) != count:
|
|
221
|
+
raise ValueError("support option identities must be unique")
|
|
222
|
+
if len({value.option.child_configuration_sha256 for value in self.options}) != count:
|
|
223
|
+
raise ValueError("support children must be unique")
|
|
224
|
+
if len({value.phenotype_identity_sha256 for value in self.options}) != count:
|
|
225
|
+
raise ValueError("support phenotypes must be unique")
|
|
226
|
+
if type(self.anchor_option_id) is not str or self.anchor_option_id not in {
|
|
227
|
+
value.option.option_id for value in self.options
|
|
228
|
+
}:
|
|
229
|
+
raise ValueError("anchor_option_id must identify exactly one support option")
|
|
230
|
+
if type(self.presentation) is not FiniteActionPresentationAuthority:
|
|
231
|
+
raise TypeError("presentation must be exact")
|
|
232
|
+
FiniteActionPresentationAuthority.__post_init__(self.presentation)
|
|
233
|
+
if self.presentation.ordered_option_ids != tuple(
|
|
234
|
+
value.option.option_id for value in self.options
|
|
235
|
+
):
|
|
236
|
+
raise ValueError("presentation order differs from the support")
|
|
237
|
+
if self.presentation.ordered_prompt_record_sha256s != tuple(
|
|
238
|
+
value.prompt_record_sha256 for value in self.options
|
|
239
|
+
):
|
|
240
|
+
raise ValueError("presentation prompt records differ from the support")
|
|
241
|
+
if type(self.compatible_option_count) is not int or self.compatible_option_count != count:
|
|
242
|
+
raise ValueError("every support option must pass prospective compatibility")
|
|
243
|
+
object.__setattr__(
|
|
244
|
+
self,
|
|
245
|
+
"support_sha256",
|
|
246
|
+
_hash(_SUPPORT_DOMAIN, self.to_record()),
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
@property
|
|
250
|
+
def cardinality(self) -> int:
|
|
251
|
+
return len(self.options)
|
|
252
|
+
|
|
253
|
+
@property
|
|
254
|
+
def parent_configuration_sha256(self) -> str:
|
|
255
|
+
return self.support_contract.parent_configuration_sha256
|
|
256
|
+
|
|
257
|
+
def to_record(self) -> dict[str, object]:
|
|
258
|
+
return {
|
|
259
|
+
"schema_version": 1,
|
|
260
|
+
"parent_candidate_id": self.parent_candidate_id.value,
|
|
261
|
+
"parent_configuration_sha256": self.parent_configuration_sha256,
|
|
262
|
+
"source_contract_sha256": self.source_contract_sha256,
|
|
263
|
+
"support_contract": self.support_contract.evidence_record(),
|
|
264
|
+
"endpoint_definition_sha256": self.endpoint_definition_sha256,
|
|
265
|
+
"context_projection_sha256": self.context_projection_sha256,
|
|
266
|
+
"options": [value.to_record() for value in self.options],
|
|
267
|
+
"anchor_option_id": self.anchor_option_id,
|
|
268
|
+
"presentation": {
|
|
269
|
+
**self.presentation.to_record(),
|
|
270
|
+
"presentation_sha256": self.presentation.presentation_sha256,
|
|
271
|
+
},
|
|
272
|
+
"compatible_option_count": self.compatible_option_count,
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@dataclass(frozen=True, slots=True)
|
|
277
|
+
class FiniteActionCardAuthority:
|
|
278
|
+
"""Immutable card provenance; K neighbours never become recommendations."""
|
|
279
|
+
|
|
280
|
+
source_mode: FiniteActionSourceMode
|
|
281
|
+
reference: InsightRef
|
|
282
|
+
card_content_sha256: str
|
|
283
|
+
registered_source_evidence_sha256: str | None
|
|
284
|
+
exact_anchor_requirement_sha256: str
|
|
285
|
+
compilation_request_sha256: str | None
|
|
286
|
+
compilation_receipt_sha256: str | None
|
|
287
|
+
executable_spec_sha256: str | None
|
|
288
|
+
prompt_card_record_sha256: str
|
|
289
|
+
card_authority_sha256: str = field(init=False)
|
|
290
|
+
|
|
291
|
+
def __post_init__(self) -> None:
|
|
292
|
+
if type(self.source_mode) is not FiniteActionSourceMode:
|
|
293
|
+
raise TypeError("source_mode must be an exact FiniteActionSourceMode")
|
|
294
|
+
if type(self.reference) is not InsightRef:
|
|
295
|
+
raise TypeError("reference must be an exact InsightRef")
|
|
296
|
+
InsightRef.__post_init__(self.reference)
|
|
297
|
+
for name in (
|
|
298
|
+
"card_content_sha256",
|
|
299
|
+
"exact_anchor_requirement_sha256",
|
|
300
|
+
"prompt_card_record_sha256",
|
|
301
|
+
):
|
|
302
|
+
require_sha256(getattr(self, name), name)
|
|
303
|
+
optional = (
|
|
304
|
+
self.registered_source_evidence_sha256,
|
|
305
|
+
self.compilation_request_sha256,
|
|
306
|
+
self.compilation_receipt_sha256,
|
|
307
|
+
self.executable_spec_sha256,
|
|
308
|
+
)
|
|
309
|
+
if self.source_mode is FiniteActionSourceMode.EVIDENCE_FREE_CARD:
|
|
310
|
+
if any(value is not None for value in optional[1:]):
|
|
311
|
+
raise ValueError("evidence-free card cannot claim compiler evidence")
|
|
312
|
+
else:
|
|
313
|
+
if any(value is None for value in optional):
|
|
314
|
+
raise ValueError("compiled card authority requires complete evidence")
|
|
315
|
+
for value in optional:
|
|
316
|
+
if value is not None:
|
|
317
|
+
require_sha256(value, "optional card evidence SHA-256")
|
|
318
|
+
object.__setattr__(
|
|
319
|
+
self,
|
|
320
|
+
"card_authority_sha256",
|
|
321
|
+
_hash(_CARD_DOMAIN, self.to_record()),
|
|
322
|
+
)
|
|
323
|
+
|
|
324
|
+
def to_record(self) -> dict[str, object]:
|
|
325
|
+
return {
|
|
326
|
+
"schema_version": 1,
|
|
327
|
+
"source_mode": self.source_mode.value,
|
|
328
|
+
"reference": {
|
|
329
|
+
"insight_id": self.reference.insight_id.value,
|
|
330
|
+
"version": self.reference.version,
|
|
331
|
+
},
|
|
332
|
+
"card_content_sha256": self.card_content_sha256,
|
|
333
|
+
"registered_source_evidence_sha256": (
|
|
334
|
+
self.registered_source_evidence_sha256
|
|
335
|
+
),
|
|
336
|
+
"exact_anchor_requirement_sha256": (
|
|
337
|
+
self.exact_anchor_requirement_sha256
|
|
338
|
+
),
|
|
339
|
+
"compilation_request_sha256": self.compilation_request_sha256,
|
|
340
|
+
"compilation_receipt_sha256": self.compilation_receipt_sha256,
|
|
341
|
+
"executable_spec_sha256": self.executable_spec_sha256,
|
|
342
|
+
"prompt_card_record_sha256": self.prompt_card_record_sha256,
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
@dataclass(frozen=True, slots=True)
|
|
347
|
+
class FiniteActionSetAuthority:
|
|
348
|
+
"""Card plus matched support, sealed before any current candidate outcome."""
|
|
349
|
+
|
|
350
|
+
support: FiniteActionSupportAuthority
|
|
351
|
+
card: FiniteActionCardAuthority
|
|
352
|
+
support_compilation_request_sha256: str
|
|
353
|
+
support_compilation_draft_sha256: str
|
|
354
|
+
support_compiler_policy_id: str
|
|
355
|
+
support_compiler_policy_version: int
|
|
356
|
+
support_compiler_definition_sha256: str
|
|
357
|
+
current_outcome_access: bool = False
|
|
358
|
+
authority_sha256: str = field(init=False)
|
|
359
|
+
|
|
360
|
+
def __post_init__(self) -> None:
|
|
361
|
+
if type(self.support) is not FiniteActionSupportAuthority:
|
|
362
|
+
raise TypeError("support must be exact")
|
|
363
|
+
FiniteActionSupportAuthority.__post_init__(self.support)
|
|
364
|
+
if type(self.card) is not FiniteActionCardAuthority:
|
|
365
|
+
raise TypeError("card must be exact")
|
|
366
|
+
FiniteActionCardAuthority.__post_init__(self.card)
|
|
367
|
+
require_sha256(
|
|
368
|
+
self.support_compilation_request_sha256,
|
|
369
|
+
"support_compilation_request_sha256",
|
|
370
|
+
)
|
|
371
|
+
require_sha256(
|
|
372
|
+
self.support_compilation_draft_sha256,
|
|
373
|
+
"support_compilation_draft_sha256",
|
|
374
|
+
)
|
|
375
|
+
_policy_identity(
|
|
376
|
+
self.support_compiler_policy_id,
|
|
377
|
+
self.support_compiler_policy_version,
|
|
378
|
+
self.support_compiler_definition_sha256,
|
|
379
|
+
name="support compiler",
|
|
380
|
+
)
|
|
381
|
+
if type(self.current_outcome_access) is not bool:
|
|
382
|
+
raise TypeError("current_outcome_access must be bool")
|
|
383
|
+
if self.current_outcome_access:
|
|
384
|
+
raise ValueError("finite action set authority must be outcome-blind")
|
|
385
|
+
object.__setattr__(
|
|
386
|
+
self,
|
|
387
|
+
"authority_sha256",
|
|
388
|
+
_hash(_AUTHORITY_DOMAIN, self.to_record()),
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
def to_record(self) -> dict[str, object]:
|
|
392
|
+
return {
|
|
393
|
+
"schema_version": 1,
|
|
394
|
+
"support": {
|
|
395
|
+
**self.support.to_record(),
|
|
396
|
+
"support_sha256": self.support.support_sha256,
|
|
397
|
+
},
|
|
398
|
+
"card": {
|
|
399
|
+
**self.card.to_record(),
|
|
400
|
+
"card_authority_sha256": self.card.card_authority_sha256,
|
|
401
|
+
},
|
|
402
|
+
"support_compilation_request_sha256": (
|
|
403
|
+
self.support_compilation_request_sha256
|
|
404
|
+
),
|
|
405
|
+
"support_compilation_draft_sha256": (
|
|
406
|
+
self.support_compilation_draft_sha256
|
|
407
|
+
),
|
|
408
|
+
"support_compiler_policy_id": self.support_compiler_policy_id,
|
|
409
|
+
"support_compiler_policy_version": self.support_compiler_policy_version,
|
|
410
|
+
"support_compiler_definition_sha256": (
|
|
411
|
+
self.support_compiler_definition_sha256
|
|
412
|
+
),
|
|
413
|
+
"current_outcome_access": self.current_outcome_access,
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
__all__ = [
|
|
418
|
+
"FiniteActionCardAuthority",
|
|
419
|
+
"FiniteActionOptionAuthority",
|
|
420
|
+
"FiniteActionPresentationAuthority",
|
|
421
|
+
"FiniteActionSetAuthority",
|
|
422
|
+
"FiniteActionSourceMode",
|
|
423
|
+
"FiniteActionSupportAuthority",
|
|
424
|
+
"MAX_MATCHED_FINITE_ACTIONS",
|
|
425
|
+
"MIN_MATCHED_FINITE_ACTIONS",
|
|
426
|
+
]
|