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,458 @@
1
+ """Front-proximity parent basis: stop generating from dominated parents.
2
+
3
+ The allocator-side companion of this rule
4
+ (:mod:`agent_evolve.application.front_proximity_admission`) restricts which
5
+ members of an already-generated market an allocator may buy. This module
6
+ applies the *same* geometric quantity one level earlier, to the set of
7
+ parents a proposal market is generated FROM.
8
+
9
+ The measured motivation is in
10
+ ``research_artifacts/jul28_large_gain_anatomy_and_refinement.md``: across the
11
+ eight sealed BOiLS held-out markets, 26% of every market descended from
12
+ parents whose Chebyshev excess over the archive front exceeded 0.05, and that
13
+ quarter held 1 of 88 prefix-positive members and 1.6% of all realised gain.
14
+ No allocator can recover a seat spent inside a region that carries no outcome
15
+ mass; the binding constraint is at least as much in the proposal universe as
16
+ in the allocation. This module removes that region at its source.
17
+
18
+ The rule is a *support restriction over the parent population*, composed on
19
+ top of the unchanged
20
+ :func:`agent_evolve.application.residual_reachability.select_residual_reachability_basis`.
21
+ Every existing admission route (quality archive, initial design, earned
22
+ lineage, structural cover, capacity fill) still runs and still stamps its own
23
+ reason; the only change is which parents each route is allowed to see.
24
+
25
+ Three properties are deliberate:
26
+
27
+ * **Relative, not absolute.** ``proximity_concentration`` names a fraction of
28
+ the parent population, never a distance threshold, so the rule carries no
29
+ workload constant, no metric name, no scale assumption and no objective
30
+ count. Anchor excess is computed from the archive front and a parent's own
31
+ objective vector, so it is domain-agnostic by construction.
32
+ * **Floored, not banned.** ``far_front_floor`` reserves a strictly positive
33
+ share of the basis for parents *outside* the proximal head. The archive
34
+ front moves as the campaign buys points, so today's far parent can be
35
+ tomorrow's near one; a rule that banned the distal tail outright could never
36
+ discover that. ``minimum_far_front_parents`` keeps the reservation
37
+ non-empty even for a small basis.
38
+ * **A no-op without anchors.** Parents with no recorded objective vector are
39
+ scored at the population median, exactly as the admission rule scores
40
+ anchorless candidates, so a lane is never systematically evicted. If no
41
+ parent carries an anchor at all, the selection is byte-identical to the
42
+ unrestricted basis.
43
+
44
+ Claim boundary: this changes which parents a generator proposes from. It
45
+ makes no claim about the outcome of any campaign that uses it.
46
+ """
47
+
48
+ from __future__ import annotations
49
+
50
+ import hashlib
51
+ import json
52
+ import math
53
+ import re
54
+ from dataclasses import dataclass, field
55
+
56
+ from agent_evolve.application.calibrated_positive_gain_opportunity import (
57
+ ObjectivePoint,
58
+ )
59
+ from agent_evolve.application.front_proximity_admission import (
60
+ chebyshev_excess,
61
+ )
62
+ from agent_evolve.application.residual_reachability import (
63
+ ReachabilityCandidate,
64
+ ResidualReachabilityBasis,
65
+ ResidualReachabilityBasisPolicy,
66
+ select_residual_reachability_basis,
67
+ )
68
+ from agent_evolve.domain.ids import CandidateId
69
+
70
+ FRONT_PROXIMITY_PARENT_BASIS_ID = "front_proximity_parent_basis"
71
+ FRONT_PROXIMITY_PARENT_BASIS_VERSION = 1
72
+ _TOKEN = re.compile(r"^[a-z][a-z0-9_.:-]{0,255}$")
73
+ _DEFINITION_DOMAIN = b"agent-evolve:front-proximity-parent-basis:v1\x00"
74
+
75
+
76
+ def _canonical_json(value: object) -> bytes:
77
+ return json.dumps(
78
+ value,
79
+ allow_nan=False,
80
+ ensure_ascii=True,
81
+ separators=(",", ":"),
82
+ sort_keys=True,
83
+ ).encode("ascii", errors="strict")
84
+
85
+
86
+ def _hash(value: object) -> str:
87
+ return hashlib.sha256(
88
+ _DEFINITION_DOMAIN + _canonical_json(value)
89
+ ).hexdigest()
90
+
91
+
92
+ @dataclass(frozen=True, slots=True)
93
+ class FrontProximityParentBasisConfig:
94
+ """How hard the parent population is concentrated toward the front."""
95
+
96
+ #: Fraction of the anchored parent population treated as front-proximal.
97
+ #: 1.0 disables the restriction entirely and reproduces the unrestricted
98
+ #: basis byte for byte.
99
+ proximity_concentration: float = 0.50
100
+ #: Fraction of the basis reserved for parents OUTSIDE the proximal head,
101
+ #: so the distal tail is floored rather than banned. 0.0 is rejected:
102
+ #: banning is not a configuration of this rule. The floor is small by
103
+ #: default because its purpose is to keep the distal region reachable
104
+ #: as the front moves, not to guarantee it a large share of the basis.
105
+ far_front_floor: float = 0.125
106
+ #: Absolute floor on reserved distal slots, applied when the fractional
107
+ #: reservation rounds to zero on a small basis.
108
+ minimum_far_front_parents: int = 1
109
+
110
+ def __post_init__(self) -> None:
111
+ for name in ("proximity_concentration", "far_front_floor"):
112
+ value = getattr(self, name)
113
+ if (
114
+ type(value) is not float
115
+ or not math.isfinite(value)
116
+ or not 0.0 < value <= 1.0
117
+ ):
118
+ raise ValueError(f"{name} must lie in (0, 1]")
119
+ if self.far_front_floor >= 1.0:
120
+ raise ValueError("far_front_floor must leave a proximal share")
121
+ if (
122
+ type(self.minimum_far_front_parents) is not int
123
+ or self.minimum_far_front_parents < 1
124
+ ):
125
+ raise ValueError(
126
+ "minimum_far_front_parents must be a positive integer; "
127
+ "the distal tail is floored, never banned"
128
+ )
129
+
130
+ def to_record(self) -> dict[str, object]:
131
+ self.__post_init__()
132
+ return {
133
+ "proximity_concentration_hex": float(
134
+ self.proximity_concentration
135
+ ).hex(),
136
+ "far_front_floor_hex": float(self.far_front_floor).hex(),
137
+ "minimum_far_front_parents": self.minimum_far_front_parents,
138
+ }
139
+
140
+
141
+ @dataclass(frozen=True, slots=True)
142
+ class ParentAnchorExcess:
143
+ """One parent's Chebyshev excess over the parent population's front."""
144
+
145
+ candidate_id: CandidateId
146
+ excess: float
147
+ anchored: bool
148
+
149
+ def to_record(self) -> dict[str, object]:
150
+ return {
151
+ "candidate_id": self.candidate_id.value,
152
+ "excess_hex": float(self.excess).hex(),
153
+ "anchored": self.anchored,
154
+ }
155
+
156
+
157
+ def parent_anchor_excesses(
158
+ candidates: tuple[ReachabilityCandidate, ...],
159
+ anchors: dict[CandidateId, ObjectivePoint],
160
+ metric_ids: tuple[str, ...],
161
+ ) -> tuple[ParentAnchorExcess, ...]:
162
+ """Excess of every parent over the front of the anchored population.
163
+
164
+ The front is the Pareto filter of every supplied anchor, so the quantity
165
+ is relative to the archive the campaign has actually evaluated. A parent
166
+ on the front scores exactly 0.0; a dominated parent scores the worst-axis
167
+ improvement it would need to reach the nearest front point. Parents with
168
+ no anchor take the population median, so they are neither systematically
169
+ admitted nor systematically evicted.
170
+ """
171
+
172
+ if type(candidates) is not tuple or not candidates:
173
+ raise ValueError("candidates must be a non-empty exact tuple")
174
+ if type(anchors) is not dict:
175
+ raise TypeError("anchors must be an exact mapping")
176
+ if type(metric_ids) is not tuple or not metric_ids:
177
+ raise ValueError("metric_ids must be a non-empty exact tuple")
178
+ if tuple(sorted(metric_ids)) != metric_ids:
179
+ raise ValueError("metric_ids must be canonically ordered")
180
+ points = tuple(
181
+ anchors[value.candidate_id]
182
+ for value in candidates
183
+ if value.candidate_id in anchors
184
+ )
185
+ if not points:
186
+ return tuple(
187
+ ParentAnchorExcess(
188
+ candidate_id=value.candidate_id,
189
+ excess=0.0,
190
+ anchored=False,
191
+ )
192
+ for value in candidates
193
+ )
194
+ known: dict[CandidateId, float] = {
195
+ value.candidate_id: chebyshev_excess(
196
+ anchors[value.candidate_id], points, metric_ids
197
+ )
198
+ for value in candidates
199
+ if value.candidate_id in anchors
200
+ }
201
+ ordered = sorted(known.values())
202
+ median = ordered[len(ordered) // 2]
203
+ return tuple(
204
+ ParentAnchorExcess(
205
+ candidate_id=value.candidate_id,
206
+ excess=known.get(value.candidate_id, median),
207
+ anchored=value.candidate_id in known,
208
+ )
209
+ for value in candidates
210
+ )
211
+
212
+
213
+ @dataclass(frozen=True, slots=True)
214
+ class FrontProximityParentBasis:
215
+ """Select a reachability basis biased toward front-proximal parents.
216
+
217
+ ``inner_policy`` is the unmodified bounded dual-archive retention policy.
218
+ This wrapper runs it twice — once over the proximal head with the
219
+ unreserved slots, once over the distal remainder with the reserved floor
220
+ — and merges the two bases. Every admission reason is produced by the
221
+ inner policy; none is invented here.
222
+ """
223
+
224
+ inner_policy: ResidualReachabilityBasisPolicy
225
+ config: FrontProximityParentBasisConfig = field(
226
+ default_factory=FrontProximityParentBasisConfig
227
+ )
228
+ policy_id: str = "front_proximity_parent_basis"
229
+ definition_sha256: str = field(init=False)
230
+
231
+ def __post_init__(self) -> None:
232
+ if type(self.inner_policy) is not ResidualReachabilityBasisPolicy:
233
+ raise TypeError(
234
+ "inner_policy must be an exact "
235
+ "ResidualReachabilityBasisPolicy"
236
+ )
237
+ self.inner_policy.__post_init__()
238
+ if type(self.config) is not FrontProximityParentBasisConfig:
239
+ raise TypeError("config must be an exact config")
240
+ self.config.__post_init__()
241
+ if _TOKEN.fullmatch(self.policy_id) is None:
242
+ raise ValueError("policy_id must use the closed token grammar")
243
+ object.__setattr__(
244
+ self,
245
+ "definition_sha256",
246
+ _hash(
247
+ {
248
+ "arm": FRONT_PROXIMITY_PARENT_BASIS_ID,
249
+ "version": FRONT_PROXIMITY_PARENT_BASIS_VERSION,
250
+ "config": self.config.to_record(),
251
+ "inner_policy_definition_sha256": (
252
+ self.inner_policy.definition_sha256
253
+ ),
254
+ "rule": (
255
+ "partition the parent population by chebyshev "
256
+ "excess of its objective vector over the front of "
257
+ "that population, run the unchanged bounded "
258
+ "dual-archive retention over the proximal head "
259
+ "for the unreserved slots and over the distal "
260
+ "remainder for the floored slots, then merge; "
261
+ "unanchored parents take the population median"
262
+ ),
263
+ "outcomes_consulted": [
264
+ "evaluated_parent_objective_vector",
265
+ "quality_archive_membership",
266
+ "earned_positive_lineage",
267
+ ],
268
+ "forbidden_fields": [
269
+ "workload_id",
270
+ "model_id",
271
+ "provider_id",
272
+ "metric_id",
273
+ ],
274
+ }
275
+ ),
276
+ )
277
+
278
+ def _split_slots(self, maximum_parents: int) -> tuple[int, int]:
279
+ """Unreserved proximal slots and the floored distal reservation."""
280
+
281
+ reserved = max(
282
+ self.config.minimum_far_front_parents,
283
+ int(math.floor(self.config.far_front_floor * maximum_parents)),
284
+ )
285
+ reserved = min(reserved, maximum_parents - 1)
286
+ return maximum_parents - reserved, reserved
287
+
288
+ def proximity_order(
289
+ self,
290
+ excesses: tuple[ParentAnchorExcess, ...],
291
+ ) -> tuple[CandidateId, ...]:
292
+ """Parents ordered nearest-front first.
293
+
294
+ Ties break on the candidate id so the order is deterministic and
295
+ cannot depend on the order candidates were supplied in.
296
+ """
297
+
298
+ return tuple(
299
+ value.candidate_id
300
+ for value in sorted(
301
+ excesses,
302
+ key=lambda value: (value.excess, value.candidate_id.value),
303
+ )
304
+ )
305
+
306
+ def partition(
307
+ self,
308
+ excesses: tuple[ParentAnchorExcess, ...],
309
+ ) -> tuple[tuple[CandidateId, ...], tuple[CandidateId, ...]]:
310
+ """Proximal head and distal remainder, best excess first."""
311
+
312
+ order = self.proximity_order(excesses)
313
+ head_size = max(
314
+ 1,
315
+ min(
316
+ len(order),
317
+ int(
318
+ math.ceil(
319
+ self.config.proximity_concentration * len(order)
320
+ )
321
+ ),
322
+ ),
323
+ )
324
+ return order[:head_size], order[head_size:]
325
+
326
+ def select(
327
+ self,
328
+ candidates: tuple[ReachabilityCandidate, ...],
329
+ anchors: dict[CandidateId, ObjectivePoint],
330
+ metric_ids: tuple[str, ...],
331
+ ) -> ResidualReachabilityBasis:
332
+ """The front-proximal basis over ``candidates``.
333
+
334
+ Reduces to :func:`select_residual_reachability_basis` exactly when the
335
+ concentration is 1.0 or when no parent carries an anchor.
336
+ """
337
+
338
+ if type(candidates) is not tuple or not candidates:
339
+ raise ValueError("candidates must be a non-empty exact tuple")
340
+ excesses = parent_anchor_excesses(candidates, anchors, metric_ids)
341
+ if self.config.proximity_concentration >= 1.0 or not any(
342
+ value.anchored for value in excesses
343
+ ):
344
+ return select_residual_reachability_basis(
345
+ candidates, self.inner_policy
346
+ )
347
+ by_id = {value.candidate_id: value for value in candidates}
348
+ proximal_ids, distal_ids = self.partition(excesses)
349
+ proximal_slots, distal_slots = self._split_slots(
350
+ self.inner_policy.maximum_parents
351
+ )
352
+ # Slots the proximal head cannot use spill OUTWARD in proximity
353
+ # order rather than back to the unrestricted population, so a
354
+ # tighter concentration can never move the basis away from the
355
+ # front. The reserved floor is measured against the ORIGINAL
356
+ # partition, so growing the head never eats the reservation.
357
+ head = self.proximity_order(excesses)[
358
+ : max(len(proximal_ids), proximal_slots)
359
+ ]
360
+ members = dict(self._sub_basis(by_id, head, proximal_slots))
361
+ for candidate_id, member in self._sub_basis(
362
+ by_id, distal_ids, distal_slots
363
+ ):
364
+ members.setdefault(candidate_id, member)
365
+ if len(members) < self.inner_policy.maximum_parents:
366
+ # Either side of the partition can be smaller than its slot
367
+ # allowance. Top up from the UNRESTRICTED basis so the
368
+ # restriction can never yield fewer parents than the policy
369
+ # would have retained on its own.
370
+ for candidate_id, member in self._sub_basis(
371
+ by_id,
372
+ tuple(sorted(by_id, key=lambda value: value.value)),
373
+ self.inner_policy.maximum_parents,
374
+ ):
375
+ if len(members) >= self.inner_policy.maximum_parents:
376
+ break
377
+ members.setdefault(candidate_id, member)
378
+ return ResidualReachabilityBasis(
379
+ policy_definition_sha256=self.inner_policy.definition_sha256,
380
+ source_candidate_count=len(candidates),
381
+ members=tuple(
382
+ members[key] for key in sorted(members, key=lambda v: v.value)
383
+ ),
384
+ )
385
+
386
+ def _sub_basis(
387
+ self,
388
+ by_id: dict[CandidateId, ReachabilityCandidate],
389
+ candidate_ids: tuple[CandidateId, ...],
390
+ slots: int,
391
+ ):
392
+ """Run the unchanged inner policy over one side of the partition."""
393
+
394
+ if not candidate_ids or slots <= 0:
395
+ return ()
396
+ capped = min(slots, len(candidate_ids))
397
+ policy = ResidualReachabilityBasisPolicy(
398
+ maximum_parents=capped,
399
+ maximum_quality_archive_parents=min(
400
+ self.inner_policy.maximum_quality_archive_parents, capped
401
+ ),
402
+ maximum_initial_design_parents=min(
403
+ self.inner_policy.maximum_initial_design_parents, capped
404
+ ),
405
+ maximum_earned_lineage_parents=min(
406
+ self.inner_policy.maximum_earned_lineage_parents, capped
407
+ ),
408
+ maximum_structural_cover_parents=min(
409
+ self.inner_policy.maximum_structural_cover_parents, capped
410
+ ),
411
+ policy_id=self.inner_policy.policy_id,
412
+ policy_version=self.inner_policy.policy_version,
413
+ )
414
+ basis = select_residual_reachability_basis(
415
+ tuple(by_id[value] for value in candidate_ids), policy
416
+ )
417
+ return tuple(
418
+ (member.candidate.candidate_id, member)
419
+ for member in basis.members
420
+ )
421
+
422
+ def evidence_record(
423
+ self,
424
+ candidates: tuple[ReachabilityCandidate, ...],
425
+ anchors: dict[CandidateId, ObjectivePoint],
426
+ metric_ids: tuple[str, ...],
427
+ ) -> dict[str, object]:
428
+ """Outcome-blind record of what the restriction did, for receipts."""
429
+
430
+ excesses = parent_anchor_excesses(candidates, anchors, metric_ids)
431
+ proximal_ids, distal_ids = self.partition(excesses)
432
+ proximal_slots, distal_slots = self._split_slots(
433
+ self.inner_policy.maximum_parents
434
+ )
435
+ anchored = tuple(value for value in excesses if value.anchored)
436
+ return {
437
+ "policy_id": self.policy_id,
438
+ "version": FRONT_PROXIMITY_PARENT_BASIS_VERSION,
439
+ "definition_sha256": self.definition_sha256,
440
+ "config": self.config.to_record(),
441
+ "source_parent_count": len(candidates),
442
+ "anchored_parent_count": len(anchored),
443
+ "proximal_pool_size": len(proximal_ids),
444
+ "distal_pool_size": len(distal_ids),
445
+ "unreserved_proximal_slots": proximal_slots,
446
+ "reserved_distal_slots": distal_slots,
447
+ "excesses": [value.to_record() for value in excesses],
448
+ }
449
+
450
+
451
+ __all__ = [
452
+ "FRONT_PROXIMITY_PARENT_BASIS_ID",
453
+ "FRONT_PROXIMITY_PARENT_BASIS_VERSION",
454
+ "FrontProximityParentBasis",
455
+ "FrontProximityParentBasisConfig",
456
+ "ParentAnchorExcess",
457
+ "parent_anchor_excesses",
458
+ ]