scientific-computing-system 2.2.3__tar.gz → 2.2.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/changelog.yml +1 -1
  2. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/codeql.yml +3 -3
  3. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/npm-publish.yml +20 -22
  4. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/tests.yml +1 -1
  5. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/CHANGELOG.md +8 -0
  6. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/CITATION.cff +2 -2
  7. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/PKG-INFO +12 -9
  8. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/README.md +11 -8
  9. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/SECURITY.md +41 -33
  10. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/codemeta.json +1 -1
  11. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/npm.test.js +28 -13
  12. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/package.json +1 -1
  13. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/pyproject.toml +1 -1
  14. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/_version.py +1 -1
  15. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_provenance_claims.py +12 -8
  16. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/benchmarks.yml +0 -0
  17. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/bot-reviewer.yml +0 -0
  18. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/cli-package-smoke.yml +0 -0
  19. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/pr-automation.yml +0 -0
  20. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/pypi-registry-smoke.yml +0 -0
  21. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.github/workflows/release.yml +0 -0
  22. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/.gitignore +0 -0
  23. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/CONTRIBUTING.md +0 -0
  24. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/LICENSE +0 -0
  25. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/benchmarks/results.json +0 -0
  26. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/benchmarks/robust_runner.py +0 -0
  27. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/benchmarks/run_benchmarks.py +0 -0
  28. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/bin/scs.js +0 -0
  29. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/dashboard/app.py +0 -0
  30. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/ARCHITECTURE.md +0 -0
  31. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/CASE_STUDY_HUBBLE.md +0 -0
  32. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
  33. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/api.md +0 -0
  34. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/assets/icon.svg +0 -0
  35. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/assets/logo.svg +0 -0
  36. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/benchmarks.md +0 -0
  37. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/checks/verify_provenance_claims.py +0 -0
  38. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/cookbook.md +0 -0
  39. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/getting-started.md +0 -0
  40. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/index.md +0 -0
  41. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/maintenance.md +0 -0
  42. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/ml_reference.md +0 -0
  43. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/related.md +0 -0
  44. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/research-workflows.md +0 -0
  45. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/stylesheets/extra.css +0 -0
  46. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tour_of_numerical_methods.md +0 -0
  47. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/core_demo.md +0 -0
  48. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/data_analysis_demo.md +0 -0
  49. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/diffeq_demo.md +0 -0
  50. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/fft2_demo.md +0 -0
  51. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/graph_demo.md +0 -0
  52. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/hypothesis_demo.md +0 -0
  53. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/hypothesis_tests_demo.md +0 -0
  54. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
  55. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/knowledge_demo.md +0 -0
  56. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/linalg_demo.md +0 -0
  57. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/math_utils_demo.md +0 -0
  58. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/ml_advanced_demo.md +0 -0
  59. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/ml_and_viz_demo.md +0 -0
  60. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/ml_demo.md +0 -0
  61. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/modeling_demo.md +0 -0
  62. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/montecarlo_demo.md +0 -0
  63. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/nlp_attention_demo.md +0 -0
  64. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/nlp_bpe_demo.md +0 -0
  65. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
  66. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/nlp_viz.md +0 -0
  67. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/numerical_integration_demo.md +0 -0
  68. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/optimization_demo.md +0 -0
  69. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/pandas_io_demo.md +0 -0
  70. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/pca_demo.md +0 -0
  71. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/probability_demo.md +0 -0
  72. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/quantum_demo.md +0 -0
  73. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/quick_start.md +0 -0
  74. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/scientific_demo.md +0 -0
  75. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/signals_demo.md +0 -0
  76. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/stats_demo.md +0 -0
  77. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/stiff_ode_demo.md +0 -0
  78. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/tutorials/time_series_demo.md +0 -0
  79. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/docs/why-pure-python.md +0 -0
  80. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/core_demo.py +0 -0
  81. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/data_analysis_demo.py +0 -0
  82. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/diffeq_demo.py +0 -0
  83. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/discovery_pipeline_demo.py +0 -0
  84. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/ensemble_showcase.py +0 -0
  85. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/fft2_demo.py +0 -0
  86. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/graph_demo.py +0 -0
  87. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/hypothesis_custom_generator.py +0 -0
  88. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/hypothesis_demo.py +0 -0
  89. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/hypothesis_tests_demo.py +0 -0
  90. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/hypothesis_with_stats_demo.py +0 -0
  91. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/interpolate_demo.py +0 -0
  92. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/knowledge_demo.py +0 -0
  93. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/linalg_demo.py +0 -0
  94. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/math_utils_demo.py +0 -0
  95. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/ml_and_viz_demo.py +0 -0
  96. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/modeling_demo.py +0 -0
  97. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/montecarlo_demo.py +0 -0
  98. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/nlp_attention_demo.py +0 -0
  99. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/nlp_bpe_demo.py +0 -0
  100. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/nlp_mini_gpt_demo.py +0 -0
  101. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/nlp_viz_demo.py +0 -0
  102. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/numerical_integration_demo.py +0 -0
  103. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/optimization_demo.py +0 -0
  104. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/pca_demo.py +0 -0
  105. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/pde_demo.py +0 -0
  106. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/plot_demo.py +0 -0
  107. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/plotting_notebook.ipynb +0 -0
  108. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/probability_demo.py +0 -0
  109. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/quantum_demo.py +0 -0
  110. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/scientific_demo.py +0 -0
  111. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/signals_demo.py +0 -0
  112. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/stats_demo.py +0 -0
  113. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/examples/tour_of_numerical_methods.ipynb +0 -0
  114. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/index.js +0 -0
  115. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/mkdocs.yml +0 -0
  116. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/paper.bib +0 -0
  117. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/paper.md +0 -0
  118. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/requirements-build.lock +0 -0
  119. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/requirements-dev.lock +0 -0
  120. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/requirements.lock +0 -0
  121. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/check_release_toolchain.py +0 -0
  122. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/check_version_discipline.py +0 -0
  123. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/check_version_lockstep.py +0 -0
  124. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/publish.py +0 -0
  125. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/verify_cli_install.py +0 -0
  126. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/verify_cookbook.py +0 -0
  127. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/verify_ml_reference.py +0 -0
  128. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/verify_pypi_release.py +0 -0
  129. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/scripts/verify_release_integrity.py +0 -0
  130. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/__init__.py +0 -0
  131. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/__main__.py +0 -0
  132. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/_paths.py +0 -0
  133. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/bayes/__init__.py +0 -0
  134. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/bayes/conjugate.py +0 -0
  135. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/causal.py +0 -0
  136. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/cli/__init__.py +0 -0
  137. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/cli/__main__.py +0 -0
  138. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/cli/_handlers.py +0 -0
  139. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/cli/_parser.py +0 -0
  140. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/cli/_style.py +0 -0
  141. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/cli/_system_info.py +0 -0
  142. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/core/__init__.py +0 -0
  143. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/core/_numeric.py +0 -0
  144. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/core/models.py +0 -0
  145. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_analysis/__init__.py +0 -0
  146. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_analysis/dataset.py +0 -0
  147. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_analysis/loader.py +0 -0
  148. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_analysis/pandas_io.py +0 -0
  149. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_analysis/transform.py +0 -0
  150. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_analysis/viz.py +0 -0
  151. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_io/__init__.py +0 -0
  152. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_io/scientific.py +0 -0
  153. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/data_io/streaming.py +0 -0
  154. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/diffeq/__init__.py +0 -0
  155. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/diffeq/_implicit.py +0 -0
  156. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/diffeq/solvers.py +0 -0
  157. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/diffeq/symplectic.py +0 -0
  158. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/fractals/__init__.py +0 -0
  159. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/fractals/sets.py +0 -0
  160. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/genetics/__init__.py +0 -0
  161. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/genetics/sequence.py +0 -0
  162. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/graph/__init__.py +0 -0
  163. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/graph/algorithms.py +0 -0
  164. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/hypothesis/__init__.py +0 -0
  165. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/hypothesis/evaluator.py +0 -0
  166. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/hypothesis/generator.py +0 -0
  167. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/hypothesis/mining.py +0 -0
  168. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/infotheory/__init__.py +0 -0
  169. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/infotheory/measures.py +0 -0
  170. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/interpolate/__init__.py +0 -0
  171. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/knowledge/__init__.py +0 -0
  172. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/knowledge/graph.py +0 -0
  173. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/knowledge/notes.py +0 -0
  174. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/knowledge/retrieval.py +0 -0
  175. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/math_utils/__init__.py +0 -0
  176. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/math_utils/calculus.py +0 -0
  177. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/math_utils/linalg.py +0 -0
  178. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/math_utils/special.py +0 -0
  179. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/math_utils/svd.py +0 -0
  180. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/__init__.py +0 -0
  181. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/boosting.py +0 -0
  182. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/clustering.py +0 -0
  183. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/decomposition.py +0 -0
  184. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/ensemble.py +0 -0
  185. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/linear_models.py +0 -0
  186. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/metrics.py +0 -0
  187. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/model_selection.py +0 -0
  188. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/naive_bayes.py +0 -0
  189. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/neighbors.py +0 -0
  190. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/neural.py +0 -0
  191. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/preprocessing.py +0 -0
  192. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/tree.py +0 -0
  193. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/ml/voting.py +0 -0
  194. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/__init__.py +0 -0
  195. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/_base.py +0 -0
  196. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/_nodes.py +0 -0
  197. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/expression.py +0 -0
  198. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/fitting.py +0 -0
  199. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/model.py +0 -0
  200. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/modeling/solver.py +0 -0
  201. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/montecarlo/__init__.py +0 -0
  202. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/montecarlo/markov.py +0 -0
  203. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/montecarlo/methods.py +0 -0
  204. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/__init__.py +0 -0
  205. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/attention.py +0 -0
  206. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/autograd/__init__.py +0 -0
  207. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/autograd/_grad.py +0 -0
  208. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/autograd/ops.py +0 -0
  209. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/autograd/tensor.py +0 -0
  210. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/bpe.py +0 -0
  211. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/data.py +0 -0
  212. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/embed.py +0 -0
  213. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/layers.py +0 -0
  214. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/model.py +0 -0
  215. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/optim.py +0 -0
  216. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/training.py +0 -0
  217. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/nlp/viz.py +0 -0
  218. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/numerical_integration/__init__.py +0 -0
  219. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/numerical_integration/quadrature.py +0 -0
  220. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/optimization/__init__.py +0 -0
  221. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/optimization/_metaheuristics.py +0 -0
  222. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/optimization/constrained.py +0 -0
  223. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/optimization/minimize.py +0 -0
  224. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/pde/__init__.py +0 -0
  225. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/plot/__init__.py +0 -0
  226. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/plot/_backend.py +0 -0
  227. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/plot/charts.py +0 -0
  228. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/probability/__init__.py +0 -0
  229. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/probability/_advanced.py +0 -0
  230. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/probability/distributions.py +0 -0
  231. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/probability/extra_distributions.py +0 -0
  232. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/provenance/__init__.py +0 -0
  233. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/provenance/manifest.py +0 -0
  234. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/py.typed +0 -0
  235. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/quantum/__init__.py +0 -0
  236. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/quantum/circuit.py +0 -0
  237. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/quantum/multi_qubit.py +0 -0
  238. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/quantum/simulator.py +0 -0
  239. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/scientific/__init__.py +0 -0
  240. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/scientific/constants.py +0 -0
  241. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/scientific/formulas.py +0 -0
  242. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/sensitivity.py +0 -0
  243. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/signals/__init__.py +0 -0
  244. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/signals/filters.py +0 -0
  245. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/signals/processing.py +0 -0
  246. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/signals/stft.py +0 -0
  247. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/signals/wavelet.py +0 -0
  248. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/__init__.py +0 -0
  249. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/_distributions.py +0 -0
  250. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/bootstrap.py +0 -0
  251. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/descriptive.py +0 -0
  252. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/hypothesis_tests.py +0 -0
  253. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/multiple_testing.py +0 -0
  254. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/nonparametric.py +0 -0
  255. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/power.py +0 -0
  256. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/regression.py +0 -0
  257. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/stats/time_series.py +0 -0
  258. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/tools/__init__.py +0 -0
  259. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/tools/adapters.py +0 -0
  260. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/tools/registry.py +0 -0
  261. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/uncertainty/__init__.py +0 -0
  262. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/uncertainty/propagation.py +0 -0
  263. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/units/__init__.py +0 -0
  264. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/units/core.py +0 -0
  265. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/validation/__init__.py +0 -0
  266. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/validation/adequacy.py +0 -0
  267. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/validation/checks.py +0 -0
  268. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/validation/drift.py +0 -0
  269. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/validation/report.py +0 -0
  270. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/wavelets/__init__.py +0 -0
  271. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/wavelets/haar.py +0 -0
  272. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/__init__.py +0 -0
  273. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/engine.py +0 -0
  274. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/gates.py +0 -0
  275. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/orchestrator.py +0 -0
  276. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/selection.py +0 -0
  277. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/tooling.py +0 -0
  278. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/src/cds/workflow/types.py +0 -0
  279. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/__init__.py +0 -0
  280. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/conftest.py +0 -0
  281. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_advanced_fitting.py +0 -0
  282. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_audit_completion_coverage.py +0 -0
  283. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_audit_guard_coverage.py +0 -0
  284. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_audit_hardening.py +0 -0
  285. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_audit_hardening_coverage.py +0 -0
  286. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_bayes_v2.py +0 -0
  287. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_benchmarks.py +0 -0
  288. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_bootstrap.py +0 -0
  289. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_causal.py +0 -0
  290. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_cli.py +0 -0
  291. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_cli_color.py +0 -0
  292. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_cli_extended.py +0 -0
  293. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_cli_system_info.py +0 -0
  294. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_codemeta_version_lockstep.py +0 -0
  295. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_constrained_opt.py +0 -0
  296. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_core.py +0 -0
  297. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_data_analysis.py +0 -0
  298. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_data_analysis_lazy_bridge.py +0 -0
  299. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_data_analysis_pandas_io.py +0 -0
  300. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_data_io.py +0 -0
  301. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_data_io_optional_backends.py +0 -0
  302. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_data_io_scientific.py +0 -0
  303. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_dataset.py +0 -0
  304. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_dev_numpy_pin_contract.py +0 -0
  305. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_diffeq.py +0 -0
  306. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_diffeq_implicit.py +0 -0
  307. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_domain_validation.py +0 -0
  308. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_edge_misc_numerical.py +0 -0
  309. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_edge_ml_quantum_linalg.py +0 -0
  310. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_edge_nlp.py +0 -0
  311. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_edge_quantum_evaluator_cli.py +0 -0
  312. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_edge_stats_optimization_signals.py +0 -0
  313. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_extra_distributions.py +0 -0
  314. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_fft2.py +0 -0
  315. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_fitting_bootstrap.py +0 -0
  316. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_fractals.py +0 -0
  317. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_genetics.py +0 -0
  318. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_graph.py +0 -0
  319. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_hardening_privacy_provenance.py +0 -0
  320. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_hypothesis.py +0 -0
  321. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_hypothesis_engine.py +0 -0
  322. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_hypothesis_mining.py +0 -0
  323. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_hypothesis_tests.py +0 -0
  324. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_infotheory.py +0 -0
  325. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_interpolate.py +0 -0
  326. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_knowledge.py +0 -0
  327. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_layering.py +0 -0
  328. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_linalg_extended.py +0 -0
  329. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_linalg_qr_cholesky.py +0 -0
  330. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_markov.py +0 -0
  331. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_math_utils.py +0 -0
  332. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_boosting.py +0 -0
  333. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_clustering.py +0 -0
  334. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_ensemble.py +0 -0
  335. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_knn.py +0 -0
  336. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_linreg.py +0 -0
  337. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_logreg.py +0 -0
  338. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_metrics.py +0 -0
  339. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_model_selection.py +0 -0
  340. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_naive_bayes.py +0 -0
  341. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_pca.py +0 -0
  342. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_preprocessing.py +0 -0
  343. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_tree.py +0 -0
  344. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_viz.py +0 -0
  345. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_ml_voting.py +0 -0
  346. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_modeling.py +0 -0
  347. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_modeling_fit_validation.py +0 -0
  348. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_montecarlo.py +0 -0
  349. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_multi_qubit.py +0 -0
  350. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_attention.py +0 -0
  351. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_autograd.py +0 -0
  352. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_bpe.py +0 -0
  353. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_embed.py +0 -0
  354. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_layers.py +0 -0
  355. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_model.py +0 -0
  356. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_training.py +0 -0
  357. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_nlp_viz.py +0 -0
  358. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_numerical_integration.py +0 -0
  359. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_numerical_invariants.py +0 -0
  360. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_numerical_oracles.py +0 -0
  361. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_optimization.py +0 -0
  362. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_optimization_metaheuristics.py +0 -0
  363. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_path_confinement.py +0 -0
  364. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_pde.py +0 -0
  365. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_plot_charts.py +0 -0
  366. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_plot_lazy.py +0 -0
  367. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_power.py +0 -0
  368. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_probability.py +0 -0
  369. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_probability_advanced.py +0 -0
  370. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_property_invariants.py +0 -0
  371. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_protocol_placeholders.py +0 -0
  372. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_provenance.py +0 -0
  373. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_provenance_audit_hardening.py +0 -0
  374. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_public_api.py +0 -0
  375. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_quantum.py +0 -0
  376. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_readme_badges.py +0 -0
  377. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_readme_surface.py +0 -0
  378. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_release_contract.py +0 -0
  379. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_release_toolchain.py +0 -0
  380. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_retrieval.py +0 -0
  381. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_runtime_dependency_graph.py +0 -0
  382. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_scientific.py +0 -0
  383. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_selection_audit_hardening.py +0 -0
  384. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_sensitivity.py +0 -0
  385. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_sensitivity_global.py +0 -0
  386. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_signals.py +0 -0
  387. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_signals_filters.py +0 -0
  388. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_special_invariants.py +0 -0
  389. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_special_numerics.py +0 -0
  390. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_statistical_audit.py +0 -0
  391. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_stats.py +0 -0
  392. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_stats_audit_coverage.py +0 -0
  393. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_stats_multiple_testing.py +0 -0
  394. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_stats_nonparametric.py +0 -0
  395. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_stats_time_series.py +0 -0
  396. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_stft.py +0 -0
  397. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_streaming_analytics.py +0 -0
  398. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_svd.py +0 -0
  399. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_symplectic.py +0 -0
  400. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_tool_adapters.py +0 -0
  401. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_tools_registry.py +0 -0
  402. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_uncertainty.py +0 -0
  403. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_units.py +0 -0
  404. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_validation.py +0 -0
  405. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_validation_adequacy.py +0 -0
  406. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_validation_advanced.py +0 -0
  407. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_validation_drift.py +0 -0
  408. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_verify_release_integrity.py +0 -0
  409. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_wavelet.py +0 -0
  410. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_wavelets_v2.py +0 -0
  411. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow.py +0 -0
  412. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow_gates.py +0 -0
  413. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow_orchestrator.py +0 -0
  414. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
  415. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow_selection.py +0 -0
  416. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow_selection_coverage.py +0 -0
  417. {scientific_computing_system-2.2.3 → scientific_computing_system-2.2.4}/tests/test_workflow_tooling.py +0 -0
@@ -53,7 +53,7 @@ jobs:
53
53
  fetch-depth: 0
54
54
 
55
55
  - name: Install git-cliff
56
- uses: orhun/git-cliff-action@3d96a18cc4ec17e9dc69ddcc424ccafaf1f78ce2 # v4
56
+ uses: orhun/git-cliff-action@a9a95522b26fe6403f7bb24031f21fb573d0f5ff # v4
57
57
  with:
58
58
  config: cliff.toml
59
59
  args: --verbose --tag ${{ inputs.tag }} --output CHANGELOG.md
@@ -43,13 +43,13 @@ jobs:
43
43
  with:
44
44
  persist-credentials: false
45
45
  - name: Initialize CodeQL
46
- uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4
46
+ uses: github/codeql-action/init@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4
47
47
  with:
48
48
  languages: ${{ matrix.language }}
49
49
  queries: security-and-quality
50
50
  - name: Autobuild
51
- uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4
51
+ uses: github/codeql-action/autobuild@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4
52
52
  - name: Perform CodeQL Analysis
53
- uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4
53
+ uses: github/codeql-action/analyze@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4
54
54
  with:
55
55
  category: "/language:${{ matrix.language }}"
@@ -37,8 +37,10 @@ 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. Token mode never runs automatically, so a broken
41
- # OIDC configuration cannot silently downgrade to the long-lived credential.
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.
42
44
 
43
45
  on:
44
46
  workflow_dispatch:
@@ -53,21 +55,11 @@ on:
53
55
  type: boolean
54
56
  default: false
55
57
  push:
56
- # `branches` and `tags` in one `push` mapping are OR'd by GitHub.
57
- #
58
- # The `v*` tag is the release path: release.yml creates the tag only after
59
- # the PyPI publish has succeeded, so a single version bump reaches PyPI
60
- # first and npm second. `paths` narrows *branch* pushes so unrelated merges
61
- # do not run this job; GitHub does not evaluate `paths` against tag pushes.
62
- branches: [main]
58
+ # release.yml creates the version tag only after the PyPI release succeeds.
59
+ # Publishing npm from that tag gives one version bump exactly one automatic
60
+ # npm run, avoiding the previous branch-push + tag-push duplicate race.
63
61
  tags:
64
62
  - "v*"
65
- paths:
66
- - "package.json"
67
- - "index.js"
68
- - "bin/**"
69
- - "npm.test.js"
70
- - ".github/workflows/npm-publish.yml"
71
63
 
72
64
  concurrency:
73
65
  group: npm-publish
@@ -120,7 +112,7 @@ jobs:
120
112
  # ENEEDAUTH; with the entry present it reaches the registry and fails
121
113
  # E401 on a deliberately fake token instead.
122
114
  - name: Set up Node
123
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
115
+ uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
124
116
  with:
125
117
  node-version: "24"
126
118
  registry-url: "https://registry.npmjs.org"
@@ -325,14 +317,20 @@ jobs:
325
317
  NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
326
318
  run: |
327
319
  set -euo pipefail
328
- if [ "${{ inputs.use_token_fallback }}" = "true" ]; then
320
+ if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
321
+ requested_token="${{ inputs.use_token_fallback }}"
322
+ else
323
+ requested_token="true"
324
+ fi
325
+
326
+ if [ "$requested_token" = "true" ]; then
329
327
  if [ -z "${NPM_TOKEN:-}" ]; then
330
- echo "::error::token mode was requested (use_token_fallback=true) but the NPM_TOKEN secret is empty or unset"
331
- echo "::error::add an npm automation token as the NPM_TOKEN secret, or re-run without use_token_fallback once the npmjs.com trusted publisher is registered"
328
+ echo "::error::token mode was requested but the NPM_TOKEN secret is empty or unset"
329
+ echo "::error::add an npm automation token as the NPM_TOKEN secret, or use a manual OIDC dispatch after registering the npm trusted publisher"
332
330
  exit 1
333
331
  fi
334
332
  echo "mode=token via NPM_TOKEN (no provenance: a long-lived token cannot mint a Sigstore attestation)"
335
- echo "::warning::Publishing with NPM_TOKEN instead of OIDC. Register the npmjs.com trusted publisher and delete NPM_TOKEN once this release is out."
333
+ echo "::warning::Automatic release-tag publishing uses NPM_TOKEN until npm Trusted Publishing is registered."
336
334
  else
337
335
  if [ -z "${ACTIONS_ID_TOKEN_REQUEST_URL:-}" ] || [ -z "${ACTIONS_ID_TOKEN_REQUEST_TOKEN:-}" ]; then
338
336
  echo "::error::OIDC mode was requested but this job cannot mint an OIDC token"
@@ -386,7 +384,7 @@ jobs:
386
384
  # trusted publisher is the cause, and "bump the version" would not have
387
385
  # helped.
388
386
  - name: Publish to npm (OIDC trusted publishing, with provenance)
389
- if: ${{ !inputs.use_token_fallback }}
387
+ if: ${{ github.event_name == 'workflow_dispatch' && !inputs.use_token_fallback }}
390
388
  run: |
391
389
  # `-e` is on by default in this shell, so it is explicitly suspended
392
390
  # around npm to capture the exit code instead of aborting before the
@@ -432,7 +430,7 @@ jobs:
432
430
  echo "PASS: npm publish returned 0"
433
431
 
434
432
  - name: Publish to npm (token mode, no provenance)
435
- if: ${{ inputs.use_token_fallback }}
433
+ if: ${{ github.event_name != 'workflow_dispatch' || inputs.use_token_fallback }}
436
434
  env:
437
435
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
438
436
  run: |
@@ -416,7 +416,7 @@ jobs:
416
416
  with:
417
417
  persist-credentials: false
418
418
  - name: Set up Node
419
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
419
+ uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
420
420
  with:
421
421
  node-version: "24"
422
422
  # `node --check` runs standalone here as well as via the npm `pretest`
@@ -104,6 +104,14 @@ tarball built, provenance was signed and submitted to the Sigstore transparency
104
104
  log, and only the `PUT` failed. So both runs did prove the authentication failure,
105
105
  and the fix is the registration above — not a version bump.
106
106
 
107
+ ## [v2.2.4] - 2026-10-12
108
+
109
+ ### Housekeeping — release alignment
110
+
111
+ - Publishes the post-2.2.3 repository state (single-shot automatic npm
112
+ publishing, #165) to PyPI and npm: the 2.2.3 upload predates that commit, so
113
+ both registries were one commit behind `main`. No behavioural change.
114
+
107
115
  ## [v2.2.3] - 2026-10-05
108
116
 
109
117
  This release exists to exercise the OIDC trusted-publish path, now that the
@@ -5,7 +5,7 @@ title: "scientific-computing-system"
5
5
  # Keep `version` in lockstep with pyproject.toml [project].version and
6
6
  # src/cds/_version.py. scripts/check_version_discipline.py and
7
7
  # scripts/check_version_lockstep.py enforce this.
8
- version: 2.2.3
8
+ version: 2.2.4
9
9
  authors:
10
10
  - name: "Furox-Art"
11
11
  email: "furkanarkn1451@gmail.com"
@@ -50,5 +50,5 @@ preferred-citation:
50
50
  authors:
51
51
  - name: "Furox-Art"
52
52
  year: 2026
53
- version: 2.2.3
53
+ version: 2.2.4
54
54
  url: "https://github.com/Furox-Art/scientific-computing-system"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: scientific-computing-system
3
- Version: 2.2.3
3
+ Version: 2.2.4
4
4
  Summary: A pure-Python computational science platform for numerical methods, modeling, validation, uncertainty, scientific workflows, dimensional analysis, and optional research-data backends. Zero runtime dependencies.
5
5
  Project-URL: Homepage, https://github.com/Furox-Art/scientific-computing-system
6
6
  Project-URL: Repository, https://github.com/Furox-Art/scientific-computing-system
@@ -149,14 +149,17 @@ Both channels are published at the same version. They are **not** equally
149
149
  verifiable:
150
150
 
151
151
  - **PyPI** — carries a **PEP 740 provenance attestation** (Sigstore-signed,
152
- binding the file digest to the publishing workflow). Verified on 2.2.1.
153
- - **npm** — carries **no** attestation; the npmjs.com trusted publisher is not
154
- registered yet, so its publish path cannot mint one. npm does expose
155
- `dist.integrity` (sha512), which is a content pin, not proof of origin, and
156
- `dist.signatures`, which is npm's registry transport signature, not build
157
- provenance.
158
-
159
- Prefer PyPI for anything security-sensitive.
152
+ binding the file digest to the publishing workflow). Verified on 2.2.3, and
153
+ on every release since attestations were enabled.
154
+ - **npm** — carries a **Sigstore attestation as of 2.2.3**, minted by npm's
155
+ OIDC trusted publisher (the registry serves both an npm publish attestation
156
+ and a SLSA provenance v1 bundle for that tarball). 1.0.0 through 2.2.2
157
+ predate the publisher registration and have none, so pin 2.2.3 or newer. npm
158
+ also exposes `dist.integrity` (sha512), which is a content pin, not proof of
159
+ origin, and `dist.signatures`, which is npm's registry transport signature,
160
+ not build provenance.
161
+
162
+ Prefer PyPI if you need an attestation for a version older than 2.2.3.
160
163
  [SECURITY.md](SECURITY.md#distribution-channels-and-provenance) has the
161
164
  per-channel table, the published digests to pin, the commands to verify them,
162
165
  and what to register to close the npm gap.
@@ -53,14 +53,17 @@ Both channels are published at the same version. They are **not** equally
53
53
  verifiable:
54
54
 
55
55
  - **PyPI** — carries a **PEP 740 provenance attestation** (Sigstore-signed,
56
- binding the file digest to the publishing workflow). Verified on 2.2.1.
57
- - **npm** — carries **no** attestation; the npmjs.com trusted publisher is not
58
- registered yet, so its publish path cannot mint one. npm does expose
59
- `dist.integrity` (sha512), which is a content pin, not proof of origin, and
60
- `dist.signatures`, which is npm's registry transport signature, not build
61
- provenance.
62
-
63
- Prefer PyPI for anything security-sensitive.
56
+ binding the file digest to the publishing workflow). Verified on 2.2.3, and
57
+ on every release since attestations were enabled.
58
+ - **npm** — carries a **Sigstore attestation as of 2.2.3**, minted by npm's
59
+ OIDC trusted publisher (the registry serves both an npm publish attestation
60
+ and a SLSA provenance v1 bundle for that tarball). 1.0.0 through 2.2.2
61
+ predate the publisher registration and have none, so pin 2.2.3 or newer. npm
62
+ also exposes `dist.integrity` (sha512), which is a content pin, not proof of
63
+ origin, and `dist.signatures`, which is npm's registry transport signature,
64
+ not build provenance.
65
+
66
+ Prefer PyPI if you need an attestation for a version older than 2.2.3.
64
67
  [SECURITY.md](SECURITY.md#distribution-channels-and-provenance) has the
65
68
  per-channel table, the published digests to pin, the commands to verify them,
66
69
  and what to register to close the npm gap.
@@ -29,8 +29,8 @@ It is also published to npm as `scientific-computing-system`, but that package i
29
29
 
30
30
  | Threat | Mitigation |
31
31
  |---|---|
32
- | **Supply chain: malicious or substituted PyPI artifact** | The release workflow is the sole PyPI publish authority. It builds wheel + sdist on a GitHub-hosted runner from a hash-pinned toolchain, verifies package metadata/version, installs the built wheel, smoke-tests the installed CLI, and publishes through PyPI Trusted Publishing (OIDC). PyPI serves a PEP 740 provenance bundle for 2.2.1 whose subject digest matches the published `sha256`. |
33
- | **Supply chain: malicious or substituted npm artifact** | The npm workflow is the sole npm publish authority and gates on the registry version-existence check, a `npm pack --dry-run` tarball allowlist, and npm/Python version lockstep. **No attestation is possible yet:** the npmjs.com trusted publisher is not registered, so the token fallback is the working mode and npm's `--provenance` cannot be honoured. Consumers can only pin `dist.integrity` until that is registered. See below. |
32
+ | **Supply chain: malicious or substituted PyPI artifact** | The release workflow is the sole PyPI publish authority. It builds wheel + sdist on a GitHub-hosted runner from a hash-pinned toolchain, verifies package metadata/version, installs the built wheel, smoke-tests the installed CLI, and publishes through PyPI Trusted Publishing (OIDC). PyPI serves a PEP 740 provenance bundle for 2.2.3 whose subject digest matches the published `sha256`. |
33
+ | **Supply chain: malicious or substituted npm artifact** | The npm workflow is the sole npm publish authority and gates on the registry version-existence check, a `npm pack --dry-run` tarball allowlist, and npm/Python version lockstep. **2.2.3 onward is attested:** the npmjs.com trusted publisher is registered, the workflow publishes in `mode=oidc`, and npm's `--provenance` is honoured, so the registry serves an npm publish attestation plus a SLSA provenance v1 bundle for the released tarball. **1.0.0–2.2.2 are not:** they were published through the token fallback, which cannot mint an attestation, so for those versions the only consumer-side control is `dist.integrity`, which is a content pin rather than proof of origin. See below. |
34
34
  | **Registry drift** | Public PyPI is treated as the distribution registry for the library. The release integrity check requires exactly one wheel and one sdist on PyPI and requires the matching GitHub Release to contain no wheel/sdist assets. A registry-policy workflow rechecks the public PyPI package and removes accidental distribution assets from GitHub Releases. |
35
35
  | **Dependency vulnerabilities** | The core has no required runtime dependencies. Development/test/docs lock files are audited in CI with `pip-audit`; optional backends are isolated behind extras and lazy loading. |
36
36
  | **Code execution from package install** | The build backend is `hatchling`; there is no `setup.py` execution and package versioning is static in `pyproject.toml` plus `src/cds/_version.py`. |
@@ -48,8 +48,8 @@ version-specific; re-check it rather than trusting it indefinitely.
48
48
  |---|---|---|
49
49
  | Contents | the library (wheel + sdist) | `index.js`, `bin/scs.js`, `LICENSE`, `README.md`, `CHANGELOG.md`, `SECURITY.md` — **no Python** |
50
50
  | Requires the other channel | no | yes; `scs` runs `python -m cds`, so the Python distribution must be installed. It resolves `python`/`python3`/`py` and does **not** look for a `cds` console script on `PATH` |
51
- | Publish authentication | Trusted Publishing (OIDC) | OIDC trusted publishing implemented and default; token fallback exists |
52
- | **PEP 740 provenance attestation** | **yes on 2.2.1** (verified; see below) | **none** — attestations endpoint returns 404 |
51
+ | Publish authentication | Trusted Publishing (OIDC) | Trusted Publishing (OIDC) since 2.2.3; token fallback still exists in the workflow |
52
+ | **PEP 740 provenance attestation** | **yes on 2.2.3** (verified; see below) | **yes on 2.2.3** (verified; see below) |
53
53
  | **npm `dist.signatures`** | n/a | present — registry transport signature, **not** build provenance |
54
54
  | **Content digest a consumer can pin** | `sha256` per file on the PyPI file page | `dist.integrity` (sha512) and `dist.shasum` (sha1) |
55
55
 
@@ -69,34 +69,40 @@ version-specific; re-check it rather than trusting it indefinitely.
69
69
 
70
70
  #### What is published today, and how to check it
71
71
 
72
- Verified against the live registries for **PyPI 2.2.1**:
72
+ Verified against the live registries for **2.2.3** on 2026-10-05:
73
73
 
74
74
  ```bash
75
75
  # PEP 740 attestation exists (HTTP 200). Note the per-FILE path; a bare
76
76
  # /integrity/<project>/<version>/ directory is not an endpoint and 404s.
77
77
  curl -sS -H "Accept: application/vnd.pypi.integrity.v1+json" \
78
- https://pypi.org/integrity/scientific-computing-system/2.2.1/scientific_computing_system-2.2.1-py3-none-any.whl/provenance
78
+ https://pypi.org/integrity/scientific-computing-system/2.2.3/scientific_computing_system-2.2.3-py3-none-any.whl/provenance
79
79
 
80
80
  # The digest PyPI publishes for that file, to compare against the attestation
81
81
  # subject (predicateType https://docs.pypi.org/attestations/publish/v1):
82
- curl -sS https://pypi.org/pypi/scientific-computing-system/2.2.1/json | python -c \
82
+ curl -sS https://pypi.org/pypi/scientific-computing-system/2.2.3/json | python -c \
83
83
  "import json,sys; [print(f['filename'], f['digests']['sha256']) for f in json.load(sys.stdin)['urls']]"
84
84
 
85
- # npm: no attestation; there IS a transport signature and an integrity digest.
85
+ # npm: attested from 2.2.3 onward (HTTP 200, two bundles: the npm publish
86
+ # attestation and a SLSA provenance v1 one). Earlier versions 404 -- 1.0.0,
87
+ # 2.2.0, 2.2.1 and 2.2.2 were published through the token fallback, which
88
+ # cannot mint an attestation.
86
89
  curl -sS -o /dev/null -w '%{http_code}\n' \
87
- https://registry.npmjs.org/-/npm/v1/attestations/scientific-computing-system@2.2.1 # -> 404
88
- npm view scientific-computing-system@2.2.1 dist.integrity dist.shasum
90
+ https://registry.npmjs.org/-/npm/v1/attestations/scientific-computing-system@2.2.3 # -> 200
91
+ curl -sS -o /dev/null -w '%{http_code}\n' \
92
+ https://registry.npmjs.org/-/npm/v1/attestations/scientific-computing-system@2.2.2 # -> 404
93
+ npm view scientific-computing-system@2.2.3 dist.integrity dist.shasum
89
94
  ```
90
95
 
91
- The published PyPI 2.2.1 digests, useful for pinning:
96
+ The published PyPI 2.2.3 digests, useful for pinning:
92
97
 
93
98
  | File | sha256 |
94
99
  |---|---|
95
- | `scientific_computing_system-2.2.1-py3-none-any.whl` | `b14b89478fdc8b11482ffd556bb6eb59c6b21887f2a09418edec7029d4569bb9` |
96
- | `scientific_computing_system-2.2.1.tar.gz` | `6ba4ad4c2ebb6bef86356bcbcd251e12978737945e58d9e75b9c68860efa77f6` |
100
+ | `scientific_computing_system-2.2.3-py3-none-any.whl` | `57408c812ac153e6f2dca6345d715084032fc67c5a8d9df127f257c6bfe31a3c` |
101
+ | `scientific_computing_system-2.2.3.tar.gz` | `86af9fa7295d7c026f1b417a48eda4b6a696e9e9605ca459e48ad125a1ab962b` |
97
102
 
98
103
  Both were confirmed to equal the `subject` digest inside their attestation
99
104
  bundles, so the attested bytes and the published bytes are the same bytes.
105
+ The 2.2.1 digests remain pinned in the release notes for that version.
100
106
 
101
107
  #### Reproducible builds: what is and is not claimed
102
108
 
@@ -114,28 +120,29 @@ deterministic for a fixed toolchain, and this repository does not currently
114
120
  claim that the published artifacts are bit-for-bit reproducible from source.*
115
121
  Treat the published digests above as the pin to use, not a rebuild target.
116
122
 
117
- #### When provenance will appear
123
+ #### How the npm attestation was enabled
118
124
 
119
- The OIDC plumbing is implemented on both sides; the registries-side trusted
120
- publisher records are **not yet in place**, so an npm release cannot carry an
121
- attestation yet:
125
+ Both registries now have their trusted-publisher record, so a release from this
126
+ repository's publish workflows mints an attestation on each channel:
122
127
 
123
128
  - **PyPI** — Trusted Publisher: owner `Furox-Art`, repository
124
129
  `scientific-computing-system`, workflow `release.yml`, environment `pypi`.
125
- Already exercised: 2.2.1 was published through it and is attested.
130
+ Exercised since 2.2.1; every release since is attested.
126
131
  - **npm** — Trusted Publisher: owner `Furox-Art`, repository
127
132
  `scientific-computing-system`, workflow `npm-publish.yml`, environment `npm`.
128
- **Pending registration.** Until it exists, the default OIDC path cannot
129
- complete a publish, and the token fallback — which cannot mint a Sigstore
130
- identity — is the only working mode. That is why the published npm artifacts
131
- have no attestation.
132
-
133
- Register it under **Settings → Trusted Publisher → GitHub Actions** and enable
134
- the **`npm publish`** allowed action. That last field is not optional here: npm's
135
- current UI allows `npm stage publish` by default on new configurations and makes
136
- direct `npm publish` opt-in, while this repository's workflow publishes
137
- directly. A publisher registered without it still fails, with a permission error
138
- rather than a 404.
133
+ Registered before 2.2.3, which is the first npm release published through it
134
+ with `--provenance`. Before that registration the default OIDC path could not
135
+ complete a publish, so 1.0.0–2.2.2 went out through the token fallback — a
136
+ long-lived token has no OIDC identity to attest, and those versions carry no
137
+ attestation. They stay in the registry as-is; the fix for a consumer is to
138
+ move to 2.2.3 or newer.
139
+
140
+ The registration step that is easy to miss: under **Settings → Trusted
141
+ Publisher → GitHub Actions**, the **`npm publish`** allowed action must be
142
+ enabled. npm's UI allows `npm stage publish` by default on new configurations
143
+ and makes direct `npm publish` opt-in, while this repository's workflow
144
+ publishes directly. A publisher registered without it still fails, with a
145
+ permission error rather than a 404.
139
146
 
140
147
  **A missing registration looks like a missing version.** npm will not disclose
141
148
  whether a package exists to an unauthenticated caller, so an unrecognised
@@ -150,10 +157,11 @@ attestation yet:
150
157
  differently — `401`, or `ENEEDAUTH` — so `E404` on a PUT for a package that is
151
158
  known to exist means the registration, not the version.
152
159
 
153
- **Practical consequence:** for anything security-sensitive, install from PyPI and
154
- check the PEP 740 bundle against the digests PyPI publishes. Do not rely on the
155
- npm channel for supply-chain assurance today; treat its `dist.integrity` as an
156
- integrity pin only.
160
+ **Practical consequence:** install 2.2.3 or newer from either channel and verify
161
+ its attestation bundle — PEP 740 on PyPI (per-file endpoint), the npm publish and
162
+ SLSA provenance bundles on npm. For a pinned older version the npm channel only
163
+ offers `dist.integrity`, which is an integrity pin and not proof of origin; use
164
+ PyPI's PEP 740 bundle there instead.
157
165
 
158
166
  ### Optional Backend Boundary
159
167
 
@@ -2,7 +2,7 @@
2
2
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
3
3
  "@type": "SoftwareSourceCode",
4
4
  "name": "scientific-computing-system",
5
- "version": "2.2.3",
5
+ "version": "2.2.4",
6
6
  "description": "Pure-Python computational science platform for numerical methods, modeling, validation, uncertainty, and scientific workflows. Zero runtime dependencies. This is the front door; scientific-computing-system-2.0 is the NumPy build of the same work.",
7
7
  "license": "https://spdx.org/licenses/MIT",
8
8
  "codeRepository": "https://github.com/Furox-Art/scientific-computing-system",
@@ -278,6 +278,16 @@ test('the npm publish path is armed', () => {
278
278
  );
279
279
  });
280
280
 
281
+ test('automatic npm publishing is single-shot from release tags', () => {
282
+ const workflow = workflowBody('npm-publish.yml');
283
+ assert.ok(/tags:\s*\n\s*- "v\*"/.test(workflow), 'v* tags must trigger npm publishing');
284
+ assert.ok(!/branches:\s*\[main\]/.test(workflow), 'main branch pushes must not duplicate the tag release');
285
+ assert.ok(
286
+ /github\.event_name != 'workflow_dispatch' \|\| inputs\.use_token_fallback/.test(workflow),
287
+ 'automatic tag runs must select the verified token path',
288
+ );
289
+ });
290
+
281
291
  test('both publish modes exist and are selected by one input', () => {
282
292
  const workflow = workflowBody('npm-publish.yml');
283
293
 
@@ -296,19 +306,18 @@ test('both publish modes exist and are selected by one input', () => {
296
306
  'use_token_fallback must default to false so OIDC remains the default mode',
297
307
  );
298
308
 
299
- // Both modes must be present and mutually exclusive.
309
+ // Both modes must be present and mutually exclusive. Automatic tag releases
310
+ // use the verified token path; manual dispatches remain available for OIDC.
300
311
  const publishSteps = workflow.split('- name: ').filter((block) => /^Publish to npm/.test(block));
301
312
  assert.strictEqual(publishSteps.length, 2, 'there must be exactly two publish steps');
302
- // Exactly one step runs per mode. The token gate is matched with the `!`
303
- // prefix excluded explicitly: `/inputs\.use_token_fallback/` on its own also
304
- // matches the OIDC step's `!inputs.use_token_fallback`, which would let both
305
- // modes pass a loose assertion while being mutually exclusive in reality.
306
- const oidcStep = publishSteps.find((s) => /if:.*!inputs\.use_token_fallback/.test(s));
313
+ const oidcStep = publishSteps.find(
314
+ (s) => /github\.event_name == 'workflow_dispatch'/.test(s) && /!inputs\.use_token_fallback/.test(s),
315
+ );
307
316
  const tokenStep = publishSteps.find(
308
- (s) => /if:.*inputs\.use_token_fallback/.test(s) && !/!inputs\.use_token_fallback/.test(s),
317
+ (s) => /github\.event_name != 'workflow_dispatch'/.test(s) && /inputs\.use_token_fallback/.test(s),
309
318
  );
310
- assert.ok(oidcStep, 'the OIDC publish step must be gated on !inputs.use_token_fallback');
311
- assert.ok(tokenStep, 'the token publish step must be gated on inputs.use_token_fallback');
319
+ assert.ok(oidcStep, 'manual OIDC publish must remain available');
320
+ assert.ok(tokenStep, 'automatic tag publishing must use the token path');
312
321
  assert.notStrictEqual(oidcStep, tokenStep, 'the two modes must be distinct steps');
313
322
 
314
323
  // The token step must read the repository's existing NPM_TOKEN secret.
@@ -333,8 +342,12 @@ test('the token mode does not request provenance', () => {
333
342
  .split('- name: ')
334
343
  .filter((block) => /^Publish to npm/.test(block));
335
344
 
336
- const oidc = publishSteps.find((s) => /!inputs\.use_token_fallback/.test(s));
337
- const token = publishSteps.find((s) => /inputs\.use_token_fallback/.test(s) && !/!inputs/.test(s));
345
+ const oidc = publishSteps.find(
346
+ (s) => /github\.event_name == 'workflow_dispatch'/.test(s) && /!inputs\.use_token_fallback/.test(s),
347
+ );
348
+ const token = publishSteps.find(
349
+ (s) => /github\.event_name != 'workflow_dispatch'/.test(s) && /inputs\.use_token_fallback/.test(s),
350
+ );
338
351
  assert.ok(oidc, 'OIDC publish step not found');
339
352
  assert.ok(token, 'token publish step not found');
340
353
 
@@ -550,8 +563,10 @@ test('a missing credential exits before any publish step can run', () => {
550
563
  'the preflight must check OIDC availability for OIDC mode',
551
564
  );
552
565
  assert.ok(
553
- /if \[ "\$\{\{ inputs\.use_token_fallback \}\}" = "true" \]; then/.test(preflightBlock),
554
- 'the preflight must branch on the use_token_fallback input',
566
+ /github\.event_name/.test(preflightBlock) &&
567
+ /requested_token/.test(preflightBlock) &&
568
+ /inputs\.use_token_fallback/.test(preflightBlock),
569
+ 'the preflight must select token mode automatically for tag pushes and honor the manual input',
555
570
  );
556
571
 
557
572
  // Exactly two `exit 1`s: one per mode. Each failing branch must terminate
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scientific-computing-system",
3
- "version": "2.2.3",
3
+ "version": "2.2.4",
4
4
  "description": "Scientific Computing System launcher - a thin Node wrapper that forwards to the pure-Python `cds` CLI. This npm package ships NO Python code: it requires the Python distribution to be installed (`pip install scientific-computing-system`), otherwise `scs` exits non-zero with an actionable message.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -2,7 +2,7 @@
2
2
  # Distribution name. Formerly published as "cognitive-discovery-system";
3
3
  # the import name stays `cds`. Keep the old PyPI project alive as an alias.
4
4
  name = "scientific-computing-system"
5
- version = "2.2.3"
5
+ version = "2.2.4"
6
6
  description = "A pure-Python computational science platform for numerical methods, modeling, validation, uncertainty, scientific workflows, dimensional analysis, and optional research-data backends. Zero runtime dependencies."
7
7
  readme = "README.md"
8
8
  license = "MIT"
@@ -5,5 +5,5 @@ from __future__ import annotations
5
5
 
6
6
  __all__ = ["__version__", "version", "__version_tuple__", "version_tuple"]
7
7
 
8
- __version__ = version = "2.2.3"
8
+ __version__ = version = "2.2.4"
9
9
  __version_tuple__ = version_tuple = (2, 2, 0)
@@ -289,19 +289,19 @@ def test_npm_dist_handles_failure(monkeypatch: pytest.MonkeyPatch) -> None:
289
289
 
290
290
 
291
291
  def test_security_table_row_parses_to_the_measured_verdict() -> None:
292
- """SECURITY.md's real row must parse to (True, False) today."""
292
+ """SECURITY.md's real row must parse to (True, True) today."""
293
293
  pypi_claim, npm_claim, row = guard.read_attestation_row()
294
294
 
295
295
  assert row, "the attestation row disappeared from SECURITY.md"
296
296
  assert pypi_claim is True
297
- assert npm_claim is False
297
+ assert npm_claim is True
298
298
 
299
299
 
300
- def test_readme_npm_bullet_parses_to_no_attestation() -> None:
300
+ def test_readme_npm_bullet_parses_to_an_attestation() -> None:
301
301
  readme_claim, line = guard.read_readme_npm_claim()
302
302
 
303
303
  assert line, "the README npm bullet disappeared"
304
- assert readme_claim is False
304
+ assert readme_claim is True
305
305
 
306
306
 
307
307
  @pytest.mark.parametrize(
@@ -332,7 +332,9 @@ def test_prose_claims_scan_finds_the_expected_signals() -> None:
332
332
  assert claims["mentions_npm_attestation_status"]
333
333
  assert claims["distinguishes_npm_transport_sig"]
334
334
  assert claims["distinguishes_digest_from_provenance"]
335
- assert claims["states_registration_pending"]
335
+ # Both trusted publishers are registered and 2.2.3 is attested on npm, so the
336
+ # prose must no longer claim a pending registration.
337
+ assert not claims["states_registration_pending"]
336
338
 
337
339
 
338
340
  def test_scan_notes_find_claims_in_the_tree() -> None:
@@ -361,12 +363,14 @@ def test_main_fails_when_no_claim_is_present(
361
363
  def test_strict_network_escalates_outage(monkeypatch: pytest.MonkeyPatch) -> None:
362
364
  """`--strict-network` turns an unreadable registry into a failure."""
363
365
  monkeypatch.setattr(guard, "pypi_attested", lambda *a: (guard.UNKNOWN, "unreachable"))
364
- monkeypatch.setattr(guard, "npm_attested", lambda *a: (guard.NO, "404"))
366
+ # npm answers normally: the outage under test is PyPI's, and a contradictory
367
+ # npm answer would fail for the wrong reason (the docs claim npm is attested).
368
+ monkeypatch.setattr(guard, "npm_attested", lambda *a: (guard.YES, "200"))
365
369
  monkeypatch.setattr(guard, "npm_dist", lambda *a: (True, "dist.integrity=True"))
366
370
  monkeypatch.setattr(guard, "pypi_published_digest", lambda *a: None)
367
371
 
368
- assert guard.main(["--version", "2.2.1", "--strict-network"]) == 1
369
- assert guard.main(["--version", "2.2.1"]) == 0
372
+ assert guard.main(["--version", "2.2.3", "--strict-network"]) == 1
373
+ assert guard.main(["--version", "2.2.3"]) == 0
370
374
 
371
375
 
372
376
  def test_decoding_rejects_a_bundle_without_a_subject() -> None: