openscvx 0.3.1.dev60__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 (217) hide show
  1. openscvx-0.3.1.dev60/.github/assets/logo.svg +1 -0
  2. openscvx-0.3.1.dev60/.github/release-drafter.yml +56 -0
  3. openscvx-0.3.1.dev60/.github/workflows/_docs.yml +77 -0
  4. openscvx-0.3.1.dev60/.github/workflows/docs.yml +14 -0
  5. openscvx-0.3.1.dev60/.github/workflows/lint.yml +38 -0
  6. openscvx-0.3.1.dev60/.github/workflows/nightly.yml +53 -0
  7. openscvx-0.3.1.dev60/.github/workflows/release-drafter.yml +42 -0
  8. openscvx-0.3.1.dev60/.github/workflows/release.yml +59 -0
  9. openscvx-0.3.1.dev60/.github/workflows/tests-integration.yml +53 -0
  10. openscvx-0.3.1.dev60/.github/workflows/tests-unit.yml +54 -0
  11. openscvx-0.3.1.dev60/.gitignore +206 -0
  12. openscvx-0.3.1.dev60/LICENSE +201 -0
  13. openscvx-0.3.1.dev60/PKG-INFO +351 -0
  14. openscvx-0.3.1.dev60/README.md +314 -0
  15. openscvx-0.3.1.dev60/docs/Overview/constraint_reformulation.md +10 -0
  16. openscvx-0.3.1.dev60/docs/Overview/control_parameterization.md +4 -0
  17. openscvx-0.3.1.dev60/docs/Overview/discretization.md +81 -0
  18. openscvx-0.3.1.dev60/docs/Overview/ocp.md +244 -0
  19. openscvx-0.3.1.dev60/docs/Overview/scvx.md +49 -0
  20. openscvx-0.3.1.dev60/docs/Overview/time_dilation.md +4 -0
  21. openscvx-0.3.1.dev60/docs/UnderTheHood/lowering_architecture.md +168 -0
  22. openscvx-0.3.1.dev60/docs/UnderTheHood/vectorization_and_vmapping.md +518 -0
  23. openscvx-0.3.1.dev60/docs/Usage/advanced_problem_setup.md +249 -0
  24. openscvx-0.3.1.dev60/docs/Usage/api.md +121 -0
  25. openscvx-0.3.1.dev60/docs/Usage/api_constraints.md +41 -0
  26. openscvx-0.3.1.dev60/docs/Usage/api_control.md +10 -0
  27. openscvx-0.3.1.dev60/docs/Usage/api_integrators.md +25 -0
  28. openscvx-0.3.1.dev60/docs/Usage/api_state.md +26 -0
  29. openscvx-0.3.1.dev60/docs/Usage/api_trajoptproblem.md +48 -0
  30. openscvx-0.3.1.dev60/docs/Usage/api_variable.md +6 -0
  31. openscvx-0.3.1.dev60/docs/Usage/basic_problem_setup.md +273 -0
  32. openscvx-0.3.1.dev60/docs/Usage/tutorial_6dof_los_guidance.md +436 -0
  33. openscvx-0.3.1.dev60/docs/Usage/tutorial_6dof_obstacle_avoidance.md +294 -0
  34. openscvx-0.3.1.dev60/docs/Usage/tutorials.md +46 -0
  35. openscvx-0.3.1.dev60/docs/assets/favicon.png +0 -0
  36. openscvx-0.3.1.dev60/docs/assets/images/ct-scvx_dark.png +0 -0
  37. openscvx-0.3.1.dev60/docs/assets/images/ct-scvx_light.png +0 -0
  38. openscvx-0.3.1.dev60/docs/assets/images/ctcs_dark.png +0 -0
  39. openscvx-0.3.1.dev60/docs/assets/images/ctcs_light.png +0 -0
  40. openscvx-0.3.1.dev60/docs/assets/images/problem_class_dark.png +0 -0
  41. openscvx-0.3.1.dev60/docs/assets/images/problem_class_light.png +0 -0
  42. openscvx-0.3.1.dev60/docs/assets/logo.svg +1 -0
  43. openscvx-0.3.1.dev60/docs/citation.md +49 -0
  44. openscvx-0.3.1.dev60/docs/examples.md +74 -0
  45. openscvx-0.3.1.dev60/docs/getting-started.md +235 -0
  46. openscvx-0.3.1.dev60/docs/index.md +9 -0
  47. openscvx-0.3.1.dev60/docs/javascripts/mathjax.js +19 -0
  48. openscvx-0.3.1.dev60/examples/abstract/3DoF_pdg.py +178 -0
  49. openscvx-0.3.1.dev60/examples/abstract/brachistochrone.py +114 -0
  50. openscvx-0.3.1.dev60/examples/car/dubins_car.py +150 -0
  51. openscvx-0.3.1.dev60/examples/car/dubins_car_disjoint.py +134 -0
  52. openscvx-0.3.1.dev60/examples/car/dubins_car_stljax.py +143 -0
  53. openscvx-0.3.1.dev60/examples/drone/cinema_vp.py +278 -0
  54. openscvx-0.3.1.dev60/examples/drone/cinema_vp_realtime_base.py +233 -0
  55. openscvx-0.3.1.dev60/examples/drone/dr_double_integrator.py +178 -0
  56. openscvx-0.3.1.dev60/examples/drone/dr_vp.py +277 -0
  57. openscvx-0.3.1.dev60/examples/drone/dr_vp_nodal.py +278 -0
  58. openscvx-0.3.1.dev60/examples/drone/dr_vp_polytope.py +291 -0
  59. openscvx-0.3.1.dev60/examples/drone/drone_racing.py +312 -0
  60. openscvx-0.3.1.dev60/examples/drone/obstacle_avoidance.py +182 -0
  61. openscvx-0.3.1.dev60/examples/drone/obstacle_avoidance_nodal.py +176 -0
  62. openscvx-0.3.1.dev60/examples/drone/obstacle_avoidance_realtime_base.py +180 -0
  63. openscvx-0.3.1.dev60/examples/plotting.py +3738 -0
  64. openscvx-0.3.1.dev60/examples/realtime/cinema_vp_realtime.py +631 -0
  65. openscvx-0.3.1.dev60/examples/realtime/drone_racing_realtime.py +604 -0
  66. openscvx-0.3.1.dev60/examples/realtime/dubins_car_realtime.py +409 -0
  67. openscvx-0.3.1.dev60/examples/realtime/obstacle_avoidance_realtime.py +466 -0
  68. openscvx-0.3.1.dev60/figures/ctlos_cine.gif +0 -0
  69. openscvx-0.3.1.dev60/figures/ctlos_dr.gif +0 -0
  70. openscvx-0.3.1.dev60/figures/dtlos_cine.gif +0 -0
  71. openscvx-0.3.1.dev60/figures/dtlos_dr.gif +0 -0
  72. openscvx-0.3.1.dev60/figures/openscvx_logo.svg +1 -0
  73. openscvx-0.3.1.dev60/figures/oscvx_structure_full_dark.svg +1 -0
  74. openscvx-0.3.1.dev60/figures/video_preview.png +0 -0
  75. openscvx-0.3.1.dev60/material/__init__.py +21 -0
  76. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/1-background.avif +0 -0
  77. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
  78. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
  79. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
  80. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
  81. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/2-mars.avif +0 -0
  82. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
  83. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
  84. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
  85. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
  86. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/3-moon.avif +0 -0
  87. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
  88. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
  89. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
  90. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
  91. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/4-sat1.avif +0 -0
  92. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
  93. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
  94. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
  95. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
  96. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/5-space.avif +0 -0
  97. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
  98. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
  99. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
  100. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
  101. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/6-earth.avif +0 -0
  102. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
  103. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
  104. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
  105. openscvx-0.3.1.dev60/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
  106. openscvx-0.3.1.dev60/material/overrides/assets/javascripts/parallax.js +54 -0
  107. openscvx-0.3.1.dev60/material/overrides/assets/logo.svg +1 -0
  108. openscvx-0.3.1.dev60/material/overrides/assets/stylesheets/custom.css +135 -0
  109. openscvx-0.3.1.dev60/material/overrides/assets/stylesheets/parallax.css +216 -0
  110. openscvx-0.3.1.dev60/material/overrides/home.html +26 -0
  111. openscvx-0.3.1.dev60/material/overrides/main.html +8 -0
  112. openscvx-0.3.1.dev60/material/overrides/partials/parallax/hero.html +46 -0
  113. openscvx-0.3.1.dev60/material/overrides/partials/parallax.html +7 -0
  114. openscvx-0.3.1.dev60/mkdocs.yml +195 -0
  115. openscvx-0.3.1.dev60/openscvx/__init__.py +111 -0
  116. openscvx-0.3.1.dev60/openscvx/_version.py +34 -0
  117. openscvx-0.3.1.dev60/openscvx/algorithms/__init__.py +45 -0
  118. openscvx-0.3.1.dev60/openscvx/algorithms/autotuning.py +24 -0
  119. openscvx-0.3.1.dev60/openscvx/algorithms/optimization_results.py +215 -0
  120. openscvx-0.3.1.dev60/openscvx/algorithms/ptr.py +343 -0
  121. openscvx-0.3.1.dev60/openscvx/algorithms/solver_state.py +232 -0
  122. openscvx-0.3.1.dev60/openscvx/config.py +437 -0
  123. openscvx-0.3.1.dev60/openscvx/discretization/__init__.py +47 -0
  124. openscvx-0.3.1.dev60/openscvx/discretization/discretization.py +236 -0
  125. openscvx-0.3.1.dev60/openscvx/expert/__init__.py +23 -0
  126. openscvx-0.3.1.dev60/openscvx/expert/byof.py +326 -0
  127. openscvx-0.3.1.dev60/openscvx/expert/lowering.py +419 -0
  128. openscvx-0.3.1.dev60/openscvx/expert/validation.py +357 -0
  129. openscvx-0.3.1.dev60/openscvx/integrators/__init__.py +48 -0
  130. openscvx-0.3.1.dev60/openscvx/integrators/runge_kutta.py +281 -0
  131. openscvx-0.3.1.dev60/openscvx/lowered/__init__.py +30 -0
  132. openscvx-0.3.1.dev60/openscvx/lowered/cvxpy_constraints.py +23 -0
  133. openscvx-0.3.1.dev60/openscvx/lowered/cvxpy_variables.py +124 -0
  134. openscvx-0.3.1.dev60/openscvx/lowered/dynamics.py +34 -0
  135. openscvx-0.3.1.dev60/openscvx/lowered/jax_constraints.py +133 -0
  136. openscvx-0.3.1.dev60/openscvx/lowered/parameters.py +54 -0
  137. openscvx-0.3.1.dev60/openscvx/lowered/problem.py +70 -0
  138. openscvx-0.3.1.dev60/openscvx/lowered/unified.py +718 -0
  139. openscvx-0.3.1.dev60/openscvx/plotting/__init__.py +30 -0
  140. openscvx-0.3.1.dev60/openscvx/plotting/plotting.py +1155 -0
  141. openscvx-0.3.1.dev60/openscvx/problem.py +637 -0
  142. openscvx-0.3.1.dev60/openscvx/propagation/__init__.py +60 -0
  143. openscvx-0.3.1.dev60/openscvx/propagation/post_processing.py +104 -0
  144. openscvx-0.3.1.dev60/openscvx/propagation/propagation.py +248 -0
  145. openscvx-0.3.1.dev60/openscvx/solvers/__init__.py +47 -0
  146. openscvx-0.3.1.dev60/openscvx/solvers/cvxpy.py +226 -0
  147. openscvx-0.3.1.dev60/openscvx/symbolic/__init__.py +9 -0
  148. openscvx-0.3.1.dev60/openscvx/symbolic/augmentation.py +630 -0
  149. openscvx-0.3.1.dev60/openscvx/symbolic/builder.py +492 -0
  150. openscvx-0.3.1.dev60/openscvx/symbolic/constraint_set.py +92 -0
  151. openscvx-0.3.1.dev60/openscvx/symbolic/expr/__init__.py +193 -0
  152. openscvx-0.3.1.dev60/openscvx/symbolic/expr/arithmetic.py +517 -0
  153. openscvx-0.3.1.dev60/openscvx/symbolic/expr/array.py +425 -0
  154. openscvx-0.3.1.dev60/openscvx/symbolic/expr/constraint.py +796 -0
  155. openscvx-0.3.1.dev60/openscvx/symbolic/expr/control.py +135 -0
  156. openscvx-0.3.1.dev60/openscvx/symbolic/expr/expr.py +720 -0
  157. openscvx-0.3.1.dev60/openscvx/symbolic/expr/linalg.py +279 -0
  158. openscvx-0.3.1.dev60/openscvx/symbolic/expr/math.py +699 -0
  159. openscvx-0.3.1.dev60/openscvx/symbolic/expr/spatial.py +209 -0
  160. openscvx-0.3.1.dev60/openscvx/symbolic/expr/state.py +607 -0
  161. openscvx-0.3.1.dev60/openscvx/symbolic/expr/stl.py +136 -0
  162. openscvx-0.3.1.dev60/openscvx/symbolic/expr/variable.py +321 -0
  163. openscvx-0.3.1.dev60/openscvx/symbolic/hashing.py +112 -0
  164. openscvx-0.3.1.dev60/openscvx/symbolic/lower.py +760 -0
  165. openscvx-0.3.1.dev60/openscvx/symbolic/lowerers/__init__.py +106 -0
  166. openscvx-0.3.1.dev60/openscvx/symbolic/lowerers/cvxpy.py +1223 -0
  167. openscvx-0.3.1.dev60/openscvx/symbolic/lowerers/jax.py +1042 -0
  168. openscvx-0.3.1.dev60/openscvx/symbolic/preprocessing.py +757 -0
  169. openscvx-0.3.1.dev60/openscvx/symbolic/problem.py +110 -0
  170. openscvx-0.3.1.dev60/openscvx/symbolic/time.py +116 -0
  171. openscvx-0.3.1.dev60/openscvx/symbolic/unified.py +420 -0
  172. openscvx-0.3.1.dev60/openscvx/utils/__init__.py +20 -0
  173. openscvx-0.3.1.dev60/openscvx/utils/cache.py +131 -0
  174. openscvx-0.3.1.dev60/openscvx/utils/caching.py +210 -0
  175. openscvx-0.3.1.dev60/openscvx/utils/printing.py +301 -0
  176. openscvx-0.3.1.dev60/openscvx/utils/profiling.py +37 -0
  177. openscvx-0.3.1.dev60/openscvx/utils/utils.py +100 -0
  178. openscvx-0.3.1.dev60/openscvx.egg-info/PKG-INFO +351 -0
  179. openscvx-0.3.1.dev60/openscvx.egg-info/SOURCES.txt +215 -0
  180. openscvx-0.3.1.dev60/openscvx.egg-info/dependency_links.txt +1 -0
  181. openscvx-0.3.1.dev60/openscvx.egg-info/requires.txt +27 -0
  182. openscvx-0.3.1.dev60/openscvx.egg-info/top_level.txt +1 -0
  183. openscvx-0.3.1.dev60/pyproject.toml +137 -0
  184. openscvx-0.3.1.dev60/scripts/gen_example_pages.py +103 -0
  185. openscvx-0.3.1.dev60/scripts/gen_ref_pages.py +41 -0
  186. openscvx-0.3.1.dev60/setup.cfg +4 -0
  187. openscvx-0.3.1.dev60/tests/__init__.py +0 -0
  188. openscvx-0.3.1.dev60/tests/brachistochrone_analytical.py +208 -0
  189. openscvx-0.3.1.dev60/tests/symbolic/__init__.py +0 -0
  190. openscvx-0.3.1.dev60/tests/symbolic/expr/__init__.py +0 -0
  191. openscvx-0.3.1.dev60/tests/symbolic/expr/test_arithmetic.py +1133 -0
  192. openscvx-0.3.1.dev60/tests/symbolic/expr/test_array.py +644 -0
  193. openscvx-0.3.1.dev60/tests/symbolic/expr/test_constraint.py +1476 -0
  194. openscvx-0.3.1.dev60/tests/symbolic/expr/test_expr.py +353 -0
  195. openscvx-0.3.1.dev60/tests/symbolic/expr/test_linalg.py +691 -0
  196. openscvx-0.3.1.dev60/tests/symbolic/expr/test_math.py +2359 -0
  197. openscvx-0.3.1.dev60/tests/symbolic/expr/test_node_reference.py +268 -0
  198. openscvx-0.3.1.dev60/tests/symbolic/expr/test_parameters.py +538 -0
  199. openscvx-0.3.1.dev60/tests/symbolic/expr/test_scaling.py +386 -0
  200. openscvx-0.3.1.dev60/tests/symbolic/expr/test_spatial.py +689 -0
  201. openscvx-0.3.1.dev60/tests/symbolic/expr/test_variable.py +500 -0
  202. openscvx-0.3.1.dev60/tests/symbolic/test_augmentation.py +1399 -0
  203. openscvx-0.3.1.dev60/tests/symbolic/test_hashing.py +1049 -0
  204. openscvx-0.3.1.dev60/tests/symbolic/test_lower_cvxpy.py +175 -0
  205. openscvx-0.3.1.dev60/tests/symbolic/test_lower_jax.py +474 -0
  206. openscvx-0.3.1.dev60/tests/symbolic/test_preprocessing.py +803 -0
  207. openscvx-0.3.1.dev60/tests/symbolic/test_unified.py +390 -0
  208. openscvx-0.3.1.dev60/tests/test_brachistochrone.py +1258 -0
  209. openscvx-0.3.1.dev60/tests/test_cvxpygen_optional.py +122 -0
  210. openscvx-0.3.1.dev60/tests/test_discretization.py +130 -0
  211. openscvx-0.3.1.dev60/tests/test_examples.py +172 -0
  212. openscvx-0.3.1.dev60/tests/test_expert.py +704 -0
  213. openscvx-0.3.1.dev60/tests/test_integrators.py +90 -0
  214. openscvx-0.3.1.dev60/tests/test_plotting.py +624 -0
  215. openscvx-0.3.1.dev60/tests/test_propagation.py +239 -0
  216. openscvx-0.3.1.dev60/tests/test_pyqtgraph_functions.py +297 -0
  217. openscvx-0.3.1.dev60/tests/test_pyqtgraph_helpers.py +138 -0
@@ -0,0 +1 @@
1
+ <svg width="119" height="119" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" overflow="hidden"><defs><clipPath id="clip0"><rect x="3226" y="1439" width="119" height="119"/></clipPath><clipPath id="clip1"><rect x="3226" y="1439" width="119" height="119"/></clipPath><image width="104" height="116" xlink:href="data:image/png;base64,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" preserveAspectRatio="none" id="img2"></image></defs><g clip-path="url(#clip0)" transform="translate(-3226 -1439)"><g clip-path="url(#clip1)"><use width="100%" height="100%" xlink:href="#img2" fill="none" opacity="1" transform="translate(3239 1441)"></use><path d="M3254.35 1520.14C3255.58 1520.32 3255.99 1522.32 3257.38 1523.72L3258.09 1524.22 3242.42 1540 3241.58 1539.7C3239.5 1537.45 3246.29 1526.95 3250.86 1522.32 3252.58 1520.59 3253.61 1520.04 3254.35 1520.14ZM3254.17 1480.62C3255.13 1480.43 3256.13 1480.5 3257.1 1480.85L3261.81 1482.67C3256.69 1492.48 3254.19 1501.87 3252.67 1508.87L3234.23 1513.08C3229.24 1514.2 3225.91 1507.89 3229.52 1504.25L3251.56 1481.97C3252.32 1481.27 3253.22 1480.82 3254.17 1480.62ZM3306.73 1448.35C3311.3 1450.17 3316.57 1453.81 3321.56 1458.71L3322.3 1459.55 3314.34 1467.56 3313.8 1466.7C3312.13 1465.09 3309.99 1464.28 3307.85 1464.28 3305.72 1464.28 3303.61 1465.09 3302.02 1466.7 3298.83 1470.06 3298.83 1475.39 3302.02 1478.61L3302.84 1479.14 3262.42 1519.85 3257.52 1514.9C3258.9 1503.41 3263.76 1483.23 3280.25 1466.56 3289.26 1457.45 3298.55 1451.71 3306.73 1448.35ZM3335.79 1442C3336.6 1442.01 3337.28 1442.08 3337.83 1442.2L3339 1442.73 3326.19 1455.63 3325.58 1454.93C3321.84 1451.15 3317.96 1448.07 3314.21 1445.82 3322.01 1443.72 3330.98 1441.94 3335.79 1442Z" fill="#FFFFFF" fill-rule="evenodd" fill-opacity="1"/><path d="M3257.4 1523.59C3255.15 1521.35 3255.43 1517.57 3250.8 1522.19 3246.16 1526.82 3239.28 1537.33 3241.39 1539.57 3243.64 1541.81 3254.17 1534.8 3258.8 1530.18 3263.44 1525.42 3259.65 1525.7 3257.4 1523.59Z" fill="#FFFFFF" fill-rule="evenodd" fill-opacity="1"/></g></g></svg>
@@ -0,0 +1,56 @@
1
+ name-template: 'v$RESOLVED_VERSION'
2
+ tag-template: 'v$RESOLVED_VERSION'
3
+ categories:
4
+ - title: '🚀 Features'
5
+ labels:
6
+ - 'feature'
7
+ - 'enhancement'
8
+ - title: '🐛 Bug Fixes'
9
+ labels:
10
+ - 'fix'
11
+ - 'bugfix'
12
+ - 'bug'
13
+ - title: '🧰 Maintenance'
14
+ labels:
15
+ - 'chore'
16
+ - 'refactor'
17
+ - 'documentation'
18
+ change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
19
+ change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
20
+ version-resolver:
21
+ major:
22
+ labels:
23
+ - 'major'
24
+ minor:
25
+ labels:
26
+ - 'minor'
27
+ patch:
28
+ labels:
29
+ - 'patch'
30
+ default: patch
31
+ autolabeler:
32
+ - label: 'enhancement'
33
+ branch:
34
+ - '/^[Ff]eature\/.+/'
35
+ - label: 'bug'
36
+ branch:
37
+ - '/^[Ff]ix\/.+/'
38
+ - label: 'chore'
39
+ branch:
40
+ - '/^[Cc]hore\/.+/'
41
+ - label: 'refactor'
42
+ branch:
43
+ - '/^[Rr]efactor\/.+/'
44
+ - label: 'documentation'
45
+ branch:
46
+ - '/^[Dd]ocumentation\/.+/'
47
+ - '/^[Dd]ocs\/.+/'
48
+ - '/^[Dd]oc\/.+/'
49
+ template: |
50
+ ## What's Changed
51
+
52
+ $CHANGES
53
+
54
+ ---
55
+
56
+ **Full Changelog:** [`$PREVIOUS_TAG...v$RESOLVED_VERSION`](https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION)
@@ -0,0 +1,77 @@
1
+ name: 📖 Documentation
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ version:
7
+ description: 'Version to deploy (e.g., "v1.2.3", "nightly"). Omit to only build without deploying.'
8
+ type: string
9
+ required: false
10
+
11
+ jobs:
12
+ docs:
13
+ name: 📖 Documentation
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+ with:
20
+ fetch-depth: 0 # Full history needed for mike versioning
21
+
22
+ - name: Configure Git Credentials
23
+ if: inputs.version
24
+ run: |
25
+ git config user.name github-actions[bot]
26
+ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
27
+
28
+ - name: Set up Python
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: '3.13'
32
+
33
+ - name: Install uv
34
+ uses: astral-sh/setup-uv@v7
35
+ with:
36
+ enable-cache: true
37
+
38
+ - name: Cache MkDocs build
39
+ uses: actions/cache@v4
40
+ with:
41
+ key: mkdocs-material-${{ hashFiles('mkdocs.yml', 'docs/**') }}
42
+ path: .cache
43
+ restore-keys: |
44
+ mkdocs-material-
45
+
46
+ - name: Install system dependencies
47
+ run: sudo apt-get update && sudo apt-get install -y pngquant
48
+
49
+ # - name: Install MkDocs Material Insiders
50
+ # run: uv pip install --system git+https://${{ secrets.MKDOCS_INSIDERS_TOKEN }}@github.com/squidfunk/mkdocs-material-insiders.git
51
+
52
+ - name: Install documentation tools
53
+ run: |
54
+ uv pip install --system mkdocs-material mkdocstrings-python
55
+ uv pip install --system mkdocs-gen-files mkdocs-literate-nav mkdocs-section-index
56
+ uv pip install --system mike
57
+
58
+ - name: Install package
59
+ run: uv pip install --system -e .
60
+
61
+ - name: Build documentation (check only)
62
+ if: ${{ !inputs.version }}
63
+ run: mkdocs build
64
+
65
+ - name: Fetch gh-pages branch
66
+ if: inputs.version
67
+ run: git fetch origin gh-pages --depth=1 || true
68
+
69
+ - name: Deploy versioned release documentation
70
+ if: inputs.version && startsWith(inputs.version, 'v')
71
+ run: |
72
+ mike deploy --push --update-aliases "${{ inputs.version }}" latest
73
+ mike set-default --push latest
74
+
75
+ - name: Deploy nightly documentation
76
+ if: inputs.version && !startsWith(inputs.version, 'v')
77
+ run: mike deploy --push "${{ inputs.version }}"
@@ -0,0 +1,14 @@
1
+ name: 📖 Docs Build
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ docs:
13
+ name: 📖 Build Documentation
14
+ uses: ./.github/workflows/_docs.yml
@@ -0,0 +1,38 @@
1
+ name: 🔍 Lint
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ lint:
13
+ runs-on: ubuntu-latest
14
+
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: '3.13'
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v7
26
+ with:
27
+ enable-cache: true
28
+
29
+ - name: Install Ruff
30
+ run: uv pip install --system ruff
31
+
32
+ - name: Run Ruff linting
33
+ run: |
34
+ ruff check openscvx/ tests/
35
+
36
+ - name: Run Ruff formatting check
37
+ run: |
38
+ ruff format --check openscvx/ tests/
@@ -0,0 +1,53 @@
1
+ name: 🌙 Nightly
2
+
3
+ permissions:
4
+ contents: write
5
+
6
+ on:
7
+ push:
8
+ branches:
9
+ - main
10
+
11
+ concurrency:
12
+ group: nightly
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ nightly:
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - name: Checkout repository
20
+ uses: actions/checkout@v4
21
+ with:
22
+ fetch-depth: 0
23
+
24
+ - name: Set up Python
25
+ uses: actions/setup-python@v5
26
+ with:
27
+ python-version: '3.x'
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v7
31
+ with:
32
+ enable-cache: true
33
+
34
+ - name: Build distributions
35
+ run: |
36
+ rm -rf dist
37
+ uv build
38
+
39
+ - name: Publish to PyPI
40
+ env:
41
+ UV_PUBLISH_USERNAME: ${{ secrets.PYPI_USERNAME }}
42
+ UV_PUBLISH_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
43
+ run: |
44
+ uv publish --check-url https://pypi.org/simple/ dist/*
45
+
46
+ docs:
47
+ name: 📖 Deploy Nightly Docs
48
+ needs: nightly
49
+ permissions:
50
+ contents: write # Required for mike deploy --push to gh-pages
51
+ uses: ./.github/workflows/_docs.yml
52
+ with:
53
+ version: nightly
@@ -0,0 +1,42 @@
1
+ name: 📝 Release Drafter
2
+
3
+ on:
4
+ push:
5
+ # branches to consider in the event; optional, defaults to all
6
+ branches:
7
+ - main
8
+
9
+ # pull_request event is required only for autolabeler
10
+ pull_request:
11
+ # Only following types are handled by the action, but one can default to all as well
12
+ types: [opened, reopened, synchronize]
13
+ # pull_request_target event is required for autolabeler to support PRs from forks
14
+ # pull_request_target:
15
+ # types: [opened, reopened, synchronize]
16
+
17
+ permissions:
18
+ contents: read
19
+
20
+ jobs:
21
+ release-drafter:
22
+ permissions:
23
+ # write permission is required to create a github release
24
+ contents: write
25
+ # write permission is required for autolabeler
26
+ # otherwise, read permission is required at least
27
+ pull-requests: write
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ # (Optional) GitHub Enterprise requires GHE_HOST variable set
31
+ #- name: Set GHE_HOST
32
+ # run: |
33
+ # echo "GHE_HOST=${GITHUB_SERVER_URL##https:\/\/}" >> $GITHUB_ENV
34
+
35
+ # Drafts your next Release notes as Pull Requests are merged into "main"
36
+ - uses: release-drafter/release-drafter@v6
37
+ # (Optional) specify config name to use, relative to .github/. Default: release-drafter.yml
38
+ # with:
39
+ # config-name: my-config.yml
40
+ # disable-autolabeler: true
41
+ env:
42
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,59 @@
1
+ name: 🚀 Release
2
+
3
+ permissions:
4
+ contents: write
5
+
6
+ on:
7
+ release:
8
+ types: [published]
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Checkout repository
15
+ uses: actions/checkout@v4
16
+ with:
17
+ fetch-depth: 0
18
+
19
+ - name: Set up Python
20
+ uses: actions/setup-python@v5
21
+ with:
22
+ python-version: '3.x'
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v7
26
+ with:
27
+ enable-cache: true
28
+
29
+ - name: Build distributions
30
+ env:
31
+ # on this job only, use "only-version" so on tag vX.Y.Z you get X.Y.Z exactly
32
+ SETUPTOOLS_SCM_VERSION_SCHEME: only-version
33
+ SETUPTOOLS_SCM_LOCAL_SCHEME: no-local-version
34
+ run: |
35
+ rm -rf dist
36
+ uv build
37
+
38
+ - name: Publish to PyPI
39
+ env:
40
+ UV_PUBLISH_USERNAME: ${{ secrets.PYPI_USERNAME }}
41
+ UV_PUBLISH_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
42
+ run: |
43
+ uv publish --check-url https://pypi.org/simple/ dist/*
44
+
45
+ - name: Upload Release Assets
46
+ if: success()
47
+ run: |
48
+ gh release upload "${{ github.event.release.tag_name }}" dist/*
49
+ env:
50
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51
+
52
+ deploy-docs:
53
+ name: 📖 Deploy Versioned Docs
54
+ needs: publish
55
+ permissions:
56
+ contents: write # Required for mike deploy --push to gh-pages
57
+ uses: ./.github/workflows/_docs.yml
58
+ with:
59
+ version: ${{ github.event.release.tag_name }}
@@ -0,0 +1,53 @@
1
+ name: 🧪 Integration Tests
2
+
3
+ on:
4
+ release:
5
+ types: [published] # Run on releases to validate examples
6
+ workflow_dispatch: # Manual trigger for ad-hoc testing
7
+ schedule:
8
+ - cron: '0 0 * * 0' # Weekly on Sunday at midnight UTC
9
+
10
+ jobs:
11
+ integration-tests:
12
+ name: Integration Tests
13
+ runs-on: ${{ matrix.os }}
14
+ timeout-minutes: 30 # Integration tests can be slow
15
+
16
+ strategy:
17
+ fail-fast: false # Continue testing other examples even if one fails
18
+ matrix:
19
+ os: [ubuntu-latest, macos-latest]
20
+ python-version: ['3.10', '3.11', '3.12', '3.13']
21
+
22
+ steps:
23
+ - name: Checkout repository
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v7
33
+ with:
34
+ enable-cache: true
35
+
36
+ - name: Install dependencies
37
+ run: |
38
+ # Install package with optional GUI and test packages
39
+ uv pip install --system -e ".[gui,test]"
40
+
41
+ - name: Run integration tests
42
+ run: |
43
+ pytest -v -m integration --durations=10
44
+
45
+ - name: Upload test results on failure
46
+ if: failure()
47
+ uses: actions/upload-artifact@v4
48
+ with:
49
+ name: integration-test-results-py${{ matrix.python-version }}-${{ matrix.os }}
50
+ path: |
51
+ .pytest_cache/
52
+ test-results/
53
+ retention-days: 7
@@ -0,0 +1,54 @@
1
+ name: 🧪 Unit Tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ unit-tests:
13
+ name: Unit Tests (Python ${{ matrix.python-version }}, ${{ matrix.os }})
14
+ runs-on: ${{ matrix.os }}
15
+ timeout-minutes: 15 # Unit tests should be fast
16
+
17
+ strategy:
18
+ fail-fast: false # Continue testing other versions even if one fails
19
+ matrix:
20
+ os: [ubuntu-latest, macos-latest]
21
+ python-version: ['3.10', '3.11', '3.12', '3.13']
22
+
23
+ steps:
24
+ - name: Checkout repository
25
+ uses: actions/checkout@v4
26
+
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v5
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+
32
+ - name: Install uv
33
+ uses: astral-sh/setup-uv@v7
34
+ with:
35
+ enable-cache: true
36
+
37
+ - name: Install dependencies
38
+ run: |
39
+ # Install package with optional GUI and test packages
40
+ uv pip install --system -e ".[gui,test]"
41
+
42
+ - name: Run unit tests
43
+ run: |
44
+ pytest -v -m "not integration" --durations=10 --tb=short
45
+
46
+ - name: Upload test results on failure
47
+ if: failure()
48
+ uses: actions/upload-artifact@v4
49
+ with:
50
+ name: unit-test-results-py${{ matrix.python-version }}-${{ matrix.os }}
51
+ path: |
52
+ .pytest_cache/
53
+ test-results/
54
+ retention-days: 7
@@ -0,0 +1,206 @@
1
+ # Mac OS
2
+ .DS_Store
3
+
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+
9
+ # VSCode
10
+ settings.json
11
+
12
+ # temp directory
13
+ .tmp/*
14
+
15
+ *.prof
16
+ *.pkl
17
+
18
+ # JAX Compilation Cache
19
+ jax_compilation_cache/*
20
+
21
+ # C extensions
22
+ *.so
23
+
24
+ # CVXPYGen
25
+ solver/*
26
+
27
+ # Images
28
+ *.eps
29
+
30
+ # Numpy files
31
+ *.npy
32
+
33
+ # Pickle files
34
+ *.pk
35
+ *.pkl
36
+ *.pickle
37
+
38
+
39
+ # CVXPYGEN
40
+ ctcs/*
41
+ node/*
42
+ ctcs_dr_vp/*
43
+ ctcs_dr/*
44
+
45
+ # Distribution / packaging
46
+ .Python
47
+ build/
48
+ develop-eggs/
49
+ dist/
50
+ downloads/
51
+ eggs/
52
+ .eggs/
53
+ lib/
54
+ lib64/
55
+ parts/
56
+ sdist/
57
+ var/
58
+ wheels/
59
+ share/python-wheels/
60
+ *.egg-info/
61
+ .installed.cfg
62
+ *.egg
63
+ MANIFEST
64
+ _version.py
65
+
66
+ # PyInstaller
67
+ # Usually these files are written by a python script from a template
68
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
69
+ *.manifest
70
+ *.spec
71
+
72
+ # Installer logs
73
+ pip-log.txt
74
+ pip-delete-this-directory.txt
75
+
76
+ # Unit test / coverage reports
77
+ htmlcov/
78
+ .tox/
79
+ .nox/
80
+ .coverage
81
+ .coverage.*
82
+ .cache
83
+ nosetests.xml
84
+ coverage.xml
85
+ *.cover
86
+ *.py,cover
87
+ .hypothesis/
88
+ .pytest_cache/
89
+ cover/
90
+
91
+ # Translations
92
+ *.mo
93
+ *.pot
94
+
95
+ # Django stuff:
96
+ *.log
97
+ local_settings.py
98
+ db.sqlite3
99
+ db.sqlite3-journal
100
+
101
+ # Flask stuff:
102
+ instance/
103
+ .webassets-cache
104
+
105
+ # Scrapy stuff:
106
+ .scrapy
107
+
108
+ # Sphinx documentation
109
+ docs/_build/
110
+
111
+ # PyBuilder
112
+ .pybuilder/
113
+ target/
114
+
115
+ # Jupyter Notebook
116
+ .ipynb_checkpoints
117
+
118
+ # IPython
119
+ profile_default/
120
+ ipython_config.py
121
+
122
+ # pyenv
123
+ # For a library or package, you might want to ignore these files since the code is
124
+ # intended to run in multiple environments; otherwise, check them in:
125
+ # .python-version
126
+
127
+ # pipenv
128
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
129
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
130
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
131
+ # install all needed dependencies.
132
+ #Pipfile.lock
133
+
134
+ # poetry
135
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
136
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
137
+ # commonly ignored for libraries.
138
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
139
+ #poetry.lock
140
+
141
+ # pdm
142
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
143
+ #pdm.lock
144
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
145
+ # in version control.
146
+ # https://pdm.fming.dev/#use-with-ide
147
+ .pdm.toml
148
+
149
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
150
+ __pypackages__/
151
+
152
+ # Celery stuff
153
+ celerybeat-schedule
154
+ celerybeat.pid
155
+
156
+ # SageMath parsed files
157
+ *.sage.py
158
+
159
+ # Environments
160
+ .env
161
+ .venv
162
+ env/
163
+ venv/
164
+ ENV/
165
+ env.bak/
166
+ venv.bak/
167
+
168
+ # Spyder project settings
169
+ .spyderproject
170
+ .spyproject
171
+
172
+ # Rope project settings
173
+ .ropeproject
174
+
175
+ # mkdocs documentation
176
+ /site
177
+
178
+ # mypy
179
+ .mypy_cache/
180
+ .dmypy.json
181
+ dmypy.json
182
+
183
+ # Pyre type checker
184
+ .pyre/
185
+
186
+ # pytype static type analyzer
187
+ .pytype/
188
+
189
+ # Cython debug symbols
190
+ cython_debug/
191
+
192
+ # Development scripts
193
+ check_lint.py
194
+
195
+ # PyCharm
196
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
197
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
198
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
199
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
200
+ #.idea/
201
+
202
+ # MkDocs Material Insiders (installed from GitHub in CI, not committed)
203
+ material/
204
+ # But allow custom overrides to be committed
205
+ !material/overrides/
206
+ src/