solverforge 0.6.0__tar.gz → 0.6.2__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 (243) hide show
  1. {solverforge-0.6.0 → solverforge-0.6.2}/Cargo.lock +13 -85
  2. {solverforge-0.6.0 → solverforge-0.6.2}/Cargo.toml +19 -8
  3. {solverforge-0.6.0 → solverforge-0.6.2}/PKG-INFO +9 -15
  4. {solverforge-0.6.0 → solverforge-0.6.2}/README.md +8 -14
  5. {solverforge-0.6.0 → solverforge-0.6.2}/pyproject.toml +1 -1
  6. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/__init__.py +1 -1
  7. solverforge-0.6.0/.github/workflows/ci.yml +0 -69
  8. solverforge-0.6.0/.github/workflows/release.yml +0 -212
  9. solverforge-0.6.0/.gitignore +0 -11
  10. solverforge-0.6.0/.pre-commit-config.yaml +0 -31
  11. solverforge-0.6.0/.python-version +0 -1
  12. solverforge-0.6.0/AGENTS.md +0 -153
  13. solverforge-0.6.0/CHANGELOG.md +0 -61
  14. solverforge-0.6.0/Makefile +0 -419
  15. solverforge-0.6.0/WIREFRAME.md +0 -456
  16. solverforge-0.6.0/examples/list_tsp.py +0 -20
  17. solverforge-0.6.0/examples/mixed_job_shop.py +0 -30
  18. solverforge-0.6.0/examples/nqueens.py +0 -36
  19. solverforge-0.6.0/examples/shift_scheduling.py +0 -45
  20. solverforge-0.6.0/examples/solverforge_deliveries/README.md +0 -90
  21. solverforge-0.6.0/examples/solverforge_deliveries/__init__.py +0 -23
  22. solverforge-0.6.0/examples/solverforge_deliveries/__main__.py +0 -32
  23. solverforge-0.6.0/examples/solverforge_deliveries/solver.toml +0 -51
  24. solverforge-0.6.0/examples/solverforge_deliveries/src/__init__.py +0 -1
  25. solverforge-0.6.0/examples/solverforge_deliveries/src/api/__init__.py +0 -1
  26. solverforge-0.6.0/examples/solverforge_deliveries/src/api/dto.py +0 -233
  27. solverforge-0.6.0/examples/solverforge_deliveries/src/api/mod.py +0 -3
  28. solverforge-0.6.0/examples/solverforge_deliveries/src/api/routes.py +0 -239
  29. solverforge-0.6.0/examples/solverforge_deliveries/src/api/sse.py +0 -42
  30. solverforge-0.6.0/examples/solverforge_deliveries/src/constraints/__init__.py +0 -5
  31. solverforge-0.6.0/examples/solverforge_deliveries/src/constraints/mod.py +0 -47
  32. solverforge-0.6.0/examples/solverforge_deliveries/src/data/__init__.py +0 -5
  33. solverforge-0.6.0/examples/solverforge_deliveries/src/data/data_seed/__init__.py +0 -5
  34. solverforge-0.6.0/examples/solverforge_deliveries/src/data/data_seed/entrypoints.py +0 -149
  35. solverforge-0.6.0/examples/solverforge_deliveries/src/data/data_seed/locations.json +0 -1472
  36. solverforge-0.6.0/examples/solverforge_deliveries/src/data/mod.py +0 -1
  37. solverforge-0.6.0/examples/solverforge_deliveries/src/domain/__init__.py +0 -33
  38. solverforge-0.6.0/examples/solverforge_deliveries/src/domain/delivery.py +0 -32
  39. solverforge-0.6.0/examples/solverforge_deliveries/src/domain/metrics.py +0 -493
  40. solverforge-0.6.0/examples/solverforge_deliveries/src/domain/mod.py +0 -1
  41. solverforge-0.6.0/examples/solverforge_deliveries/src/domain/plan.py +0 -126
  42. solverforge-0.6.0/examples/solverforge_deliveries/src/domain/vehicle.py +0 -112
  43. solverforge-0.6.0/examples/solverforge_deliveries/src/lib.py +0 -34
  44. solverforge-0.6.0/examples/solverforge_deliveries/src/main.py +0 -22
  45. solverforge-0.6.0/examples/solverforge_deliveries/src/solver/__init__.py +0 -5
  46. solverforge-0.6.0/examples/solverforge_deliveries/src/solver/mod.py +0 -1
  47. solverforge-0.6.0/examples/solverforge_deliveries/src/solver/service/__init__.py +0 -196
  48. solverforge-0.6.0/examples/solverforge_deliveries/src/solver/service/mod.py +0 -7
  49. solverforge-0.6.0/examples/solverforge_deliveries/src/solver/service/payload.py +0 -86
  50. solverforge-0.6.0/examples/solverforge_deliveries/static/app/main.mjs +0 -287
  51. solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/core.mjs +0 -57
  52. solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/formatters.mjs +0 -53
  53. solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/preview.mjs +0 -154
  54. solverforge-0.6.0/examples/solverforge_deliveries/static/app/models/timeline.mjs +0 -94
  55. solverforge-0.6.0/examples/solverforge_deliveries/static/app/models.mjs +0 -8
  56. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/api-guide.mjs +0 -29
  57. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/components.mjs +0 -44
  58. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/data-tables.mjs +0 -98
  59. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/layout.mjs +0 -123
  60. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/lifecycle.mjs +0 -23
  61. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/modals.mjs +0 -63
  62. solverforge-0.6.0/examples/solverforge_deliveries/static/app/ui/overview.mjs +0 -172
  63. solverforge-0.6.0/examples/solverforge_deliveries/static/app.css +0 -196
  64. solverforge-0.6.0/examples/solverforge_deliveries/static/app.js +0 -3
  65. solverforge-0.6.0/examples/solverforge_deliveries/static/generated/ui-model.json +0 -25
  66. solverforge-0.6.0/examples/solverforge_deliveries/static/index.html +0 -22
  67. solverforge-0.6.0/examples/solverforge_deliveries/static/sf-config.json +0 -4
  68. solverforge-0.6.0/examples/solverforge_hospital/README.md +0 -86
  69. solverforge-0.6.0/examples/solverforge_hospital/__init__.py +0 -43
  70. solverforge-0.6.0/examples/solverforge_hospital/__main__.py +0 -32
  71. solverforge-0.6.0/examples/solverforge_hospital/solver.toml +0 -38
  72. solverforge-0.6.0/examples/solverforge_hospital/src/__init__.py +0 -41
  73. solverforge-0.6.0/examples/solverforge_hospital/src/api/__init__.py +0 -20
  74. solverforge-0.6.0/examples/solverforge_hospital/src/api/dto.py +0 -299
  75. solverforge-0.6.0/examples/solverforge_hospital/src/api/mod.py +0 -20
  76. solverforge-0.6.0/examples/solverforge_hospital/src/api/routes.py +0 -193
  77. solverforge-0.6.0/examples/solverforge_hospital/src/api/sse.py +0 -42
  78. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/__init__.py +0 -3
  79. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/assigned_shift.py +0 -14
  80. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/balance_assignments.py +0 -20
  81. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/desired_day.py +0 -24
  82. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/minimum_rest.py +0 -33
  83. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/mod.py +0 -42
  84. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/one_shift_per_day.py +0 -16
  85. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/overlapping_shift.py +0 -28
  86. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/required_skill.py +0 -20
  87. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/unavailable_employee.py +0 -32
  88. solverforge-0.6.0/examples/solverforge_hospital/src/constraints/undesired_day.py +0 -24
  89. solverforge-0.6.0/examples/solverforge_hospital/src/data/__init__.py +0 -23
  90. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/LARGE.json +0 -1
  91. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/__init__.py +0 -13
  92. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/availability.py +0 -16
  93. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/cohorts.py +0 -14
  94. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/coverage.py +0 -14
  95. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/demand.py +0 -9
  96. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/employees.py +0 -18
  97. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/entrypoints.py +0 -32
  98. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/large.py +0 -16
  99. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/preferences.py +0 -17
  100. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/shifts.py +0 -20
  101. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/skills.py +0 -15
  102. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/time_utils.py +0 -5
  103. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/validation.py +0 -12
  104. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/vocabulary.py +0 -10
  105. solverforge-0.6.0/examples/solverforge_hospital/src/data/data_seed/witness.py +0 -10
  106. solverforge-0.6.0/examples/solverforge_hospital/src/data/mod.py +0 -3
  107. solverforge-0.6.0/examples/solverforge_hospital/src/domain/__init__.py +0 -59
  108. solverforge-0.6.0/examples/solverforge_hospital/src/domain/care_hub.py +0 -63
  109. solverforge-0.6.0/examples/solverforge_hospital/src/domain/employee.py +0 -32
  110. solverforge-0.6.0/examples/solverforge_hospital/src/domain/mod.py +0 -19
  111. solverforge-0.6.0/examples/solverforge_hospital/src/domain/plan.py +0 -301
  112. solverforge-0.6.0/examples/solverforge_hospital/src/lib.py +0 -56
  113. solverforge-0.6.0/examples/solverforge_hospital/src/main.py +0 -22
  114. solverforge-0.6.0/examples/solverforge_hospital/src/solver/__init__.py +0 -8
  115. solverforge-0.6.0/examples/solverforge_hospital/src/solver/mod.py +0 -8
  116. solverforge-0.6.0/examples/solverforge_hospital/src/solver/service/__init__.py +0 -202
  117. solverforge-0.6.0/examples/solverforge_hospital/src/solver/service/mod.py +0 -8
  118. solverforge-0.6.0/examples/solverforge_hospital/src/solver/service/payload.py +0 -86
  119. solverforge-0.6.0/examples/solverforge_hospital/static/app/main.mjs +0 -130
  120. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/analysis-modal.mjs +0 -79
  121. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/datetime.mjs +0 -60
  122. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/employee-view.mjs +0 -95
  123. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/grouping.mjs +0 -77
  124. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/identity.mjs +0 -33
  125. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/location-view.mjs +0 -42
  126. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/presentation.mjs +0 -116
  127. solverforge-0.6.0/examples/solverforge_hospital/static/app/schedule/rail-renderer.mjs +0 -154
  128. solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/api-guide.mjs +0 -104
  129. solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/app-shell.mjs +0 -103
  130. solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/app-state.mjs +0 -7
  131. solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/config-loader.mjs +0 -63
  132. solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/data-panel.mjs +0 -22
  133. solverforge-0.6.0/examples/solverforge_hospital/static/app/shell/solver-controller.mjs +0 -134
  134. solverforge-0.6.0/examples/solverforge_hospital/static/app/views/registry.mjs +0 -10
  135. solverforge-0.6.0/examples/solverforge_hospital/static/generated/ui-model.json +0 -41
  136. solverforge-0.6.0/examples/solverforge_hospital/static/index.html +0 -23
  137. solverforge-0.6.0/examples/solverforge_hospital/static/sf-config.json +0 -5
  138. solverforge-0.6.0/examples/vrp_owner_hooks.py +0 -21
  139. solverforge-0.6.0/scripts/verify_release_artifacts.py +0 -211
  140. solverforge-0.6.0/scripts/verify_solverforge_release_base.py +0 -109
  141. solverforge-0.6.0/tests/python/test_candidate_trace_provenance.py +0 -174
  142. solverforge-0.6.0/tests/python/test_config.py +0 -225
  143. solverforge-0.6.0/tests/python/test_constraints.py +0 -1440
  144. solverforge-0.6.0/tests/python/test_decorators.py +0 -606
  145. solverforge-0.6.0/tests/python/test_deliveries_example.py +0 -380
  146. solverforge-0.6.0/tests/python/test_deliveries_frontend_app.py +0 -289
  147. solverforge-0.6.0/tests/python/test_examples_import_surface.py +0 -63
  148. solverforge-0.6.0/tests/python/test_examples_playwright.py +0 -296
  149. solverforge-0.6.0/tests/python/test_hospital_example.py +0 -199
  150. solverforge-0.6.0/tests/python/test_hospital_frontend_app.py +0 -400
  151. solverforge-0.6.0/tests/python/test_list_solving.py +0 -2089
  152. solverforge-0.6.0/tests/python/test_manager.py +0 -372
  153. solverforge-0.6.0/tests/python/test_mixed_solving.py +0 -8
  154. solverforge-0.6.0/tests/python/test_release_metadata.py +0 -195
  155. solverforge-0.6.0/tests/python/test_scalar_solving.py +0 -3275
  156. solverforge-0.6.0/tests/python/test_threading.py +0 -11
  157. solverforge-0.6.0/tests/python/test_tracebacks.py +0 -185
  158. solverforge-0.6.0/tests/python/test_ui_assets.py +0 -125
  159. solverforge-0.6.0/tests/rust/constraint_set.rs +0 -45
  160. solverforge-0.6.0/tests/rust/descriptor.rs +0 -85
  161. solverforge-0.6.0/tests/rust/manager.rs +0 -6
  162. solverforge-0.6.0/tests/rust/runtime_slots.rs +0 -226
  163. solverforge-0.6.0/tests/rust/score.rs +0 -8
  164. solverforge-0.6.0/tests/rust/state_clone.rs +0 -306
  165. solverforge-0.6.0/tests/rust.rs +0 -16
  166. {solverforge-0.6.0 → solverforge-0.6.2}/LICENSE +0 -0
  167. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/_native.pyi +0 -0
  168. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/config.py +0 -0
  169. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/console.py +0 -0
  170. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/constraints.py +0 -0
  171. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/decorators.py +0 -0
  172. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/errors.py +0 -0
  173. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/events.py +0 -0
  174. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/fields.py +0 -0
  175. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/groups.py +0 -0
  176. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/joiner.py +0 -0
  177. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/manager.py +0 -0
  178. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/model.py +0 -0
  179. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/py.typed +0 -0
  180. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/score.py +0 -0
  181. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/solver.py +0 -0
  182. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/typing.py +0 -0
  183. {solverforge-0.6.0 → solverforge-0.6.2}/python/solverforge/ui.py +0 -0
  184. {solverforge-0.6.0 → solverforge-0.6.2}/rust-toolchain.toml +0 -0
  185. {solverforge-0.6.0 → solverforge-0.6.2}/src/bindings.rs +0 -0
  186. {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/call.rs +0 -0
  187. {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/mod.rs +0 -0
  188. {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/registry.rs +0 -0
  189. {solverforge-0.6.0 → solverforge-0.6.2}/src/callbacks/threading.rs +0 -0
  190. {solverforge-0.6.0 → solverforge-0.6.2}/src/config.rs +0 -0
  191. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/compiled.rs +0 -0
  192. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/evaluate.rs +0 -0
  193. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/incremental.rs +0 -0
  194. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/list_precedence.rs +0 -0
  195. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/matches.rs +0 -0
  196. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/mod.rs +0 -0
  197. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/state.rs +0 -0
  198. {solverforge-0.6.0 → solverforge-0.6.2}/src/constraints/stream_plan.rs +0 -0
  199. {solverforge-0.6.0 → solverforge-0.6.2}/src/descriptor/extractor.rs +0 -0
  200. {solverforge-0.6.0 → solverforge-0.6.2}/src/descriptor/mod.rs +0 -0
  201. {solverforge-0.6.0 → solverforge-0.6.2}/src/descriptor/variable.rs +0 -0
  202. {solverforge-0.6.0 → solverforge-0.6.2}/src/error.rs +0 -0
  203. {solverforge-0.6.0 → solverforge-0.6.2}/src/intern.rs +0 -0
  204. {solverforge-0.6.0 → solverforge-0.6.2}/src/lib.rs +0 -0
  205. {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/candidate_trace.rs +0 -0
  206. {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/events.rs +0 -0
  207. {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/jobs.rs +0 -0
  208. {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/mod.rs +0 -0
  209. {solverforge-0.6.0 → solverforge-0.6.2}/src/manager/provenance.rs +0 -0
  210. {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/entity.rs +0 -0
  211. {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/list.rs +0 -0
  212. {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/mod.rs +0 -0
  213. {solverforge-0.6.0 → solverforge-0.6.2}/src/proxy/solution.rs +0 -0
  214. {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/candidate_metric.rs +0 -0
  215. {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/dynamic_assignment_group.rs +0 -0
  216. {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/dynamic_provider.rs +0 -0
  217. {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/list_slots.rs +0 -0
  218. {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/mod.rs +0 -0
  219. {solverforge-0.6.0 → solverforge-0.6.2}/src/runtime/scalar_slots.rs +0 -0
  220. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/build.rs +0 -0
  221. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/compiled.rs +0 -0
  222. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/mod.rs +0 -0
  223. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/parse.rs +0 -0
  224. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/python.rs +0 -0
  225. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/runtime_plan.rs +0 -0
  226. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/types.rs +0 -0
  227. {solverforge-0.6.0 → solverforge-0.6.2}/src/schema/validate.rs +0 -0
  228. {solverforge-0.6.0 → solverforge-0.6.2}/src/score.rs +0 -0
  229. {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/api.rs +0 -0
  230. {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/console.rs +0 -0
  231. {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/mod.rs +0 -0
  232. {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/progress.rs +0 -0
  233. {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/result.rs +0 -0
  234. {solverforge-0.6.0 → solverforge-0.6.2}/src/solver/solvable.rs +0 -0
  235. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/callback_view.rs +0 -0
  236. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/clone.rs +0 -0
  237. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/entity_table.rs +0 -0
  238. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/marshal.rs +0 -0
  239. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/mod.rs +0 -0
  240. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/solution.rs +0 -0
  241. {solverforge-0.6.0 → solverforge-0.6.2}/src/state/variables.rs +0 -0
  242. {solverforge-0.6.0 → solverforge-0.6.2}/src/ui.rs +0 -0
  243. {solverforge-0.6.0 → solverforge-0.6.2}/src/value.rs +0 -0
@@ -29,12 +29,6 @@ version = "2.13.0"
29
29
  source = "registry+https://github.com/rust-lang/crates.io-index"
30
30
  checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
31
31
 
32
- [[package]]
33
- name = "bytes"
34
- version = "1.12.0"
35
- source = "registry+https://github.com/rust-lang/crates.io-index"
36
- checksum = "8ae3f5d315924270530207e2a68396c3cc547f6dca3fbdca317cfb1a51edb593"
37
-
38
32
  [[package]]
39
33
  name = "cfg-if"
40
34
  version = "1.0.4"
@@ -104,16 +98,6 @@ version = "1.0.2"
104
98
  source = "registry+https://github.com/rust-lang/crates.io-index"
105
99
  checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
106
100
 
107
- [[package]]
108
- name = "errno"
109
- version = "0.3.14"
110
- source = "registry+https://github.com/rust-lang/crates.io-index"
111
- checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
112
- dependencies = [
113
- "libc",
114
- "windows-sys",
115
- ]
116
-
117
101
  [[package]]
118
102
  name = "getrandom"
119
103
  version = "0.4.3"
@@ -233,17 +217,6 @@ dependencies = [
233
217
  "autocfg",
234
218
  ]
235
219
 
236
- [[package]]
237
- name = "mio"
238
- version = "1.2.1"
239
- source = "registry+https://github.com/rust-lang/crates.io-index"
240
- checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda"
241
- dependencies = [
242
- "libc",
243
- "wasi",
244
- "windows-sys",
245
- ]
246
-
247
220
  [[package]]
248
221
  name = "nu-ansi-term"
249
222
  version = "0.50.3"
@@ -579,37 +552,17 @@ dependencies = [
579
552
  "lazy_static",
580
553
  ]
581
554
 
582
- [[package]]
583
- name = "signal-hook-registry"
584
- version = "1.4.8"
585
- source = "registry+https://github.com/rust-lang/crates.io-index"
586
- checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
587
- dependencies = [
588
- "errno",
589
- "libc",
590
- ]
591
-
592
555
  [[package]]
593
556
  name = "smallvec"
594
557
  version = "1.15.2"
595
558
  source = "registry+https://github.com/rust-lang/crates.io-index"
596
559
  checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
597
560
 
598
- [[package]]
599
- name = "socket2"
600
- version = "0.6.4"
601
- source = "registry+https://github.com/rust-lang/crates.io-index"
602
- checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51"
603
- dependencies = [
604
- "libc",
605
- "windows-sys",
606
- ]
607
-
608
561
  [[package]]
609
562
  name = "solverforge-bridge"
610
- version = "0.18.0"
563
+ version = "0.19.0"
611
564
  source = "registry+https://github.com/rust-lang/crates.io-index"
612
- checksum = "a9c592f73f90c14ca2af38b80ba6371ff4d41b6aaebafe341086225161836353"
565
+ checksum = "f47d5b1bc4e9ea86acf24e3e71f971161bc5c1eba09d4b7105a25542045ed59a"
613
566
  dependencies = [
614
567
  "solverforge-config",
615
568
  "solverforge-core",
@@ -619,9 +572,9 @@ dependencies = [
619
572
 
620
573
  [[package]]
621
574
  name = "solverforge-config"
622
- version = "0.18.0"
575
+ version = "0.19.0"
623
576
  source = "registry+https://github.com/rust-lang/crates.io-index"
624
- checksum = "0cb6e55b036aaff944d1c772ca6e51524c1dfe8dfa704342c2319b47665b8834"
577
+ checksum = "a94f2ff36fc3513dd17473fea8402a7908470b0d18132862e938b402d4cc3dce"
625
578
  dependencies = [
626
579
  "serde",
627
580
  "serde_yaml",
@@ -632,9 +585,9 @@ dependencies = [
632
585
 
633
586
  [[package]]
634
587
  name = "solverforge-console"
635
- version = "0.18.0"
588
+ version = "0.19.0"
636
589
  source = "registry+https://github.com/rust-lang/crates.io-index"
637
- checksum = "e100997cd6d2fbafc8eb8e1d84bf60149a1386b89e8562a81d9408085a00520c"
590
+ checksum = "5ecece452a5533bda0f129188cf5284b06b5f0f4b32b6334521e5dbcefa2a318"
638
591
  dependencies = [
639
592
  "num-format",
640
593
  "owo-colors",
@@ -644,18 +597,18 @@ dependencies = [
644
597
 
645
598
  [[package]]
646
599
  name = "solverforge-core"
647
- version = "0.18.0"
600
+ version = "0.19.0"
648
601
  source = "registry+https://github.com/rust-lang/crates.io-index"
649
- checksum = "d922c9a0ee10e0ba68c7c9b98e38d07399820358dc0d10d238a9e6641ef45d27"
602
+ checksum = "75396bba5cd24cd16c77477e7ef93dac5643026998904aa862c1bd3f70a5a04f"
650
603
  dependencies = [
651
604
  "thiserror",
652
605
  ]
653
606
 
654
607
  [[package]]
655
608
  name = "solverforge-scoring"
656
- version = "0.18.0"
609
+ version = "0.19.0"
657
610
  source = "registry+https://github.com/rust-lang/crates.io-index"
658
- checksum = "40a4b4eb8031ba04556106ae1bb13533c4f50ab206b3c5844c4e0284e42bd4f2"
611
+ checksum = "85df4f001bed630512b2205334113c1766d80ac8b7f4a5da1c2c63f680db1494"
659
612
  dependencies = [
660
613
  "solverforge-core",
661
614
  "thiserror",
@@ -663,9 +616,9 @@ dependencies = [
663
616
 
664
617
  [[package]]
665
618
  name = "solverforge-solver"
666
- version = "0.18.0"
619
+ version = "0.19.0"
667
620
  source = "registry+https://github.com/rust-lang/crates.io-index"
668
- checksum = "7a5b5a898495984107de03cdc9c151c39ec9b4d70cfa509950cbe58c263953a4"
621
+ checksum = "606d50e70307c448f09370028d7ec02172066899896fd8142dd59886b0cb555e"
669
622
  dependencies = [
670
623
  "rand",
671
624
  "rand_chacha",
@@ -691,7 +644,7 @@ dependencies = [
691
644
 
692
645
  [[package]]
693
646
  name = "solverforge_py"
694
- version = "0.6.0"
647
+ version = "0.6.2"
695
648
  dependencies = [
696
649
  "indexmap",
697
650
  "once_cell",
@@ -767,26 +720,7 @@ version = "1.52.3"
767
720
  source = "registry+https://github.com/rust-lang/crates.io-index"
768
721
  checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe"
769
722
  dependencies = [
770
- "bytes",
771
- "libc",
772
- "mio",
773
- "parking_lot",
774
723
  "pin-project-lite",
775
- "signal-hook-registry",
776
- "socket2",
777
- "tokio-macros",
778
- "windows-sys",
779
- ]
780
-
781
- [[package]]
782
- name = "tokio-macros"
783
- version = "2.7.0"
784
- source = "registry+https://github.com/rust-lang/crates.io-index"
785
- checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
786
- dependencies = [
787
- "proc-macro2",
788
- "quote",
789
- "syn",
790
724
  ]
791
725
 
792
726
  [[package]]
@@ -937,12 +871,6 @@ version = "0.1.1"
937
871
  source = "registry+https://github.com/rust-lang/crates.io-index"
938
872
  checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
939
873
 
940
- [[package]]
941
- name = "wasi"
942
- version = "0.11.1+wasi-snapshot-preview1"
943
- source = "registry+https://github.com/rust-lang/crates.io-index"
944
- checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
945
-
946
874
  [[package]]
947
875
  name = "windows-link"
948
876
  version = "0.2.1"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "solverforge_py"
3
- version = "0.6.0"
3
+ version = "0.6.2"
4
4
  edition = "2021"
5
5
  license = "Apache-2.0"
6
6
  rust-version = "1.95"
@@ -9,13 +9,24 @@ readme = "README.md"
9
9
  repository = "https://github.com/SolverForge/solverforge-py"
10
10
  homepage = "https://solverforge.org"
11
11
  documentation = "https://docs.solverforge.org"
12
+ include = [
13
+ "/Cargo.lock",
14
+ "/LICENSE",
15
+ "/README.md",
16
+ "/pyproject.toml",
17
+ "/python/solverforge/*.py",
18
+ "/python/solverforge/*.pyi",
19
+ "/python/solverforge/py.typed",
20
+ "/rust-toolchain.toml",
21
+ "/src/**",
22
+ ]
12
23
 
13
24
  [lib]
14
25
  name = "solverforge_py"
15
26
  crate-type = ["cdylib", "rlib"]
16
27
 
17
28
  [package.metadata.solverforge]
18
- version = "0.18.0"
29
+ version = "0.19.0"
19
30
 
20
31
  [dependencies]
21
32
  indexmap = "2.12.1"
@@ -31,12 +42,12 @@ toml = "0.9.8"
31
42
  tracing = "0.1.44"
32
43
  tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
33
44
 
34
- solverforge-config = { version = "=0.18.0" }
35
- solverforge-bridge = { version = "=0.18.0" }
36
- solverforge-console = { version = "=0.18.0", features = ["verbose-logging"] }
37
- solverforge-core = { version = "=0.18.0" }
38
- solverforge-scoring = { version = "=0.18.0" }
39
- solverforge-solver = { version = "=0.18.0" }
45
+ solverforge-config = { version = "=0.19.0" }
46
+ solverforge-bridge = { version = "=0.19.0" }
47
+ solverforge-console = { version = "=0.19.0", features = ["verbose-logging"] }
48
+ solverforge-core = { version = "=0.19.0" }
49
+ solverforge-scoring = { version = "=0.19.0" }
50
+ solverforge-solver = { version = "=0.19.0" }
40
51
  solverforge-ui = { version = "=0.7.0", default-features = false }
41
52
 
42
53
  [dev-dependencies]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: solverforge
3
- Version: 0.6.0
3
+ Version: 0.6.2
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -40,7 +40,7 @@ clone, mutate, and snapshot solutions safely. Python callbacks are the single
40
40
  constraint authoring surface.
41
41
 
42
42
  The package targets CPython 3.14 and Rust 1.95.0. This checkout consumes the
43
- published SolverForge Rust crates `0.18.0` and pins `solverforge-ui` to `0.7.0`
43
+ published SolverForge Rust crates `0.19.0` and pins `solverforge-ui` to `0.7.0`
44
44
  through exact crates.io versions in `Cargo.toml` and registry checksums in
45
45
  `Cargo.lock`; it has no local path or Git dependency override. The `solverforge`
46
46
  `0.6.x` line is the current dynamic binding architecture and intentionally
@@ -50,11 +50,12 @@ Java service requirements, and other APIs that are not part of this package.
50
50
 
51
51
  ## Installation
52
52
 
53
- Install the `solverforge` `0.6.0` release, built on the exact published and
54
- locked SolverForge Rust `0.18.0` registry dependency base:
53
+ The package version prepared by this checkout is `solverforge` `0.6.2`, built
54
+ on the exact published and locked SolverForge Rust `0.19.0` registry dependency
55
+ base. Install the matching package after publication with:
55
56
 
56
57
  ```sh
57
- python3.14 -m pip install "solverforge==0.6.0"
58
+ python3.14 -m pip install "solverforge==0.6.2"
58
59
  ```
59
60
 
60
61
  The installable wheel contains the core `solverforge` package, native extension,
@@ -73,13 +74,13 @@ make hospital-run
73
74
  make deliveries-run PORT=7861
74
75
  ```
75
76
 
76
- The same source-checkout examples can be run against the installed package
77
- without `PYTHONPATH` or an editable checkout:
77
+ After publication, the same source-checkout examples can be run against the
78
+ installed package without `PYTHONPATH` or an editable checkout:
78
79
 
79
80
  ```sh
80
81
  python3.14 -m venv .venv-examples
81
82
  . .venv-examples/bin/activate
82
- python -m pip install "solverforge[examples]==0.6.0"
83
+ python -m pip install "solverforge[examples]==0.6.2"
83
84
  python examples/nqueens.py
84
85
  python -m examples.solverforge_hospital
85
86
  python -m examples.solverforge_deliveries
@@ -402,13 +403,6 @@ solution state, safe to run concurrently, and treat solution-level lookup contex
402
403
  as immutable for the duration of a solve. Third-party Python extension modules
403
404
  used inside callbacks may still impose their own synchronization constraints.
404
405
 
405
- ## Release
406
-
407
- The current package and crate version is `0.6.0`, built on the published
408
- SolverForge `0.18.0` crates and `solverforge-ui` `0.7.0`. `Cargo.lock` resolves
409
- those exact crates from crates.io. Maintainers run `make pre-release` to verify
410
- the dependency base, local CI, distribution metadata, and artifact contents.
411
-
412
406
  ## License
413
407
 
414
408
  SolverForge Python is licensed under the Apache License, Version 2.0. See
@@ -9,7 +9,7 @@ clone, mutate, and snapshot solutions safely. Python callbacks are the single
9
9
  constraint authoring surface.
10
10
 
11
11
  The package targets CPython 3.14 and Rust 1.95.0. This checkout consumes the
12
- published SolverForge Rust crates `0.18.0` and pins `solverforge-ui` to `0.7.0`
12
+ published SolverForge Rust crates `0.19.0` and pins `solverforge-ui` to `0.7.0`
13
13
  through exact crates.io versions in `Cargo.toml` and registry checksums in
14
14
  `Cargo.lock`; it has no local path or Git dependency override. The `solverforge`
15
15
  `0.6.x` line is the current dynamic binding architecture and intentionally
@@ -19,11 +19,12 @@ Java service requirements, and other APIs that are not part of this package.
19
19
 
20
20
  ## Installation
21
21
 
22
- Install the `solverforge` `0.6.0` release, built on the exact published and
23
- locked SolverForge Rust `0.18.0` registry dependency base:
22
+ The package version prepared by this checkout is `solverforge` `0.6.2`, built
23
+ on the exact published and locked SolverForge Rust `0.19.0` registry dependency
24
+ base. Install the matching package after publication with:
24
25
 
25
26
  ```sh
26
- python3.14 -m pip install "solverforge==0.6.0"
27
+ python3.14 -m pip install "solverforge==0.6.2"
27
28
  ```
28
29
 
29
30
  The installable wheel contains the core `solverforge` package, native extension,
@@ -42,13 +43,13 @@ make hospital-run
42
43
  make deliveries-run PORT=7861
43
44
  ```
44
45
 
45
- The same source-checkout examples can be run against the installed package
46
- without `PYTHONPATH` or an editable checkout:
46
+ After publication, the same source-checkout examples can be run against the
47
+ installed package without `PYTHONPATH` or an editable checkout:
47
48
 
48
49
  ```sh
49
50
  python3.14 -m venv .venv-examples
50
51
  . .venv-examples/bin/activate
51
- python -m pip install "solverforge[examples]==0.6.0"
52
+ python -m pip install "solverforge[examples]==0.6.2"
52
53
  python examples/nqueens.py
53
54
  python -m examples.solverforge_hospital
54
55
  python -m examples.solverforge_deliveries
@@ -371,13 +372,6 @@ solution state, safe to run concurrently, and treat solution-level lookup contex
371
372
  as immutable for the duration of a solve. Third-party Python extension modules
372
373
  used inside callbacks may still impose their own synchronization constraints.
373
374
 
374
- ## Release
375
-
376
- The current package and crate version is `0.6.0`, built on the published
377
- SolverForge `0.18.0` crates and `solverforge-ui` `0.7.0`. `Cargo.lock` resolves
378
- those exact crates from crates.io. Maintainers run `make pre-release` to verify
379
- the dependency base, local CI, distribution metadata, and artifact contents.
380
-
381
375
  ## License
382
376
 
383
377
  SolverForge Python is licensed under the Apache License, Version 2.0. See
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "solverforge"
7
- version = "0.6.0"
7
+ version = "0.6.2"
8
8
  description = "Dynamic Python bindings for the SolverForge constraint solver."
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -40,7 +40,7 @@ from .manager import JobHandle, SolverManager
40
40
  from .score import HardMediumSoftScore, HardSoftDecimalScore, HardSoftScore, SoftScore
41
41
  from .solver import Solver
42
42
 
43
- __version__ = "0.6.0"
43
+ __version__ = "0.6.2"
44
44
 
45
45
  __all__ = [
46
46
  "CallbackError",
@@ -1,69 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- pull_request:
7
-
8
- permissions:
9
- contents: read
10
-
11
- env:
12
- PYTHON_VERSION: "3.14"
13
- RUST_VERSION: "1.95.0"
14
-
15
- jobs:
16
- ci-local:
17
- name: local CI gate
18
- runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
19
- steps:
20
- - name: Checkout solverforge-py
21
- uses: actions/checkout@v6
22
-
23
- - name: Set up Python
24
- shell: bash
25
- run: |
26
- curl --retry 5 --retry-all-errors --retry-delay 5 \
27
- -LsSf https://astral.sh/uv/install.sh | sh
28
- echo "${HOME}/.local/bin" >> "${GITHUB_PATH}"
29
- "${HOME}/.local/bin/uv" python install "${PYTHON_VERSION}"
30
- host_python="$("${HOME}/.local/bin/uv" python find "${PYTHON_VERSION}")"
31
- host_python_dir="$(dirname "${host_python}")"
32
- host_python_libdir="$("${host_python}" -c 'import sysconfig; print(sysconfig.get_config_var("LIBDIR") or "")')"
33
- echo "${host_python_dir}" >> "${GITHUB_PATH}"
34
- echo "HOST_PYTHON=${host_python}" >> "${GITHUB_ENV}"
35
- echo "PYO3_PYTHON=${host_python}" >> "${GITHUB_ENV}"
36
- echo "PYTHON_SYS_EXECUTABLE=${host_python}" >> "${GITHUB_ENV}"
37
- echo "LIBRARY_PATH=${host_python_libdir}:${LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
38
- echo "LD_LIBRARY_PATH=${host_python_libdir}:${LD_LIBRARY_PATH:-}" >> "${GITHUB_ENV}"
39
- "${host_python}" --version
40
-
41
- - name: Set up Rust
42
- shell: bash
43
- run: |
44
- curl --retry 5 --retry-all-errors --retry-delay 5 \
45
- --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
46
- | sh -s -- -y --profile minimal --default-toolchain "${RUST_VERSION}" \
47
- --component rustfmt --component clippy
48
- if [ -f "${HOME}/.cargo/env" ]; then
49
- . "${HOME}/.cargo/env"
50
- echo "${HOME}/.cargo/bin" >> "${GITHUB_PATH}"
51
- else
52
- . /usr/local/cargo/env
53
- echo "/usr/local/cargo/bin" >> "${GITHUB_PATH}"
54
- fi
55
- rustc --version
56
- cargo --version
57
-
58
- - name: Validate SolverForge release base
59
- run: make release-base-check
60
-
61
- - name: Install Playwright system dependencies
62
- if: ${{ runner.os == 'Linux' }}
63
- run: make install-playwright-system-deps
64
-
65
- - name: Run local CI
66
- run: make ci-local
67
-
68
- - name: Build and verify local distributions
69
- run: make build-dist dist-check smoke-wheel
@@ -1,212 +0,0 @@
1
- name: Release
2
-
3
- on:
4
- workflow_dispatch: {}
5
- push:
6
- tags:
7
- - "v*.*.*"
8
-
9
- permissions:
10
- contents: read
11
-
12
- env:
13
- PYTHON_VERSION: "3.14"
14
- RUST_VERSION: "1.95.0"
15
-
16
- jobs:
17
- forgejo-release-guard:
18
- name: Forgejo release guard
19
- if: github.server_url != 'https://github.com'
20
- runs-on: rust
21
- steps:
22
- - name: Skip publish-only release workflow
23
- run: echo "Release publishing runs only on GitHub; Forgejo tag CI is intentionally a no-op."
24
-
25
- sdist:
26
- name: source distribution
27
- if: github.server_url == 'https://github.com'
28
- runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
29
- steps:
30
- - name: Checkout solverforge-py
31
- uses: actions/checkout@v6
32
- with:
33
- path: solverforge-py
34
-
35
- - name: Set up Python
36
- uses: actions/setup-python@v6
37
- with:
38
- python-version: ${{ env.PYTHON_VERSION }}
39
-
40
- - name: Set up Rust
41
- uses: dtolnay/rust-toolchain@stable
42
- with:
43
- toolchain: ${{ env.RUST_VERSION }}
44
- components: rustfmt, clippy
45
-
46
- - name: Build sdist
47
- working-directory: solverforge-py
48
- run: make build-sdist
49
-
50
- - name: Upload sdist
51
- uses: actions/upload-artifact@v7
52
- with:
53
- name: sdist
54
- path: solverforge-py/dist/*.tar.gz
55
-
56
- wheels:
57
- name: wheel ${{ matrix.os }} ${{ matrix.target }}
58
- if: github.server_url == 'https://github.com'
59
- runs-on: ${{ github.server_url == 'https://github.com' && matrix.os || 'rust' }}
60
- strategy:
61
- fail-fast: false
62
- matrix:
63
- include:
64
- - os: ubuntu-latest
65
- target: x86_64
66
- manylinux: "2014"
67
- interpreter: python3.14
68
- - os: macos-14
69
- target: aarch64
70
- manylinux: ""
71
- interpreter: python3.14
72
- - os: windows-latest
73
- target: x64
74
- manylinux: ""
75
- interpreter: python
76
- steps:
77
- - name: Checkout solverforge-py
78
- uses: actions/checkout@v6
79
- with:
80
- path: solverforge-py
81
-
82
- - name: Set up Python
83
- uses: actions/setup-python@v6
84
- with:
85
- python-version: ${{ env.PYTHON_VERSION }}
86
-
87
- - name: Build wheels
88
- uses: PyO3/maturin-action@v1
89
- with:
90
- command: build
91
- args: --release --locked --strip --compatibility pypi -i ${{ matrix.interpreter }} --out dist
92
- manylinux: ${{ matrix.manylinux }}
93
- target: ${{ matrix.target }}
94
- rust-toolchain: ${{ env.RUST_VERSION }}
95
- working-directory: solverforge-py
96
-
97
- - name: Upload wheels
98
- uses: actions/upload-artifact@v7
99
- with:
100
- name: wheels-${{ matrix.os }}-${{ matrix.target }}
101
- path: solverforge-py/dist/*.whl
102
-
103
- verify:
104
- name: verify artifacts
105
- if: github.server_url == 'https://github.com'
106
- runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
107
- needs: [sdist, wheels]
108
- steps:
109
- - name: Checkout solverforge-py
110
- uses: actions/checkout@v6
111
-
112
- - name: Set up Python
113
- uses: actions/setup-python@v6
114
- with:
115
- python-version: ${{ env.PYTHON_VERSION }}
116
-
117
- - name: Download artifacts
118
- uses: actions/download-artifact@v8
119
- with:
120
- path: artifact-download
121
-
122
- - name: Collect distributions
123
- run: |
124
- mkdir dist
125
- find artifact-download -type f \( -name '*.whl' -o -name '*.tar.gz' \) -exec cp '{}' dist/ \;
126
-
127
- - name: Install release tools
128
- run: python -m pip install --disable-pip-version-check twine
129
-
130
- - name: Check metadata
131
- run: |
132
- python -m twine check dist/*
133
- python scripts/verify_release_artifacts.py --dist dist
134
-
135
- - name: Upload verified distributions
136
- uses: actions/upload-artifact@v7
137
- with:
138
- name: release-dist
139
- path: dist/*
140
-
141
- publish-testpypi:
142
- name: publish to TestPyPI
143
- runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
144
- needs: verify
145
- if: >-
146
- always() &&
147
- needs.verify.result == 'success' &&
148
- github.server_url == 'https://github.com' &&
149
- github.event_name == 'workflow_dispatch'
150
- environment: testpypi
151
- permissions:
152
- contents: read
153
- steps:
154
- - name: Download verified distributions
155
- uses: actions/download-artifact@v8
156
- with:
157
- name: release-dist
158
- path: dist
159
-
160
- - name: Publish to TestPyPI
161
- uses: pypa/gh-action-pypi-publish@release/v1
162
- with:
163
- repository-url: https://test.pypi.org/legacy/
164
- password: ${{ secrets.TEST_PYPI_API_TOKEN }}
165
-
166
- publish-pypi:
167
- name: publish to PyPI
168
- runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'rust' }}
169
- needs: verify
170
- if: >-
171
- always() &&
172
- needs.verify.result == 'success' &&
173
- github.server_url == 'https://github.com' &&
174
- github.event_name == 'push' &&
175
- startsWith(github.ref, 'refs/tags/v')
176
- environment: pypi
177
- permissions:
178
- contents: read
179
- steps:
180
- - name: Checkout solverforge-py
181
- uses: actions/checkout@v6
182
-
183
- - name: Set up Python
184
- uses: actions/setup-python@v6
185
- with:
186
- python-version: ${{ env.PYTHON_VERSION }}
187
-
188
- - name: Validate tag version
189
- run: |
190
- python - <<'PY'
191
- import os
192
- import tomllib
193
-
194
- with open("pyproject.toml", "rb") as handle:
195
- version = tomllib.load(handle)["project"]["version"]
196
-
197
- expected = f"v{version}"
198
- actual = os.environ["GITHUB_REF_NAME"]
199
- if actual != expected:
200
- raise SystemExit(f"tag {actual} does not match package version {expected}")
201
- PY
202
-
203
- - name: Download verified distributions
204
- uses: actions/download-artifact@v8
205
- with:
206
- name: release-dist
207
- path: dist
208
-
209
- - name: Publish to PyPI
210
- uses: pypa/gh-action-pypi-publish@release/v1
211
- with:
212
- password: ${{ secrets.PYPI_API_TOKEN }}
@@ -1,11 +0,0 @@
1
- /target/
2
- /.venv/
3
- /.mypy_cache/
4
- /.pytest_cache/
5
- /.ruff_cache/
6
- /dist/
7
- /wheelhouse/
8
- *.egg-info/
9
- __pycache__/
10
- *.py[cod]
11
- python/solverforge/_native*.so