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.
Files changed (414) hide show
  1. agent_evolve/__init__.py +722 -0
  2. agent_evolve/agentic.py +2800 -0
  3. agent_evolve/api.py +767 -0
  4. agent_evolve/application/__init__.py +1580 -0
  5. agent_evolve/application/action_allocation.py +744 -0
  6. agent_evolve/application/action_allocation_frame.py +347 -0
  7. agent_evolve/application/action_allocation_frame_commit.py +185 -0
  8. agent_evolve/application/action_allocation_frame_commit_v3.py +184 -0
  9. agent_evolve/application/action_allocation_frame_v3.py +338 -0
  10. agent_evolve/application/action_archive_value.py +497 -0
  11. agent_evolve/application/action_evidence_consistency.py +455 -0
  12. agent_evolve/application/action_forecast_partitioning.py +1471 -0
  13. agent_evolve/application/action_metric_projection.py +211 -0
  14. agent_evolve/application/action_role_value.py +680 -0
  15. agent_evolve/application/action_score_authorities.py +363 -0
  16. agent_evolve/application/action_structural_signature.py +116 -0
  17. agent_evolve/application/action_target_realization.py +402 -0
  18. agent_evolve/application/agentic_evolution.py +7734 -0
  19. agent_evolve/application/agentic_portfolio_residual_expert.py +835 -0
  20. agent_evolve/application/anchor_residual_identification.py +463 -0
  21. agent_evolve/application/archive_conditioned_action_target.py +208 -0
  22. agent_evolve/application/artifact_journal.py +246 -0
  23. agent_evolve/application/artifact_replay.py +347 -0
  24. agent_evolve/application/budgeted_optimizer.py +1828 -0
  25. agent_evolve/application/calibrated_campaign.py +485 -0
  26. agent_evolve/application/calibrated_current_prefix_forecast_opportunity.py +322 -0
  27. agent_evolve/application/calibrated_positive_gain_opportunity.py +1581 -0
  28. agent_evolve/application/campaign_capacity_recourse.py +254 -0
  29. agent_evolve/application/campaign_contextual_outcomes.py +119 -0
  30. agent_evolve/application/campaign_diagnostic_blocks.py +930 -0
  31. agent_evolve/application/campaign_evidence_registry.py +262 -0
  32. agent_evolve/application/campaign_execution.py +2537 -0
  33. agent_evolve/application/campaign_generation_audit.py +942 -0
  34. agent_evolve/application/campaign_learning.py +1812 -0
  35. agent_evolve/application/campaign_learning_runtime.py +1977 -0
  36. agent_evolve/application/campaign_search_phase.py +227 -0
  37. agent_evolve/application/campaign_selector_context_extension.py +220 -0
  38. agent_evolve/application/campaign_variation_envelope.py +649 -0
  39. agent_evolve/application/campaign_variation_trace.py +451 -0
  40. agent_evolve/application/candidate_archive_consequence.py +128 -0
  41. agent_evolve/application/causal_opportunity_portfolio_gate.py +385 -0
  42. agent_evolve/application/composite_outcome_updater.py +145 -0
  43. agent_evolve/application/composition_portfolio_selection.py +363 -0
  44. agent_evolve/application/concurrent_stage.py +144 -0
  45. agent_evolve/application/contextual_action_allocation.py +181 -0
  46. agent_evolve/application/contextual_campaign_outcomes.py +267 -0
  47. agent_evolve/application/contextual_campaign_planning.py +1366 -0
  48. agent_evolve/application/contextual_delayed_credit.py +651 -0
  49. agent_evolve/application/contextual_search_controller.py +2374 -0
  50. agent_evolve/application/current_prefix_forecast_opportunity.py +714 -0
  51. agent_evolve/application/decision_metric_projection.py +112 -0
  52. agent_evolve/application/derived_action_semantics.py +129 -0
  53. agent_evolve/application/detailed_evaluation.py +449 -0
  54. agent_evolve/application/earned_lineage.py +1011 -0
  55. agent_evolve/application/effective_choice_audit.py +484 -0
  56. agent_evolve/application/empirical_consequence_calibration.py +908 -0
  57. agent_evolve/application/evaluation_accounting.py +325 -0
  58. agent_evolve/application/evaluation_cache.py +199 -0
  59. agent_evolve/application/evaluation_escrow.py +547 -0
  60. agent_evolve/application/evaluation_recourse.py +253 -0
  61. agent_evolve/application/event_recorder.py +151 -0
  62. agent_evolve/application/evolution_campaign.py +1840 -0
  63. agent_evolve/application/executable_hypothesis.py +323 -0
  64. agent_evolve/application/factorial_branch_pilot.py +772 -0
  65. agent_evolve/application/finite_acquisition_capacity_recourse.py +672 -0
  66. agent_evolve/application/finite_acquisition_residual_expert.py +373 -0
  67. agent_evolve/application/finite_acquisition_variation_envelope.py +802 -0
  68. agent_evolve/application/finite_action_hypothesis_semantics.py +446 -0
  69. agent_evolve/application/finite_action_selection.py +188 -0
  70. agent_evolve/application/finite_action_set.py +306 -0
  71. agent_evolve/application/finite_action_transition.py +537 -0
  72. agent_evolve/application/finite_variation_eligibility.py +296 -0
  73. agent_evolve/application/forecast_geometry_portfolio.py +799 -0
  74. agent_evolve/application/forecast_opportunity_shadow_calibration.py +316 -0
  75. agent_evolve/application/front_proximity_admission.py +311 -0
  76. agent_evolve/application/front_proximity_parent_basis.py +458 -0
  77. agent_evolve/application/frozen_hurdle_score.py +659 -0
  78. agent_evolve/application/g3_causal_screen.py +2257 -0
  79. agent_evolve/application/g3_causal_validation.py +1046 -0
  80. agent_evolve/application/g3_postseal_curation.py +818 -0
  81. agent_evolve/application/gated_agentic_generator.py +205 -0
  82. agent_evolve/application/generation_feedback.py +293 -0
  83. agent_evolve/application/generative_proposal_journal.py +185 -0
  84. agent_evolve/application/geometry_conditional_elasticity.py +453 -0
  85. agent_evolve/application/global_wave_action_allocation.py +1151 -0
  86. agent_evolve/application/head_mass_conditional_seat.py +268 -0
  87. agent_evolve/application/identifiable_reflection_evidence.py +1147 -0
  88. agent_evolve/application/identifiable_reflection_learning.py +395 -0
  89. agent_evolve/application/identifiable_reflection_request.py +364 -0
  90. agent_evolve/application/in_memory_residual_archive.py +341 -0
  91. agent_evolve/application/insight_memory.py +1804 -0
  92. agent_evolve/application/live_runtime_manifest.py +758 -0
  93. agent_evolve/application/llm_task_queue.py +769 -0
  94. agent_evolve/application/matched_finite_action_block.py +409 -0
  95. agent_evolve/application/materialized_action_broker.py +2328 -0
  96. agent_evolve/application/materialized_action_constraints.py +83 -0
  97. agent_evolve/application/materialized_variation.py +211 -0
  98. agent_evolve/application/multi_option_evolution.py +1536 -0
  99. agent_evolve/application/outcome_adaptive_action_racing.py +2827 -0
  100. agent_evolve/application/outcome_adaptive_residual_campaign_runtime.py +580 -0
  101. agent_evolve/application/outcome_adaptive_residual_portfolio_evolution.py +3671 -0
  102. agent_evolve/application/outcome_conditioned_portfolio_selection.py +1374 -0
  103. agent_evolve/application/outcome_relation.py +193 -0
  104. agent_evolve/application/paired_allocation_comparison.py +241 -0
  105. agent_evolve/application/paired_block_schedule.py +127 -0
  106. agent_evolve/application/parent_measurement.py +226 -0
  107. agent_evolve/application/pareto_archive.py +811 -0
  108. agent_evolve/application/portfolio_campaign_runtime.py +4739 -0
  109. agent_evolve/application/portfolio_evolution.py +2950 -0
  110. agent_evolve/application/portfolio_hypothesis_observations.py +814 -0
  111. agent_evolve/application/portfolio_memory_attribution.py +581 -0
  112. agent_evolve/application/portfolio_memory_dose.py +788 -0
  113. agent_evolve/application/portfolio_memory_matched_control.py +938 -0
  114. agent_evolve/application/portfolio_memory_transfer.py +297 -0
  115. agent_evolve/application/portfolio_optimization_memory.py +363 -0
  116. agent_evolve/application/portfolio_outcome_feedback.py +1613 -0
  117. agent_evolve/application/portfolio_projection.py +335 -0
  118. agent_evolve/application/portfolio_recombination.py +2032 -0
  119. agent_evolve/application/post_evolution_reflection.py +834 -0
  120. agent_evolve/application/postcommit_rank_authority.py +245 -0
  121. agent_evolve/application/precommitted_portfolio_racing.py +2762 -0
  122. agent_evolve/application/prequential_archive_opportunity_calibration.py +1154 -0
  123. agent_evolve/application/prequential_residual_exploration.py +343 -0
  124. agent_evolve/application/prequential_score_portfolio.py +954 -0
  125. agent_evolve/application/projections.py +292 -0
  126. agent_evolve/application/protected_action_committee.py +1027 -0
  127. agent_evolve/application/protected_branch_pilot.py +376 -0
  128. agent_evolve/application/protected_current_prefix_forecast_opportunity.py +552 -0
  129. agent_evolve/application/provider_replay.py +910 -0
  130. agent_evolve/application/rank_balanced_causal_pilot.py +1372 -0
  131. agent_evolve/application/recombination_residual_expert.py +403 -0
  132. agent_evolve/application/reflection_workflow.py +571 -0
  133. agent_evolve/application/region_conditional_credit.py +911 -0
  134. agent_evolve/application/residual_campaign_runtime.py +531 -0
  135. agent_evolve/application/residual_headroom_campaign_runtime.py +459 -0
  136. agent_evolve/application/residual_headroom_ledger.py +1544 -0
  137. agent_evolve/application/residual_learning_transaction.py +396 -0
  138. agent_evolve/application/residual_portfolio_evolution.py +1228 -0
  139. agent_evolve/application/residual_reachability.py +749 -0
  140. agent_evolve/application/residual_stage_credit.py +499 -0
  141. agent_evolve/application/same_prefix_paired_audit.py +1580 -0
  142. agent_evolve/application/semantic_coverage_score_portfolio.py +838 -0
  143. agent_evolve/application/sequential_lineage_allocation.py +1017 -0
  144. agent_evolve/application/sequential_market_replay.py +1395 -0
  145. agent_evolve/application/sequential_residual_campaign_runtime.py +305 -0
  146. agent_evolve/application/sequential_residual_portfolio_evolution.py +940 -0
  147. agent_evolve/application/single_score_action_allocation.py +299 -0
  148. agent_evolve/application/source_exposure_allocation.py +906 -0
  149. agent_evolve/application/staged_memory.py +210 -0
  150. agent_evolve/application/stratified_cold_start_allocation.py +732 -0
  151. agent_evolve/application/support_guarded_hurdle_score.py +549 -0
  152. agent_evolve/application/target_conditioned_action_forecast.py +595 -0
  153. agent_evolve/application/target_conditioned_campaign.py +566 -0
  154. agent_evolve/application/treatment_assignment.py +201 -0
  155. agent_evolve/application/trusted_objective_evidence.py +217 -0
  156. agent_evolve/application/two_stage_action_evolution.py +1131 -0
  157. agent_evolve/application/v8lite_allocation_policy.py +1083 -0
  158. agent_evolve/application/v9_candidate_policy.py +1303 -0
  159. agent_evolve/bootstrap.py +108 -0
  160. agent_evolve/campaign_presets.py +517 -0
  161. agent_evolve/campaign_profiles.py +452 -0
  162. agent_evolve/campaign_variation_topology.py +288 -0
  163. agent_evolve/campaign_workload.py +950 -0
  164. agent_evolve/cli.py +797 -0
  165. agent_evolve/contract.py +241 -0
  166. agent_evolve/core/__init__.py +91 -0
  167. agent_evolve/core/action_semantics.py +411 -0
  168. agent_evolve/core/authored.py +105 -0
  169. agent_evolve/core/formatting.py +286 -0
  170. agent_evolve/core/optimization_semantics.py +324 -0
  171. agent_evolve/core/problem.py +167 -0
  172. agent_evolve/core/results.py +323 -0
  173. agent_evolve/core/stats.py +70 -0
  174. agent_evolve/core/telemetry.py +100 -0
  175. agent_evolve/domain/__init__.py +89 -0
  176. agent_evolve/domain/artifact.py +162 -0
  177. agent_evolve/domain/durable_text.py +68 -0
  178. agent_evolve/domain/event.py +1454 -0
  179. agent_evolve/domain/finite_action_set.py +426 -0
  180. agent_evolve/domain/finite_variation.py +526 -0
  181. agent_evolve/domain/generative_emission.py +559 -0
  182. agent_evolve/domain/ids.py +163 -0
  183. agent_evolve/domain/inline_text.py +106 -0
  184. agent_evolve/domain/insight.py +27 -0
  185. agent_evolve/domain/lineage.py +737 -0
  186. agent_evolve/domain/llm_task_queue.py +960 -0
  187. agent_evolve/domain/outcome.py +96 -0
  188. agent_evolve/domain/patch.py +854 -0
  189. agent_evolve/domain/typed_json.py +542 -0
  190. agent_evolve/domain/variation_space.py +158 -0
  191. agent_evolve/driver.py +1014 -0
  192. agent_evolve/harness/__init__.py +29 -0
  193. agent_evolve/harness/base.py +242 -0
  194. agent_evolve/harness/directives.py +163 -0
  195. agent_evolve/harness/generative_seal.py +479 -0
  196. agent_evolve/harness/registry.py +41 -0
  197. agent_evolve/infrastructure/__init__.py +39 -0
  198. agent_evolve/infrastructure/artifacts/__init__.py +6 -0
  199. agent_evolve/infrastructure/artifacts/_verification.py +67 -0
  200. agent_evolve/infrastructure/artifacts/filesystem.py +343 -0
  201. agent_evolve/infrastructure/artifacts/in_memory.py +73 -0
  202. agent_evolve/infrastructure/asyncio_runtime.py +109 -0
  203. agent_evolve/infrastructure/authored_runtime.py +188 -0
  204. agent_evolve/infrastructure/authored_worker.py +171 -0
  205. agent_evolve/infrastructure/clock.py +53 -0
  206. agent_evolve/infrastructure/events/__init__.py +6 -0
  207. agent_evolve/infrastructure/events/_validation.py +89 -0
  208. agent_evolve/infrastructure/events/in_memory.py +56 -0
  209. agent_evolve/infrastructure/events/jsonl.py +193 -0
  210. agent_evolve/infrastructure/exception_provenance.py +215 -0
  211. agent_evolve/infrastructure/ids.py +118 -0
  212. agent_evolve/infrastructure/lineage_codec.py +1836 -0
  213. agent_evolve/infrastructure/outcome_adaptive_phase_journal.py +170 -0
  214. agent_evolve/infrastructure/residual_headroom_journal.py +221 -0
  215. agent_evolve/infrastructure/resource_lease.py +370 -0
  216. agent_evolve/infrastructure/sanitization/__init__.py +8 -0
  217. agent_evolve/infrastructure/sanitization/strict_json.py +484 -0
  218. agent_evolve/infrastructure/sequential_phase_journal.py +170 -0
  219. agent_evolve/infrastructure/stream_liveness.py +383 -0
  220. agent_evolve/infrastructure/subprocess_boundary.py +136 -0
  221. agent_evolve/integrations/__init__.py +1 -0
  222. agent_evolve/integrations/botorch/__init__.py +28 -0
  223. agent_evolve/integrations/botorch/finite_qlognehvi.py +190 -0
  224. agent_evolve/integrations/botorch/finite_qlognehvi_batch.py +155 -0
  225. agent_evolve/integrations/botorch/finite_qlognehvi_batch_identity.py +20 -0
  226. agent_evolve/integrations/botorch/finite_qlognehvi_batch_worker.py +55 -0
  227. agent_evolve/integrations/botorch/finite_qlognehvi_identity.py +22 -0
  228. agent_evolve/integrations/botorch/finite_qlognehvi_worker.py +55 -0
  229. agent_evolve/integrations/botorch/subprocess_qlognehvi.py +261 -0
  230. agent_evolve/integrations/botorch/subprocess_qlognehvi_batch.py +273 -0
  231. agent_evolve/integrations/completion.py +242 -0
  232. agent_evolve/integrations/pydantic_ai/__init__.py +441 -0
  233. agent_evolve/integrations/pydantic_ai/action_forecast.py +1068 -0
  234. agent_evolve/integrations/pydantic_ai/agentic_generator.py +2308 -0
  235. agent_evolve/integrations/pydantic_ai/async_generator.py +1604 -0
  236. agent_evolve/integrations/pydantic_ai/boundary_codec.py +1526 -0
  237. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_campaign.py +756 -0
  238. agent_evolve/integrations/pydantic_ai/calibrated_portfolio_selection.py +7537 -0
  239. agent_evolve/integrations/pydantic_ai/campaign_acquisition.py +609 -0
  240. agent_evolve/integrations/pydantic_ai/execution_binding.py +138 -0
  241. agent_evolve/integrations/pydantic_ai/forecast_geometry_action_committee.py +217 -0
  242. agent_evolve/integrations/pydantic_ai/harness.py +159 -0
  243. agent_evolve/integrations/pydantic_ai/heterogeneous_model_execution.py +306 -0
  244. agent_evolve/integrations/pydantic_ai/hierarchical_residual_adaptive_semantic_view.py +179 -0
  245. agent_evolve/integrations/pydantic_ai/json_schema_dialect.py +108 -0
  246. agent_evolve/integrations/pydantic_ai/materialized_hierarchical_residual_expert.py +952 -0
  247. agent_evolve/integrations/pydantic_ai/materialized_portfolio_judge.py +520 -0
  248. agent_evolve/integrations/pydantic_ai/model_execution_profile.py +659 -0
  249. agent_evolve/integrations/pydantic_ai/outbound_request_manifest.py +1170 -0
  250. agent_evolve/integrations/pydantic_ai/portable_residual_consequence_features.py +575 -0
  251. agent_evolve/integrations/pydantic_ai/portfolio_selection.py +422 -0
  252. agent_evolve/integrations/pydantic_ai/progress_aware_openrouter.py +416 -0
  253. agent_evolve/integrations/pydantic_ai/provider_attempt_join.py +1523 -0
  254. agent_evolve/integrations/pydantic_ai/provider_free_calibrated_runner.py +607 -0
  255. agent_evolve/integrations/pydantic_ai/queued_runner.py +2634 -0
  256. agent_evolve/integrations/pydantic_ai/reconciled_residual_reachability.py +1417 -0
  257. agent_evolve/integrations/pydantic_ai/residual_forecast_geometry.py +445 -0
  258. agent_evolve/integrations/pydantic_ai/residual_reachability.py +674 -0
  259. agent_evolve/integrations/pydantic_ai/residual_semantic_cells.py +239 -0
  260. agent_evolve/integrations/pydantic_ai/sealed_output_replay.py +1068 -0
  261. agent_evolve/integrations/pydantic_ai/semantic_coverage_residual_portfolio.py +770 -0
  262. agent_evolve/integrations/pydantic_ai/semantic_decision_replay.py +383 -0
  263. agent_evolve/integrations/pydantic_ai/support_adaptive_residual_portfolio.py +135 -0
  264. agent_evolve/integrations/pydantic_ai/trusted_residual_prompt_context.py +143 -0
  265. agent_evolve/integrations/pydantic_ai/validated_openrouter_model.py +107 -0
  266. agent_evolve/integrations/pymoo_adapter.py +242 -0
  267. agent_evolve/policies/__init__.py +17 -0
  268. agent_evolve/policies/check.py +469 -0
  269. agent_evolve/policies/emit_scaffold.py +451 -0
  270. agent_evolve/policies/feedback/__init__.py +37 -0
  271. agent_evolve/policies/feedback/held_out_asn.py +1325 -0
  272. agent_evolve/policies/genetic.py +607 -0
  273. agent_evolve/policies/llm_backoff.py +183 -0
  274. agent_evolve/policies/llm_chooser.py +226 -0
  275. agent_evolve/policies/llm_generator.py +1760 -0
  276. agent_evolve/policies/llm_init.py +267 -0
  277. agent_evolve/policies/llm_operator.py +109 -0
  278. agent_evolve/policies/llm_prior.py +194 -0
  279. agent_evolve/policies/llm_surrogate.py +334 -0
  280. agent_evolve/policies/measurement_evidence.py +704 -0
  281. agent_evolve/policies/memory/__init__.py +223 -0
  282. agent_evolve/policies/memory/balanced_subset_blocks.py +707 -0
  283. agent_evolve/policies/memory/compatibility_matching.py +593 -0
  284. agent_evolve/policies/memory/global_falsification.py +1841 -0
  285. agent_evolve/policies/memory/prompt_shape.py +503 -0
  286. agent_evolve/policies/memory/randomized_subset.py +714 -0
  287. agent_evolve/policies/memory/staged_causal.py +1270 -0
  288. agent_evolve/policies/memory/treatment_compliance.py +759 -0
  289. agent_evolve/policies/objective_resolution/__init__.py +17 -0
  290. agent_evolve/policies/objective_resolution/fixed_grid.py +364 -0
  291. agent_evolve/policies/operator_portfolio.py +407 -0
  292. agent_evolve/policies/reguidance.py +1133 -0
  293. agent_evolve/policies/reward/__init__.py +83 -0
  294. agent_evolve/policies/reward/affine_candidate_consequence.py +156 -0
  295. agent_evolve/policies/reward/affine_candidate_consequence_3d.py +159 -0
  296. agent_evolve/policies/reward/affine_hypervolume.py +490 -0
  297. agent_evolve/policies/reward/affine_hypervolume_3d.py +567 -0
  298. agent_evolve/policies/reward/contextual_marginal_utility.py +318 -0
  299. agent_evolve/policies/reward/frozen_archive.py +360 -0
  300. agent_evolve/policies/reward/frozen_wave_archive.py +368 -0
  301. agent_evolve/policies/search_state.py +208 -0
  302. agent_evolve/policies/selection/__init__.py +345 -0
  303. agent_evolve/policies/selection/acquisition_certified_slate.py +684 -0
  304. agent_evolve/policies/selection/affine_frontier_context.py +330 -0
  305. agent_evolve/policies/selection/affine_frontier_target.py +473 -0
  306. agent_evolve/policies/selection/archive_elite.py +1346 -0
  307. agent_evolve/policies/selection/calibrated_portfolio_binding.py +640 -0
  308. agent_evolve/policies/selection/calibrated_slate.py +1394 -0
  309. agent_evolve/policies/selection/calibrated_slate_codec.py +579 -0
  310. agent_evolve/policies/selection/common_candidate_pool.py +685 -0
  311. agent_evolve/policies/selection/diagnostic_sampling.py +319 -0
  312. agent_evolve/policies/selection/disjoint_pairs.py +479 -0
  313. agent_evolve/policies/selection/elite_explorer.py +719 -0
  314. agent_evolve/policies/selection/finite_action.py +187 -0
  315. agent_evolve/policies/selection/finite_option_prompt_projection.py +377 -0
  316. agent_evolve/policies/selection/finite_palette_evidence.py +247 -0
  317. agent_evolve/policies/selection/forecast_calibration.py +922 -0
  318. agent_evolve/policies/selection/frontier_probe_slate.py +814 -0
  319. agent_evolve/policies/selection/frozen_archive_pairs.py +762 -0
  320. agent_evolve/policies/selection/full_support_slate.py +91 -0
  321. agent_evolve/policies/selection/meaningful_direction.py +240 -0
  322. agent_evolve/policies/selection/memory_dose_feasibility.py +259 -0
  323. agent_evolve/policies/selection/model_anchored_slate.py +826 -0
  324. agent_evolve/policies/selection/phenotype_recourse.py +979 -0
  325. agent_evolve/policies/selection/proposal_support.py +368 -0
  326. agent_evolve/policies/selection/random_portfolio.py +254 -0
  327. agent_evolve/policies/selection/regret_bounded_slate.py +1084 -0
  328. agent_evolve/policies/selection/residual_frontier.py +463 -0
  329. agent_evolve/policies/selection/residual_frontier_target.py +605 -0
  330. agent_evolve/policies/selection/structural_posterior_slate.py +1571 -0
  331. agent_evolve/policies/selection/target_conditioned_allocator.py +648 -0
  332. agent_evolve/policies/selection/target_conditioned_features.py +812 -0
  333. agent_evolve/policies/selection/target_conditioned_prequential.py +1527 -0
  334. agent_evolve/policies/selection/task_keyed_palette.py +906 -0
  335. agent_evolve/policies/semantics.py +147 -0
  336. agent_evolve/policies/structure.py +362 -0
  337. agent_evolve/policies/structured_output_budget.py +62 -0
  338. agent_evolve/policies/surrogate.py +696 -0
  339. agent_evolve/policies/variation/__init__.py +1 -0
  340. agent_evolve/policies/variation/compositional_finite_catalog.py +426 -0
  341. agent_evolve/policies/variation/crossover_inheritance.py +575 -0
  342. agent_evolve/policies/variation/disjoint_recombination.py +611 -0
  343. agent_evolve/policies/variation/exact_composition_capacity.py +214 -0
  344. agent_evolve/policies/variation/exact_parent_crossover.py +950 -0
  345. agent_evolve/policies/variation/multiscale_restart_catalog.py +372 -0
  346. agent_evolve/policies/variation/source_union_finite_catalog.py +403 -0
  347. agent_evolve/policies/variation/typed_patch.py +1981 -0
  348. agent_evolve/policies/weighted_prior.py +394 -0
  349. agent_evolve/ports/__init__.py +383 -0
  350. agent_evolve/ports/action_allocation.py +733 -0
  351. agent_evolve/ports/action_allocation_frame.py +1153 -0
  352. agent_evolve/ports/action_allocation_frame_commit.py +294 -0
  353. agent_evolve/ports/action_allocation_frame_commit_v3.py +432 -0
  354. agent_evolve/ports/action_allocation_frame_v3.py +995 -0
  355. agent_evolve/ports/action_forecast.py +1568 -0
  356. agent_evolve/ports/action_metric_projection.py +165 -0
  357. agent_evolve/ports/agentic_generator.py +1561 -0
  358. agent_evolve/ports/archive_context.py +136 -0
  359. agent_evolve/ports/artifact_sanitizer.py +44 -0
  360. agent_evolve/ports/artifact_store.py +225 -0
  361. agent_evolve/ports/clock.py +13 -0
  362. agent_evolve/ports/contextual_search_allocation.py +827 -0
  363. agent_evolve/ports/decision_metric_projection.py +258 -0
  364. agent_evolve/ports/event_store.py +55 -0
  365. agent_evolve/ports/executable_hypothesis.py +557 -0
  366. agent_evolve/ports/finite_acquisition.py +377 -0
  367. agent_evolve/ports/finite_acquisition_batch.py +296 -0
  368. agent_evolve/ports/finite_acquisition_batch_json.py +164 -0
  369. agent_evolve/ports/finite_acquisition_json.py +247 -0
  370. agent_evolve/ports/finite_acquisition_space.py +168 -0
  371. agent_evolve/ports/finite_action_selection.py +348 -0
  372. agent_evolve/ports/finite_action_set.py +256 -0
  373. agent_evolve/ports/frontier_target.py +396 -0
  374. agent_evolve/ports/generation_failure.py +43 -0
  375. agent_evolve/ports/hard_feasibility.py +233 -0
  376. agent_evolve/ports/id_factory.py +34 -0
  377. agent_evolve/ports/llm_task_queue.py +93 -0
  378. agent_evolve/ports/objective_resolution.py +419 -0
  379. agent_evolve/ports/paired_allocation_comparison.py +401 -0
  380. agent_evolve/ports/paired_block_schedule.py +475 -0
  381. agent_evolve/ports/parent_measurement.py +336 -0
  382. agent_evolve/ports/portfolio_memory_dose.py +643 -0
  383. agent_evolve/ports/portfolio_selection.py +3169 -0
  384. agent_evolve/ports/postcommit_rank_authority.py +467 -0
  385. agent_evolve/ports/presented_action_evidence.py +794 -0
  386. agent_evolve/ports/resource_lease.py +162 -0
  387. agent_evolve/ports/structured_generator.py +734 -0
  388. agent_evolve/ports/structured_output_budget.py +120 -0
  389. agent_evolve/ports/subprocess_boundary.py +138 -0
  390. agent_evolve/ports/treatment_assignment.py +466 -0
  391. agent_evolve/ports/variation_catalog.py +76 -0
  392. agent_evolve/ports/variation_source.py +226 -0
  393. agent_evolve/proposal_mode.py +157 -0
  394. agent_evolve/proposers/__init__.py +10 -0
  395. agent_evolve/proposers/random_proposer.py +188 -0
  396. agent_evolve/provider_accounting.py +163 -0
  397. agent_evolve/py.typed +0 -0
  398. agent_evolve/reference_method.py +1570 -0
  399. agent_evolve/session/__init__.py +11 -0
  400. agent_evolve/session/authorship.py +864 -0
  401. agent_evolve/session/evaluate.py +236 -0
  402. agent_evolve/session/fidelity.py +237 -0
  403. agent_evolve/session/genetic_loop.py +742 -0
  404. agent_evolve/session/loop.py +803 -0
  405. agent_evolve/session/screening.py +671 -0
  406. agent_evolve/settings.py +376 -0
  407. agent_evolve/workload_kit.py +368 -0
  408. agent_evolve/workload_prompt.py +398 -0
  409. agentevolve_optimizer-0.5.0.dist-info/METADATA +599 -0
  410. agentevolve_optimizer-0.5.0.dist-info/RECORD +414 -0
  411. agentevolve_optimizer-0.5.0.dist-info/WHEEL +5 -0
  412. agentevolve_optimizer-0.5.0.dist-info/entry_points.txt +2 -0
  413. agentevolve_optimizer-0.5.0.dist-info/licenses/LICENSE +21 -0
  414. agentevolve_optimizer-0.5.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1 @@
1
+ """Pure variation policies for typed candidate structures."""
@@ -0,0 +1,426 @@
1
+ """Bounded workload-neutral composition of sealed finite variation options.
2
+
3
+ Benchmark adapters may expose simple atomic choices because they are easy to
4
+ validate and explain. Restricting every model-ranked candidate to one atomic
5
+ edit, however, creates an unnecessarily shallow search topology. This
6
+ decorator preserves every base option and samples a bounded, outcome-blind set
7
+ of apparently disjoint two-option unions. A sampled union is admitted only
8
+ after the engine materializes it and verifies that the result re-diffs to the
9
+ exact classified source effects. The model still selects only opaque finite
10
+ option IDs.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import hashlib
16
+ import json
17
+ from dataclasses import dataclass, field, replace
18
+ from enum import Enum
19
+
20
+ from agent_evolve.domain.finite_variation import (
21
+ MAX_FINITE_VARIATION_OPTIONS,
22
+ FiniteVariationContract,
23
+ FiniteVariationOption,
24
+ )
25
+ from agent_evolve.domain.ids import CandidateId
26
+ from agent_evolve.domain.typed_json import FrozenJsonObject, typed_json_sha256
27
+ from agent_evolve.policies.variation.disjoint_recombination import (
28
+ DisjointPatchRecombiner,
29
+ DisjointPatchRecombinationError,
30
+ )
31
+ from agent_evolve.ports.portfolio_selection import (
32
+ pairwise_disjoint_parent_patch_pairs,
33
+ )
34
+ from agent_evolve.ports.variation_catalog import FiniteVariationCatalog
35
+
36
+
37
+ COMPOSITIONAL_FINITE_CATALOG_POLICY_ID = "bounded_disjoint_finite_composition"
38
+ COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION = 2
39
+ COMPOSITE_OPTION_FAMILY = "composite_r2"
40
+ HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_ID = (
41
+ "bounded_hierarchical_disjoint_finite_composition"
42
+ )
43
+ HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION = 2
44
+ COMPOSITION_SELECTION_EXPOSURE_METADATA_KEY = "composition_selection_exposure"
45
+ COMPOSITION_REQUIRED_PROPOSALS_METADATA_KEY = "composition_required_proposals"
46
+ COMPOSITION_PREFERRED_PROPOSALS_METADATA_KEY = "composition_preferred_proposals"
47
+ COMPOSITION_CAPACITY_PROJECTED_METADATA_KEY = "composition_capacity_projected"
48
+ COMPOSITION_LEFT_OPTION_METADATA_KEY = "left_option_id"
49
+ COMPOSITION_RIGHT_OPTION_METADATA_KEY = "right_option_id"
50
+ _DEFINITION_DOMAIN = b"agent-evolve:bounded-disjoint-finite-composition:def:v2\x00"
51
+ _HIERARCHICAL_DEFINITION_DOMAIN = (
52
+ b"agent-evolve:bounded-hierarchical-disjoint-finite-composition:def:v2\x00"
53
+ )
54
+ _PAIR_ORDER_DOMAIN = b"agent-evolve:bounded-disjoint-finite-composition:pair:v1\x00"
55
+ _OPTION_ID_DOMAIN = b"agent-evolve:bounded-disjoint-finite-composition:option:v1\x00"
56
+ _NON_REPLAY_SAFE_UNION = (
57
+ "replayed union does not re-diff to the exact classified effects"
58
+ )
59
+
60
+
61
+ class CompositionSelectionExposure(str, Enum):
62
+ """Closed prompt/selection treatment for materialized compositions."""
63
+
64
+ FLAT = "flat"
65
+ HIERARCHICAL_RANKED_UNION = "hierarchical_ranked_union"
66
+
67
+
68
+ def _canonical_json(value: object) -> bytes:
69
+ return json.dumps(
70
+ value,
71
+ allow_nan=False,
72
+ ensure_ascii=True,
73
+ separators=(",", ":"),
74
+ sort_keys=True,
75
+ ).encode("ascii")
76
+
77
+
78
+ def _catalog_identity(catalog: FiniteVariationCatalog) -> tuple[str, int, str]:
79
+ catalog_id = getattr(catalog, "catalog_id", None)
80
+ catalog_version = getattr(catalog, "catalog_version", None)
81
+ definition_sha256 = getattr(catalog, "definition_sha256", None)
82
+ if type(catalog_id) is not str or not catalog_id:
83
+ raise ValueError("base catalog must publish catalog_id")
84
+ if type(catalog_version) is not int or catalog_version <= 0:
85
+ raise ValueError("base catalog must publish a positive catalog_version")
86
+ if (
87
+ type(definition_sha256) is not str
88
+ or len(definition_sha256) != 64
89
+ or any(value not in "0123456789abcdef" for value in definition_sha256)
90
+ ):
91
+ raise ValueError("base catalog must publish a lowercase definition SHA-256")
92
+ return catalog_id, catalog_version, definition_sha256
93
+
94
+
95
+ @dataclass(frozen=True, slots=True)
96
+ class BoundedCompositionalFiniteVariationCatalog:
97
+ """Decorate any finite catalog with bounded replay-safe radius-two options."""
98
+
99
+ base_catalog: FiniteVariationCatalog
100
+ max_composite_options: int = 128
101
+ selection_exposure: CompositionSelectionExposure = CompositionSelectionExposure.FLAT
102
+ required_composite_proposals: int = 2
103
+ catalog_id: str = field(init=False)
104
+ catalog_version: int = field(init=False)
105
+ definition_sha256: str = field(init=False)
106
+ option_families: tuple[str, ...] | None = field(init=False, default=None)
107
+
108
+ def __post_init__(self) -> None:
109
+ if not isinstance(self.base_catalog, FiniteVariationCatalog):
110
+ raise TypeError("base_catalog must implement FiniteVariationCatalog")
111
+ base_id, base_version, base_definition = _catalog_identity(self.base_catalog)
112
+ if (
113
+ type(self.max_composite_options) is not int
114
+ or self.max_composite_options <= 0
115
+ or self.max_composite_options >= MAX_FINITE_VARIATION_OPTIONS
116
+ ):
117
+ raise ValueError(
118
+ "max_composite_options must lie in [1, MAX_FINITE_VARIATION_OPTIONS)"
119
+ )
120
+ if type(self.selection_exposure) is not CompositionSelectionExposure:
121
+ raise TypeError("selection_exposure must be exact and closed")
122
+ if (
123
+ type(self.required_composite_proposals) is not int
124
+ or not 1 <= self.required_composite_proposals < 8
125
+ ):
126
+ raise ValueError("required_composite_proposals must lie in [1, 8)")
127
+ definition = {
128
+ "schema_version": 1,
129
+ "policy_id": COMPOSITIONAL_FINITE_CATALOG_POLICY_ID,
130
+ "policy_version": COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION,
131
+ "base_catalog": {
132
+ "catalog_id": base_id,
133
+ "catalog_version": base_version,
134
+ "definition_sha256": base_definition,
135
+ },
136
+ "radius": 2,
137
+ "retain_all_base_options": True,
138
+ "max_composite_options": self.max_composite_options,
139
+ "pair_prefilter": "disjoint_parent_relative_typed_patch_paths",
140
+ "pair_sampling": "parent_keyed_hash_then_balanced_source_exposure",
141
+ "materialization_attempt_bound": self.max_composite_options,
142
+ "pair_admission": "exact_replay_union_and_rediff_to_source_effects",
143
+ "failed_materialization": "deterministic_skip_without_replacement",
144
+ "outcomes_consulted": False,
145
+ "provider_fields_consulted": False,
146
+ }
147
+ object.__setattr__(self, "catalog_id", base_id)
148
+ if self.selection_exposure is CompositionSelectionExposure.FLAT:
149
+ catalog_version = base_version + COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION
150
+ definition_sha256 = hashlib.sha256(
151
+ _DEFINITION_DOMAIN + _canonical_json(definition)
152
+ ).hexdigest()
153
+ else:
154
+ hierarchical_definition = {
155
+ **definition,
156
+ "policy_id": HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_ID,
157
+ "policy_version": (
158
+ HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION
159
+ ),
160
+ "selection_exposure": self.selection_exposure.value,
161
+ "required_composite_proposals": (self.required_composite_proposals),
162
+ "realized_proposal_mix": (
163
+ "nearest-configured-exact-k8-capacity-projection"
164
+ ),
165
+ "capacity_projection_inputs": (
166
+ "current-parent-atomic-and-materialized-composite-counts"
167
+ ),
168
+ "capacity_projection_excludes": [
169
+ "outcomes",
170
+ "objective_values",
171
+ "provider_fields",
172
+ "workload_identifiers",
173
+ ],
174
+ "ranked_union_schema": (
175
+ "atomic-option-or-authenticated-radius-two-tuple"
176
+ ),
177
+ "model_materialization_authority": False,
178
+ }
179
+ catalog_version = (
180
+ base_version
181
+ + COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION
182
+ + HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION
183
+ )
184
+ definition_sha256 = hashlib.sha256(
185
+ _HIERARCHICAL_DEFINITION_DOMAIN
186
+ + _canonical_json(hierarchical_definition)
187
+ ).hexdigest()
188
+ object.__setattr__(self, "catalog_version", catalog_version)
189
+ object.__setattr__(self, "definition_sha256", definition_sha256)
190
+ base_families = getattr(self.base_catalog, "option_families", None)
191
+ if base_families is not None:
192
+ if type(base_families) is not tuple or not base_families:
193
+ raise TypeError("base option_families must be a non-empty tuple")
194
+ object.__setattr__(
195
+ self,
196
+ "option_families",
197
+ tuple(sorted({*base_families, COMPOSITE_OPTION_FAMILY})),
198
+ )
199
+
200
+ @staticmethod
201
+ def _balanced_pairs(
202
+ ordered_pairs: tuple[tuple[str, str], ...],
203
+ *,
204
+ limit: int,
205
+ ) -> tuple[tuple[str, str], ...]:
206
+ """Bound source exposure before reusing an atomic option."""
207
+
208
+ if limit <= 0 or not ordered_pairs:
209
+ return ()
210
+ exposure: dict[str, int] = {}
211
+ selected: list[tuple[str, str]] = []
212
+ selected_set: set[tuple[str, str]] = set()
213
+ tier = 0
214
+ while len(selected) < limit:
215
+ progressed = False
216
+ for pair in ordered_pairs:
217
+ if pair in selected_set:
218
+ continue
219
+ left, right = pair
220
+ if exposure.get(left, 0) > tier or exposure.get(right, 0) > tier:
221
+ continue
222
+ selected.append(pair)
223
+ selected_set.add(pair)
224
+ exposure[left] = exposure.get(left, 0) + 1
225
+ exposure[right] = exposure.get(right, 0) + 1
226
+ progressed = True
227
+ if len(selected) == limit:
228
+ break
229
+ if len(selected) == limit or len(selected_set) == len(ordered_pairs):
230
+ break
231
+ tier += 1
232
+ if not progressed and tier > len(ordered_pairs): # pragma: no cover
233
+ raise RuntimeError("balanced pair selection failed to progress")
234
+ return tuple(selected)
235
+
236
+ def options(
237
+ self,
238
+ parent_configuration: FrozenJsonObject,
239
+ ) -> tuple[FiniteVariationOption, ...]:
240
+ self.__post_init__()
241
+ if type(parent_configuration) is not FrozenJsonObject:
242
+ raise TypeError("parent_configuration must be an exact FrozenJsonObject")
243
+ base_options = self.base_catalog.options(parent_configuration)
244
+ if type(base_options) is not tuple or not base_options:
245
+ raise ValueError("base catalog must return a non-empty exact tuple")
246
+ base_contract = FiniteVariationContract(
247
+ catalog_id=self.base_catalog.catalog_id,
248
+ catalog_version=self.base_catalog.catalog_version,
249
+ catalog_definition_sha256=self.base_catalog.definition_sha256,
250
+ parent_configuration=parent_configuration,
251
+ options=base_options,
252
+ )
253
+ remaining_capacity = MAX_FINITE_VARIATION_OPTIONS - len(base_options)
254
+ composite_limit = min(self.max_composite_options, remaining_capacity)
255
+ if composite_limit <= 0:
256
+ return base_options
257
+
258
+ option_by_id = {value.option_id: value for value in base_options}
259
+ eligible_pairs = pairwise_disjoint_parent_patch_pairs(
260
+ base_contract,
261
+ tuple(option_by_id),
262
+ )
263
+ parent_sha256 = typed_json_sha256(parent_configuration)
264
+ ordered_pairs = tuple(
265
+ sorted(
266
+ eligible_pairs,
267
+ key=lambda pair: (
268
+ hashlib.sha256(
269
+ _PAIR_ORDER_DOMAIN
270
+ + bytes.fromhex(self.definition_sha256)
271
+ + bytes.fromhex(parent_sha256)
272
+ + bytes.fromhex(option_by_id[pair[0]].identity_sha256)
273
+ + bytes.fromhex(option_by_id[pair[1]].identity_sha256)
274
+ ).digest(),
275
+ pair,
276
+ ),
277
+ )
278
+ )
279
+ selected_pairs = self._balanced_pairs(
280
+ ordered_pairs,
281
+ limit=min(composite_limit, len(ordered_pairs)),
282
+ )
283
+
284
+ ancestor_id = CandidateId("candidate_composition_parent")
285
+ recombiner = DisjointPatchRecombiner()
286
+ composites: list[FiniteVariationOption] = []
287
+ child_hashes = {value.child_configuration_sha256 for value in base_options}
288
+ for ordinal, (left_id, right_id) in enumerate(selected_pairs, start=1):
289
+ left = option_by_id[left_id]
290
+ right = option_by_id[right_id]
291
+ try:
292
+ materialization = recombiner.materialize(
293
+ ancestor=parent_configuration,
294
+ ancestor_candidate_id=ancestor_id,
295
+ left=left.child_configuration,
296
+ left_candidate_id=CandidateId(
297
+ f"candidate_composition_left_{ordinal:04d}"
298
+ ),
299
+ right=right.child_configuration,
300
+ right_candidate_id=CandidateId(
301
+ f"candidate_composition_right_{ordinal:04d}"
302
+ ),
303
+ target_candidate_id=CandidateId(
304
+ f"candidate_composition_target_{ordinal:04d}"
305
+ ),
306
+ )
307
+ except DisjointPatchRecombinationError as error:
308
+ # Repeated sequence values can make two locally disjoint
309
+ # source patches interact under the canonical global diff.
310
+ # Such a pair is not replay-safe even though it passed the
311
+ # cheap path prefilter. The bounded sample is outcome-blind,
312
+ # so deterministic rejection needs neither repair nor refill.
313
+ if str(error) != _NON_REPLAY_SAFE_UNION:
314
+ raise
315
+ continue
316
+ child_sha256 = typed_json_sha256(materialization.configuration)
317
+ if child_sha256 in child_hashes:
318
+ continue
319
+ child_hashes.add(child_sha256)
320
+ option_digest = hashlib.sha256(
321
+ _OPTION_ID_DOMAIN
322
+ + bytes.fromhex(self.definition_sha256)
323
+ + bytes.fromhex(parent_sha256)
324
+ + bytes.fromhex(left.identity_sha256)
325
+ + bytes.fromhex(right.identity_sha256)
326
+ + bytes.fromhex(materialization.receipt_sha256)
327
+ ).hexdigest()
328
+ composites.append(
329
+ FiniteVariationOption(
330
+ option_id=f"compose.r02.{option_digest[:32]}",
331
+ parent_configuration_sha256=parent_sha256,
332
+ child_configuration=materialization.configuration,
333
+ family=COMPOSITE_OPTION_FAMILY,
334
+ description=(
335
+ "Apply both sealed parent-relative options "
336
+ f"{left_id} and {right_id}."
337
+ ),
338
+ metadata=tuple(
339
+ sorted(
340
+ (
341
+ (
342
+ "composition_policy_definition_sha256",
343
+ self.definition_sha256,
344
+ ),
345
+ ("composition_radius", "2"),
346
+ (COMPOSITION_LEFT_OPTION_METADATA_KEY, left_id),
347
+ ("left_option_identity_sha256", left.identity_sha256),
348
+ (COMPOSITION_RIGHT_OPTION_METADATA_KEY, right_id),
349
+ (
350
+ "right_option_identity_sha256",
351
+ right.identity_sha256,
352
+ ),
353
+ )
354
+ + (
355
+ ()
356
+ if self.selection_exposure
357
+ is CompositionSelectionExposure.FLAT
358
+ else (
359
+ (
360
+ COMPOSITION_SELECTION_EXPOSURE_METADATA_KEY,
361
+ self.selection_exposure.value,
362
+ ),
363
+ (
364
+ COMPOSITION_REQUIRED_PROPOSALS_METADATA_KEY,
365
+ str(self.required_composite_proposals),
366
+ ),
367
+ )
368
+ )
369
+ )
370
+ ),
371
+ )
372
+ )
373
+ if (
374
+ self.selection_exposure
375
+ is CompositionSelectionExposure.HIERARCHICAL_RANKED_UNION
376
+ and len(base_options) + len(composites) >= 8
377
+ ):
378
+ # The configured count is a search preference, not permission to
379
+ # publish an impossible output schema. Near a finite-domain
380
+ # boundary a parent can expose fewer than ``8 - preferred`` legal
381
+ # atomic moves. Project to the closest exact-K8 composition using
382
+ # only the current, engine-materialized action capacities. This
383
+ # is workload-, objective-, provider-, and outcome-independent.
384
+ minimum_composites = max(0, 8 - len(base_options))
385
+ maximum_composites = min(7, len(composites))
386
+ effective_composites = max(
387
+ minimum_composites,
388
+ min(self.required_composite_proposals, maximum_composites),
389
+ )
390
+ projected = effective_composites != self.required_composite_proposals
391
+ adjusted: list[FiniteVariationOption] = []
392
+ for option in composites:
393
+ metadata = dict(option.metadata)
394
+ metadata[COMPOSITION_REQUIRED_PROPOSALS_METADATA_KEY] = str(
395
+ effective_composites
396
+ )
397
+ metadata[COMPOSITION_PREFERRED_PROPOSALS_METADATA_KEY] = str(
398
+ self.required_composite_proposals
399
+ )
400
+ metadata[COMPOSITION_CAPACITY_PROJECTED_METADATA_KEY] = (
401
+ "true" if projected else "false"
402
+ )
403
+ adjusted.append(
404
+ option
405
+ if tuple(sorted(metadata.items())) == option.metadata
406
+ else replace(option, metadata=tuple(sorted(metadata.items())))
407
+ )
408
+ composites = adjusted
409
+ return (*base_options, *composites)
410
+
411
+
412
+ __all__ = [
413
+ "COMPOSITION_LEFT_OPTION_METADATA_KEY",
414
+ "COMPOSITION_CAPACITY_PROJECTED_METADATA_KEY",
415
+ "COMPOSITION_PREFERRED_PROPOSALS_METADATA_KEY",
416
+ "COMPOSITION_REQUIRED_PROPOSALS_METADATA_KEY",
417
+ "COMPOSITION_RIGHT_OPTION_METADATA_KEY",
418
+ "COMPOSITION_SELECTION_EXPOSURE_METADATA_KEY",
419
+ "COMPOSITIONAL_FINITE_CATALOG_POLICY_ID",
420
+ "COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION",
421
+ "COMPOSITE_OPTION_FAMILY",
422
+ "HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_ID",
423
+ "HIERARCHICAL_COMPOSITIONAL_FINITE_CATALOG_POLICY_VERSION",
424
+ "BoundedCompositionalFiniteVariationCatalog",
425
+ "CompositionSelectionExposure",
426
+ ]