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,475 @@
1
+ """Provider- and method-neutral contracts for paired benchmark block schedules.
2
+
3
+ The request surface is deliberately closed. It binds only benchmark/task
4
+ identity, a finite contract and partition layout, an exact eligibility mask,
5
+ public seed material, canonical block identities, and one replicate index.
6
+ There is no metadata escape hatch through which a method, treatment, provider,
7
+ prompt, or observed outcome can influence assignment.
8
+
9
+ The application layer owns the deterministic hash ranking. These value
10
+ objects authenticate the complete no-replacement schedule separately from the
11
+ selected block, so every replicate can share one schedule receipt while
12
+ retaining its own replayable selection receipt.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ from dataclasses import dataclass
18
+ import hashlib
19
+ import json
20
+ import re
21
+
22
+ from agent_evolve.domain.patch import require_sha256
23
+
24
+
25
+ _IDENTIFIER = re.compile(r"^[a-z][a-z0-9_.:-]{0,255}$")
26
+ ELIGIBLE_ROW_MASK_DOMAIN = "agent-evolve:finite-contract-eligible-mask:v1"
27
+ _ELIGIBLE_ROW_MASK_FRAMING = ELIGIBLE_ROW_MASK_DOMAIN.encode("ascii") + b"\x00"
28
+ _POLICY_BINDING_FRAMING = b"agent-evolve:paired-block-schedule-policy:v1\x00"
29
+ _BLOCK_IDENTITY_FRAMING = b"agent-evolve:paired-block-identity:v1\x00"
30
+ _REQUEST_FRAMING = b"agent-evolve:paired-block-schedule-request:v2\x00"
31
+ _FULL_SCHEDULE_FRAMING = b"agent-evolve:paired-block-full-schedule:v2\x00"
32
+ _SELECTED_BLOCK_FRAMING = (
33
+ b"agent-evolve:paired-block-selection-receipt:v2\x00"
34
+ )
35
+ _UINT64_MAX = (1 << 64) - 1
36
+
37
+
38
+ def _canonical_json(value: object) -> bytes:
39
+ return json.dumps(
40
+ value,
41
+ allow_nan=False,
42
+ ensure_ascii=True,
43
+ separators=(",", ":"),
44
+ sort_keys=True,
45
+ ).encode("ascii")
46
+
47
+
48
+ def _hash(domain: bytes, value: object) -> str:
49
+ return hashlib.sha256(domain + _canonical_json(value)).hexdigest()
50
+
51
+
52
+ def _require_identifier(value: object, name: str) -> str:
53
+ if type(value) is not str or _IDENTIFIER.fullmatch(value) is None:
54
+ raise ValueError(f"{name} must use the canonical lowercase identifier grammar")
55
+ return value
56
+
57
+
58
+ @dataclass(frozen=True, slots=True, eq=False)
59
+ class ExactEligibleRowMask:
60
+ """Exact global finite-contract rows eligible for downstream selection."""
61
+
62
+ finite_contract_identity_sha256: str
63
+ eligible_global_row_indices: tuple[int, ...]
64
+
65
+ def __post_init__(self) -> None:
66
+ require_sha256(
67
+ self.finite_contract_identity_sha256,
68
+ "finite_contract_identity_sha256",
69
+ )
70
+ if type(self.eligible_global_row_indices) is not tuple:
71
+ raise TypeError("eligible_global_row_indices must be an exact tuple")
72
+ if any(type(value) is not int for value in self.eligible_global_row_indices):
73
+ raise TypeError("eligible global rows must be exact integers")
74
+ if any(value < 0 for value in self.eligible_global_row_indices):
75
+ raise ValueError("eligible global rows cannot be negative")
76
+ if self.eligible_global_row_indices != tuple(
77
+ sorted(set(self.eligible_global_row_indices))
78
+ ):
79
+ raise ValueError("eligible global rows must be unique and canonically sorted")
80
+
81
+ def payload_record(self) -> dict[str, object]:
82
+ self.__post_init__()
83
+ return {
84
+ "schema_version": 1,
85
+ "finite_contract_identity_sha256": (
86
+ self.finite_contract_identity_sha256
87
+ ),
88
+ "eligible_global_row_indices": list(
89
+ self.eligible_global_row_indices
90
+ ),
91
+ }
92
+
93
+ @property
94
+ def payload_sha256(self) -> str:
95
+ return hashlib.sha256(_canonical_json(self.payload_record())).hexdigest()
96
+
97
+ @property
98
+ def mask_sha256(self) -> str:
99
+ return _hash(_ELIGIBLE_ROW_MASK_FRAMING, self.payload_record())
100
+
101
+ def to_record(self) -> dict[str, object]:
102
+ return {
103
+ "domain": ELIGIBLE_ROW_MASK_DOMAIN,
104
+ "payload": self.payload_record(),
105
+ "payload_sha256": self.payload_sha256,
106
+ "digest_sha256": self.mask_sha256,
107
+ }
108
+
109
+ def __eq__(self, other: object) -> bool:
110
+ return (
111
+ type(other) is ExactEligibleRowMask
112
+ and self.mask_sha256 == other.mask_sha256
113
+ )
114
+
115
+ __hash__ = None
116
+
117
+
118
+ @dataclass(frozen=True, slots=True, eq=False)
119
+ class PairedBlockSchedulePolicyBinding:
120
+ """Exact public algorithm and rank-domain identity used by a schedule."""
121
+
122
+ policy_id: str
123
+ policy_version: int
124
+ policy_definition_sha256: str
125
+ rank_domain: str
126
+
127
+ def __post_init__(self) -> None:
128
+ _require_identifier(self.policy_id, "policy_id")
129
+ if type(self.policy_version) is not int or self.policy_version <= 0:
130
+ raise ValueError("policy_version must be a positive exact integer")
131
+ require_sha256(self.policy_definition_sha256, "policy_definition_sha256")
132
+ _require_identifier(self.rank_domain, "rank_domain")
133
+
134
+ def _unsigned_record(self) -> dict[str, object]:
135
+ self.__post_init__()
136
+ return {
137
+ "schema_version": 1,
138
+ "policy_id": self.policy_id,
139
+ "policy_version": self.policy_version,
140
+ "policy_definition_sha256": self.policy_definition_sha256,
141
+ "rank_domain": self.rank_domain,
142
+ }
143
+
144
+ @property
145
+ def binding_sha256(self) -> str:
146
+ return _hash(_POLICY_BINDING_FRAMING, self._unsigned_record())
147
+
148
+ def to_record(self) -> dict[str, object]:
149
+ return {**self._unsigned_record(), "binding_sha256": self.binding_sha256}
150
+
151
+ def __eq__(self, other: object) -> bool:
152
+ return (
153
+ type(other) is PairedBlockSchedulePolicyBinding
154
+ and self.binding_sha256 == other.binding_sha256
155
+ )
156
+
157
+ __hash__ = None
158
+
159
+
160
+ @dataclass(frozen=True, slots=True, eq=False)
161
+ class CanonicalBlockIdentity:
162
+ """One canonical, contiguous block in a complete benchmark partition."""
163
+
164
+ block_index: int
165
+ block_spec_sha256: str
166
+ global_row_start: int
167
+ global_row_stop: int
168
+
169
+ def __post_init__(self) -> None:
170
+ if type(self.block_index) is not int or self.block_index < 0:
171
+ raise ValueError("block_index must be a non-negative exact integer")
172
+ require_sha256(self.block_spec_sha256, "block_spec_sha256")
173
+ if type(self.global_row_start) is not int or self.global_row_start < 0:
174
+ raise ValueError(
175
+ "global_row_start must be a non-negative exact integer"
176
+ )
177
+ if (
178
+ type(self.global_row_stop) is not int
179
+ or self.global_row_stop <= self.global_row_start
180
+ ):
181
+ raise ValueError("global_row_stop must be greater than global_row_start")
182
+
183
+ def _unsigned_record(self) -> dict[str, object]:
184
+ self.__post_init__()
185
+ return {
186
+ "schema_version": 1,
187
+ "block_index": self.block_index,
188
+ "block_spec_sha256": self.block_spec_sha256,
189
+ "global_row_start": self.global_row_start,
190
+ "global_row_stop": self.global_row_stop,
191
+ }
192
+
193
+ @property
194
+ def identity_sha256(self) -> str:
195
+ return _hash(_BLOCK_IDENTITY_FRAMING, self._unsigned_record())
196
+
197
+ def to_record(self) -> dict[str, object]:
198
+ return {
199
+ **self._unsigned_record(),
200
+ "block_identity_sha256": self.identity_sha256,
201
+ }
202
+
203
+ def __eq__(self, other: object) -> bool:
204
+ return (
205
+ type(other) is CanonicalBlockIdentity
206
+ and self.identity_sha256 == other.identity_sha256
207
+ )
208
+
209
+ __hash__ = None
210
+
211
+
212
+ @dataclass(frozen=True, slots=True, eq=False)
213
+ class PairedBlockScheduleRequest:
214
+ """Closed, method-independent input for one replicate's block assignment."""
215
+
216
+ benchmark_id: str
217
+ task_sha256: str
218
+ finite_contract_identity_sha256: str
219
+ partition_layout_sha256: str
220
+ policy: PairedBlockSchedulePolicyBinding
221
+ eligible_mask: ExactEligibleRowMask
222
+ public_seed: int
223
+ public_seed_source_sha256: str
224
+ blocks: tuple[CanonicalBlockIdentity, ...]
225
+ replicate_index: int
226
+
227
+ def __post_init__(self) -> None:
228
+ _require_identifier(self.benchmark_id, "benchmark_id")
229
+ require_sha256(self.task_sha256, "task_sha256")
230
+ require_sha256(
231
+ self.finite_contract_identity_sha256,
232
+ "finite_contract_identity_sha256",
233
+ )
234
+ require_sha256(self.partition_layout_sha256, "partition_layout_sha256")
235
+ if type(self.policy) is not PairedBlockSchedulePolicyBinding:
236
+ raise TypeError(
237
+ "policy must be an exact PairedBlockSchedulePolicyBinding"
238
+ )
239
+ self.policy.__post_init__()
240
+ if type(self.eligible_mask) is not ExactEligibleRowMask:
241
+ raise TypeError("eligible_mask must be an exact ExactEligibleRowMask")
242
+ self.eligible_mask.__post_init__()
243
+ if (
244
+ self.eligible_mask.finite_contract_identity_sha256
245
+ != self.finite_contract_identity_sha256
246
+ ):
247
+ raise ValueError("eligible mask names another finite contract")
248
+ if (
249
+ type(self.public_seed) is not int
250
+ or self.public_seed < 0
251
+ or self.public_seed > _UINT64_MAX
252
+ ):
253
+ raise ValueError("public_seed must be an unsigned 64-bit exact integer")
254
+ require_sha256(
255
+ self.public_seed_source_sha256,
256
+ "public_seed_source_sha256",
257
+ )
258
+ if type(self.blocks) is not tuple or not self.blocks:
259
+ raise ValueError("blocks must be a non-empty exact tuple")
260
+ if any(type(value) is not CanonicalBlockIdentity for value in self.blocks):
261
+ raise TypeError("blocks must contain exact CanonicalBlockIdentity values")
262
+ for value in self.blocks:
263
+ value.__post_init__()
264
+
265
+ canonical = tuple(sorted(self.blocks, key=lambda value: value.block_index))
266
+ if len({value.identity_sha256 for value in canonical}) != len(canonical):
267
+ raise ValueError("canonical block identities cannot repeat")
268
+ cursor = 0
269
+ for expected_index, block in enumerate(canonical):
270
+ if block.block_index != expected_index:
271
+ raise ValueError("block indices must be contiguous canonical positions")
272
+ if block.global_row_start != cursor:
273
+ raise ValueError("blocks must provide gap-free, overlap-free coverage")
274
+ cursor = block.global_row_stop
275
+ object.__setattr__(self, "blocks", canonical)
276
+
277
+ if any(
278
+ value >= cursor
279
+ for value in self.eligible_mask.eligible_global_row_indices
280
+ ):
281
+ raise ValueError("eligible mask contains a row outside the block partition")
282
+ if (
283
+ type(self.replicate_index) is not int
284
+ or self.replicate_index < 0
285
+ or self.replicate_index >= len(canonical)
286
+ ):
287
+ raise ValueError(
288
+ "replicate_index must be an exact integer within the no-replacement schedule"
289
+ )
290
+
291
+ @property
292
+ def block_count(self) -> int:
293
+ return len(self.blocks)
294
+
295
+ def schedule_basis_record(self) -> dict[str, object]:
296
+ self.__post_init__()
297
+ return {
298
+ "schema_version": 2,
299
+ "benchmark_id": self.benchmark_id,
300
+ "task_sha256": self.task_sha256,
301
+ "finite_contract_identity_sha256": (
302
+ self.finite_contract_identity_sha256
303
+ ),
304
+ "partition_layout_sha256": self.partition_layout_sha256,
305
+ "eligible_mask_sha256": self.eligible_mask.mask_sha256,
306
+ "public_seed": self.public_seed,
307
+ "block_count": self.block_count,
308
+ }
309
+
310
+ def _unsigned_record(self) -> dict[str, object]:
311
+ return {
312
+ "schema_version": 2,
313
+ "policy": self.policy.to_record(),
314
+ "schedule_basis": self.schedule_basis_record(),
315
+ "eligible_mask": self.eligible_mask.to_record(),
316
+ "public_seed_source_sha256": self.public_seed_source_sha256,
317
+ "canonical_blocks": [value.to_record() for value in self.blocks],
318
+ "replicate_index": self.replicate_index,
319
+ }
320
+
321
+ @property
322
+ def request_sha256(self) -> str:
323
+ return _hash(_REQUEST_FRAMING, self._unsigned_record())
324
+
325
+ def to_record(self) -> dict[str, object]:
326
+ return {**self._unsigned_record(), "request_sha256": self.request_sha256}
327
+
328
+ def __eq__(self, other: object) -> bool:
329
+ return (
330
+ type(other) is PairedBlockScheduleRequest
331
+ and self.request_sha256 == other.request_sha256
332
+ )
333
+
334
+ __hash__ = None
335
+
336
+
337
+ @dataclass(frozen=True, slots=True)
338
+ class RankedBlockIdentity:
339
+ """One block's immutable position in a hash-ranked full schedule."""
340
+
341
+ schedule_position: int
342
+ block: CanonicalBlockIdentity
343
+ rank_digest_sha256: str
344
+
345
+ def __post_init__(self) -> None:
346
+ if type(self.schedule_position) is not int or self.schedule_position < 0:
347
+ raise ValueError(
348
+ "schedule_position must be a non-negative exact integer"
349
+ )
350
+ if type(self.block) is not CanonicalBlockIdentity:
351
+ raise TypeError("block must be an exact CanonicalBlockIdentity")
352
+ self.block.__post_init__()
353
+ require_sha256(self.rank_digest_sha256, "rank_digest_sha256")
354
+
355
+ def to_record(self) -> dict[str, object]:
356
+ self.__post_init__()
357
+ return {
358
+ "schema_version": 1,
359
+ "schedule_position": self.schedule_position,
360
+ "block": self.block.to_record(),
361
+ "rank_digest_sha256": self.rank_digest_sha256,
362
+ }
363
+
364
+
365
+ @dataclass(frozen=True, slots=True, eq=False)
366
+ class PairedBlockScheduleResult:
367
+ """Authenticated complete schedule and one replicate's selected block."""
368
+
369
+ request: PairedBlockScheduleRequest
370
+ ranked_blocks: tuple[RankedBlockIdentity, ...]
371
+
372
+ def __post_init__(self) -> None:
373
+ if type(self.request) is not PairedBlockScheduleRequest:
374
+ raise TypeError("request must be an exact PairedBlockScheduleRequest")
375
+ self.request.__post_init__()
376
+ if type(self.ranked_blocks) is not tuple or len(self.ranked_blocks) != (
377
+ self.request.block_count
378
+ ):
379
+ raise ValueError("ranked_blocks must cover the complete block schedule")
380
+ if any(type(value) is not RankedBlockIdentity for value in self.ranked_blocks):
381
+ raise TypeError("ranked_blocks must contain exact RankedBlockIdentity values")
382
+ for expected_position, value in enumerate(self.ranked_blocks):
383
+ value.__post_init__()
384
+ if value.schedule_position != expected_position:
385
+ raise ValueError("ranked blocks must use canonical schedule positions")
386
+ if tuple(
387
+ sorted(value.block.identity_sha256 for value in self.ranked_blocks)
388
+ ) != tuple(sorted(value.identity_sha256 for value in self.request.blocks)):
389
+ raise ValueError("ranked blocks differ from the complete request partition")
390
+ if tuple(
391
+ (value.rank_digest_sha256, value.block.block_index)
392
+ for value in self.ranked_blocks
393
+ ) != tuple(
394
+ sorted(
395
+ (
396
+ value.rank_digest_sha256,
397
+ value.block.block_index,
398
+ )
399
+ for value in self.ranked_blocks
400
+ )
401
+ ):
402
+ raise ValueError("ranked blocks are not in canonical hash-rank order")
403
+
404
+ @property
405
+ def block_schedule(self) -> tuple[int, ...]:
406
+ return tuple(value.block.block_index for value in self.ranked_blocks)
407
+
408
+ def full_schedule_record(self) -> dict[str, object]:
409
+ self.__post_init__()
410
+ return {
411
+ "schema_version": 2,
412
+ "policy": self.request.policy.to_record(),
413
+ "schedule_basis": self.request.schedule_basis_record(),
414
+ "public_seed_source_sha256": (
415
+ self.request.public_seed_source_sha256
416
+ ),
417
+ "ranked_blocks": [value.to_record() for value in self.ranked_blocks],
418
+ "block_schedule": list(self.block_schedule),
419
+ }
420
+
421
+ @property
422
+ def full_schedule_sha256(self) -> str:
423
+ return _hash(_FULL_SCHEDULE_FRAMING, self.full_schedule_record())
424
+
425
+ @property
426
+ def selected_ranked_block(self) -> RankedBlockIdentity:
427
+ return self.ranked_blocks[self.request.replicate_index]
428
+
429
+ def selected_block_record(self) -> dict[str, object]:
430
+ selected = self.selected_ranked_block
431
+ return {
432
+ "schema_version": 2,
433
+ "request_sha256": self.request.request_sha256,
434
+ "full_schedule_sha256": self.full_schedule_sha256,
435
+ "replicate_index": self.request.replicate_index,
436
+ "schedule_position": selected.schedule_position,
437
+ "selected_block": selected.block.to_record(),
438
+ "rank_digest_sha256": selected.rank_digest_sha256,
439
+ }
440
+
441
+ @property
442
+ def selected_block_receipt_sha256(self) -> str:
443
+ return _hash(_SELECTED_BLOCK_FRAMING, self.selected_block_record())
444
+
445
+ def to_record(self) -> dict[str, object]:
446
+ return {
447
+ "schema_version": 2,
448
+ "request": self.request.to_record(),
449
+ "full_schedule": self.full_schedule_record(),
450
+ "full_schedule_sha256": self.full_schedule_sha256,
451
+ "selection": self.selected_block_record(),
452
+ "selected_block_receipt_sha256": (
453
+ self.selected_block_receipt_sha256
454
+ ),
455
+ }
456
+
457
+ def __eq__(self, other: object) -> bool:
458
+ return (
459
+ type(other) is PairedBlockScheduleResult
460
+ and self.selected_block_receipt_sha256
461
+ == other.selected_block_receipt_sha256
462
+ )
463
+
464
+ __hash__ = None
465
+
466
+
467
+ __all__ = [
468
+ "CanonicalBlockIdentity",
469
+ "ELIGIBLE_ROW_MASK_DOMAIN",
470
+ "ExactEligibleRowMask",
471
+ "PairedBlockSchedulePolicyBinding",
472
+ "PairedBlockScheduleRequest",
473
+ "PairedBlockScheduleResult",
474
+ "RankedBlockIdentity",
475
+ ]