scientific-computing-system 2.2.12__tar.gz → 2.2.13__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 (432) hide show
  1. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/changelog.yml +26 -4
  2. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/npm-publish.yml +165 -19
  3. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/pr-automation.yml +17 -1
  4. scientific_computing_system-2.2.12/.github/workflows/pypi-registry-smoke.yml → scientific_computing_system-2.2.13/.github/workflows/pypi-release-policy.yml +10 -34
  5. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/release.yml +242 -22
  6. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/tests.yml +21 -12
  7. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/CHANGELOG.md +26 -0
  8. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/CITATION.cff +3 -3
  9. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/CONTRIBUTING.md +1 -1
  10. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/PKG-INFO +18 -10
  11. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/README.md +17 -9
  12. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/SECURITY.md +3 -1
  13. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/codemeta.json +2 -2
  14. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/getting-started.md +1 -1
  15. scientific_computing_system-2.2.13/docs/maintenance.md +122 -0
  16. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/npm.test.js +78 -19
  17. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/package.json +1 -1
  18. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/pyproject.toml +2 -3
  19. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/requirements-dev.lock +3 -3
  20. scientific_computing_system-2.2.13/scripts/publish.py +149 -0
  21. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/_version.py +2 -2
  22. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/_handlers.py +3 -1
  23. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/__init__.py +2 -3
  24. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/attention.py +2 -2
  25. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/autograd/__init__.py +2 -3
  26. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/autograd/ops.py +2 -3
  27. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/training.py +1 -2
  28. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_cli_exit_codes.py +3 -0
  29. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_path_confinement.py +72 -9
  30. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_release_contract.py +75 -7
  31. scientific_computing_system-2.2.12/docs/maintenance.md +0 -61
  32. scientific_computing_system-2.2.12/scripts/publish.py +0 -203
  33. scientific_computing_system-2.2.12/scripts/verify_pypi_release.py +0 -97
  34. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/benchmarks.yml +0 -0
  35. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/bot-reviewer.yml +0 -0
  36. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/cli-package-smoke.yml +0 -0
  37. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.github/workflows/codeql.yml +0 -0
  38. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/.gitignore +0 -0
  39. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/LICENSE +0 -0
  40. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/benchmarks/results.json +0 -0
  41. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/benchmarks/robust_runner.py +0 -0
  42. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/benchmarks/run_benchmarks.py +0 -0
  43. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/bin/scs.js +0 -0
  44. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/dashboard/app.py +0 -0
  45. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/ARCHITECTURE.md +0 -0
  46. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/CASE_STUDY_HUBBLE.md +0 -0
  47. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
  48. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/api.md +0 -0
  49. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/assets/icon.svg +0 -0
  50. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/assets/logo.svg +0 -0
  51. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/benchmarks.md +0 -0
  52. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/checks/verify_provenance_claims.py +0 -0
  53. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/cookbook.md +0 -0
  54. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/index.md +0 -0
  55. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/ml_reference.md +0 -0
  56. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/related.md +0 -0
  57. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/research-workflows.md +0 -0
  58. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/stylesheets/extra.css +0 -0
  59. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tour_of_numerical_methods.md +0 -0
  60. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/core_demo.md +0 -0
  61. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/data_analysis_demo.md +0 -0
  62. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/diffeq_demo.md +0 -0
  63. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/fft2_demo.md +0 -0
  64. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/graph_demo.md +0 -0
  65. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/hypothesis_demo.md +0 -0
  66. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/hypothesis_tests_demo.md +0 -0
  67. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
  68. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/knowledge_demo.md +0 -0
  69. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/linalg_demo.md +0 -0
  70. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/math_utils_demo.md +0 -0
  71. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/ml_advanced_demo.md +0 -0
  72. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/ml_and_viz_demo.md +0 -0
  73. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/ml_demo.md +0 -0
  74. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/modeling_demo.md +0 -0
  75. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/montecarlo_demo.md +0 -0
  76. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/nlp_attention_demo.md +0 -0
  77. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/nlp_bpe_demo.md +0 -0
  78. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
  79. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/nlp_viz.md +0 -0
  80. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/numerical_integration_demo.md +0 -0
  81. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/optimization_demo.md +0 -0
  82. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/pandas_io_demo.md +0 -0
  83. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/pca_demo.md +0 -0
  84. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/probability_demo.md +0 -0
  85. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/quantum_demo.md +0 -0
  86. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/quick_start.md +0 -0
  87. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/scientific_demo.md +0 -0
  88. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/signals_demo.md +0 -0
  89. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/stats_demo.md +0 -0
  90. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/stiff_ode_demo.md +0 -0
  91. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/tutorials/time_series_demo.md +0 -0
  92. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/docs/why-pure-python.md +0 -0
  93. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/core_demo.py +0 -0
  94. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/data_analysis_demo.py +0 -0
  95. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/diffeq_demo.py +0 -0
  96. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/discovery_pipeline_demo.py +0 -0
  97. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/ensemble_showcase.py +0 -0
  98. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/fft2_demo.py +0 -0
  99. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/graph_demo.py +0 -0
  100. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/hypothesis_custom_generator.py +0 -0
  101. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/hypothesis_demo.py +0 -0
  102. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/hypothesis_tests_demo.py +0 -0
  103. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/hypothesis_with_stats_demo.py +0 -0
  104. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/interpolate_demo.py +0 -0
  105. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/knowledge_demo.py +0 -0
  106. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/linalg_demo.py +0 -0
  107. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/math_utils_demo.py +0 -0
  108. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/ml_and_viz_demo.py +0 -0
  109. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/modeling_demo.py +0 -0
  110. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/montecarlo_demo.py +0 -0
  111. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/nlp_attention_demo.py +0 -0
  112. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/nlp_bpe_demo.py +0 -0
  113. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/nlp_mini_gpt_demo.py +0 -0
  114. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/nlp_viz_demo.py +0 -0
  115. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/numerical_integration_demo.py +0 -0
  116. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/optimization_demo.py +0 -0
  117. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/pca_demo.py +0 -0
  118. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/pde_demo.py +0 -0
  119. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/plot_demo.py +0 -0
  120. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/plotting_notebook.ipynb +0 -0
  121. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/probability_demo.py +0 -0
  122. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/quantum_demo.py +0 -0
  123. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/scientific_demo.py +0 -0
  124. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/signals_demo.py +0 -0
  125. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/stats_demo.py +0 -0
  126. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/examples/tour_of_numerical_methods.ipynb +0 -0
  127. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/index.js +0 -0
  128. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/mkdocs.yml +0 -0
  129. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/paper.bib +0 -0
  130. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/paper.md +0 -0
  131. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/requirements-build.lock +0 -0
  132. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/requirements.lock +0 -0
  133. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/check_release_toolchain.py +0 -0
  134. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/check_version_discipline.py +0 -0
  135. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/check_version_lockstep.py +0 -0
  136. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/verify_cli_install.py +0 -0
  137. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/verify_cookbook.py +0 -0
  138. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/verify_ml_reference.py +0 -0
  139. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/scripts/verify_release_integrity.py +0 -0
  140. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/__init__.py +0 -0
  141. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/__main__.py +0 -0
  142. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/_paths.py +0 -0
  143. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/bayes/__init__.py +0 -0
  144. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/bayes/conjugate.py +0 -0
  145. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/causal.py +0 -0
  146. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/__init__.py +0 -0
  147. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/__main__.py +0 -0
  148. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/_exit_codes.py +0 -0
  149. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/_parser.py +0 -0
  150. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/_style.py +0 -0
  151. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/cli/_system_info.py +0 -0
  152. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/core/__init__.py +0 -0
  153. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/core/_numeric.py +0 -0
  154. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/core/models.py +0 -0
  155. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_analysis/__init__.py +0 -0
  156. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_analysis/dataset.py +0 -0
  157. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_analysis/loader.py +0 -0
  158. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_analysis/pandas_io.py +0 -0
  159. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_analysis/transform.py +0 -0
  160. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_analysis/viz.py +0 -0
  161. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_io/__init__.py +0 -0
  162. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_io/scientific.py +0 -0
  163. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/data_io/streaming.py +0 -0
  164. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/diffeq/__init__.py +0 -0
  165. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/diffeq/_implicit.py +0 -0
  166. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/diffeq/solvers.py +0 -0
  167. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/diffeq/symplectic.py +0 -0
  168. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/fractals/__init__.py +0 -0
  169. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/fractals/sets.py +0 -0
  170. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/genetics/__init__.py +0 -0
  171. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/genetics/sequence.py +0 -0
  172. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/graph/__init__.py +0 -0
  173. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/graph/algorithms.py +0 -0
  174. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/hypothesis/__init__.py +0 -0
  175. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/hypothesis/evaluator.py +0 -0
  176. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/hypothesis/generator.py +0 -0
  177. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/hypothesis/mining.py +0 -0
  178. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/infotheory/__init__.py +0 -0
  179. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/infotheory/measures.py +0 -0
  180. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/interpolate/__init__.py +0 -0
  181. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/knowledge/__init__.py +0 -0
  182. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/knowledge/graph.py +0 -0
  183. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/knowledge/notes.py +0 -0
  184. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/knowledge/retrieval.py +0 -0
  185. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/math_utils/__init__.py +0 -0
  186. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/math_utils/calculus.py +0 -0
  187. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/math_utils/linalg.py +0 -0
  188. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/math_utils/special.py +0 -0
  189. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/math_utils/svd.py +0 -0
  190. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/__init__.py +0 -0
  191. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/boosting.py +0 -0
  192. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/clustering.py +0 -0
  193. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/decomposition.py +0 -0
  194. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/ensemble.py +0 -0
  195. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/linear_models.py +0 -0
  196. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/metrics.py +0 -0
  197. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/model_selection.py +0 -0
  198. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/naive_bayes.py +0 -0
  199. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/neighbors.py +0 -0
  200. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/neural.py +0 -0
  201. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/preprocessing.py +0 -0
  202. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/tree.py +0 -0
  203. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/ml/voting.py +0 -0
  204. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/__init__.py +0 -0
  205. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/_base.py +0 -0
  206. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/_nodes.py +0 -0
  207. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/expression.py +0 -0
  208. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/fitting.py +0 -0
  209. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/model.py +0 -0
  210. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/modeling/solver.py +0 -0
  211. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/montecarlo/__init__.py +0 -0
  212. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/montecarlo/markov.py +0 -0
  213. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/montecarlo/methods.py +0 -0
  214. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/autograd/_grad.py +0 -0
  215. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/autograd/tensor.py +0 -0
  216. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/bpe.py +0 -0
  217. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/data.py +0 -0
  218. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/embed.py +0 -0
  219. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/layers.py +0 -0
  220. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/model.py +0 -0
  221. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/optim.py +0 -0
  222. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/nlp/viz.py +0 -0
  223. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/numerical_integration/__init__.py +0 -0
  224. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/numerical_integration/quadrature.py +0 -0
  225. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/optimization/__init__.py +0 -0
  226. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/optimization/_metaheuristics.py +0 -0
  227. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/optimization/constrained.py +0 -0
  228. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/optimization/minimize.py +0 -0
  229. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/pde/__init__.py +0 -0
  230. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/plot/__init__.py +0 -0
  231. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/plot/_backend.py +0 -0
  232. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/plot/charts.py +0 -0
  233. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/probability/__init__.py +0 -0
  234. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/probability/_advanced.py +0 -0
  235. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/probability/distributions.py +0 -0
  236. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/probability/extra_distributions.py +0 -0
  237. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/provenance/__init__.py +0 -0
  238. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/provenance/manifest.py +0 -0
  239. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/py.typed +0 -0
  240. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/quantum/__init__.py +0 -0
  241. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/quantum/circuit.py +0 -0
  242. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/quantum/multi_qubit.py +0 -0
  243. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/quantum/simulator.py +0 -0
  244. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/scientific/__init__.py +0 -0
  245. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/scientific/constants.py +0 -0
  246. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/scientific/formulas.py +0 -0
  247. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/sensitivity.py +0 -0
  248. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/signals/__init__.py +0 -0
  249. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/signals/filters.py +0 -0
  250. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/signals/processing.py +0 -0
  251. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/signals/stft.py +0 -0
  252. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/signals/wavelet.py +0 -0
  253. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/__init__.py +0 -0
  254. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/_distributions.py +0 -0
  255. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/bootstrap.py +0 -0
  256. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/descriptive.py +0 -0
  257. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/hypothesis_tests.py +0 -0
  258. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/multiple_testing.py +0 -0
  259. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/nonparametric.py +0 -0
  260. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/power.py +0 -0
  261. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/regression.py +0 -0
  262. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/stats/time_series.py +0 -0
  263. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/tools/__init__.py +0 -0
  264. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/tools/adapters.py +0 -0
  265. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/tools/registry.py +0 -0
  266. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/uncertainty/__init__.py +0 -0
  267. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/uncertainty/propagation.py +0 -0
  268. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/units/__init__.py +0 -0
  269. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/units/core.py +0 -0
  270. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/validation/__init__.py +0 -0
  271. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/validation/adequacy.py +0 -0
  272. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/validation/checks.py +0 -0
  273. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/validation/drift.py +0 -0
  274. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/validation/report.py +0 -0
  275. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/wavelets/__init__.py +0 -0
  276. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/wavelets/haar.py +0 -0
  277. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/__init__.py +0 -0
  278. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/engine.py +0 -0
  279. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/gates.py +0 -0
  280. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/orchestrator.py +0 -0
  281. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/selection.py +0 -0
  282. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/tooling.py +0 -0
  283. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/src/cds/workflow/types.py +0 -0
  284. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/__init__.py +0 -0
  285. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/conftest.py +0 -0
  286. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_advanced_fitting.py +0 -0
  287. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_completion_coverage.py +0 -0
  288. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_guard_coverage.py +0 -0
  289. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening.py +0 -0
  290. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening_c1.py +0 -0
  291. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening_c2.py +0 -0
  292. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening_c3.py +0 -0
  293. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening_c4.py +0 -0
  294. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening_coverage.py +0 -0
  295. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_audit_hardening_h1.py +0 -0
  296. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_bayes_v2.py +0 -0
  297. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_benchmarks.py +0 -0
  298. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_bootstrap.py +0 -0
  299. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_causal.py +0 -0
  300. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_cli.py +0 -0
  301. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_cli_color.py +0 -0
  302. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_cli_extended.py +0 -0
  303. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_cli_system_info.py +0 -0
  304. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_codemeta_version_lockstep.py +0 -0
  305. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_constrained_opt.py +0 -0
  306. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_core.py +0 -0
  307. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_data_analysis.py +0 -0
  308. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_data_analysis_lazy_bridge.py +0 -0
  309. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_data_analysis_pandas_io.py +0 -0
  310. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_data_io.py +0 -0
  311. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_data_io_optional_backends.py +0 -0
  312. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_data_io_scientific.py +0 -0
  313. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_dataset.py +0 -0
  314. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_dev_numpy_pin_contract.py +0 -0
  315. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_diffeq.py +0 -0
  316. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_diffeq_implicit.py +0 -0
  317. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_domain_validation.py +0 -0
  318. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_edge_misc_numerical.py +0 -0
  319. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_edge_ml_quantum_linalg.py +0 -0
  320. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_edge_nlp.py +0 -0
  321. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_edge_quantum_evaluator_cli.py +0 -0
  322. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_edge_stats_optimization_signals.py +0 -0
  323. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_extra_distributions.py +0 -0
  324. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_fft2.py +0 -0
  325. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_fitting_bootstrap.py +0 -0
  326. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_fractals.py +0 -0
  327. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_genetics.py +0 -0
  328. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_graph.py +0 -0
  329. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_hardening_privacy_provenance.py +0 -0
  330. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_hypothesis.py +0 -0
  331. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_hypothesis_engine.py +0 -0
  332. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_hypothesis_mining.py +0 -0
  333. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_hypothesis_tests.py +0 -0
  334. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_infotheory.py +0 -0
  335. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_interpolate.py +0 -0
  336. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_knowledge.py +0 -0
  337. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_layering.py +0 -0
  338. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_linalg_extended.py +0 -0
  339. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_linalg_qr_cholesky.py +0 -0
  340. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_markov.py +0 -0
  341. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_math_utils.py +0 -0
  342. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_boosting.py +0 -0
  343. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_clustering.py +0 -0
  344. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_ensemble.py +0 -0
  345. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_knn.py +0 -0
  346. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_linreg.py +0 -0
  347. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_logreg.py +0 -0
  348. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_metrics.py +0 -0
  349. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_model_selection.py +0 -0
  350. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_naive_bayes.py +0 -0
  351. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_pca.py +0 -0
  352. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_preprocessing.py +0 -0
  353. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_tree.py +0 -0
  354. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_viz.py +0 -0
  355. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_ml_voting.py +0 -0
  356. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_modeling.py +0 -0
  357. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_modeling_fit_validation.py +0 -0
  358. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_montecarlo.py +0 -0
  359. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_multi_qubit.py +0 -0
  360. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_attention.py +0 -0
  361. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_autograd.py +0 -0
  362. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_bpe.py +0 -0
  363. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_embed.py +0 -0
  364. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_layers.py +0 -0
  365. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_model.py +0 -0
  366. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_training.py +0 -0
  367. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_nlp_viz.py +0 -0
  368. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_numerical_integration.py +0 -0
  369. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_numerical_invariants.py +0 -0
  370. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_numerical_oracles.py +0 -0
  371. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_optimization.py +0 -0
  372. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_optimization_metaheuristics.py +0 -0
  373. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_pde.py +0 -0
  374. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_plot_charts.py +0 -0
  375. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_plot_lazy.py +0 -0
  376. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_power.py +0 -0
  377. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_probability.py +0 -0
  378. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_probability_advanced.py +0 -0
  379. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_property_invariants.py +0 -0
  380. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_protocol_placeholders.py +0 -0
  381. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_provenance.py +0 -0
  382. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_provenance_audit_hardening.py +0 -0
  383. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_provenance_claims.py +0 -0
  384. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_public_api.py +0 -0
  385. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_quantum.py +0 -0
  386. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_readme_badges.py +0 -0
  387. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_readme_surface.py +0 -0
  388. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_release_toolchain.py +0 -0
  389. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_retrieval.py +0 -0
  390. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_runtime_dependency_graph.py +0 -0
  391. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_scientific.py +0 -0
  392. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_seed_hygiene.py +0 -0
  393. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_selection_audit_hardening.py +0 -0
  394. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_sensitivity.py +0 -0
  395. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_sensitivity_global.py +0 -0
  396. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_signals.py +0 -0
  397. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_signals_filters.py +0 -0
  398. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_special_invariants.py +0 -0
  399. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_special_numerics.py +0 -0
  400. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_statistical_audit.py +0 -0
  401. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_stats.py +0 -0
  402. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_stats_audit_coverage.py +0 -0
  403. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_stats_multiple_testing.py +0 -0
  404. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_stats_nonparametric.py +0 -0
  405. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_stats_time_series.py +0 -0
  406. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_stft.py +0 -0
  407. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_streaming_analytics.py +0 -0
  408. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_svd.py +0 -0
  409. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_symplectic.py +0 -0
  410. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_tool_adapters.py +0 -0
  411. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_tools_registry.py +0 -0
  412. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_uncertainty.py +0 -0
  413. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_units.py +0 -0
  414. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation.py +0 -0
  415. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_adequacy.py +0 -0
  416. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_advanced.py +0 -0
  417. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_bounds_nonfinite_regression.py +0 -0
  418. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_derived_moments_overflow.py +0 -0
  419. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_derived_tolerance_overflow.py +0 -0
  420. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_drift.py +0 -0
  421. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_nonfinite_thresholds_regression.py +0 -0
  422. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_validation_ood_stable_and_coverage.py +0 -0
  423. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_verify_release_integrity.py +0 -0
  424. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_wavelet.py +0 -0
  425. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_wavelets_v2.py +0 -0
  426. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow.py +0 -0
  427. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow_gates.py +0 -0
  428. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow_orchestrator.py +0 -0
  429. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
  430. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow_selection.py +0 -0
  431. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow_selection_coverage.py +0 -0
  432. {scientific_computing_system-2.2.12 → scientific_computing_system-2.2.13}/tests/test_workflow_tooling.py +0 -0
@@ -52,11 +52,33 @@ jobs:
52
52
  ref: main
53
53
  fetch-depth: 0
54
54
 
55
+ # The tag is passed to git-cliff through `args`, which the pinned action
56
+ # interpolates into a shell command in a contents:write job. Treat the
57
+ # dispatch input as hostile: accept only a strict vX.Y.Z string that names
58
+ # an existing tag, then hand the validated output to every consumer.
59
+ - name: Validate the tag input
60
+ id: tag
61
+ env:
62
+ REQUESTED_TAG: ${{ inputs.tag }}
63
+ run: |
64
+ set -euo pipefail
65
+ tag="$REQUESTED_TAG"
66
+ tag_re='^v(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$'
67
+ if [[ ! "$tag" =~ $tag_re ]]; then
68
+ printf '::error::inputs.tag must be a strict vX.Y.Z release tag; got: %q\n' "$tag"
69
+ exit 1
70
+ fi
71
+ if ! git rev-parse -q --verify "refs/tags/${tag}" >/dev/null; then
72
+ printf '::error::inputs.tag does not name an existing tag: %q\n' "$tag"
73
+ exit 1
74
+ fi
75
+ echo "tag=${tag}" >> "$GITHUB_OUTPUT"
76
+
55
77
  - name: Install git-cliff
56
78
  uses: orhun/git-cliff-action@a9a95522b26fe6403f7bb24031f21fb573d0f5ff # v4
57
79
  with:
58
80
  config: cliff.toml
59
- args: --verbose --tag ${{ inputs.tag }} --output CHANGELOG.md
81
+ args: --verbose --tag ${{ steps.tag.outputs.tag }} --output CHANGELOG.md
60
82
 
61
83
  - name: Check for changes
62
84
  id: check
@@ -110,11 +132,11 @@ jobs:
110
132
  uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
111
133
  with:
112
134
  token: ${{ steps.app-token.outputs.token }}
113
- commit-message: "docs(changelog): regenerate for ${{ inputs.tag }}"
114
- title: "docs(changelog): regenerate for ${{ inputs.tag }} (MANUAL — review carefully)"
135
+ commit-message: "docs(changelog): regenerate for ${{ steps.tag.outputs.tag }}"
136
+ title: "docs(changelog): regenerate for ${{ steps.tag.outputs.tag }} (MANUAL — review carefully)"
115
137
  body: |
116
138
  Auto-generated CHANGELOG update from git history.
117
- Triggered by MANUAL workflow_dispatch for tag `${{ inputs.tag }}`.
139
+ Triggered by MANUAL workflow_dispatch for tag `${{ steps.tag.outputs.tag }}`.
118
140
 
119
141
  REVIEW THE DIFF CAREFULLY before merging. git-cliff rewrites the
120
142
  entire CHANGELOG.md from commit history; hand-curated narrative
@@ -27,8 +27,8 @@ name: npm Publish
27
27
  # `scientific-computing-system`, workflow `npm-publish.yml`, environment `npm`.
28
28
  #
29
29
  # Token mode (explicit opt-in, `use_token_fallback=true`). Uses the repository's
30
- # NPM_TOKEN secret through NODE_AUTH_TOKEN. This is the mode in use while the
31
- # npmjs.com trusted-publisher registration is pending.
30
+ # NPM_TOKEN secret through NODE_AUTH_TOKEN. Kept only as a break-glass path for
31
+ # when the trusted publisher is unavailable; it is never selected automatically.
32
32
  #
33
33
  # The token mode deliberately omits `--provenance`. Provenance is an OIDC-only
34
34
  # attestation: with a token there is no OIDC identity to attest to, so npm
@@ -37,10 +37,26 @@ name: npm Publish
37
37
  # cannot work or pretending an attestation was produced.
38
38
  #
39
39
  # Both modes are fail-closed. A requested mode with no usable credential exits 1
40
- # with an actionable message. The automatic release-tag path deliberately uses
41
- # the repository's verified NPM_TOKEN until npm Trusted Publishing is registered.
42
- # Manual workflow_dispatch runs still default to OIDC so that path can be tested
43
- # and adopted later without changing the release topology.
40
+ # with an actionable message. Automatic release runs use OIDC: the attestation
41
+ # attached to the last OIDC publish confirmed the trusted publisher is
42
+ # registered, so the token path is no longer the default.
43
+ #
44
+ # ## Automatic trigger after a release
45
+ #
46
+ # release.yml creates the `v*` tag with GITHUB_TOKEN, and GitHub does not start
47
+ # workflows from events created by GITHUB_TOKEN. The tag trigger below therefore
48
+ # never fires for a real release. This workflow also runs when the `Release`
49
+ # workflow completes; `release_gate` reads that run's jobs and proceeds only when
50
+ # the PyPI publish job actually succeeded, so ordinary completions and
51
+ # non-release runs skip instead of failing on an already-published version.
52
+ #
53
+ # ## Trigger contract
54
+ #
55
+ # A manual dispatch is accepted only from `main`, and a `v*` tag push only when
56
+ # the tag is exactly `v<package.json version>`. Every path additionally requires
57
+ # that exact version to already exist on PyPI: the npm package is a launcher for
58
+ # the Python distribution, so publishing it first would advertise a version that
59
+ # `pip install` cannot yet provide.
44
60
 
45
61
  on:
46
62
  workflow_dispatch:
@@ -50,14 +66,18 @@ on:
50
66
  Publish mode. false (default) = OIDC trusted publishing, which mints a
51
67
  Sigstore provenance attestation. true = token mode, using the
52
68
  repository NPM_TOKEN secret; that mode publishes WITHOUT provenance,
53
- because a token cannot mint an attestation. Use true while the
54
- npmjs.com trusted publisher is not yet registered.
69
+ because a token cannot mint an attestation. Use true only as a
70
+ break-glass fallback when the npm trusted publisher is unavailable.
55
71
  type: boolean
56
72
  default: false
73
+ workflow_run:
74
+ workflows: ["Release"]
75
+ types: [completed]
57
76
  push:
58
77
  # release.yml creates the version tag only after the PyPI release succeeds.
59
78
  # Publishing npm from that tag gives one version bump exactly one automatic
60
79
  # npm run, avoiding the previous branch-push + tag-push duplicate race.
80
+ # Kept for manual tag pushes; GITHUB_TOKEN-created tags do not trigger it.
61
81
  tags:
62
82
  - "v*"
63
83
 
@@ -70,8 +90,38 @@ permissions:
70
90
  contents: read
71
91
 
72
92
  jobs:
93
+ release_gate:
94
+ name: Require a published release
95
+ if: github.event_name == 'workflow_run'
96
+ runs-on: ubuntu-latest
97
+ timeout-minutes: 5
98
+ permissions:
99
+ actions: read
100
+ outputs:
101
+ published: ${{ steps.check.outputs.published }}
102
+ steps:
103
+ - name: Check the triggering Release run published
104
+ id: check
105
+ env:
106
+ GH_TOKEN: ${{ github.token }}
107
+ RUN_ID: ${{ github.event.workflow_run.id }}
108
+ run: |
109
+ set -euo pipefail
110
+ conclusion="$(gh api "repos/${GITHUB_REPOSITORY}/actions/runs/${RUN_ID}/jobs?per_page=100" \
111
+ --jq '[.jobs[] | select(.name == "Build + verify + publish to PyPI + metadata-only GitHub Release") | .conclusion] | first // "missing"')"
112
+ echo "Release publish job: ${conclusion}"
113
+ if [ "${conclusion}" = "success" ]; then
114
+ echo "published=true" >> "$GITHUB_OUTPUT"
115
+ else
116
+ echo "published=false" >> "$GITHUB_OUTPUT"
117
+ fi
118
+
73
119
  publish:
74
120
  name: Verify and publish to npm with OIDC trusted publishing
121
+ needs: release_gate
122
+ if: |
123
+ always() &&
124
+ (github.event_name != 'workflow_run' || needs.release_gate.outputs.published == 'true')
75
125
  runs-on: ubuntu-latest
76
126
  timeout-minutes: 20
77
127
  # The `npm` environment is referenced by the trusted-publisher configuration
@@ -88,6 +138,101 @@ jobs:
88
138
  - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
89
139
  with:
90
140
  persist-credentials: false
141
+ # Release-triggered runs must publish the exact commit that was released,
142
+ # not whatever main points at when the follow-up workflow starts.
143
+ ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.ref }}
144
+
145
+ # GATE: bind each trigger to the version it is allowed to publish.
146
+ #
147
+ # `workflow_dispatch` accepts an arbitrary ref, so without this a dispatch
148
+ # from a feature branch would publish whatever (possibly unreleased)
149
+ # package.json version that branch carries. The tag trigger is equally
150
+ # broad (`v*`), so a stray `v`-prefixed tag could publish a version that
151
+ # the checked-out package.json does not declare. Both cases end here.
152
+ - name: Validate the trigger ref and tag
153
+ shell: bash
154
+ env:
155
+ EVENT_NAME: ${{ github.event_name }}
156
+ REF: ${{ github.ref }}
157
+ run: |
158
+ set -euo pipefail
159
+ version="$(python3 -c 'import json; print(json.load(open("package.json", encoding="utf-8"))["version"])')"
160
+ expected_tag="v${version}"
161
+ case "$EVENT_NAME" in
162
+ workflow_dispatch)
163
+ if [ "$REF" != "refs/heads/main" ]; then
164
+ echo "::error::workflow_dispatch may only publish from main; got ${REF}"
165
+ echo "::error::dispatch from main so package.json is the reviewed release version"
166
+ exit 1
167
+ fi
168
+ echo "PASS: manual dispatch from main (package.json ${version})"
169
+ ;;
170
+ push)
171
+ if [ "$REF" != "refs/tags/${expected_tag}" ]; then
172
+ echo "::error::tag ${REF} does not match package.json version ${version}"
173
+ echo "::error::expected refs/tags/${expected_tag}; refusing to publish a mismatched tag"
174
+ exit 1
175
+ fi
176
+ echo "PASS: tag ${expected_tag} matches package.json ${version}"
177
+ ;;
178
+ workflow_run)
179
+ echo "PASS: release-triggered run (release_gate checked the PyPI publish job)"
180
+ ;;
181
+ *)
182
+ echo "::error::unsupported trigger event: ${EVENT_NAME}"
183
+ exit 1
184
+ ;;
185
+ esac
186
+
187
+ # GATE: npm is a launcher for the PyPI distribution, and docs/maintenance.md
188
+ # promises npm only proceeds when the release is already on PyPI. The
189
+ # workflow_run path proves that through `release_gate`; this checks the
190
+ # registry itself so dispatch and tag-push paths get the same guarantee.
191
+ # A 404, an unparsable response, or an outage is a failure, never a pass.
192
+ - name: Assert the exact version is already published on PyPI
193
+ shell: bash
194
+ env:
195
+ DISTRIBUTION: scientific-computing-system
196
+ run: |
197
+ set -euo pipefail
198
+ version="$(python3 -c 'import json; print(json.load(open("package.json", encoding="utf-8"))["version"])')"
199
+ python3 - "$DISTRIBUTION" "$version" <<'PY'
200
+ import json
201
+ import sys
202
+ import urllib.error
203
+ import urllib.request
204
+
205
+ distribution, version = sys.argv[1], sys.argv[2]
206
+ url = f"https://pypi.org/pypi/{distribution}/{version}/json"
207
+ try:
208
+ with urllib.request.urlopen(url, timeout=60) as response:
209
+ payload = json.load(response)
210
+ except urllib.error.HTTPError as exc:
211
+ print(
212
+ f"::error::PyPI has no {distribution} {version} (HTTP {exc.code}): {url}",
213
+ file=sys.stderr,
214
+ )
215
+ sys.exit(1)
216
+ except (urllib.error.URLError, TimeoutError, OSError) as exc:
217
+ print(
218
+ f"::error::could not verify PyPI state for {distribution} {version}: {exc}",
219
+ file=sys.stderr,
220
+ )
221
+ sys.exit(1)
222
+
223
+ info = payload.get("info") or {}
224
+ files = payload.get("urls") or []
225
+ wheels = [f for f in files if str(f.get("filename", "")).endswith(".whl")]
226
+ if info.get("version") != version or not wheels:
227
+ print(
228
+ f"::error::PyPI {distribution} {version} is not fully published "
229
+ f"(reported version {info.get('version')!r}, {len(files)} file(s), "
230
+ f"{len(wheels)} wheel(s))",
231
+ file=sys.stderr,
232
+ )
233
+ sys.exit(1)
234
+ print(f"PASS: PyPI already serves {distribution} {version} ({len(files)} files)")
235
+ PY
91
236
 
92
237
  # Node 24 ships npm 11.5.1+, the floor for trusted publishing.
93
238
  #
@@ -284,15 +429,16 @@ jobs:
284
429
 
285
430
  # Two supported modes, selected by the `use_token_fallback` dispatch input.
286
431
  #
287
- # OIDC (preferred, default): no NODE_AUTH_TOKEN is set. The npm CLI
288
- # detects the OIDC environment (id-token: write above) and exchanges the
289
- # runner's identity token for a short-lived publish credential scoped to
290
- # this repository, workflow and environment. `--provenance` attaches a
291
- # Sigstore-signed attestation to the tarball binding it to this commit.
432
+ # OIDC (default, including every automatic release run): no
433
+ # NODE_AUTH_TOKEN is set. The npm CLI detects the OIDC environment
434
+ # (id-token: write above) and exchanges the runner's identity token for a
435
+ # short-lived publish credential scoped to this repository, workflow and
436
+ # environment. `--provenance` attaches a Sigstore-signed attestation to
437
+ # the tarball binding it to this commit.
292
438
  #
293
439
  # Token (explicit opt-in): uses the repository's existing NPM_TOKEN secret
294
- # via NODE_AUTH_TOKEN. This is the mode the maintainer selected while the
295
- # npmjs.com trusted-publisher registration is still pending.
440
+ # via NODE_AUTH_TOKEN. Break-glass only: it is never selected without a
441
+ # workflow_dispatch input that asks for it.
296
442
  #
297
443
  # The token mode does NOT pass --provenance, and must not. Provenance is an
298
444
  # OIDC-only attestation: without a trusted-publisher configuration npm has
@@ -320,7 +466,7 @@ jobs:
320
466
  if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
321
467
  requested_token="${{ inputs.use_token_fallback }}"
322
468
  else
323
- requested_token="true"
469
+ requested_token="false"
324
470
  fi
325
471
 
326
472
  if [ "$requested_token" = "true" ]; then
@@ -330,7 +476,7 @@ jobs:
330
476
  exit 1
331
477
  fi
332
478
  echo "mode=token via NPM_TOKEN (no provenance: a long-lived token cannot mint a Sigstore attestation)"
333
- echo "::warning::Automatic release-tag publishing uses NPM_TOKEN until npm Trusted Publishing is registered."
479
+ echo "::warning::Publishing with NPM_TOKEN break-glass mode; this release carries no provenance attestation."
334
480
  else
335
481
  if [ -z "${ACTIONS_ID_TOKEN_REQUEST_URL:-}" ] || [ -z "${ACTIONS_ID_TOKEN_REQUEST_TOKEN:-}" ]; then
336
482
  echo "::error::OIDC mode was requested but this job cannot mint an OIDC token"
@@ -384,7 +530,7 @@ jobs:
384
530
  # trusted publisher is the cause, and "bump the version" would not have
385
531
  # helped.
386
532
  - name: Publish to npm (OIDC trusted publishing, with provenance)
387
- if: ${{ github.event_name == 'workflow_dispatch' && !inputs.use_token_fallback }}
533
+ if: ${{ !inputs.use_token_fallback }}
388
534
  run: |
389
535
  # `-e` is on by default in this shell, so it is explicitly suspended
390
536
  # around npm to capture the exit code instead of aborting before the
@@ -430,7 +576,7 @@ jobs:
430
576
  echo "PASS: npm publish returned 0"
431
577
 
432
578
  - name: Publish to npm (token mode, no provenance)
433
- if: ${{ github.event_name != 'workflow_dispatch' || inputs.use_token_fallback }}
579
+ if: ${{ inputs.use_token_fallback }}
434
580
  env:
435
581
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
436
582
  run: |
@@ -40,12 +40,28 @@ jobs:
40
40
  github.event_name == 'workflow_dispatch'
41
41
  steps:
42
42
  - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
43
+ env:
44
+ # Never interpolate a dispatch input into JavaScript source. Passing
45
+ # it through env keeps it a string value, and the strict check below
46
+ # makes malformed input fail the job instead of becoming NaN.
47
+ REQUESTED_PR_NUMBER: ${{ inputs.pr_number }}
43
48
  with:
44
49
  script: |
45
50
  const { owner, repo } = context.repo;
46
51
  let prNumber = context.issue ? context.issue.number : null;
47
52
  if (context.eventName === 'workflow_dispatch') {
48
- prNumber = parseInt('${{ inputs.pr_number }}');
53
+ const raw = process.env.REQUESTED_PR_NUMBER || '';
54
+ if (!/^[1-9][0-9]{0,9}$/.test(raw)) {
55
+ core.setFailed(
56
+ `pr_number must be a positive integer (got ${JSON.stringify(raw)})`,
57
+ );
58
+ return;
59
+ }
60
+ prNumber = Number(raw);
61
+ if (!Number.isSafeInteger(prNumber)) {
62
+ core.setFailed(`pr_number is outside the safe integer range: ${raw}`);
63
+ return;
64
+ }
49
65
  }
50
66
  if (!prNumber) {
51
67
  console.log('No PR number provided');
@@ -1,4 +1,4 @@
1
- name: PyPI Registry CLI Smoke
1
+ name: PyPI Release Policy
2
2
 
3
3
  on:
4
4
  workflow_run:
@@ -11,52 +11,28 @@ on:
11
11
  - main
12
12
  paths:
13
13
  - ".github/workflows/release.yml"
14
- - ".github/workflows/pypi-registry-smoke.yml"
15
- - "scripts/verify_pypi_release.py"
14
+ - ".github/workflows/pypi-release-policy.yml"
16
15
  - "scripts/verify_release_integrity.py"
16
+ workflow_dispatch:
17
17
 
18
- # Default-deny; each job below declares exactly the scopes it needs.
18
+ # Default-deny; the policy job below declares exactly the scopes it needs.
19
19
  permissions:
20
20
  contents: read
21
21
 
22
22
  concurrency:
23
- group: pypi-registry-smoke-${{ github.event.workflow_run.head_sha || github.sha }}
23
+ group: pypi-release-policy-${{ github.event.workflow_run.head_sha || github.sha }}
24
24
  cancel-in-progress: false
25
25
 
26
+ # PyPI download statistics count every fetched distribution file, including
27
+ # files fetched by CI. This workflow therefore reads the public PyPI JSON API
28
+ # only and never installs or downloads the released distribution.
26
29
  jobs:
27
- registry-cli:
30
+ github-release-policy:
28
31
  if: >-
29
32
  github.event_name == 'push' ||
33
+ github.event_name == 'workflow_dispatch' ||
30
34
  (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
31
- name: public PyPI CLI on ${{ matrix.os }} / Python 3.12
32
- runs-on: ${{ matrix.os }}
33
- timeout-minutes: 25
34
- permissions:
35
- contents: read
36
- strategy:
37
- fail-fast: false
38
- matrix:
39
- os:
40
- - ubuntu-latest
41
- - macos-latest
42
- - windows-latest
43
- steps:
44
- - name: Check out released source
45
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
- with:
47
- ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
48
-
49
- - name: Set up Python
50
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
51
- with:
52
- python-version: "3.12"
53
-
54
- - name: Verify exact release from public PyPI
55
- run: python scripts/verify_pypi_release.py
56
-
57
- github-release-policy:
58
35
  name: enforce metadata-only GitHub Release policy
59
- needs: registry-cli
60
36
  runs-on: ubuntu-latest
61
37
  timeout-minutes: 15
62
38
  permissions: