solverpilot 0.2__tar.gz → 0.3__tar.gz

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 (282) hide show
  1. solverpilot-0.3/BACKEND-CONTRACT-V0_3_0.json +43 -0
  2. {solverpilot-0.2 → solverpilot-0.3}/CHANGELOG.md +16 -0
  3. {solverpilot-0.2 → solverpilot-0.3}/KNOWN-LIMITATIONS.md +2 -0
  4. {solverpilot-0.2 → solverpilot-0.3}/MANIFEST.in +5 -0
  5. {solverpilot-0.2 → solverpilot-0.3}/PKG-INFO +2 -2
  6. solverpilot-0.3/PUBLIC-API-V0_3_0.json +475 -0
  7. {solverpilot-0.2 → solverpilot-0.3}/README.md +1 -1
  8. {solverpilot-0.2 → solverpilot-0.3}/docs/api/EXTENDED-MODELING-API.md +2 -0
  9. solverpilot-0.3/docs/release/README-CHECKLIST-0.3.md +11 -0
  10. solverpilot-0.3/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.3.md +230 -0
  11. solverpilot-0.3/examples/18_sensitivity_and_scenarios.py +15 -0
  12. solverpilot-0.3/examples/19_convex_atoms_optional.py +18 -0
  13. solverpilot-0.3/examples/20_streaming_reuse.py +29 -0
  14. solverpilot-0.3/examples/21_checked_run_replay.py +16 -0
  15. {solverpilot-0.2 → solverpilot-0.3}/examples/README.md +7 -0
  16. {solverpilot-0.2 → solverpilot-0.3}/pyproject.toml +9 -1
  17. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/__init__.py +1 -1
  18. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/_version.py +1 -1
  19. solverpilot-0.3/src/solverpilot/analysis.py +271 -0
  20. solverpilot-0.3/src/solverpilot/applications/__init__.py +4 -0
  21. solverpilot-0.3/src/solverpilot/applications/templates.py +133 -0
  22. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/osqp_native.py +24 -7
  23. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/validation.py +5 -1
  24. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cli/capabilities.py +17 -2
  25. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/backend.py +34 -3
  26. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/clarabel_backend.py +73 -9
  27. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/orchestrator.py +7 -0
  28. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/__init__.py +2 -0
  29. solverpilot-0.3/src/solverpilot/model/affine.py +135 -0
  30. solverpilot-0.3/src/solverpilot/model/atoms.py +316 -0
  31. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/compiler.py +27 -3
  32. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/convenience.py +3 -1
  33. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/model.py +21 -2
  34. solverpilot-0.3/src/solverpilot/model/robust.py +52 -0
  35. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/backend.py +21 -3
  36. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/ir.py +17 -0
  37. solverpilot-0.3/src/solverpilot/py.typed +0 -0
  38. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/__init__.py +4 -0
  39. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/auto.py +1 -0
  40. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/batch.py +34 -1
  41. solverpilot-0.3/src/solverpilot/runtime/batch_stream.py +301 -0
  42. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/budgeting.py +32 -1
  43. solverpilot-0.3/src/solverpilot/runtime/catalog.py +67 -0
  44. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/executor.py +3 -1
  45. solverpilot-0.3/src/solverpilot/runtime/manifest.py +179 -0
  46. solverpilot-0.3/src/solverpilot/runtime/options.py +50 -0
  47. solverpilot-0.3/src/solverpilot/runtime/specialized.py +49 -0
  48. solverpilot-0.3/src/solverpilot/runtime/unified.py +176 -0
  49. solverpilot-0.3/src/solverpilot/scenarios.py +69 -0
  50. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/reoptimization.py +11 -0
  51. solverpilot-0.3/src/solverpilot/validate/_certificate_arithmetic.py +51 -0
  52. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/validate/optimality.py +51 -17
  53. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot.egg-info/PKG-INFO +2 -2
  54. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot.egg-info/SOURCES.txt +22 -0
  55. solverpilot-0.2/src/solverpilot/applications/__init__.py +0 -3
  56. {solverpilot-0.2 → solverpilot-0.3}/BACKEND-CONTRACT-V0_1_0.json +0 -0
  57. {solverpilot-0.2 → solverpilot-0.3}/BACKEND-CONTRACT-V0_1_0RC2.json +0 -0
  58. {solverpilot-0.2 → solverpilot-0.3}/BACKEND-CONTRACT-V0_2_0.json +0 -0
  59. {solverpilot-0.2 → solverpilot-0.3}/CONTRIBUTING.md +0 -0
  60. {solverpilot-0.2 → solverpilot-0.3}/LICENSE +0 -0
  61. {solverpilot-0.2 → solverpilot-0.3}/PRE-PUBLIC-RELEASE-AUDIT-0.1.0rc2.json +0 -0
  62. {solverpilot-0.2 → solverpilot-0.3}/PRE-PUBLIC-RELEASE-VERIFICATION-0.1.0rc2.md +0 -0
  63. {solverpilot-0.2 → solverpilot-0.3}/PUBLIC-API-V0_1_0.json +0 -0
  64. {solverpilot-0.2 → solverpilot-0.3}/PUBLIC-API-V0_1_0RC2.json +0 -0
  65. {solverpilot-0.2 → solverpilot-0.3}/PUBLIC-API-V0_2_0.json +0 -0
  66. {solverpilot-0.2 → solverpilot-0.3}/RELEASING.md +0 -0
  67. {solverpilot-0.2 → solverpilot-0.3}/SECURITY.md +0 -0
  68. {solverpilot-0.2 → solverpilot-0.3}/TRACK-P-MERGE-PROVENANCE.json +0 -0
  69. {solverpilot-0.2 → solverpilot-0.3}/docs/api/PUBLIC-API-v1.md +0 -0
  70. {solverpilot-0.2 → solverpilot-0.3}/docs/release/OWNER-PUBLICATION-DECISIONS.md +0 -0
  71. {solverpilot-0.2 → solverpilot-0.3}/docs/release/PRE-GITHUB-HARDENING.md +0 -0
  72. {solverpilot-0.2 → solverpilot-0.3}/docs/release/PRE-GITHUB-LICENSE-DECISION.md +0 -0
  73. {solverpilot-0.2 → solverpilot-0.3}/docs/release/README-CHECKLIST-0.1.0RC2.md +0 -0
  74. {solverpilot-0.2 → solverpilot-0.3}/docs/release/README-CHECKLIST-0.1.md +0 -0
  75. {solverpilot-0.2 → solverpilot-0.3}/docs/release/README-CHECKLIST-0.2.md +0 -0
  76. {solverpilot-0.2 → solverpilot-0.3}/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.1.0RC2.md +0 -0
  77. {solverpilot-0.2 → solverpilot-0.3}/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.1.md +0 -0
  78. {solverpilot-0.2 → solverpilot-0.3}/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.2.md +0 -0
  79. {solverpilot-0.2 → solverpilot-0.3}/examples/01_lp_basic.py +0 -0
  80. {solverpilot-0.2 → solverpilot-0.3}/examples/02_milp_binary.py +0 -0
  81. {solverpilot-0.2 → solverpilot-0.3}/examples/03_qp_convex.py +0 -0
  82. {solverpilot-0.2 → solverpilot-0.3}/examples/04_choose_backend.py +0 -0
  83. {solverpilot-0.2 → solverpilot-0.3}/examples/05_infeasible.py +0 -0
  84. {solverpilot-0.2 → solverpilot-0.3}/examples/06_validation_diagnostics.py +0 -0
  85. {solverpilot-0.2 → solverpilot-0.3}/examples/07_reoptimization_session.py +0 -0
  86. {solverpilot-0.2 → solverpilot-0.3}/examples/08_semantic_model.py +0 -0
  87. {solverpilot-0.2 → solverpilot-0.3}/examples/09_conic_model.py +0 -0
  88. {solverpilot-0.2 → solverpilot-0.3}/examples/10_nlp_optional.py +0 -0
  89. {solverpilot-0.2 → solverpilot-0.3}/examples/11_minlp_optional.py +0 -0
  90. {solverpilot-0.2 → solverpilot-0.3}/examples/12_cp_reference.py +0 -0
  91. {solverpilot-0.2 → solverpilot-0.3}/examples/13_cp_sat_optional.py +0 -0
  92. {solverpilot-0.2 → solverpilot-0.3}/examples/14_persistent_session_optional.py +0 -0
  93. {solverpilot-0.2 → solverpilot-0.3}/examples/15_named_model_and_quality.py +0 -0
  94. {solverpilot-0.2 → solverpilot-0.3}/examples/16_direct_conic.py +0 -0
  95. {solverpilot-0.2 → solverpilot-0.3}/examples/17_batch_scenarios.py +0 -0
  96. {solverpilot-0.2 → solverpilot-0.3}/setup.cfg +0 -0
  97. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/_immutability.py +0 -0
  98. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/_synchronization.py +0 -0
  99. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/__init__.py +0 -0
  100. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/compile_milp.py +0 -0
  101. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/diagnostics.py +0 -0
  102. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/errors.py +0 -0
  103. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/heuristics.py +0 -0
  104. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/model.py +0 -0
  105. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/reference.py +0 -0
  106. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/solution.py +0 -0
  107. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/timeline.py +0 -0
  108. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/routing/validation.py +0 -0
  109. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/__init__.py +0 -0
  110. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/compile_cp.py +0 -0
  111. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/compile_milp.py +0 -0
  112. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/distance.py +0 -0
  113. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/errors.py +0 -0
  114. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/heuristics.py +0 -0
  115. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/model.py +0 -0
  116. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/reference.py +0 -0
  117. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/solution.py +0 -0
  118. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/applications/tsp/validation.py +0 -0
  119. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/__init__.py +0 -0
  120. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/_casadi_highs_worker.py +0 -0
  121. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/base.py +0 -0
  122. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/bundled_capi.py +0 -0
  123. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/casadi_conic.py +0 -0
  124. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/health.py +0 -0
  125. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/highspy_native.py +0 -0
  126. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/metadata.py +0 -0
  127. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/nlopt_native.py +0 -0
  128. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/protocol_v2.py +0 -0
  129. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/pyscipopt_native.py +0 -0
  130. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/registry.py +0 -0
  131. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/scipy_highs.py +0 -0
  132. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/scipy_highs_lp.py +0 -0
  133. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/scipy_slsqp_qp.py +0 -0
  134. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/backends/scipy_vendored_highs_dev.py +0 -0
  135. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/__init__.py +0 -0
  136. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/acquire.py +0 -0
  137. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/baselines.py +0 -0
  138. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/bundle.py +0 -0
  139. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/campaign.py +0 -0
  140. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/environment.py +0 -0
  141. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/integrity.py +0 -0
  142. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/model.py +0 -0
  143. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/policy.py +0 -0
  144. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/registry.py +0 -0
  145. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/report.py +0 -0
  146. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/runner.py +0 -0
  147. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/slurm.py +0 -0
  148. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/specs.py +0 -0
  149. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/splits.py +0 -0
  150. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/summary.py +0 -0
  151. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/verify.py +0 -0
  152. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/benchmark/worker.py +0 -0
  153. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/__init__.py +0 -0
  154. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/engine.py +0 -0
  155. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/indicator.py +0 -0
  156. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/registry.py +0 -0
  157. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/transformation-tape.schema.json +0 -0
  158. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/bridges/types.py +0 -0
  159. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/__init__.py +0 -0
  160. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/backend-capability-v2.schema.json +0 -0
  161. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/conformance.py +0 -0
  162. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/enums.py +0 -0
  163. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/manifest.py +0 -0
  164. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/ontology.py +0 -0
  165. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/requirements.py +0 -0
  166. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/resolve.py +0 -0
  167. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/capabilities/v2.py +0 -0
  168. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cli/__init__.py +0 -0
  169. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cli/backend_health.py +0 -0
  170. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cli/benchmark.py +0 -0
  171. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cli/benchmark_worker.py +0 -0
  172. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/__init__.py +0 -0
  173. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/compiler.py +0 -0
  174. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/conformance.py +0 -0
  175. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/conic-ir-v1.schema.json +0 -0
  176. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/ir.py +0 -0
  177. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/conic/validation.py +0 -0
  178. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/__init__.py +0 -0
  179. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/conformance.py +0 -0
  180. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/cp-ir-v1.schema.json +0 -0
  181. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/ir.py +0 -0
  182. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/model.py +0 -0
  183. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/ortools_backend.py +0 -0
  184. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/ortools_worker.py +0 -0
  185. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/reference.py +0 -0
  186. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/serialization.py +0 -0
  187. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/cp/validate.py +0 -0
  188. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/diagnose/__init__.py +0 -0
  189. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/diagnose/infeasibility.py +0 -0
  190. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/diagnose/model.py +0 -0
  191. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/evaluation/__init__.py +0 -0
  192. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/evaluation/metrics.py +0 -0
  193. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/evaluation/oracle.py +0 -0
  194. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/evaluation/proof.py +0 -0
  195. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/evaluation/references.py +0 -0
  196. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/evaluation/regret.py +0 -0
  197. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/exceptions.py +0 -0
  198. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/experimental/__init__.py +0 -0
  199. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/__init__.py +0 -0
  200. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/entrypoints.py +0 -0
  201. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/errors.py +0 -0
  202. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/manager.py +0 -0
  203. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/manifest.py +0 -0
  204. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/model.py +0 -0
  205. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/extensions/versioning.py +0 -0
  206. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/history/__init__.py +0 -0
  207. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/history/errors.py +0 -0
  208. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/history/model.py +0 -0
  209. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/history/sqlite.py +0 -0
  210. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/inspect/__init__.py +0 -0
  211. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/inspect/fingerprint.py +0 -0
  212. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/intelligence/__init__.py +0 -0
  213. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/intelligence/errors.py +0 -0
  214. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/intelligence/fingerprint.py +0 -0
  215. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/intelligence/leakage.py +0 -0
  216. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/intelligence/schema.py +0 -0
  217. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/intelligence/shift.py +0 -0
  218. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/__init__.py +0 -0
  219. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/binary64.py +0 -0
  220. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/csv.py +0 -0
  221. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/errors.py +0 -0
  222. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/hashing.py +0 -0
  223. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/json.py +0 -0
  224. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/mapping.py +0 -0
  225. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/model.py +0 -0
  226. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/numeric.py +0 -0
  227. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/provenance.py +0 -0
  228. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/result.py +0 -0
  229. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/source.py +0 -0
  230. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/io/strict_json.py +0 -0
  231. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/__init__.py +0 -0
  232. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/compiler.py +0 -0
  233. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/conformance.py +0 -0
  234. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/convexity.py +0 -0
  235. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/ir.py +0 -0
  236. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/minlp-ir-v1.schema.json +0 -0
  237. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/minlp/validation.py +0 -0
  238. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/errors.py +0 -0
  239. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/expression.py +0 -0
  240. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/sets.py +0 -0
  241. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/model/types.py +0 -0
  242. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/__init__.py +0 -0
  243. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/ad.py +0 -0
  244. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/compiler.py +0 -0
  245. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/conformance.py +0 -0
  246. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/nlp-ir-v1.schema.json +0 -0
  247. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/nlp/validation.py +0 -0
  248. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/plan/__init__.py +0 -0
  249. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/plan/model.py +0 -0
  250. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/plan/planner.py +0 -0
  251. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/plan/production.py +0 -0
  252. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/plan/selective_lp.py +0 -0
  253. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/problem/__init__.py +0 -0
  254. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/problem/enums.py +0 -0
  255. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/problem/hashing.py +0 -0
  256. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/problem/linear.py +0 -0
  257. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/problem/mps.py +0 -0
  258. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/problem/quadratic.py +0 -0
  259. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/reporting/__init__.py +0 -0
  260. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/reporting/explain.py +0 -0
  261. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/reporting/model.py +0 -0
  262. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/reporting/quality.py +0 -0
  263. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/reporting/render.py +0 -0
  264. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/multiobjective.py +0 -0
  265. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/portfolio.py +0 -0
  266. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/runtime/result.py +0 -0
  267. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/__init__.py +0 -0
  268. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/conformance_v2.py +0 -0
  269. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/mutations.py +0 -0
  270. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/persistent-session-trace.schema.json +0 -0
  271. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/persistent.py +0 -0
  272. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/reuse.py +0 -0
  273. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/session/session.py +0 -0
  274. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/trace/__init__.py +0 -0
  275. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/trace/schema.py +0 -0
  276. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/validate/__init__.py +0 -0
  277. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/validate/core.py +0 -0
  278. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot/validate/result.py +0 -0
  279. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot.egg-info/dependency_links.txt +0 -0
  280. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot.egg-info/entry_points.txt +0 -0
  281. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot.egg-info/requires.txt +0 -0
  282. {solverpilot-0.2 → solverpilot-0.3}/src/solverpilot.egg-info/top_level.txt +0 -0
@@ -0,0 +1,43 @@
1
+ {
2
+ "milestone": "RELEASE_0_3",
3
+ "notes": [
4
+ "Backend IDs remain stable across the SolverPilot pre-GitHub cleanup.",
5
+ "Verification-only adapters are never admitted to the default solving registry.",
6
+ "Availability of optional public backends remains environment-dependent.",
7
+ "The legacy optimind Python package is not shipped in SolverPilot 0.1.",
8
+ "Clarabel has a separate conic capability/conformance surface; it is not an LP/MILP registry entry.",
9
+ "Unified catalog includes specialized conic/NLP/CP adapters; the legacy LP/QP registry remains compatible."
10
+ ],
11
+ "package_version": "0.3",
12
+ "production_baseline_policy": {
13
+ "convex_qp": "osqp-native when available; otherwise scipy-slsqp-qp-bridge for non-proof intents",
14
+ "learned_lp_performance_routing": false,
15
+ "lp": "scipy-highs-ds",
16
+ "milp": "scipy-highs-bridge"
17
+ },
18
+ "schema": "solverpilot.backend_contract.v1",
19
+ "stable_backend_ids": {
20
+ "base_runtime": [
21
+ "scipy-highs-ds",
22
+ "scipy-highs-ipm",
23
+ "scipy-highs-bridge",
24
+ "scipy-slsqp-qp-bridge"
25
+ ],
26
+ "optional_public": [
27
+ "highspy-native",
28
+ "osqp-native",
29
+ "pyscipopt-native",
30
+ "nlopt-slsqp-native"
31
+ ],
32
+ "verification_only": [
33
+ "casadi-osqp-bridge",
34
+ "casadi-highs-bridge",
35
+ "casadi-cbc-bridge",
36
+ "bundled-osqp-capi",
37
+ "bundled-highs-capi"
38
+ ]
39
+ },
40
+ "optional_conic_backends": [
41
+ "clarabel-native"
42
+ ]
43
+ }
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3 — Numerical trust, sparse modeling and scenario analysis
4
+
5
+ - Correct Farkas, recession and LP/QP optimality checks using domain-aware bounds and exact operations on represented binary64 coefficients. Bound free QP residuals when a conservative strong-convexity bound is available.
6
+ - Restore OSQP defaults when optional settings are cleared, and preserve owned solver workspaces under call-local budgets.
7
+ - Reject cross-model conic results and freeze conic, NLP and MINLP result payloads.
8
+ - Lower affine expressions in CSR blocks, retain sparse constants and cache unchanged affine subexpressions across parameter updates.
9
+ - Add checked convex abs/norm/Huber/log-sum-exp/quad-form graphs with semantic variable reconstruction.
10
+ - Add bounded streaming batches, persistent restartable workers and an explicit sequential mode. Retain isolated-per-job compatibility mode.
11
+ - Add opt-in Clarabel data reuse, iteration progress, cooperative cancellation and raw dual/slack snapshots; expose common time/tolerance controls.
12
+ - Add a common result view, strict verified solves, a unified backend catalog and Clarabel CLI conformance.
13
+ - Add named canonical shadow prices, parameter marginals, regular QP directional derivatives and model scaling diagnostics.
14
+ - Add lazy independent scenario sweeps, box-robust constraints, finite-scenario minimax objectives and four transparent application templates.
15
+ - Add opt-in JSON model/run replay with effective backend configuration, version and data-hash checks.
16
+ - Add adversarial scale/permutation regressions, typed common API checks and a required optional-integration coverage floor.
17
+ - Preserve the historical 78-name top-level signatures and previous release evidence.
18
+
3
19
  ## 0.2 — Runtime, modeling and direct conic upgrade
4
20
 
5
21
  - Serialize process start/close across concurrent batches to prevent the Windows child-handle race found during release qualification.
@@ -1,5 +1,7 @@
1
1
  # Known limitations — 0.2
2
2
 
3
+ Version 0.3 adds checked convex atoms, sparse affine lowering, bounded streaming, sensitivity and scenarios. See the current [0.3 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.3.md) for guarantees and remaining scope limits.
4
+
3
5
  ## Numerical evidence
4
6
 
5
7
  Primal validation is independent of backend termination. Continuous LP/QP duals from SciPy LP, native HiGHS and OSQP can additionally be checked for stationarity, complementarity and numerical gap. These are tolerance-qualified checks, not exact-arithmetic proofs. MILP/global nonlinear optimality is not proved by primal feasibility. Backend-only infeasible/unbounded statuses remain claims unless a certificate is checked.
@@ -38,3 +38,8 @@ include PUBLIC-API-V0_2_0.json
38
38
  include BACKEND-CONTRACT-V0_2_0.json
39
39
  include docs/release/SOLVERPILOT-PUBLIC-DOCS-0.2.md
40
40
  include docs/release/README-CHECKLIST-0.2.md
41
+
42
+ include PUBLIC-API-V0_3_0.json
43
+ include BACKEND-CONTRACT-V0_3_0.json
44
+ include docs/release/SOLVERPILOT-PUBLIC-DOCS-0.3.md
45
+ include docs/release/README-CHECKLIST-0.3.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solverpilot
3
- Version: 0.2
3
+ Version: 0.3
4
4
  Summary: Trust-aware optimization runtime for mathematical and constraint programming in Python
5
5
  Author: Amirhossein Heidari Rashtabad
6
6
  Maintainer: Amirhossein Heidari Rashtabad
@@ -78,7 +78,7 @@ Dynamic: license-file
78
78
 
79
79
  # SolverPilot
80
80
 
81
- > **Current version:** `0.2`. Adds configurable validation, numerical optimality checks, faster preparation, owned reoptimization sessions, bounded batch execution, modeling conveniences and a direct Clarabel conic adapter. Historical `0.1.0rc2` correctness/trust hardening remains in place.
81
+ > **Current version:** `0.3`. Repairs scale-sensitive numerical certificates, preserves sparse model data and solver workspaces, and adds convex atoms, streaming batches, sensitivity, scenarios, robust counterparts and application templates. Historical `0.1.0rc2` correctness/trust hardening remains in place. See the [0.3 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.3.md) for examples and precise guarantees.
82
82
 
83
83
  SolverPilot is a **trust-aware optimization runtime and modeling layer for Python**. It combines a small matrix-first solve API for LP/MILP/convex QP with a higher-level semantic modeling system that can compile into conic, smooth nonlinear, certified convex binary MINLP, and constraint-programming execution paths.
84
84
 
@@ -0,0 +1,475 @@
1
+ {
2
+ "milestone": "RELEASE_0_3",
3
+ "package_version": "0.3",
4
+ "schema": "solverpilot.public_api.v1",
5
+ "symbols": [
6
+ {
7
+ "module": "solverpilot.backends.base",
8
+ "name": "Backend",
9
+ "qualname": "Backend",
10
+ "signature": "(*args, **kwargs)"
11
+ },
12
+ {
13
+ "module": "solverpilot.backends.health",
14
+ "name": "BackendHealthReport",
15
+ "qualname": "BackendHealthReport",
16
+ "signature": "(backend: 'str', version: 'str | None', available: 'bool', status: 'BackendProbeStatus', checks: 'tuple[BackendProbeCheck, ...]', metadata: 'dict[str, object]') -> None"
17
+ },
18
+ {
19
+ "module": "solverpilot.capabilities.manifest",
20
+ "name": "BackendManifest",
21
+ "qualname": "BackendManifest",
22
+ "signature": "(name: 'str', version: 'str | None' = None, capabilities: 'dict[Capability, SupportLevel]' = <factory>, metadata: 'dict[str, object]' = <factory>) -> None"
23
+ },
24
+ {
25
+ "module": "solverpilot.backends.health",
26
+ "name": "BackendProbeCheck",
27
+ "qualname": "BackendProbeCheck",
28
+ "signature": "(capability: 'Capability', passed: 'bool', public_status: 'str | None', validation_valid: 'bool | None', objective: 'float | None', expected_objective: 'float', objective_abs_error: 'float | None', duration_s: 'float', error: 'str | None' = None) -> None"
29
+ },
30
+ {
31
+ "module": "solverpilot.backends.health",
32
+ "name": "BackendProbeStatus",
33
+ "qualname": "BackendProbeStatus",
34
+ "signature": "(*values)"
35
+ },
36
+ {
37
+ "module": "solverpilot.backends.registry",
38
+ "name": "BackendRegistry",
39
+ "qualname": "BackendRegistry",
40
+ "signature": "() -> 'None'"
41
+ },
42
+ {
43
+ "module": "solverpilot.backends.base",
44
+ "name": "BackendSolveResult",
45
+ "qualname": "BackendSolveResult",
46
+ "signature": "(backend_status: 'str', x: 'np.ndarray | None', objective_reported: 'float | None' = None, raw_statistics: 'dict[str, object] | None' = None) -> None"
47
+ },
48
+ {
49
+ "module": "solverpilot.exceptions",
50
+ "name": "BackendUnavailableError",
51
+ "qualname": "BackendUnavailableError",
52
+ "signature": null
53
+ },
54
+ {
55
+ "module": "solverpilot.exceptions",
56
+ "name": "BudgetNotSupportedError",
57
+ "qualname": "BudgetNotSupportedError",
58
+ "signature": null
59
+ },
60
+ {
61
+ "module": "solverpilot.plan.model",
62
+ "name": "CandidatePlan",
63
+ "qualname": "CandidatePlan",
64
+ "signature": "(backend: 'str', score: 'float', rationale: 'tuple[str, ...]', health_status: 'str | None' = None) -> None"
65
+ },
66
+ {
67
+ "module": "solverpilot.validate.result",
68
+ "name": "CandidateSolution",
69
+ "qualname": "CandidateSolution",
70
+ "signature": "(x: 'np.ndarray', objective_reported: 'float | None' = None) -> None"
71
+ },
72
+ {
73
+ "module": "solverpilot.capabilities.enums",
74
+ "name": "Capability",
75
+ "qualname": "Capability",
76
+ "signature": "(*values)"
77
+ },
78
+ {
79
+ "module": "solverpilot.exceptions",
80
+ "name": "CapabilityMismatchError",
81
+ "qualname": "CapabilityMismatchError",
82
+ "signature": null
83
+ },
84
+ {
85
+ "module": "solverpilot.capabilities.requirements",
86
+ "name": "CapabilityRequirements",
87
+ "qualname": "CapabilityRequirements",
88
+ "signature": "(required: 'frozenset[Capability]') -> None"
89
+ },
90
+ {
91
+ "module": "solverpilot.diagnose.model",
92
+ "name": "ConflictAtom",
93
+ "qualname": "ConflictAtom",
94
+ "signature": "(kind: 'ViolationKind', index: 'int') -> None"
95
+ },
96
+ {
97
+ "module": "solverpilot.diagnose.model",
98
+ "name": "ConflictSetResult",
99
+ "qualname": "ConflictSetResult",
100
+ "signature": "(atoms: 'tuple[ConflictAtom, ...]', irreducible: 'bool', complete: 'bool', checks: 'int', solver_status: 'str', message: 'str') -> None"
101
+ },
102
+ {
103
+ "module": "solverpilot.problem.enums",
104
+ "name": "ConvexityStatus",
105
+ "qualname": "ConvexityStatus",
106
+ "signature": "(*values)"
107
+ },
108
+ {
109
+ "module": "solverpilot.diagnose.model",
110
+ "name": "DiagnosticIssue",
111
+ "qualname": "DiagnosticIssue",
112
+ "signature": "(kind: 'ViolationKind', index: 'int', message: 'str', amount: 'float | None' = None) -> None"
113
+ },
114
+ {
115
+ "module": "solverpilot.inspect.fingerprint",
116
+ "name": "DistributionStats",
117
+ "qualname": "DistributionStats",
118
+ "signature": "(minimum: 'float', q25: 'float', median: 'float', mean: 'float', q75: 'float', maximum: 'float') -> None"
119
+ },
120
+ {
121
+ "module": "solverpilot.diagnose.model",
122
+ "name": "ElasticRelaxationResult",
123
+ "qualname": "ElasticRelaxationResult",
124
+ "signature": "(feasible: 'bool', objective: 'float | None', x: 'np.ndarray | None', violations: 'tuple[RelaxationViolation, ...]', solver_status: 'str', message: 'str') -> None"
125
+ },
126
+ {
127
+ "module": "solverpilot.plan.production",
128
+ "name": "EvidenceClass",
129
+ "qualname": "EvidenceClass",
130
+ "signature": "(*values)"
131
+ },
132
+ {
133
+ "module": "solverpilot.diagnose.model",
134
+ "name": "EvidenceKind",
135
+ "qualname": "EvidenceKind",
136
+ "signature": "(*values)"
137
+ },
138
+ {
139
+ "module": "solverpilot.plan.model",
140
+ "name": "HealthPolicy",
141
+ "qualname": "HealthPolicy",
142
+ "signature": "(*values)"
143
+ },
144
+ {
145
+ "module": "solverpilot.diagnose.model",
146
+ "name": "InfeasibilityReport",
147
+ "qualname": "InfeasibilityReport",
148
+ "signature": "(confirmed_infeasible: 'bool', static_issues: 'tuple[DiagnosticIssue, ...]', iis: 'NormalizedIISEvidence | None', elastic: 'ElasticRelaxationResult | None', conflict: 'ConflictSetResult | None', evidence_order: 'tuple[EvidenceKind, ...]', warnings: 'tuple[str, ...]' = ()) -> None"
149
+ },
150
+ {
151
+ "module": "solverpilot.problem.linear",
152
+ "name": "LinearProblem",
153
+ "qualname": "LinearProblem",
154
+ "signature": "(A: 'sparse.csr_matrix', c: 'np.ndarray', variable_lower: 'np.ndarray', variable_upper: 'np.ndarray', constraint_lower: 'np.ndarray', constraint_upper: 'np.ndarray', domains: 'np.ndarray', objective_sense: 'ObjectiveSense' = <ObjectiveSense.MINIMIZE: 'minimize'>, objective_offset: 'float' = 0.0, name: 'str | None' = None, metadata: 'dict[str, object]' = <factory>) -> None"
155
+ },
156
+ {
157
+ "module": "solverpilot.problem.mps",
158
+ "name": "MPSParseError",
159
+ "qualname": "MPSParseError",
160
+ "signature": null
161
+ },
162
+ {
163
+ "module": "solverpilot.problem.mps",
164
+ "name": "MPSUnsupportedFeatureError",
165
+ "qualname": "MPSUnsupportedFeatureError",
166
+ "signature": null
167
+ },
168
+ {
169
+ "module": "solverpilot.session.mutations",
170
+ "name": "MutationKind",
171
+ "qualname": "MutationKind",
172
+ "signature": "(*values)"
173
+ },
174
+ {
175
+ "module": "solverpilot.session.mutations",
176
+ "name": "MutationRecord",
177
+ "qualname": "MutationRecord",
178
+ "signature": "(revision_before: 'int', revision_after: 'int', kinds: 'tuple[MutationKind, ...]', old_structural_hash: 'str', new_structural_hash: 'str', old_data_hash: 'str', new_data_hash: 'str') -> None"
179
+ },
180
+ {
181
+ "module": "solverpilot.diagnose.model",
182
+ "name": "NormalizedIISEvidence",
183
+ "qualname": "NormalizedIISEvidence",
184
+ "signature": "(backend: 'str', valid: 'bool', row_indices: 'tuple[int, ...]' = (), variable_indices: 'tuple[int, ...]' = (), constraint_names: 'tuple[str, ...]' = (), variable_names: 'tuple[str, ...]' = (), irreducible: 'bool | None' = None, raw_type: 'str | None' = None) -> None"
185
+ },
186
+ {
187
+ "module": "solverpilot.exceptions",
188
+ "name": "NoCompatibleBackendError",
189
+ "qualname": "NoCompatibleBackendError",
190
+ "signature": null
191
+ },
192
+ {
193
+ "module": "solverpilot.problem.enums",
194
+ "name": "ObjectiveSense",
195
+ "qualname": "ObjectiveSense",
196
+ "signature": "(*values)"
197
+ },
198
+ {
199
+ "module": "solverpilot.exceptions",
200
+ "name": "SolverPilotError",
201
+ "qualname": "SolverPilotError",
202
+ "signature": null
203
+ },
204
+ {
205
+ "module": "solverpilot.exceptions",
206
+ "name": "UnknownBackendError",
207
+ "qualname": "UnknownBackendError",
208
+ "signature": null
209
+ },
210
+ {
211
+ "module": "solverpilot.plan.production",
212
+ "name": "PerformancePolicy",
213
+ "qualname": "PerformancePolicy",
214
+ "signature": "(*values)"
215
+ },
216
+ {
217
+ "module": "solverpilot.trace.schema",
218
+ "name": "PhaseTimings",
219
+ "qualname": "PhaseTimings",
220
+ "signature": "(inspect_s: 'float' = 0.0, plan_s: 'float' = 0.0, backend_build_s: 'float' = 0.0, solve_s: 'float' = 0.0, validate_s: 'float' = 0.0, diagnose_s: 'float' = 0.0, total_s: 'float' = 0.0, backend_update_s: 'float' = 0.0, backend_total_s: 'float' = 0.0) -> None"
221
+ },
222
+ {
223
+ "module": "solverpilot.plan.model",
224
+ "name": "PlannerContext",
225
+ "qualname": "PlannerContext",
226
+ "signature": "(previous_backend: 'str | None' = None, session_revision: 'int | None' = None) -> None"
227
+ },
228
+ {
229
+ "module": "solverpilot.runtime.portfolio",
230
+ "name": "PortfolioAttempt",
231
+ "qualname": "PortfolioAttempt",
232
+ "signature": "(backend: 'str', status: 'str | None', objective: 'float | None', validation_valid: 'bool | None', duration_s: 'float', error: 'str | None' = None, skipped_reason: 'str | None' = None) -> None"
233
+ },
234
+ {
235
+ "module": "solverpilot.runtime.portfolio",
236
+ "name": "PortfolioSolveResult",
237
+ "qualname": "PortfolioSolveResult",
238
+ "signature": "(chosen: 'SolveResult | None', attempts: 'tuple[PortfolioAttempt, ...]', total_s: 'float', stopped_reason: 'str', budget_exhausted: 'bool') -> None"
239
+ },
240
+ {
241
+ "module": "solverpilot.inspect.fingerprint",
242
+ "name": "ProblemFingerprint",
243
+ "qualname": "ProblemFingerprint",
244
+ "signature": "(problem_class: 'str', n_variables: 'int', n_constraints: 'int', nnz_a: 'int', density_a: 'float', binary_fraction: 'float', integer_fraction: 'float', equality_fraction: 'float', fully_bounded_variable_fraction: 'float', free_variable_fraction: 'float', objective_nnz_fraction: 'float', coefficient_dynamic_range_log10: 'float | None', objective_dynamic_range_log10: 'float | None', rhs_dynamic_range_log10: 'float | None', row_nnz: 'DistributionStats', col_nnz: 'DistributionStats', singleton_rows: 'int', singleton_cols: 'int', positive_coefficient_fraction: 'float', negative_coefficient_fraction: 'float', quadratic_nnz: 'int | None', quadratic_density: 'float | None', convexity_status: 'str | None', structural_hash: 'str', estimated_numeric_bytes: 'int') -> None"
245
+ },
246
+ {
247
+ "module": "solverpilot.plan.production",
248
+ "name": "ProductionDecision",
249
+ "qualname": "ProductionDecision",
250
+ "signature": "(plan: 'SolvePlan', auto_performance_ranking_enabled: 'bool', evidence: 'ProductionEvidence', conservative_baseline: 'str | None', rationale: 'tuple[str, ...]', rejected_performance_override_reason: 'str | None' = None) -> None"
251
+ },
252
+ {
253
+ "module": "solverpilot.plan.production",
254
+ "name": "ProductionEvidence",
255
+ "qualname": "ProductionEvidence",
256
+ "signature": "(evidence_class: 'EvidenceClass', source: 'str', corpus_integrity_passed: 'bool' = False, outcome_accounting_passed: 'bool' = False, independent_validation_passed: 'bool' = False, reference_crosscheck_passed: 'bool' = False, comparative_backends: 'tuple[str, ...]' = (), heldout: 'bool' = False, feature_cost_accounted: 'bool' = False, fixed_environment: 'bool' = False, public_ood: 'bool' = False, pre_registered_policy: 'bool' = False, selection_opportunity_validated: 'bool' = False, performance_ranking_validated: 'bool' = False, selector_name: 'str | None' = None, notes: 'tuple[str, ...]' = ()) -> None"
257
+ },
258
+ {
259
+ "module": "solverpilot.validate.result",
260
+ "name": "PublicStatus",
261
+ "qualname": "PublicStatus",
262
+ "signature": "(*values)"
263
+ },
264
+ {
265
+ "module": "solverpilot.diagnose.model",
266
+ "name": "RelaxationViolation",
267
+ "qualname": "RelaxationViolation",
268
+ "signature": "(kind: 'ViolationKind', index: 'int', amount: 'float', normalized_amount: 'float') -> None"
269
+ },
270
+ {
271
+ "module": "solverpilot.problem.quadratic",
272
+ "name": "QuadraticProblem",
273
+ "qualname": "QuadraticProblem",
274
+ "signature": "(linear: 'LinearProblem', P: 'sparse.csr_matrix', convexity_status: 'ConvexityStatus' = <ConvexityStatus.UNKNOWN: 'unknown'>, metadata: 'dict[str, object]' = <factory>, *, _verify_convexity: 'InitVar[bool]' = False) -> None"
275
+ },
276
+ {
277
+ "module": "solverpilot.session.reuse",
278
+ "name": "ReuseAssessment",
279
+ "qualname": "ReuseAssessment",
280
+ "signature": "(backend: 'str', considered: 'tuple[Capability, ...]', supported: 'tuple[Capability, ...]', safe_candidate: 'bool', applied: 'bool', reason: 'str') -> None"
281
+ },
282
+ {
283
+ "module": "solverpilot.session.session",
284
+ "name": "Session",
285
+ "qualname": "Session",
286
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', *, registry: 'BackendRegistry | None' = None) -> 'None'"
287
+ },
288
+ {
289
+ "module": "solverpilot.plan.model",
290
+ "name": "SolveBudget",
291
+ "qualname": "SolveBudget",
292
+ "signature": "(wall_time_s: 'float | None' = None, memory_mb: 'int | None' = None, threads: 'int | None' = None) -> None"
293
+ },
294
+ {
295
+ "module": "solverpilot.plan.model",
296
+ "name": "SolveIntent",
297
+ "qualname": "SolveIntent",
298
+ "signature": "(*values)"
299
+ },
300
+ {
301
+ "module": "solverpilot.plan.model",
302
+ "name": "SolvePlan",
303
+ "qualname": "SolvePlan",
304
+ "signature": "(selected_backend: 'str', candidates: 'tuple[CandidatePlan, ...]', intent: 'SolveIntent', budget: 'SolveBudget', fingerprint: 'ProblemFingerprint', strategy: 'str', rationale: 'tuple[str, ...]', evidence_level: 'str' = 'capability_only', health_policy: 'HealthPolicy' = <HealthPolicy.IGNORE: 'ignore'>) -> None"
305
+ },
306
+ {
307
+ "module": "solverpilot.runtime.result",
308
+ "name": "SolveResult",
309
+ "qualname": "SolveResult",
310
+ "signature": "(status: 'PublicStatus', x: 'np.ndarray | None', objective: 'float | None', backend_status: 'str', validation: 'ValidationReport | None', trace: 'SolveTrace', raw_statistics: 'dict[str, object] | None' = None, plan: 'SolvePlan | None' = None, session_revision: 'int | None' = None, diagnostics: \"'InfeasibilityReport | None'\" = None) -> None"
311
+ },
312
+ {
313
+ "module": "solverpilot.trace.schema",
314
+ "name": "SolveTrace",
315
+ "qualname": "SolveTrace",
316
+ "signature": "(problem_structural_hash: 'str', problem_data_hash: 'str', problem_class: 'str', backend: 'str | None' = None, backend_version: 'str | None' = None, parameters: 'dict[str, Any]' = <factory>, fingerprint: 'dict[str, Any] | None' = None, planner_selected_backend: 'str | None' = None, planner_evidence_level: 'str | None' = None, planner_health_policy: 'str | None' = None, transformations: 'tuple[str, ...]' = (), seed: 'int | None' = None, threads: 'int | None' = None, timings: 'PhaseTimings' = <factory>, termination: 'str | None' = None, validation_valid: 'bool | None' = None, reuse_applied: 'bool | None' = None, reuse_mode: 'str | None' = None, warnings: 'tuple[str, ...]' = (), schema_version: 'str' = '0.3', created_at_utc: 'str' = <factory>) -> None"
317
+ },
318
+ {
319
+ "module": "solverpilot.capabilities.enums",
320
+ "name": "SupportLevel",
321
+ "qualname": "SupportLevel",
322
+ "signature": "(*values)"
323
+ },
324
+ {
325
+ "module": null,
326
+ "name": "TRACE_SCHEMA_VERSION",
327
+ "qualname": null,
328
+ "signature": null
329
+ },
330
+ {
331
+ "module": "solverpilot.validate.result",
332
+ "name": "ValidationReport",
333
+ "qualname": "ValidationReport",
334
+ "signature": "(valid: 'bool', max_bound_violation: 'float', max_constraint_violation: 'float', max_integrality_violation: 'float | None', objective_recomputed: 'float | None', objective_reported: 'float | None', objective_difference: 'float | None', objective_consistent: 'bool | None', warnings: 'tuple[str, ...]' = ()) -> None"
335
+ },
336
+ {
337
+ "module": "solverpilot.validate.result",
338
+ "name": "ValidationTolerances",
339
+ "qualname": "ValidationTolerances",
340
+ "signature": "(feasibility: 'float' = 1e-07, integrality: 'float' = 1e-06, objective_abs: 'float' = 1e-07, objective_rel: 'float' = 1e-07, feasibility_rel: 'float' = 1e-09) -> None"
341
+ },
342
+ {
343
+ "module": "solverpilot.problem.enums",
344
+ "name": "VariableDomain",
345
+ "qualname": "VariableDomain",
346
+ "signature": "(*values)"
347
+ },
348
+ {
349
+ "module": "solverpilot.diagnose.model",
350
+ "name": "ViolationKind",
351
+ "qualname": "ViolationKind",
352
+ "signature": "(*values)"
353
+ },
354
+ {
355
+ "module": "solverpilot.runtime.auto",
356
+ "name": "builtin_backend_candidates",
357
+ "qualname": "builtin_backend_candidates",
358
+ "signature": "() -> 'tuple[Backend, ...]'"
359
+ },
360
+ {
361
+ "module": "solverpilot.capabilities.requirements",
362
+ "name": "compatible",
363
+ "qualname": "compatible",
364
+ "signature": "(manifest: 'BackendManifest', requirements: 'CapabilityRequirements', *, allow_risky_emulation: 'bool' = False) -> 'bool'"
365
+ },
366
+ {
367
+ "module": "solverpilot.runtime.auto",
368
+ "name": "default_registry",
369
+ "qualname": "default_registry",
370
+ "signature": "() -> 'BackendRegistry'"
371
+ },
372
+ {
373
+ "module": "solverpilot.diagnose.infeasibility",
374
+ "name": "deletion_filter_conflict",
375
+ "qualname": "deletion_filter_conflict",
376
+ "signature": "(problem: 'LinearProblem', *, max_checks: 'int' = 250, time_limit_s_per_check: 'float | None' = None) -> 'ConflictSetResult'"
377
+ },
378
+ {
379
+ "module": "solverpilot.diagnose.infeasibility",
380
+ "name": "diagnose_infeasibility",
381
+ "qualname": "diagnose_infeasibility",
382
+ "signature": "(problem: 'LinearProblem', *, backend: 'Any | None' = None, include_elastic: 'bool' = True, include_conflict: 'bool' = False, conflict_max_checks: 'int' = 250, time_limit_s: 'float | None' = None) -> 'InfeasibilityReport'"
383
+ },
384
+ {
385
+ "module": "solverpilot.diagnose.infeasibility",
386
+ "name": "elastic_relaxation",
387
+ "qualname": "elastic_relaxation",
388
+ "signature": "(problem: 'LinearProblem', *, time_limit_s: 'float | None' = None, relative_weighting: 'bool' = True, violation_tol: 'float' = 1e-09) -> 'ElasticRelaxationResult'"
389
+ },
390
+ {
391
+ "module": "solverpilot.runtime.executor",
392
+ "name": "execute",
393
+ "qualname": "execute",
394
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', backend: 'Backend', *, tolerances: 'ValidationTolerances | None' = None) -> 'SolveResult'"
395
+ },
396
+ {
397
+ "module": "solverpilot.runtime.portfolio",
398
+ "name": "execute_portfolio",
399
+ "qualname": "execute_portfolio",
400
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', backends: 'Iterable[Backend]', *, budget: 'SolveBudget | None' = None, stop_on_valid_optimal: 'bool' = True, health_reports: 'Iterable[BackendHealthReport] | None' = None, require_healthy: 'bool' = False, tolerances: 'ValidationTolerances | None' = None) -> 'PortfolioSolveResult'"
401
+ },
402
+ {
403
+ "module": "solverpilot.diagnose.infeasibility",
404
+ "name": "find_static_infeasibility",
405
+ "qualname": "find_static_infeasibility",
406
+ "signature": "(problem: 'LinearProblem', *, atol: 'float' = 1e-12) -> 'tuple[DiagnosticIssue, ...]'"
407
+ },
408
+ {
409
+ "module": "solverpilot.inspect.fingerprint",
410
+ "name": "inspect_problem",
411
+ "qualname": "inspect_problem",
412
+ "signature": "(problem: 'LinearProblem | QuadraticProblem') -> 'ProblemFingerprint'"
413
+ },
414
+ {
415
+ "module": "solverpilot.problem.mps",
416
+ "name": "parse_mps",
417
+ "qualname": "parse_mps",
418
+ "signature": "(text: 'str') -> 'LinearProblem'"
419
+ },
420
+ {
421
+ "module": "solverpilot.plan.production",
422
+ "name": "plan_production_solve",
423
+ "qualname": "plan_production_solve",
424
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', registry: 'BackendRegistry', *, evidence: 'ProductionEvidence' = ProductionEvidence(evidence_class=<EvidenceClass.CORPUS_VALIDATED: 'corpus_validated'>, source='M22 official MIPLIB/QPLIB/PACE fixed-host gate', corpus_integrity_passed=True, outcome_accounting_passed=True, independent_validation_passed=True, reference_crosscheck_passed=True, comparative_backends=(), heldout=False, feature_cost_accounted=False, fixed_environment=True, public_ood=True, pre_registered_policy=False, selection_opportunity_validated=False, performance_ranking_validated=False, selector_name=None, notes=('official-byte integrity and outcome accounting passed', 'M22 did not benchmark multiple candidate backends under a held-out comparative protocol', 'timeouts were explicit outcomes and no solver-superiority claim was made')), intent: 'SolveIntent | str' = <SolveIntent.BALANCED: 'balanced'>, budget: 'SolveBudget | None' = None, fingerprint: 'ProblemFingerprint | None' = None, context: 'PlannerContext | None' = None, health_reports: 'Iterable[BackendHealthReport] | None' = None, health_policy: 'HealthPolicy | str' = <HealthPolicy.PREFER_HEALTHY: 'prefer_healthy'>, performance_policy: 'PerformancePolicy | str' = <PerformancePolicy.REQUIRE_COMPARATIVE: 'require_comparative'>, performance_override: 'Mapping[str, str] | None' = None) -> 'ProductionDecision'"
425
+ },
426
+ {
427
+ "module": "solverpilot.plan.planner",
428
+ "name": "plan_solve",
429
+ "qualname": "plan_solve",
430
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', registry: 'BackendRegistry', *, intent: 'SolveIntent | str' = <SolveIntent.BALANCED: 'balanced'>, budget: 'SolveBudget | None' = None, fingerprint: 'ProblemFingerprint | None' = None, context: 'PlannerContext | None' = None, health_reports: 'Iterable[BackendHealthReport] | None' = None, health_policy: 'HealthPolicy | str' = <HealthPolicy.IGNORE: 'ignore'>) -> 'SolvePlan'"
431
+ },
432
+ {
433
+ "module": "solverpilot.backends.health",
434
+ "name": "probe_backend",
435
+ "qualname": "probe_backend",
436
+ "signature": "(backend: 'Backend', *, atol: 'float' = 1e-06, rtol: 'float' = 1e-07) -> 'BackendHealthReport'"
437
+ },
438
+ {
439
+ "module": "solverpilot.backends.health",
440
+ "name": "probe_backends",
441
+ "qualname": "probe_backends",
442
+ "signature": "(backends: 'Iterable[Backend]', *, atol: 'float' = 1e-06, rtol: 'float' = 1e-07) -> 'tuple[BackendHealthReport, ...]'"
443
+ },
444
+ {
445
+ "module": "solverpilot.problem.mps",
446
+ "name": "read_mps",
447
+ "qualname": "read_mps",
448
+ "signature": "(path: 'str | Path') -> 'LinearProblem'"
449
+ },
450
+ {
451
+ "module": "solverpilot.capabilities.requirements",
452
+ "name": "requirements_for",
453
+ "qualname": "requirements_for",
454
+ "signature": "(problem: 'LinearProblem | QuadraticProblem') -> 'CapabilityRequirements'"
455
+ },
456
+ {
457
+ "module": "solverpilot.runtime.auto",
458
+ "name": "solve",
459
+ "qualname": "solve",
460
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', *, registry: 'BackendRegistry | None' = None, backend: 'str | Backend | None' = None, intent: 'SolveIntent | str' = <SolveIntent.BALANCED: 'balanced'>, budget: 'SolveBudget | None' = None, context: 'PlannerContext | None' = None, health_reports: 'tuple[BackendHealthReport, ...] | None' = None, health_policy: 'HealthPolicy | str' = <HealthPolicy.IGNORE: 'ignore'>, diagnose_infeasible: 'bool' = False, tolerances: 'ValidationTolerances | None' = None) -> 'SolveResult'"
461
+ },
462
+ {
463
+ "module": "solverpilot.runtime.auto",
464
+ "name": "solve_production",
465
+ "qualname": "solve_production",
466
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', *, registry: 'BackendRegistry | None' = None, intent: 'SolveIntent | str' = <SolveIntent.BALANCED: 'balanced'>, budget: 'SolveBudget | None' = None, context: 'PlannerContext | None' = None, health_reports: 'tuple[BackendHealthReport, ...] | None' = None, health_policy: 'HealthPolicy | str' = <HealthPolicy.PREFER_HEALTHY: 'prefer_healthy'>, evidence: 'ProductionEvidence' = ProductionEvidence(evidence_class=<EvidenceClass.CORPUS_VALIDATED: 'corpus_validated'>, source='M22 official MIPLIB/QPLIB/PACE fixed-host gate', corpus_integrity_passed=True, outcome_accounting_passed=True, independent_validation_passed=True, reference_crosscheck_passed=True, comparative_backends=(), heldout=False, feature_cost_accounted=False, fixed_environment=True, public_ood=True, pre_registered_policy=False, selection_opportunity_validated=False, performance_ranking_validated=False, selector_name=None, notes=('official-byte integrity and outcome accounting passed', 'M22 did not benchmark multiple candidate backends under a held-out comparative protocol', 'timeouts were explicit outcomes and no solver-superiority claim was made')), performance_policy: 'PerformancePolicy | str' = <PerformancePolicy.REQUIRE_COMPARATIVE: 'require_comparative'>, performance_override: 'dict[str, str] | None' = None, diagnose_infeasible: 'bool' = False, tolerances: 'ValidationTolerances | None' = None) -> 'tuple[SolveResult, ProductionDecision]'"
467
+ },
468
+ {
469
+ "module": "solverpilot.validate.core",
470
+ "name": "validate_solution",
471
+ "qualname": "validate_solution",
472
+ "signature": "(problem: 'LinearProblem | QuadraticProblem', solution: 'CandidateSolution', *, tolerances: 'ValidationTolerances | None' = None) -> 'ValidationReport'"
473
+ }
474
+ ]
475
+ }
@@ -1,6 +1,6 @@
1
1
  # SolverPilot
2
2
 
3
- > **Current version:** `0.2`. Adds configurable validation, numerical optimality checks, faster preparation, owned reoptimization sessions, bounded batch execution, modeling conveniences and a direct Clarabel conic adapter. Historical `0.1.0rc2` correctness/trust hardening remains in place.
3
+ > **Current version:** `0.3`. Repairs scale-sensitive numerical certificates, preserves sparse model data and solver workspaces, and adds convex atoms, streaming batches, sensitivity, scenarios, robust counterparts and application templates. Historical `0.1.0rc2` correctness/trust hardening remains in place. See the [0.3 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.3.md) for examples and precise guarantees.
4
4
 
5
5
  SolverPilot is a **trust-aware optimization runtime and modeling layer for Python**. It combines a small matrix-first solve API for LP/MILP/convex QP with a higher-level semantic modeling system that can compile into conic, smooth nonlinear, certified convex binary MINLP, and constraint-programming execution paths.
6
6
 
@@ -1,5 +1,7 @@
1
1
  # SolverPilot Extended Modeling API — 0.2
2
2
 
3
+ Version 0.3 adds checked convex atoms, sparse affine lowering, bounded streaming, sensitivity and scenarios. See the current [0.3 guide](../release/SOLVERPILOT-PUBLIC-DOCS-0.3.md) for guarantees and remaining scope limits.
4
+
3
5
  Track P P0–P9 is merged into SolverPilot under explicit submodule namespaces. These APIs are available in version 0.2 but are **not** added to the M30-frozen 78-symbol `solverpilot.__all__` compatibility surface yet.
4
6
 
5
7
  ## `solverpilot.model`
@@ -0,0 +1,11 @@
1
+ # SolverPilot 0.3 release gates
2
+
3
+ - Keep the 78 historical top-level names/signatures compatible.
4
+ - Pass the six 0.2 audit regressions plus scaling, KKT derivative, atom and scenario oracles.
5
+ - Check cold/repeated compilation and process/sequential batch costs independently.
6
+ - Run Ruff correctness rules and mypy common-API contracts.
7
+ - Require at least 80% combined line/branch coverage in full optional-integration CI.
8
+ - Qualify the exact wheel and sdist on the supported Python/OS/optional-backend matrix.
9
+ - Check package metadata, `py.typed`, artifact hashes, SBOM and dependency audit.
10
+ - Preserve 0.1 and 0.2 release artifacts and historical evidence.
11
+ - Publish only the exact artifacts that passed external qualification.