solverpilot 0.2__tar.gz → 0.4__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 (305) hide show
  1. solverpilot-0.4/BACKEND-CONTRACT-V0_3_0.json +43 -0
  2. solverpilot-0.4/BACKEND-CONTRACT-V0_4_0.json +51 -0
  3. {solverpilot-0.2 → solverpilot-0.4}/CHANGELOG.md +30 -0
  4. {solverpilot-0.2 → solverpilot-0.4}/KNOWN-LIMITATIONS.md +8 -4
  5. {solverpilot-0.2 → solverpilot-0.4}/MANIFEST.in +10 -0
  6. {solverpilot-0.2 → solverpilot-0.4}/PKG-INFO +34 -21
  7. solverpilot-0.4/PUBLIC-API-V0_3_0.json +475 -0
  8. solverpilot-0.4/PUBLIC-API-V0_4_0.json +475 -0
  9. {solverpilot-0.2 → solverpilot-0.4}/README.md +29 -20
  10. {solverpilot-0.2 → solverpilot-0.4}/docs/api/EXTENDED-MODELING-API.md +20 -2
  11. solverpilot-0.4/docs/release/README-CHECKLIST-0.3.md +11 -0
  12. solverpilot-0.4/docs/release/README-CHECKLIST-0.4.md +11 -0
  13. solverpilot-0.4/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.3.md +230 -0
  14. solverpilot-0.4/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md +237 -0
  15. solverpilot-0.4/examples/18_sensitivity_and_scenarios.py +15 -0
  16. solverpilot-0.4/examples/19_convex_atoms_optional.py +18 -0
  17. solverpilot-0.4/examples/20_streaming_reuse.py +29 -0
  18. solverpilot-0.4/examples/21_checked_run_replay.py +16 -0
  19. solverpilot-0.4/examples/22_global_optimization_optional.py +27 -0
  20. solverpilot-0.4/examples/23_generalized_power_optional.py +24 -0
  21. solverpilot-0.4/examples/24_pdlp_and_certificates_optional.py +44 -0
  22. {solverpilot-0.2 → solverpilot-0.4}/examples/README.md +13 -0
  23. {solverpilot-0.2 → solverpilot-0.4}/pyproject.toml +11 -1
  24. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/__init__.py +1 -1
  25. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/_immutability.py +8 -4
  26. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/_version.py +1 -1
  27. solverpilot-0.4/src/solverpilot/analysis.py +271 -0
  28. solverpilot-0.4/src/solverpilot/applications/__init__.py +4 -0
  29. solverpilot-0.4/src/solverpilot/applications/templates.py +133 -0
  30. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/__init__.py +2 -0
  31. solverpilot-0.4/src/solverpilot/backends/_pdlp_worker.py +60 -0
  32. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/osqp_native.py +39 -9
  33. solverpilot-0.4/src/solverpilot/backends/pdlp.py +233 -0
  34. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/validation.py +5 -1
  35. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/v2.py +5 -0
  36. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cli/capabilities.py +24 -2
  37. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/__init__.py +2 -0
  38. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/backend.py +42 -3
  39. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/clarabel_backend.py +126 -17
  40. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/compiler.py +6 -2
  41. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/conic-ir-v1.schema.json +1 -1
  42. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/ir.py +11 -2
  43. solverpilot-0.4/src/solverpilot/conic/optimality.py +159 -0
  44. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/validation.py +20 -2
  45. solverpilot-0.4/src/solverpilot/globalopt/__init__.py +23 -0
  46. solverpilot-0.4/src/solverpilot/globalopt/backend.py +473 -0
  47. solverpilot-0.4/src/solverpilot/globalopt/capabilities.py +104 -0
  48. solverpilot-0.4/src/solverpilot/globalopt/compiler.py +115 -0
  49. solverpilot-0.4/src/solverpilot/globalopt/expressions.py +193 -0
  50. solverpilot-0.4/src/solverpilot/globalopt/intervals.py +160 -0
  51. solverpilot-0.4/src/solverpilot/globalopt/problem.py +244 -0
  52. solverpilot-0.4/src/solverpilot/globalopt/validation.py +107 -0
  53. solverpilot-0.4/src/solverpilot/intelligence/shadow.py +72 -0
  54. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/orchestrator.py +7 -0
  55. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/__init__.py +4 -2
  56. solverpilot-0.4/src/solverpilot/model/affine.py +135 -0
  57. solverpilot-0.4/src/solverpilot/model/atoms.py +316 -0
  58. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/compiler.py +44 -5
  59. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/convenience.py +3 -1
  60. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/model.py +42 -8
  61. solverpilot-0.4/src/solverpilot/model/robust.py +52 -0
  62. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/sets.py +32 -1
  63. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/backend.py +21 -3
  64. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/ir.py +17 -0
  65. solverpilot-0.4/src/solverpilot/problem/curvature.py +100 -0
  66. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/problem/quadratic.py +10 -1
  67. solverpilot-0.4/src/solverpilot/py.typed +0 -0
  68. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/__init__.py +4 -0
  69. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/auto.py +25 -1
  70. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/batch.py +34 -1
  71. solverpilot-0.4/src/solverpilot/runtime/batch_stream.py +301 -0
  72. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/budgeting.py +32 -1
  73. solverpilot-0.4/src/solverpilot/runtime/catalog.py +85 -0
  74. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/executor.py +3 -1
  75. solverpilot-0.4/src/solverpilot/runtime/integrations.py +65 -0
  76. solverpilot-0.4/src/solverpilot/runtime/manifest.py +179 -0
  77. solverpilot-0.4/src/solverpilot/runtime/options.py +50 -0
  78. solverpilot-0.4/src/solverpilot/runtime/reuse.py +42 -0
  79. solverpilot-0.4/src/solverpilot/runtime/specialized.py +49 -0
  80. solverpilot-0.4/src/solverpilot/runtime/unified.py +181 -0
  81. solverpilot-0.4/src/solverpilot/scenarios.py +69 -0
  82. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/reoptimization.py +11 -0
  83. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/validate/__init__.py +2 -0
  84. solverpilot-0.4/src/solverpilot/validate/_certificate_arithmetic.py +51 -0
  85. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/validate/optimality.py +55 -17
  86. solverpilot-0.4/src/solverpilot/validate/recovery.py +121 -0
  87. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot.egg-info/PKG-INFO +34 -21
  88. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot.egg-info/SOURCES.txt +45 -0
  89. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot.egg-info/requires.txt +6 -0
  90. solverpilot-0.2/src/solverpilot/applications/__init__.py +0 -3
  91. {solverpilot-0.2 → solverpilot-0.4}/BACKEND-CONTRACT-V0_1_0.json +0 -0
  92. {solverpilot-0.2 → solverpilot-0.4}/BACKEND-CONTRACT-V0_1_0RC2.json +0 -0
  93. {solverpilot-0.2 → solverpilot-0.4}/BACKEND-CONTRACT-V0_2_0.json +0 -0
  94. {solverpilot-0.2 → solverpilot-0.4}/CONTRIBUTING.md +0 -0
  95. {solverpilot-0.2 → solverpilot-0.4}/LICENSE +0 -0
  96. {solverpilot-0.2 → solverpilot-0.4}/PRE-PUBLIC-RELEASE-AUDIT-0.1.0rc2.json +0 -0
  97. {solverpilot-0.2 → solverpilot-0.4}/PRE-PUBLIC-RELEASE-VERIFICATION-0.1.0rc2.md +0 -0
  98. {solverpilot-0.2 → solverpilot-0.4}/PUBLIC-API-V0_1_0.json +0 -0
  99. {solverpilot-0.2 → solverpilot-0.4}/PUBLIC-API-V0_1_0RC2.json +0 -0
  100. {solverpilot-0.2 → solverpilot-0.4}/PUBLIC-API-V0_2_0.json +0 -0
  101. {solverpilot-0.2 → solverpilot-0.4}/RELEASING.md +0 -0
  102. {solverpilot-0.2 → solverpilot-0.4}/SECURITY.md +0 -0
  103. {solverpilot-0.2 → solverpilot-0.4}/TRACK-P-MERGE-PROVENANCE.json +0 -0
  104. {solverpilot-0.2 → solverpilot-0.4}/docs/api/PUBLIC-API-v1.md +0 -0
  105. {solverpilot-0.2 → solverpilot-0.4}/docs/release/OWNER-PUBLICATION-DECISIONS.md +0 -0
  106. {solverpilot-0.2 → solverpilot-0.4}/docs/release/PRE-GITHUB-HARDENING.md +0 -0
  107. {solverpilot-0.2 → solverpilot-0.4}/docs/release/PRE-GITHUB-LICENSE-DECISION.md +0 -0
  108. {solverpilot-0.2 → solverpilot-0.4}/docs/release/README-CHECKLIST-0.1.0RC2.md +0 -0
  109. {solverpilot-0.2 → solverpilot-0.4}/docs/release/README-CHECKLIST-0.1.md +0 -0
  110. {solverpilot-0.2 → solverpilot-0.4}/docs/release/README-CHECKLIST-0.2.md +0 -0
  111. {solverpilot-0.2 → solverpilot-0.4}/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.1.0RC2.md +0 -0
  112. {solverpilot-0.2 → solverpilot-0.4}/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.1.md +0 -0
  113. {solverpilot-0.2 → solverpilot-0.4}/docs/release/SOLVERPILOT-PUBLIC-DOCS-0.2.md +0 -0
  114. {solverpilot-0.2 → solverpilot-0.4}/examples/01_lp_basic.py +0 -0
  115. {solverpilot-0.2 → solverpilot-0.4}/examples/02_milp_binary.py +0 -0
  116. {solverpilot-0.2 → solverpilot-0.4}/examples/03_qp_convex.py +0 -0
  117. {solverpilot-0.2 → solverpilot-0.4}/examples/04_choose_backend.py +0 -0
  118. {solverpilot-0.2 → solverpilot-0.4}/examples/05_infeasible.py +0 -0
  119. {solverpilot-0.2 → solverpilot-0.4}/examples/06_validation_diagnostics.py +0 -0
  120. {solverpilot-0.2 → solverpilot-0.4}/examples/07_reoptimization_session.py +0 -0
  121. {solverpilot-0.2 → solverpilot-0.4}/examples/08_semantic_model.py +0 -0
  122. {solverpilot-0.2 → solverpilot-0.4}/examples/09_conic_model.py +0 -0
  123. {solverpilot-0.2 → solverpilot-0.4}/examples/10_nlp_optional.py +0 -0
  124. {solverpilot-0.2 → solverpilot-0.4}/examples/11_minlp_optional.py +0 -0
  125. {solverpilot-0.2 → solverpilot-0.4}/examples/12_cp_reference.py +0 -0
  126. {solverpilot-0.2 → solverpilot-0.4}/examples/13_cp_sat_optional.py +0 -0
  127. {solverpilot-0.2 → solverpilot-0.4}/examples/14_persistent_session_optional.py +0 -0
  128. {solverpilot-0.2 → solverpilot-0.4}/examples/15_named_model_and_quality.py +0 -0
  129. {solverpilot-0.2 → solverpilot-0.4}/examples/16_direct_conic.py +0 -0
  130. {solverpilot-0.2 → solverpilot-0.4}/examples/17_batch_scenarios.py +0 -0
  131. {solverpilot-0.2 → solverpilot-0.4}/setup.cfg +0 -0
  132. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/_synchronization.py +0 -0
  133. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/__init__.py +0 -0
  134. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/compile_milp.py +0 -0
  135. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/diagnostics.py +0 -0
  136. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/errors.py +0 -0
  137. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/heuristics.py +0 -0
  138. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/model.py +0 -0
  139. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/reference.py +0 -0
  140. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/solution.py +0 -0
  141. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/timeline.py +0 -0
  142. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/routing/validation.py +0 -0
  143. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/__init__.py +0 -0
  144. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/compile_cp.py +0 -0
  145. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/compile_milp.py +0 -0
  146. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/distance.py +0 -0
  147. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/errors.py +0 -0
  148. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/heuristics.py +0 -0
  149. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/model.py +0 -0
  150. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/reference.py +0 -0
  151. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/solution.py +0 -0
  152. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/applications/tsp/validation.py +0 -0
  153. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/_casadi_highs_worker.py +0 -0
  154. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/base.py +0 -0
  155. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/bundled_capi.py +0 -0
  156. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/casadi_conic.py +0 -0
  157. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/health.py +0 -0
  158. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/highspy_native.py +0 -0
  159. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/metadata.py +0 -0
  160. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/nlopt_native.py +0 -0
  161. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/protocol_v2.py +0 -0
  162. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/pyscipopt_native.py +0 -0
  163. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/registry.py +0 -0
  164. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/scipy_highs.py +0 -0
  165. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/scipy_highs_lp.py +0 -0
  166. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/scipy_slsqp_qp.py +0 -0
  167. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/backends/scipy_vendored_highs_dev.py +0 -0
  168. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/__init__.py +0 -0
  169. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/acquire.py +0 -0
  170. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/baselines.py +0 -0
  171. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/bundle.py +0 -0
  172. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/campaign.py +0 -0
  173. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/environment.py +0 -0
  174. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/integrity.py +0 -0
  175. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/model.py +0 -0
  176. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/policy.py +0 -0
  177. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/registry.py +0 -0
  178. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/report.py +0 -0
  179. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/runner.py +0 -0
  180. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/slurm.py +0 -0
  181. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/specs.py +0 -0
  182. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/splits.py +0 -0
  183. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/summary.py +0 -0
  184. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/verify.py +0 -0
  185. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/benchmark/worker.py +0 -0
  186. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/__init__.py +0 -0
  187. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/engine.py +0 -0
  188. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/indicator.py +0 -0
  189. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/registry.py +0 -0
  190. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/transformation-tape.schema.json +0 -0
  191. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/bridges/types.py +0 -0
  192. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/__init__.py +0 -0
  193. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/backend-capability-v2.schema.json +0 -0
  194. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/conformance.py +0 -0
  195. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/enums.py +0 -0
  196. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/manifest.py +0 -0
  197. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/ontology.py +0 -0
  198. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/requirements.py +0 -0
  199. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/capabilities/resolve.py +0 -0
  200. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cli/__init__.py +0 -0
  201. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cli/backend_health.py +0 -0
  202. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cli/benchmark.py +0 -0
  203. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cli/benchmark_worker.py +0 -0
  204. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/conic/conformance.py +0 -0
  205. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/__init__.py +0 -0
  206. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/conformance.py +0 -0
  207. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/cp-ir-v1.schema.json +0 -0
  208. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/ir.py +0 -0
  209. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/model.py +0 -0
  210. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/ortools_backend.py +0 -0
  211. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/ortools_worker.py +0 -0
  212. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/reference.py +0 -0
  213. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/serialization.py +0 -0
  214. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/cp/validate.py +0 -0
  215. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/diagnose/__init__.py +0 -0
  216. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/diagnose/infeasibility.py +0 -0
  217. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/diagnose/model.py +0 -0
  218. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/evaluation/__init__.py +0 -0
  219. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/evaluation/metrics.py +0 -0
  220. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/evaluation/oracle.py +0 -0
  221. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/evaluation/proof.py +0 -0
  222. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/evaluation/references.py +0 -0
  223. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/evaluation/regret.py +0 -0
  224. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/exceptions.py +0 -0
  225. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/experimental/__init__.py +0 -0
  226. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/__init__.py +0 -0
  227. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/entrypoints.py +0 -0
  228. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/errors.py +0 -0
  229. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/manager.py +0 -0
  230. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/manifest.py +0 -0
  231. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/model.py +0 -0
  232. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/extensions/versioning.py +0 -0
  233. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/history/__init__.py +0 -0
  234. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/history/errors.py +0 -0
  235. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/history/model.py +0 -0
  236. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/history/sqlite.py +0 -0
  237. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/inspect/__init__.py +0 -0
  238. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/inspect/fingerprint.py +0 -0
  239. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/intelligence/__init__.py +0 -0
  240. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/intelligence/errors.py +0 -0
  241. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/intelligence/fingerprint.py +0 -0
  242. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/intelligence/leakage.py +0 -0
  243. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/intelligence/schema.py +0 -0
  244. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/intelligence/shift.py +0 -0
  245. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/__init__.py +0 -0
  246. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/binary64.py +0 -0
  247. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/csv.py +0 -0
  248. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/errors.py +0 -0
  249. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/hashing.py +0 -0
  250. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/json.py +0 -0
  251. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/mapping.py +0 -0
  252. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/model.py +0 -0
  253. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/numeric.py +0 -0
  254. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/provenance.py +0 -0
  255. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/result.py +0 -0
  256. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/source.py +0 -0
  257. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/io/strict_json.py +0 -0
  258. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/__init__.py +0 -0
  259. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/compiler.py +0 -0
  260. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/conformance.py +0 -0
  261. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/convexity.py +0 -0
  262. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/ir.py +0 -0
  263. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/minlp-ir-v1.schema.json +0 -0
  264. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/minlp/validation.py +0 -0
  265. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/errors.py +0 -0
  266. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/expression.py +0 -0
  267. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/model/types.py +0 -0
  268. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/__init__.py +0 -0
  269. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/ad.py +0 -0
  270. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/compiler.py +0 -0
  271. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/conformance.py +0 -0
  272. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/nlp-ir-v1.schema.json +0 -0
  273. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/nlp/validation.py +0 -0
  274. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/plan/__init__.py +0 -0
  275. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/plan/model.py +0 -0
  276. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/plan/planner.py +0 -0
  277. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/plan/production.py +0 -0
  278. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/plan/selective_lp.py +0 -0
  279. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/problem/__init__.py +0 -0
  280. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/problem/enums.py +0 -0
  281. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/problem/hashing.py +0 -0
  282. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/problem/linear.py +0 -0
  283. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/problem/mps.py +0 -0
  284. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/reporting/__init__.py +0 -0
  285. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/reporting/explain.py +0 -0
  286. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/reporting/model.py +0 -0
  287. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/reporting/quality.py +0 -0
  288. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/reporting/render.py +0 -0
  289. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/multiobjective.py +0 -0
  290. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/portfolio.py +0 -0
  291. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/runtime/result.py +0 -0
  292. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/__init__.py +0 -0
  293. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/conformance_v2.py +0 -0
  294. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/mutations.py +0 -0
  295. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/persistent-session-trace.schema.json +0 -0
  296. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/persistent.py +0 -0
  297. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/reuse.py +0 -0
  298. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/session/session.py +0 -0
  299. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/trace/__init__.py +0 -0
  300. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/trace/schema.py +0 -0
  301. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/validate/core.py +0 -0
  302. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot/validate/result.py +0 -0
  303. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot.egg-info/dependency_links.txt +0 -0
  304. {solverpilot-0.2 → solverpilot-0.4}/src/solverpilot.egg-info/entry_points.txt +0 -0
  305. {solverpilot-0.2 → solverpilot-0.4}/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
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "milestone": "RELEASE_0_4",
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
+ "Global and PDLP adapters are explicitly selected; existing default registry IDs are unchanged.",
11
+ "SCIP global bounds are solver-reported numerical evidence, not independent generic global certificates."
12
+ ],
13
+ "package_version": "0.4",
14
+ "production_baseline_policy": {
15
+ "convex_qp": "osqp-native when available; otherwise scipy-slsqp-qp-bridge for non-proof intents",
16
+ "learned_lp_performance_routing": false,
17
+ "lp": "scipy-highs-ds",
18
+ "milp": "scipy-highs-bridge"
19
+ },
20
+ "schema": "solverpilot.backend_contract.v1",
21
+ "stable_backend_ids": {
22
+ "base_runtime": [
23
+ "scipy-highs-ds",
24
+ "scipy-highs-ipm",
25
+ "scipy-highs-bridge",
26
+ "scipy-slsqp-qp-bridge"
27
+ ],
28
+ "optional_public": [
29
+ "highspy-native",
30
+ "osqp-native",
31
+ "pyscipopt-native",
32
+ "nlopt-slsqp-native"
33
+ ],
34
+ "verification_only": [
35
+ "casadi-osqp-bridge",
36
+ "casadi-highs-bridge",
37
+ "casadi-cbc-bridge",
38
+ "bundled-osqp-capi",
39
+ "bundled-highs-capi"
40
+ ]
41
+ },
42
+ "optional_conic_backends": [
43
+ "clarabel-native"
44
+ ],
45
+ "optional_global_backends": [
46
+ "scip-global"
47
+ ],
48
+ "optional_first_order_backends": [
49
+ "ortools-pdlp"
50
+ ]
51
+ }
@@ -1,5 +1,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4 — Conservative certificates and explicit global optimization
4
+
5
+ - Reject the near-indefinite QP counterexample; require exact represented-data PSD evidence before independent QP bounds.
6
+ - Add a separate matrix nonconvex QP/MIQP IR and bounded factorable SCIP global path, including nonlinear equalities, two-sided rows, general integers, explicit nonsmooth atoms and interval-certified indicators.
7
+ - Add generalized power cone modeling, hashing, Clarabel transport and original-space validation.
8
+ - Reconstruct Clarabel duals and check conservative original-domain SOC/RSOC/PSD bounds; leave unsupported dual membership explicitly unverified.
9
+ - Add isolated CPU PDLP for LP and diagonal convex QP, with canonical duals and wall budgets.
10
+ - Preserve ambiguous primal status for PDLP dual infeasibility; require a checked feasible origin before claiming primal unboundedness.
11
+ - Add optional bounded LP witness recovery and independent rechecking; expose `certificate_recovery` on high-level solve calls.
12
+ - Skip OSQP matrix updates for vector-only edits and expose common reuse observations without claiming factorization reuse.
13
+ - Add shadow policy observations and exact/GPU prerequisite probes, with production learned routing and unqualified integrations disabled.
14
+ - Harden global model snapshots, domains, callback cleanup and numerical result storage; add analytic, exhaustive-reference and adversarial regressions.
15
+ - Preserve historical API/release artifacts; current top-level signatures gain only the documented optional recovery keyword.
16
+
17
+ ## 0.3 — Numerical trust, sparse modeling and scenario analysis
18
+
19
+ - 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.
20
+ - Restore OSQP defaults when optional settings are cleared, and preserve owned solver workspaces under call-local budgets.
21
+ - Reject cross-model conic results and freeze conic, NLP and MINLP result payloads.
22
+ - Lower affine expressions in CSR blocks, retain sparse constants and cache unchanged affine subexpressions across parameter updates.
23
+ - Add checked convex abs/norm/Huber/log-sum-exp/quad-form graphs with semantic variable reconstruction.
24
+ - Add bounded streaming batches, persistent restartable workers and an explicit sequential mode. Retain isolated-per-job compatibility mode.
25
+ - Add opt-in Clarabel data reuse, iteration progress, cooperative cancellation and raw dual/slack snapshots; expose common time/tolerance controls.
26
+ - Add a common result view, strict verified solves, a unified backend catalog and Clarabel CLI conformance.
27
+ - Add named canonical shadow prices, parameter marginals, regular QP directional derivatives and model scaling diagnostics.
28
+ - Add lazy independent scenario sweeps, box-robust constraints, finite-scenario minimax objectives and four transparent application templates.
29
+ - Add opt-in JSON model/run replay with effective backend configuration, version and data-hash checks.
30
+ - Add adversarial scale/permutation regressions, typed common API checks and a required optional-integration coverage floor.
31
+ - Preserve the historical 78-name top-level signatures and previous release evidence.
32
+
3
33
  ## 0.2 — Runtime, modeling and direct conic upgrade
4
34
 
5
35
  - Serialize process start/close across concurrent batches to prevent the Windows child-handle race found during release qualification.
@@ -1,4 +1,6 @@
1
- # Known limitations — 0.2
1
+ # Known limitations — 0.4
2
+
3
+ Version 0.4 adds explicit global optimization, generalized power cones, CPU PDLP and conservative certificate recovery. See the [0.4 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md) for exact scope and APIs.
2
4
 
3
5
  ## Numerical evidence
4
6
 
@@ -8,9 +10,9 @@ Per-call ValidationTolerances is supported by execute, solve, solve_production a
8
10
 
9
11
  ## Conic and nonlinear scope
10
12
 
11
- Optional direct Clarabel supports convex quadratic objectives and affine SOC, rotated SOC, PSD, exponential and power cones. Runtime conformance and original-space validation gate its use. CasADi SuperSCS retains its restricted linear-objective SOC/RSOC scope; its generic PSD and quadratic-conic routes remain disabled. Generalized power cones are not implemented. Conic primal feasibility alone does not imply independently verified global optimality.
13
+ Optional direct Clarabel supports convex quadratic objectives and affine SOC, rotated SOC, PSD, exponential and power cones. Runtime conformance and original-space validation gate its use. CasADi SuperSCS retains its restricted linear-objective SOC/RSOC scope; its generic PSD and quadratic-conic routes remain disabled. Generalized power cones are supported by direct Clarabel. Conservative independent SOC/RSOC/PSD bounds require exact dual membership, objective PSD evidence and a finite residual correction; transcendental cone dual certificates remain unsupported. Conic primal feasibility alone does not imply independently verified global optimality.
12
14
 
13
- Smooth NLP remains optional through CasADi/Ipopt and produces local candidates. Generic global NLP and arbitrary nonsmooth atoms are unsupported. MINLP remains the certified convex binary-discrete scope: general integer, nonconvex/global, nonlinear-equality, two-sided nonlinear and indicator+MINLP compositions remain unsupported. Existing proof flags retain their documented solver-certified scope.
15
+ Smooth NLP remains optional through CasADi/Ipopt and produces local candidates. An explicit SCIP path now accepts bounded factorable global NLP/MINLP, general integers, nonlinear equalities/two-sided rows and supported abs/max/min atoms. Indicator bodies require provable finite interval bounds. Arbitrary Python functions and independent generic global proofs remain unsupported. The existing convex binary OA path retains its previous restrictions and proof semantics.
14
16
 
15
17
  ## Execution and ownership
16
18
 
@@ -18,6 +20,8 @@ Batch accepts canonical LP/QP, uses spawn and requires a script main guard. Time
18
20
 
19
21
  ReoptimizationSession owns a model clone and serializes update+solve. Session/PersistentSession serialize their public methods, but direct external model/backend mutations require caller coordination. Compiler caches are not shared mutable workspaces for uncoordinated modeling. Reuse is conditional on structure/settings and is not guaranteed faster. Session history can intentionally grow.
20
22
 
23
+ PDLP supports only continuous LP/nonnegative diagonal QP and is process-isolated. It is not automatically selected. Exact SCIP and GPU readiness probes do not qualify execution; neither corresponding execution adapter is shipped.
24
+
21
25
  CP-SAT remains process-isolated to avoid known HiGHS ABI collisions. Reference CP and exact TSP/VRP are exhaustive and only suitable for small oracle cases.
22
26
 
23
27
  ## Modeling and records
@@ -30,4 +34,4 @@ Learned routing remains disabled; OOD indicators are not calibrated probabilitie
30
34
 
31
35
  Cross-platform support requires exact-artifact qualification on Python 3.12–3.14. Upstream package availability alone is not integration evidence. Synthetic latency/RSS measurements do not establish industrial scalability or absence of long-term leaks. Historical reports retain their original versions and cannot qualify new artifacts.
32
36
 
33
- See [the 0.2 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.2.md) for APIs and examples.
37
+ See [the 0.4 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md) for APIs and examples.
@@ -38,3 +38,13 @@ 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
46
+
47
+ include PUBLIC-API-V0_4_0.json
48
+ include BACKEND-CONTRACT-V0_4_0.json
49
+ include docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md
50
+ include docs/release/README-CHECKLIST-0.4.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solverpilot
3
- Version: 0.2
3
+ Version: 0.4
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
@@ -74,11 +74,15 @@ Provides-Extra: minlp
74
74
  Requires-Dist: casadi==3.7.2; extra == "minlp"
75
75
  Provides-Extra: cp
76
76
  Requires-Dist: ortools==9.15.6755; extra == "cp"
77
+ Provides-Extra: pdlp
78
+ Requires-Dist: ortools==9.15.6755; extra == "pdlp"
79
+ Provides-Extra: global
80
+ Requires-Dist: pyscipopt<7,>=6.2.1; extra == "global"
77
81
  Dynamic: license-file
78
82
 
79
83
  # SolverPilot
80
84
 
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.
85
+ > **Current version:** `0.4`. Repairs near-indefinite QP certificates and adds explicit global QP/MIQP/MINLP, generalized power cones, CPU PDLP, bounded LP witness recovery and reuse observations. Historical `0.1.0rc2` correctness/trust hardening remains in place. See the [0.4 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md) for examples and precise guarantees.
82
86
 
83
87
  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
88
 
@@ -111,11 +115,11 @@ SolverPilot has two complementary layers.
111
115
  - proof-aware **certified convex binary MINLP** orchestration;
112
116
  - integer/Boolean/interval constraint programming with an exhaustive reference backend and optional OR-Tools CP-SAT.
113
117
 
114
- The extended APIs are canonically imported from submodules such as `solverpilot.model`, `solverpilot.conic`, `solverpilot.nlp`, `solverpilot.minlp`, and `solverpilot.cp`. The M30-frozen top-level `solverpilot.__all__` surface remains unchanged in this merge candidate.
118
+ The extended APIs are canonically imported from submodules such as `solverpilot.model`, `solverpilot.conic`, `solverpilot.nlp`, `solverpilot.minlp`, `solverpilot.globalopt`, and `solverpilot.cp`. The M30-frozen top-level `solverpilot.__all__` surface remains unchanged in this release.
115
119
 
116
120
  ### Verified trust, evaluation, extension, and application layers
117
121
 
118
- The `0.2` release keeps the S2–S10 additive layers and adds correctness/trust hardening discovered during adversarial review of `0.1.0rc1`. The historical `0.0.40rc2` artifacts remain separate provenance and are not overwritten.
122
+ The current release keeps the S2–S10 additive layers and adds correctness/trust hardening discovered during adversarial review of `0.1.0rc1`. The historical `0.0.40rc2` artifacts remain separate provenance and are not overwritten.
119
123
 
120
124
  - `solverpilot.io`: strict local JSON/CSV ingestion, bounded reads, explicit mapping, content hashes, and source provenance;
121
125
  - `solverpilot.evaluation`: direct-run oracle construction and decomposed quality/runtime/failure regret;
@@ -137,12 +141,15 @@ These APIs remain submodule-scoped and do not change the frozen 78-symbol top-le
137
141
  | Continuous convex QP | ✅ solve | validated candidate; bridge-specific optimality claims stay conservative |
138
142
  | Semantic LP/MILP/QP modeling | ✅ | compiles to canonical core IR |
139
143
  | Indicator constraints | ✅ restricted exact bridges | fixed-state simplification or finite-bound-certified Big-M; otherwise fail-closed |
140
- | SOC | ✅ representation/validation; verified restricted solve path | linear-objective supported verification path only |
141
- | RSOC | ✅ representation/validation; verified restricted solve path | exact map to SOC in verified path |
142
- | PSD | ✅ representation/validation | generic PSD solving is not authorized by current conformance evidence |
144
+ | SOC | ✅ direct Clarabel + original validation | conservative independent original-domain bounds when dual evidence is available |
145
+ | RSOC | ✅ direct Clarabel + original validation | reconstructed duals and exact cone membership checks |
146
+ | PSD | ✅ direct Clarabel + original validation | independent bounds require conservative PSD evidence; generic matrices can remain unverified |
147
+ | Exponential / power / generalized power | ✅ direct Clarabel | numerical original-space validation; independent dual certification remains unsupported |
143
148
  | Smooth continuous NLP | ✅ optional | local-optimal candidate only after validation/KKT checks; **no global NLP proof** |
144
149
  | Convex binary MINLP | ✅ restricted | `globally_proven` is solver-certified inside the certified P8 binary/convex scope; `independently_verified_global` remains false until the full proof chain is independently reconstructed |
145
- | General integer/nonconvex MINLP | ❌ | fail-closed |
150
+ | Nonconvex QP / MIQP | ✅ explicit `GlobalQuadraticProblem` / SCIP | solver-reported numerical global bound; original candidate validation |
151
+ | General integer/nonconvex MINLP | ✅ explicit bounded factorable SCIP path | nonlinear equality/two-sided rows, abs/max/min and interval-certified indicators; no independent generic global proof |
152
+ | CPU PDLP | ✅ optional LP / diagonal convex QP | isolated worker; explicit selection |
146
153
  | Constraint programming | ✅ reference solver | exhaustive proof only within reference state budget |
147
154
  | OR-Tools CP-SAT | ✅ optional | exact verified integration target: OR-Tools `9.15.6755` |
148
155
  | TSP application | ✅ reference / MILP / restricted CP / heuristics | independent route validation; only exhaustive reference paths issue an independent optimality proof |
@@ -157,7 +164,7 @@ These APIs remain submodule-scoped and do not change the frozen 78-symbol top-le
157
164
  - Local-file symlink/path checks are fail-closed for static paths, but they are not a sandbox against a hostile process racing filesystem entries between validation and open.
158
165
  - `HistoryStore` is a local plaintext SQLite store. It is opt-in and minimizes persisted solver/problem payloads, but it is not encrypted and caller-supplied metadata can still contain sensitive information.
159
166
  - TSP/VRP exact reference algorithms are exponential and intentionally state-budgeted; the routing layer does not yet claim pickup-and-delivery, split delivery, stochastic travel time, live traffic, or real-time redispatch support.
160
- - The local salvage qualification environment did not contain the exact release build pins or OR-Tools runtime; those remain external release gates rather than locally claimed passes.
167
+ - Exact SCIP and cuOpt GPU execution adapters are not shipped; readiness probes cannot qualify execution. See the [0.4 guide](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md).
161
168
 
162
169
  ## Requirements
163
170
 
@@ -464,6 +471,8 @@ A native patch is selected only when the exact granular capability and persisten
464
471
  | HiGHS | `python -m pip install "solverpilot[highs]"` | public `highspy` native adapter |
465
472
  | OSQP | `python -m pip install "solverpilot[osqp]"` | public OSQP Python adapter |
466
473
  | SCIP | `python -m pip install "solverpilot[scip]"` | PySCIPOpt adapter |
474
+ | Global | `python -m pip install "solverpilot[global]"` | explicit SCIP nonconvex QP/MIQP/bounded MINLP |
475
+ | PDLP | `python -m pip install "solverpilot[pdlp]"` | isolated CPU LP/diagonal convex QP |
467
476
  | NLopt | `python -m pip install "solverpilot[nlopt]"` | NLopt SLSQP integration |
468
477
  | CasADi | `python -m pip install "solverpilot[casadi]"` | pinned CasADi 3.7.2 verification bridge |
469
478
  | Clarabel | `python -m pip install "solverpilot[clarabel]"` | direct convex conic solver, including PSD, exponential and power cones |
@@ -480,18 +489,19 @@ An upstream package being installable is not by itself SolverPilot integration e
480
489
  ## What is not supported or not claimed yet
481
490
 
482
491
  - learned LP performance routing in production;
483
- - nonconvex continuous QP in the matrix-first QP path;
484
- - mixed-integer `QuadraticProblem` / general MIQP as a stable matrix-first path;
485
- - exponential/power/generalized-power cone families;
486
- - generic verified PSD solving;
487
- - global optimality for generic NLP;
488
- - nonsmooth generic NLP atoms such as arbitrary `abs/max/min`;
489
- - general-integer or nonconvex/global MINLP;
492
+ - nonconvex or integer variables in the existing convex `QuadraticProblem`; use the separate `GlobalQuadraticProblem`;
493
+ - independent verification for every PSD matrix or transcendental cone dual;
494
+ - independent global optimality for arbitrary NLP/MINLP functions;
495
+ - nonsmooth atoms on the smooth Ipopt path; supported abs/max/min are available on the explicit bounded global path;
496
+ - exact SCIP and GPU execution adapters; readiness probes alone do not qualify them;
490
497
  - nonlinear equalities/two-sided nonlinear constraints in the current MINLP proof path;
491
- - indicator+MINLP bridge composition;
498
+ - global indicator bodies without a provable finite interval enclosure;
492
499
  - automatic guarantee that repeated solves use native warm starts/factorization reuse;
493
500
  - automatic independent certificates for every infeasible/unbounded backend termination;
494
- - a per-call validation-tolerance argument on high-level `solve()` / `solve_production()`.
501
+
502
+ Per-call `tolerances=ValidationTolerances(...)` is available on `solve()` and
503
+ `solve_production()`. The [0.4 scope table](docs/release/SOLVERPILOT-PUBLIC-DOCS-0.4.md#scope-against-the-research-checklist)
504
+ maps each research item to its implemented API and remaining boundary.
495
505
 
496
506
  See [Known Limitations](KNOWN-LIMITATIONS.md).
497
507
 
@@ -517,14 +527,17 @@ Extended modeling:
517
527
  13. [`13_cp_sat_optional.py`](examples/13_cp_sat_optional.py) — optional OR-Tools CP-SAT
518
528
  14. [`14_persistent_session_optional.py`](examples/14_persistent_session_optional.py) — persistent semantic-model session
519
529
 
520
- See [`examples/README.md`](examples/README.md).
530
+ New in 0.4: [global optimization](examples/22_global_optimization_optional.py),
531
+ [generalized power](examples/23_generalized_power_optional.py), and
532
+ [PDLP/certificate recovery](examples/24_pdlp_and_certificates_optional.py).
533
+ See all 24 examples in [`examples/README.md`](examples/README.md).
521
534
 
522
535
  ## API Reference
523
536
 
524
537
  - [Stable top-level Public API](docs/api/PUBLIC-API-v1.md)
525
538
  - [Extended Modeling API](docs/api/EXTENDED-MODELING-API.md)
526
- - [Current frozen top-level API snapshot](PUBLIC-API-V0_1_0RC2.json)
527
- - [Current core backend contract](BACKEND-CONTRACT-V0_1_0RC2.json)
539
+ - [Current frozen top-level API snapshot](PUBLIC-API-V0_4_0.json)
540
+ - [Current core backend contract](BACKEND-CONTRACT-V0_4_0.json)
528
541
  - [Track P merge provenance](TRACK-P-MERGE-PROVENANCE.json)
529
542
 
530
543
  ## Trust and provenance