scientific-computing-system 2.2.1__tar.gz → 2.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/cli-package-smoke.yml +8 -3
  2. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/release.yml +14 -0
  3. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/tests.yml +60 -0
  4. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/CHANGELOG.md +132 -0
  5. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/CITATION.cff +3 -3
  6. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/PKG-INFO +16 -6
  7. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/README.md +15 -5
  8. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/SECURITY.md +94 -20
  9. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/codemeta.json +2 -2
  10. scientific_computing_system-2.2.2/docs/checks/verify_provenance_claims.py +468 -0
  11. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/package.json +1 -1
  12. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/pyproject.toml +5 -1
  13. scientific_computing_system-2.2.2/requirements-build.lock +491 -0
  14. scientific_computing_system-2.2.2/scripts/check_release_toolchain.py +551 -0
  15. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/verify_release_integrity.py +29 -1
  16. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/_version.py +1 -1
  17. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/cli/__init__.py +11 -1
  18. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/cli/_parser.py +0 -4
  19. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/model_selection.py +12 -4
  20. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/voting.py +8 -2
  21. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/tools/adapters.py +18 -6
  22. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/tools/registry.py +3 -4
  23. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_bootstrap.py +2 -2
  24. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_cli.py +28 -0
  25. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_fitting_bootstrap.py +10 -11
  26. scientific_computing_system-2.2.2/tests/test_protocol_placeholders.py +204 -0
  27. scientific_computing_system-2.2.2/tests/test_provenance_claims.py +384 -0
  28. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_release_contract.py +17 -1
  29. scientific_computing_system-2.2.2/tests/test_release_toolchain.py +713 -0
  30. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_tool_adapters.py +2 -4
  31. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_tools_registry.py +5 -3
  32. scientific_computing_system-2.2.2/tests/test_verify_release_integrity.py +222 -0
  33. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow_tooling.py +6 -1
  34. scientific_computing_system-2.2.1/requirements-build.lock +0 -17
  35. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/benchmarks.yml +0 -0
  36. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/bot-reviewer.yml +0 -0
  37. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/changelog.yml +0 -0
  38. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/codeql.yml +0 -0
  39. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/npm-publish.yml +0 -0
  40. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/pr-automation.yml +0 -0
  41. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.github/workflows/pypi-registry-smoke.yml +0 -0
  42. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/.gitignore +0 -0
  43. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/CONTRIBUTING.md +0 -0
  44. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/LICENSE +0 -0
  45. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/benchmarks/results.json +0 -0
  46. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/benchmarks/robust_runner.py +0 -0
  47. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/benchmarks/run_benchmarks.py +0 -0
  48. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/bin/scs.js +0 -0
  49. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/dashboard/app.py +0 -0
  50. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/ARCHITECTURE.md +0 -0
  51. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/CASE_STUDY_HUBBLE.md +0 -0
  52. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
  53. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/api.md +0 -0
  54. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/assets/icon.svg +0 -0
  55. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/assets/logo.svg +0 -0
  56. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/benchmarks.md +0 -0
  57. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/cookbook.md +0 -0
  58. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/getting-started.md +0 -0
  59. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/index.md +0 -0
  60. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/maintenance.md +0 -0
  61. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/ml_reference.md +0 -0
  62. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/related.md +0 -0
  63. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/research-workflows.md +0 -0
  64. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/stylesheets/extra.css +0 -0
  65. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tour_of_numerical_methods.md +0 -0
  66. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/core_demo.md +0 -0
  67. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/data_analysis_demo.md +0 -0
  68. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/diffeq_demo.md +0 -0
  69. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/fft2_demo.md +0 -0
  70. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/graph_demo.md +0 -0
  71. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/hypothesis_demo.md +0 -0
  72. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/hypothesis_tests_demo.md +0 -0
  73. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
  74. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/knowledge_demo.md +0 -0
  75. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/linalg_demo.md +0 -0
  76. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/math_utils_demo.md +0 -0
  77. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/ml_advanced_demo.md +0 -0
  78. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/ml_and_viz_demo.md +0 -0
  79. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/ml_demo.md +0 -0
  80. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/modeling_demo.md +0 -0
  81. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/montecarlo_demo.md +0 -0
  82. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/nlp_attention_demo.md +0 -0
  83. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/nlp_bpe_demo.md +0 -0
  84. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
  85. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/nlp_viz.md +0 -0
  86. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/numerical_integration_demo.md +0 -0
  87. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/optimization_demo.md +0 -0
  88. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/pandas_io_demo.md +0 -0
  89. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/pca_demo.md +0 -0
  90. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/probability_demo.md +0 -0
  91. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/quantum_demo.md +0 -0
  92. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/quick_start.md +0 -0
  93. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/scientific_demo.md +0 -0
  94. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/signals_demo.md +0 -0
  95. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/stats_demo.md +0 -0
  96. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/stiff_ode_demo.md +0 -0
  97. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/tutorials/time_series_demo.md +0 -0
  98. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/docs/why-pure-python.md +0 -0
  99. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/core_demo.py +0 -0
  100. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/data_analysis_demo.py +0 -0
  101. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/diffeq_demo.py +0 -0
  102. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/discovery_pipeline_demo.py +0 -0
  103. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/ensemble_showcase.py +0 -0
  104. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/fft2_demo.py +0 -0
  105. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/graph_demo.py +0 -0
  106. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/hypothesis_custom_generator.py +0 -0
  107. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/hypothesis_demo.py +0 -0
  108. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/hypothesis_tests_demo.py +0 -0
  109. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/hypothesis_with_stats_demo.py +0 -0
  110. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/interpolate_demo.py +0 -0
  111. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/knowledge_demo.py +0 -0
  112. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/linalg_demo.py +0 -0
  113. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/math_utils_demo.py +0 -0
  114. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/ml_and_viz_demo.py +0 -0
  115. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/modeling_demo.py +0 -0
  116. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/montecarlo_demo.py +0 -0
  117. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/nlp_attention_demo.py +0 -0
  118. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/nlp_bpe_demo.py +0 -0
  119. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/nlp_mini_gpt_demo.py +0 -0
  120. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/nlp_viz_demo.py +0 -0
  121. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/numerical_integration_demo.py +0 -0
  122. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/optimization_demo.py +0 -0
  123. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/pca_demo.py +0 -0
  124. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/pde_demo.py +0 -0
  125. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/plot_demo.py +0 -0
  126. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/plotting_notebook.ipynb +0 -0
  127. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/probability_demo.py +0 -0
  128. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/quantum_demo.py +0 -0
  129. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/scientific_demo.py +0 -0
  130. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/signals_demo.py +0 -0
  131. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/stats_demo.py +0 -0
  132. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/examples/tour_of_numerical_methods.ipynb +0 -0
  133. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/index.js +0 -0
  134. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/mkdocs.yml +0 -0
  135. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/npm.test.js +0 -0
  136. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/paper.bib +0 -0
  137. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/paper.md +0 -0
  138. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/requirements-dev.lock +0 -0
  139. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/requirements.lock +0 -0
  140. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/check_version_discipline.py +0 -0
  141. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/check_version_lockstep.py +0 -0
  142. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/publish.py +0 -0
  143. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/verify_cli_install.py +0 -0
  144. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/verify_cookbook.py +0 -0
  145. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/verify_ml_reference.py +0 -0
  146. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/scripts/verify_pypi_release.py +0 -0
  147. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/__init__.py +0 -0
  148. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/__main__.py +0 -0
  149. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/_paths.py +0 -0
  150. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/bayes/__init__.py +0 -0
  151. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/bayes/conjugate.py +0 -0
  152. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/causal.py +0 -0
  153. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/cli/__main__.py +0 -0
  154. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/cli/_handlers.py +0 -0
  155. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/cli/_style.py +0 -0
  156. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/cli/_system_info.py +0 -0
  157. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/core/__init__.py +0 -0
  158. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/core/_numeric.py +0 -0
  159. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/core/models.py +0 -0
  160. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_analysis/__init__.py +0 -0
  161. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_analysis/dataset.py +0 -0
  162. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_analysis/loader.py +0 -0
  163. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_analysis/pandas_io.py +0 -0
  164. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_analysis/transform.py +0 -0
  165. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_analysis/viz.py +0 -0
  166. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_io/__init__.py +0 -0
  167. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_io/scientific.py +0 -0
  168. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/data_io/streaming.py +0 -0
  169. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/diffeq/__init__.py +0 -0
  170. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/diffeq/_implicit.py +0 -0
  171. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/diffeq/solvers.py +0 -0
  172. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/diffeq/symplectic.py +0 -0
  173. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/fractals/__init__.py +0 -0
  174. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/fractals/sets.py +0 -0
  175. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/genetics/__init__.py +0 -0
  176. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/genetics/sequence.py +0 -0
  177. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/graph/__init__.py +0 -0
  178. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/graph/algorithms.py +0 -0
  179. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/hypothesis/__init__.py +0 -0
  180. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/hypothesis/evaluator.py +0 -0
  181. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/hypothesis/generator.py +0 -0
  182. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/hypothesis/mining.py +0 -0
  183. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/infotheory/__init__.py +0 -0
  184. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/infotheory/measures.py +0 -0
  185. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/interpolate/__init__.py +0 -0
  186. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/knowledge/__init__.py +0 -0
  187. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/knowledge/graph.py +0 -0
  188. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/knowledge/notes.py +0 -0
  189. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/knowledge/retrieval.py +0 -0
  190. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/math_utils/__init__.py +0 -0
  191. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/math_utils/calculus.py +0 -0
  192. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/math_utils/linalg.py +0 -0
  193. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/math_utils/special.py +0 -0
  194. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/math_utils/svd.py +0 -0
  195. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/__init__.py +0 -0
  196. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/boosting.py +0 -0
  197. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/clustering.py +0 -0
  198. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/decomposition.py +0 -0
  199. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/ensemble.py +0 -0
  200. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/linear_models.py +0 -0
  201. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/metrics.py +0 -0
  202. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/naive_bayes.py +0 -0
  203. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/neighbors.py +0 -0
  204. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/neural.py +0 -0
  205. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/preprocessing.py +0 -0
  206. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/ml/tree.py +0 -0
  207. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/__init__.py +0 -0
  208. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/_base.py +0 -0
  209. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/_nodes.py +0 -0
  210. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/expression.py +0 -0
  211. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/fitting.py +0 -0
  212. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/model.py +0 -0
  213. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/modeling/solver.py +0 -0
  214. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/montecarlo/__init__.py +0 -0
  215. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/montecarlo/markov.py +0 -0
  216. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/montecarlo/methods.py +0 -0
  217. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/__init__.py +0 -0
  218. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/attention.py +0 -0
  219. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/autograd/__init__.py +0 -0
  220. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/autograd/_grad.py +0 -0
  221. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/autograd/ops.py +0 -0
  222. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/autograd/tensor.py +0 -0
  223. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/bpe.py +0 -0
  224. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/data.py +0 -0
  225. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/embed.py +0 -0
  226. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/layers.py +0 -0
  227. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/model.py +0 -0
  228. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/optim.py +0 -0
  229. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/training.py +0 -0
  230. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/nlp/viz.py +0 -0
  231. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/numerical_integration/__init__.py +0 -0
  232. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/numerical_integration/quadrature.py +0 -0
  233. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/optimization/__init__.py +0 -0
  234. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/optimization/_metaheuristics.py +0 -0
  235. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/optimization/constrained.py +0 -0
  236. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/optimization/minimize.py +0 -0
  237. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/pde/__init__.py +0 -0
  238. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/plot/__init__.py +0 -0
  239. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/plot/_backend.py +0 -0
  240. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/plot/charts.py +0 -0
  241. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/probability/__init__.py +0 -0
  242. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/probability/_advanced.py +0 -0
  243. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/probability/distributions.py +0 -0
  244. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/probability/extra_distributions.py +0 -0
  245. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/provenance/__init__.py +0 -0
  246. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/provenance/manifest.py +0 -0
  247. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/py.typed +0 -0
  248. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/quantum/__init__.py +0 -0
  249. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/quantum/circuit.py +0 -0
  250. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/quantum/multi_qubit.py +0 -0
  251. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/quantum/simulator.py +0 -0
  252. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/scientific/__init__.py +0 -0
  253. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/scientific/constants.py +0 -0
  254. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/scientific/formulas.py +0 -0
  255. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/sensitivity.py +0 -0
  256. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/signals/__init__.py +0 -0
  257. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/signals/filters.py +0 -0
  258. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/signals/processing.py +0 -0
  259. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/signals/stft.py +0 -0
  260. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/signals/wavelet.py +0 -0
  261. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/__init__.py +0 -0
  262. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/_distributions.py +0 -0
  263. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/bootstrap.py +0 -0
  264. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/descriptive.py +0 -0
  265. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/hypothesis_tests.py +0 -0
  266. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/multiple_testing.py +0 -0
  267. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/nonparametric.py +0 -0
  268. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/power.py +0 -0
  269. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/regression.py +0 -0
  270. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/stats/time_series.py +0 -0
  271. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/tools/__init__.py +0 -0
  272. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/uncertainty/__init__.py +0 -0
  273. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/uncertainty/propagation.py +0 -0
  274. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/units/__init__.py +0 -0
  275. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/units/core.py +0 -0
  276. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/validation/__init__.py +0 -0
  277. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/validation/adequacy.py +0 -0
  278. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/validation/checks.py +0 -0
  279. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/validation/drift.py +0 -0
  280. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/validation/report.py +0 -0
  281. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/wavelets/__init__.py +0 -0
  282. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/wavelets/haar.py +0 -0
  283. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/__init__.py +0 -0
  284. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/engine.py +0 -0
  285. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/gates.py +0 -0
  286. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/orchestrator.py +0 -0
  287. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/selection.py +0 -0
  288. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/tooling.py +0 -0
  289. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/src/cds/workflow/types.py +0 -0
  290. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/__init__.py +0 -0
  291. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/conftest.py +0 -0
  292. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_advanced_fitting.py +0 -0
  293. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_audit_completion_coverage.py +0 -0
  294. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_audit_guard_coverage.py +0 -0
  295. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_audit_hardening.py +0 -0
  296. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_audit_hardening_coverage.py +0 -0
  297. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_bayes_v2.py +0 -0
  298. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_benchmarks.py +0 -0
  299. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_causal.py +0 -0
  300. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_cli_color.py +0 -0
  301. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_cli_extended.py +0 -0
  302. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_cli_system_info.py +0 -0
  303. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_codemeta_version_lockstep.py +0 -0
  304. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_constrained_opt.py +0 -0
  305. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_core.py +0 -0
  306. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_data_analysis.py +0 -0
  307. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_data_analysis_lazy_bridge.py +0 -0
  308. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_data_analysis_pandas_io.py +0 -0
  309. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_data_io.py +0 -0
  310. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_data_io_optional_backends.py +0 -0
  311. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_data_io_scientific.py +0 -0
  312. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_dataset.py +0 -0
  313. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_dev_numpy_pin_contract.py +0 -0
  314. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_diffeq.py +0 -0
  315. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_diffeq_implicit.py +0 -0
  316. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_domain_validation.py +0 -0
  317. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_edge_misc_numerical.py +0 -0
  318. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_edge_ml_quantum_linalg.py +0 -0
  319. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_edge_nlp.py +0 -0
  320. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_edge_quantum_evaluator_cli.py +0 -0
  321. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_edge_stats_optimization_signals.py +0 -0
  322. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_extra_distributions.py +0 -0
  323. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_fft2.py +0 -0
  324. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_fractals.py +0 -0
  325. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_genetics.py +0 -0
  326. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_graph.py +0 -0
  327. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_hardening_privacy_provenance.py +0 -0
  328. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_hypothesis.py +0 -0
  329. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_hypothesis_engine.py +0 -0
  330. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_hypothesis_mining.py +0 -0
  331. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_hypothesis_tests.py +0 -0
  332. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_infotheory.py +0 -0
  333. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_interpolate.py +0 -0
  334. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_knowledge.py +0 -0
  335. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_layering.py +0 -0
  336. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_linalg_extended.py +0 -0
  337. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_linalg_qr_cholesky.py +0 -0
  338. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_markov.py +0 -0
  339. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_math_utils.py +0 -0
  340. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_boosting.py +0 -0
  341. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_clustering.py +0 -0
  342. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_ensemble.py +0 -0
  343. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_knn.py +0 -0
  344. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_linreg.py +0 -0
  345. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_logreg.py +0 -0
  346. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_metrics.py +0 -0
  347. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_model_selection.py +0 -0
  348. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_naive_bayes.py +0 -0
  349. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_pca.py +0 -0
  350. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_preprocessing.py +0 -0
  351. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_tree.py +0 -0
  352. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_viz.py +0 -0
  353. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_ml_voting.py +0 -0
  354. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_modeling.py +0 -0
  355. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_modeling_fit_validation.py +0 -0
  356. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_montecarlo.py +0 -0
  357. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_multi_qubit.py +0 -0
  358. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_attention.py +0 -0
  359. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_autograd.py +0 -0
  360. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_bpe.py +0 -0
  361. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_embed.py +0 -0
  362. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_layers.py +0 -0
  363. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_model.py +0 -0
  364. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_training.py +0 -0
  365. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_nlp_viz.py +0 -0
  366. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_numerical_integration.py +0 -0
  367. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_numerical_invariants.py +0 -0
  368. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_numerical_oracles.py +0 -0
  369. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_optimization.py +0 -0
  370. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_optimization_metaheuristics.py +0 -0
  371. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_path_confinement.py +0 -0
  372. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_pde.py +0 -0
  373. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_plot_charts.py +0 -0
  374. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_plot_lazy.py +0 -0
  375. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_power.py +0 -0
  376. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_probability.py +0 -0
  377. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_probability_advanced.py +0 -0
  378. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_property_invariants.py +0 -0
  379. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_provenance.py +0 -0
  380. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_provenance_audit_hardening.py +0 -0
  381. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_public_api.py +0 -0
  382. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_quantum.py +0 -0
  383. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_readme_badges.py +0 -0
  384. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_readme_surface.py +0 -0
  385. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_retrieval.py +0 -0
  386. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_runtime_dependency_graph.py +0 -0
  387. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_scientific.py +0 -0
  388. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_selection_audit_hardening.py +0 -0
  389. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_sensitivity.py +0 -0
  390. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_sensitivity_global.py +0 -0
  391. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_signals.py +0 -0
  392. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_signals_filters.py +0 -0
  393. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_special_invariants.py +0 -0
  394. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_special_numerics.py +0 -0
  395. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_statistical_audit.py +0 -0
  396. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_stats.py +0 -0
  397. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_stats_audit_coverage.py +0 -0
  398. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_stats_multiple_testing.py +0 -0
  399. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_stats_nonparametric.py +0 -0
  400. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_stats_time_series.py +0 -0
  401. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_stft.py +0 -0
  402. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_streaming_analytics.py +0 -0
  403. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_svd.py +0 -0
  404. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_symplectic.py +0 -0
  405. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_uncertainty.py +0 -0
  406. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_units.py +0 -0
  407. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_validation.py +0 -0
  408. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_validation_adequacy.py +0 -0
  409. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_validation_advanced.py +0 -0
  410. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_validation_drift.py +0 -0
  411. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_wavelet.py +0 -0
  412. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_wavelets_v2.py +0 -0
  413. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow.py +0 -0
  414. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow_gates.py +0 -0
  415. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow_orchestrator.py +0 -0
  416. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
  417. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow_selection.py +0 -0
  418. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.2}/tests/test_workflow_selection_coverage.py +0 -0
@@ -33,10 +33,15 @@ jobs:
33
33
  with:
34
34
  python-version: "3.12"
35
35
  - name: Build wheel
36
+ # bash, not the Windows default PowerShell: `set -euo pipefail` is bash
37
+ # syntax and pwsh rejects it with "A parameter cannot be found that
38
+ # matches parameter name 'euo'". The other steps in this job pin the
39
+ # shell for the same reason.
40
+ shell: bash
36
41
  run: |
37
- python -m pip install --upgrade pip
38
- pip install build
39
- python -m build --wheel
42
+ set -euo pipefail
43
+ python -m pip install --require-hashes --only-binary=:all: -r requirements-build.lock
44
+ python -m build --wheel --no-isolation
40
45
  - name: Install wheel instead of source tree
41
46
  shell: bash
42
47
  run: |
@@ -179,6 +179,20 @@ jobs:
179
179
  - name: Build sdist + wheel without dependency isolation
180
180
  run: python -m build --no-isolation
181
181
 
182
+ # Validate the core metadata *rendered* from the artifacts, before anything
183
+ # is uploaded. `check_version_lockstep.py` proves the version and name are
184
+ # right; it does not prove the artifact is renderable at all. This is the
185
+ # step that catches an unusable artifact while it is still local.
186
+ #
187
+ # The pin matters and is not cosmetic. twine <= 6.2.0 replaces
188
+ # `packaging.metadata._VALID_METADATA_VERSIONS` at import time with a list
189
+ # ending at 2.4, so it rejects a valid artifact with
190
+ # `InvalidDistribution: '2.5' is not a valid metadata version` -- a release
191
+ # failure with nothing wrong with the package. twine 7.0.0 (pinned in
192
+ # requirements-build.lock) removed the override.
193
+ - name: Validate artifact metadata renders
194
+ run: python -m twine check --strict dist/*
195
+
182
196
  # Assert the *contents* of both artifacts before anything is published.
183
197
  # The version/name verification below proves the metadata says 2.1.0; this
184
198
  # proves the wheel actually ships `cds` with its `py.typed` marker and the
@@ -307,6 +307,53 @@ jobs:
307
307
  run: python scripts/check_version_discipline.py --base-ref "${{ steps.base.outputs.ref }}"
308
308
  - name: Reject version metadata lockstep drift
309
309
  run: python scripts/check_version_lockstep.py
310
+ # The release toolchain must stay pinned, and the twine pin must stay able
311
+ # to validate the Metadata-Version the build backend actually emits --
312
+ # twine<=6.2.0 overrides packaging's list at import time and rejects valid
313
+ # artifacts with `'2.5' is not a valid metadata version`.
314
+ #
315
+ # GITHUB_TOKEN is passed so the advisory upstream checks authenticate.
316
+ # Unauthenticated GitHub API calls are capped at 60/hour, which is easy to
317
+ # exceed and fails in a way that looks like success: a sibling guard
318
+ # "verified" pins under rate limiting and silently verified nothing.
319
+ # Fast, offline, workflow-shape gate: pins and `twine check --strict` usage.
320
+ # The authoritative run, including the twine/Metadata-Version compatibility
321
+ # check, is in the `packaging` job below -- the only job that has built
322
+ # artifacts to read the emitted Metadata-Version from.
323
+ - name: Reject unpinned release toolchain
324
+ run: python scripts/check_release_toolchain.py --skip-network
325
+ # The provenance prose asserts, per registry, whether the published
326
+ # release carries a build attestation. That claim was originally written
327
+ # from memory and nothing checked it, so it could have kept being
328
+ # asserted after a release changed the answer. This runs the committed
329
+ # guard (`docs/checks/verify_provenance_claims.py`) against the live
330
+ # registries and fails if the prose contradicts them.
331
+ #
332
+ # Placed here rather than in a new job on purpose: this job already owns
333
+ # release-metadata verification and already sits in the required `CI`
334
+ # aggregate, so this strengthens an existing gate instead of adding a
335
+ # required check that would need a ruleset change. `permissions:
336
+ # contents: read` above is sufficient -- the guard only reads PyPI and npm,
337
+ # never the GitHub API, so no token is needed.
338
+ #
339
+ # `--strict-network` is deliberately NOT set: a registry outage is
340
+ # reported as UNKNOWN and the run passes with a NOTICE, because a required
341
+ # gate that fails on a DNS blip teaches people to re-run it rather than
342
+ # read it. A false claim still fails. The unit test
343
+ # (`tests/test_provenance_claims.py`) is the deterministic gate and needs
344
+ # no network at all.
345
+ #
346
+ # The version is read from `pyproject.toml` rather than hardcoded: a
347
+ # literal here would go stale at the next release, which is the same class
348
+ # of stale-constant bug this step exists to catch. A version that has not
349
+ # shipped yet is reported as unverifiable rather than "unattested", so a
350
+ # bump PR is not blocked by asking about a release that does not exist.
351
+ - name: Reject provenance claims that contradict the live registries
352
+ run: >-
353
+ python docs/checks/verify_provenance_claims.py
354
+ --version "$(python -c 'import tomllib, pathlib;
355
+ print(tomllib.loads(pathlib.Path("pyproject.toml").read_text(encoding="utf-8"))
356
+ ["project"]["version"])')"
310
357
 
311
358
  packaging:
312
359
  name: built wheel and sdist contents on Linux with Python 3.12
@@ -332,6 +379,19 @@ jobs:
332
379
  run: python scripts/check_version_lockstep.py --dist-dir dist
333
380
  - name: Assert wheel and sdist contents
334
381
  run: python scripts/check_distribution_contents.py dist
382
+ # Read the Metadata-Version out of the artifacts just built and prove the
383
+ # pinned twine can validate it. twine<=6.2.0 overrides packaging's
384
+ # metadata-version list at import time and rejects a valid artifact with
385
+ # `'2.5' is not a valid metadata version`; a sibling release failed that
386
+ # way with nothing wrong with the package.
387
+ #
388
+ # GITHUB_TOKEN is passed so the advisory upstream checks authenticate.
389
+ # Unauthenticated GitHub API calls are capped at 60/hour, and under rate
390
+ # limiting a pin check can silently verify nothing while reporting success.
391
+ - name: Assert the pinned twine can validate the built metadata
392
+ env:
393
+ GITHUB_TOKEN: ${{ github.token }}
394
+ run: python scripts/check_release_toolchain.py --dist-dir dist
335
395
  # A source distribution whose own test suite cannot pass is not a source
336
396
  # distribution. 13 release-contract tests used to fail here because
337
397
  # `.github/workflows` was missing from the sdist; this step is what keeps
@@ -7,6 +7,138 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [v2.2.2] - 2026-10-05
11
+
12
+ Clears the last 17 open CodeQL alerts in this repository. None of them was a
13
+ security vulnerability, and **none was a logic defect** — no discarded result, no
14
+ missing `return`. Nothing is suppressed: there is no `# nosec`, no path exclusion
15
+ and no `codeql.config` entry.
16
+
17
+ ### Behaviour change
18
+
19
+ **One, and it is a removal:** the private path `cds.cli._parser._build_parser` no
20
+ longer resolves.
21
+
22
+ `_build_parser` was an alias for `build_parser`, kept for backwards
23
+ compatibility. It was defined in `cds.cli._parser` but imported and re-exported by
24
+ `cds.cli.__init__`, so within its own module it was genuinely unreferenced —
25
+ which is exactly what `py/unused-global-variable` reported. The assignment has
26
+ moved to `cds.cli.__init__`, beside its only consumer and inside the `__all__`
27
+ that already exports it.
28
+
29
+ - `cds.cli._build_parser` is unchanged: still present, still in `__all__`, still
30
+ the same object as `cds.cli.build_parser`. This is the documented
31
+ backwards-compatibility surface and it keeps working.
32
+ - `cds.cli._parser._build_parser` is gone. Nothing in this repository referenced
33
+ it and the name is underscore-private, but a downstream script that reached
34
+ into the private submodule would break.
35
+
36
+ There is now a test pinning the alias, because the original defect was that
37
+ nothing asserted it existed.
38
+
39
+ ### Fixed
40
+
41
+ - **Protocol placeholders are docstrings, not bare `...`.** Nine
42
+ `py/ineffectual-statement` alerts across `src/cds/ml/model_selection.py`,
43
+ `src/cds/ml/voting.py` and `src/cds/tools/adapters.py` were the conventional
44
+ `...` terminating a `typing.Protocol` method. These are false positives in the
45
+ strict sense: `...` is the documented placeholder for a structurally-typed
46
+ method whose implementation lives in the real backend module, and no code path
47
+ executes it. `SoftVotingModel` is the only `@runtime_checkable` one, and
48
+ `isinstance` against a runtime protocol inspects attribute *presence* without
49
+ calling the body.
50
+
51
+ They became docstrings rather than `pass` because coverage.py excludes an
52
+ ellipsis-only body but counts `pass`; measured, swapping it in drops those
53
+ lines from 100% to 75% and breaks the coverage gate. `raise NotImplementedError`
54
+ has the same coverage problem and would additionally change behaviour if the
55
+ body were ever reached. `src/cds` already contained nine docstring-only bodies
56
+ with no alert on any of them.
57
+
58
+ - **`src/cds/tools/registry.py` imports `importlib` one way.** Three spellings
59
+ were mixed: `import importlib`, `import importlib.util` and
60
+ `from importlib import metadata`. The first was fully subsumed by the second.
61
+ Now `import importlib.metadata` and `import importlib.util`, with call sites
62
+ fully qualified. Four monkeypatch targets in `tests/` were retargeted to match.
63
+
64
+ - **Four `py/unnecessary-lambda` alerts in the test suite.** `lambda x: max(x)`
65
+ and `lambda values: sum(values)` are plain wrappers around a callable; the
66
+ callables are now passed directly.
67
+
68
+ - **`tests/test_fitting_bootstrap.py` imports `cds.modeling.fitting` one way.**
69
+ A module-level `from ... import` coexisted with function-local
70
+ `import ... as fitting`. The single `import ... as fitting` form is used now and
71
+ the module-level names are qualified through it.
72
+
73
+ ### Added
74
+
75
+ - **`tests/test_protocol_placeholders.py`** pins the protocol bodies on the AST,
76
+ because a docstring-only body and a docstring followed by `pass` compile to
77
+ almost identical instructions and only the syntax tree tells them apart. It also
78
+ asserts the placeholder semantics (`None` when called unbound), that
79
+ `SoftVotingModel` is still a working structural contract, and that every
80
+ declared signature and annotation still resolves. Negative-controlled against
81
+ four mutations, all caught: docstring-plus-`pass`, `...` reinstated, body
82
+ replaced by a real statement, and a statement appended after the docstring.
83
+
84
+ ### Changed
85
+
86
+ - README's pasted `cds --version` transcript now reads `System version 2.2.2`.
87
+ Every provenance and attestation statement in `README.md` and `SECURITY.md`
88
+ still refers to **2.2.1** deliberately: those describe the published release,
89
+ including its digests, and remain true until a newer one ships.
90
+
91
+
92
+ ### Fixed
93
+
94
+ - **Provenance claims are now scoped, measured, and guarded.** A follow-up report
95
+ asserted that PyPI had no PEP 740 attestation either. Re-measured directly, that
96
+ is **not** the case, so the previous text was left standing and made precise
97
+ rather than weakened:
98
+
99
+ - PyPI **2.2.1** serves a PEP 740 provenance bundle for **both** the wheel and
100
+ the sdist (HTTP 200 on the per-file `/integrity/.../provenance` endpoint),
101
+ and each bundle's `subject` digest equals the `sha256` PyPI publishes for
102
+ that file. The 404 in the report came from requesting
103
+ `https://pypi.org/integrity/scientific-computing-system/2.2.1/`, which is a
104
+ directory, not the per-file endpoint.
105
+ - npm **2.2.1** has **no** attestation: the attestations endpoint returns 404.
106
+ This part of the report was correct.
107
+
108
+ The security posture is therefore unchanged and more precisely stated. What
109
+ changed: `SECURITY.md` now separates the three things that were being conflated
110
+ — a **PEP 740 attestation** (Sigstore-signed, attests *who built this*),
111
+ **npm `dist.signatures`** (registry transport signing, attests nothing about
112
+ the build), and a **content digest** (`sha256` on PyPI, `dist.integrity` on
113
+ npm; pins *which bytes*, not *where they came from*). It lists the published
114
+ digests to pin, gives the commands that verify them, and states the exact
115
+ trusted-publisher coordinates still to be registered for npm.
116
+
117
+ - **Reproducible-build claim scoped to what was actually measured.** Two
118
+ consecutive builds of the same commit with the same pinned backend produced
119
+ byte-identical wheel and sdist. Those digests do **not** match the published
120
+ ones (the release runs a hash-locked Linux toolchain; the check ran elsewhere),
121
+ so the documentation now claims determinism for a fixed toolchain and
122
+ explicitly declines to claim the published artifacts are bit-for-bit
123
+ reproducible from source.
124
+
125
+ - **npm launcher prerequisite re-verified.** With `cds` absent from `PATH`, the
126
+ shim proceeds straight to interpreter resolution (`python`/`python3`/`py`) and
127
+ runs `python -m cds`; it never looks for a `cds` console script. README,
128
+ `SECURITY.md` and the docs already agreed on this wording, and it is now
129
+ backed by an explicit check rather than by reading the source.
130
+
131
+ ### Added
132
+
133
+ - `docs/checks/verify_provenance_claims.py` — a guard that parses the attestation
134
+ claims out of `README.md` and `SECURITY.md` and compares them against the live
135
+ registries, failing if the prose asserts something the registries contradict.
136
+ It also rejects prose that overstates `dist.integrity` as provenance or allows
137
+ the attested subject to differ from the published digest. Negative-controlled:
138
+ three false claims (PyPI not attested, npm attested, digest mismatch acceptable)
139
+ each turn it red. Wiring it into CI is left to the workflow owner; this change
140
+ is docs-only by scope.
141
+
10
142
  ## [v2.2.1] - 2026-10-04
11
143
 
12
144
  Documentation and release-surface corrections. **No library behaviour change**:
@@ -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.1
8
+ version: 2.2.2
9
9
  authors:
10
10
  - name: "Furox-Art"
11
11
  email: "furkanarkn1451@gmail.com"
@@ -21,7 +21,7 @@ abstract: >-
21
21
  license: MIT
22
22
  repository-code: "https://github.com/Furox-Art/scientific-computing-system"
23
23
  url: "https://github.com/Furox-Art/scientific-computing-system"
24
- date-released: "2026-10-04"
24
+ date-released: "2026-10-05"
25
25
  keywords:
26
26
  - "pure python"
27
27
  - "scientific computing"
@@ -50,5 +50,5 @@ preferred-citation:
50
50
  authors:
51
51
  - name: "Furox-Art"
52
52
  year: 2026
53
- version: 2.2.1
53
+ version: 2.2.2
54
54
  url: "https://github.com/Furox-Art/scientific-computing-system"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scientific-computing-system
3
- Version: 2.2.1
3
+ Version: 2.2.2
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
@@ -146,10 +146,20 @@ The import name is **`cds`** (the distribution is `scientific-computing-system`)
146
146
  | **npm** (a launcher shim) | `npm i -g scientific-computing-system` | A thin Node wrapper that runs `python -m cds`. It ships no Python and needs the Python distribution installed so that `python -m cds` resolves. |
147
147
 
148
148
  Both channels are published at the same version. They are **not** equally
149
- verifiable: the PyPI release carries a PEP 740 provenance attestation, while the
150
- currently published npm release does not. Prefer PyPI for anything
151
- security-sensitive — [SECURITY.md](SECURITY.md#distribution-channels-and-provenance)
152
- has the per-channel comparison.
149
+ verifiable:
150
+
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.
160
+ [SECURITY.md](SECURITY.md#distribution-channels-and-provenance) has the
161
+ per-channel table, the published digests to pin, the commands to verify them,
162
+ and what to register to close the npm gap.
153
163
 
154
164
  ## What's inside
155
165
 
@@ -259,7 +269,7 @@ The package installs a `cds` command with 13 subcommands:
259
269
 
260
270
  ```console
261
271
  $ cds --version
262
- System version 2.2.1
272
+ System version 2.2.2
263
273
  $ cds constants # physical constants table
264
274
  ```
265
275
 
@@ -50,10 +50,20 @@ The import name is **`cds`** (the distribution is `scientific-computing-system`)
50
50
  | **npm** (a launcher shim) | `npm i -g scientific-computing-system` | A thin Node wrapper that runs `python -m cds`. It ships no Python and needs the Python distribution installed so that `python -m cds` resolves. |
51
51
 
52
52
  Both channels are published at the same version. They are **not** equally
53
- verifiable: the PyPI release carries a PEP 740 provenance attestation, while the
54
- currently published npm release does not. Prefer PyPI for anything
55
- security-sensitive — [SECURITY.md](SECURITY.md#distribution-channels-and-provenance)
56
- has the per-channel comparison.
53
+ verifiable:
54
+
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.
64
+ [SECURITY.md](SECURITY.md#distribution-channels-and-provenance) has the
65
+ per-channel table, the published digests to pin, the commands to verify them,
66
+ and what to register to close the npm gap.
57
67
 
58
68
  ## What's inside
59
69
 
@@ -163,7 +173,7 @@ The package installs a `cds` command with 13 subcommands:
163
173
 
164
174
  ```console
165
175
  $ cds --version
166
- System version 2.2.1
176
+ System version 2.2.2
167
177
  $ cds constants # physical constants table
168
178
  ```
169
179
 
@@ -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, verifies package metadata/version, installs the built wheel, smoke-tests the installed CLI, generates GitHub artifact attestation for those exact runner-local files, and publishes through PyPI Trusted Publishing (OIDC). PyPI serves a PEP 740 provenance bundle for both artifacts. |
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. **Provenance depends on the publish mode:** the OIDC path publishes with `--provenance` and yields a Sigstore attestation; the token fallback path cannot mint one and deliberately publishes without it. See below for the status of the currently published npm release. |
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. |
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`. |
@@ -40,26 +40,100 @@ It is also published to npm as `scientific-computing-system`, but that package i
40
40
 
41
41
  ### Distribution channels and provenance
42
42
 
43
+ The two channels carry **different** artifacts and **different** verification
44
+ properties. This section states exactly what is verifiable today. It is
45
+ version-specific; re-check it rather than trusting it indefinitely.
46
+
43
47
  | | PyPI `scientific-computing-system` | npm `scientific-computing-system` |
44
48
  |---|---|---|
45
49
  | Contents | the library (wheel + sdist) | `index.js`, `bin/scs.js`, `LICENSE`, `README.md`, `CHANGELOG.md`, `SECURITY.md` — **no Python** |
46
- | Requires the other channel | no | yes; `scs` needs the Python distribution installed so that `python -m cds` resolves — it does **not** look for a `cds` console script on `PATH` |
47
- | Publish authentication | Trusted Publishing (OIDC) | OIDC trusted publishing is implemented and is the default; a token fallback exists |
48
- | Attestation on the currently published release | **not on 2.2.0** — that release predates Trusted Publishing on this path and PyPI serves zero PEP 740 bundles for it; **yes from 2.2.1**, published via Trusted Publishing | **no** — the published 2.2.0 went out in token mode, which cannot produce a Sigstore attestation |
49
-
50
- The npm release published as 2.2.0 was produced by a manual dispatch with
51
- `use_token_fallback=true`. A long-lived registry token has no build identity to
52
- attest, so npm's `--provenance` flag cannot be honoured on that path; the
53
- workflow omits the flag and prints a notice instead of publishing something that
54
- looks attested and is not. `npm view <pkg>` reports a legacy `dist.signatures`
55
- value for it, which is npm's own transport signing and **not** a build
56
- provenance attestation; the npm attestations endpoint returns 404 for this
57
- package at this version.
58
-
59
- **Practical consequence:** for anything security-sensitive, install from PyPI
60
- and verify the PEP 740 provenance bundle against the SHA-256 digests PyPI
61
- publishes. Do not rely on the npm channel for supply-chain assurance until a
62
- release is published through the OIDC path.
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 |
53
+ | **npm `dist.signatures`** | n/a | present — registry transport signature, **not** build provenance |
54
+ | **Content digest a consumer can pin** | `sha256` per file on the PyPI file page | `dist.integrity` (sha512) and `dist.shasum` (sha1) |
55
+
56
+ #### Three things that are easy to confuse
57
+
58
+ 1. **A PEP 740 provenance attestation** is a Sigstore-signed statement binding a
59
+ file digest to the identity and workflow that published it. PyPI serves it
60
+ from `/integrity/<project>/<version>/<filename>/provenance`. It is the only
61
+ one of the three that attests *who built this*.
62
+ 2. **npm's `dist.signatures`** is npm signing its own registry metadata for
63
+ transport integrity. It proves the metadata came from npm's key. It says
64
+ nothing about who built the tarball, and it is not a provenance attestation.
65
+ 3. **A content digest** (`sha256` on PyPI, `dist.integrity`/`dist.shasum` on npm)
66
+ pins *which bytes* you get. Useful for integrity and for detecting a
67
+ substituted file; on its own it proves nothing about origin, because anyone
68
+ who substitutes a file also substitutes its digest.
69
+
70
+ #### What is published today, and how to check it
71
+
72
+ Verified against the live registries for **PyPI 2.2.1**:
73
+
74
+ ```bash
75
+ # PEP 740 attestation exists (HTTP 200). Note the per-FILE path; a bare
76
+ # /integrity/<project>/<version>/ directory is not an endpoint and 404s.
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
79
+
80
+ # The digest PyPI publishes for that file, to compare against the attestation
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 \
83
+ "import json,sys; [print(f['filename'], f['digests']['sha256']) for f in json.load(sys.stdin)['urls']]"
84
+
85
+ # npm: no attestation; there IS a transport signature and an integrity digest.
86
+ 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
89
+ ```
90
+
91
+ The published PyPI 2.2.1 digests, useful for pinning:
92
+
93
+ | File | sha256 |
94
+ |---|---|
95
+ | `scientific_computing_system-2.2.1-py3-none-any.whl` | `b14b89478fdc8b11482ffd556bb6eb59c6b21887f2a09418edec7029d4569bb9` |
96
+ | `scientific_computing_system-2.2.1.tar.gz` | `6ba4ad4c2ebb6bef86356bcbcd251e12978737945e58d9e75b9c68860efa77f6` |
97
+
98
+ Both were confirmed to equal the `subject` digest inside their attestation
99
+ bundles, so the attested bytes and the published bytes are the same bytes.
100
+
101
+ #### Reproducible builds: what is and is not claimed
102
+
103
+ The build toolchain is hash-pinned (`requirements-build.lock`, installed with
104
+ `--require-hashes --only-binary=:all:`) and the release workflow runs
105
+ `python -m build --no-isolation` on that lock.
106
+
107
+ Two consecutive builds of the same commit with the same pinned backend produced
108
+ **byte-identical** wheel and sdist (sha256 `c7734fb5…` and `daa7dca2…`).
109
+
110
+ Those digests **do not** match the published ones, because that check ran on a
111
+ different platform with a locally installed backend rather than the release's
112
+ hash-locked Linux toolchain. So the honest statement is: *the build is
113
+ deterministic for a fixed toolchain, and this repository does not currently
114
+ claim that the published artifacts are bit-for-bit reproducible from source.*
115
+ Treat the published digests above as the pin to use, not a rebuild target.
116
+
117
+ #### When provenance will appear
118
+
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:
122
+
123
+ - **PyPI** — Trusted Publisher: owner `Furox-Art`, repository
124
+ `scientific-computing-system`, workflow `release.yml`, environment `pypi`.
125
+ Already exercised: 2.2.1 was published through it and is attested.
126
+ - **npm** — Trusted Publisher: owner `Furox-Art`, repository
127
+ `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
+ **Practical consequence:** for anything security-sensitive, install from PyPI and
134
+ check the PEP 740 bundle against the digests PyPI publishes. Do not rely on the
135
+ npm channel for supply-chain assurance today; treat its `dist.integrity` as an
136
+ integrity pin only.
63
137
 
64
138
  ### Optional Backend Boundary
65
139
 
@@ -87,7 +161,7 @@ In particular, `sympy_verify_identity()` passes caller-provided symbolic strings
87
161
 
88
162
  1. **Pin the package version** in reproducible environments, for example `pip install "scientific-computing-system==X.Y.Z"` with the exact release you have evaluated, rather than an unconstrained range. Deliberately no concrete version is written here: a pinned example goes stale at the next release and readers copy it regardless, so take the number from the [release notes](https://github.com/Furox-Art/scientific-computing-system/releases) for the release you are deploying, and record it in your own lockfile or constraints file.
89
163
  2. **Install only the optional extras you need.** Fewer third-party packages reduce supply-chain and compatibility surface.
90
- 3. **Verify provenance for high-assurance use.** Compare the PyPI wheel/sdist SHA-256 digests with the subjects recorded by the GitHub release workflow's artifact attestation, or fetch the PEP 740 provenance bundle from PyPI. There is currently **no** equivalent attestation for the npm package — see [Distribution channels and provenance](#distribution-channels-and-provenance).
164
+ 3. **Verify provenance for high-assurance use.** For PyPI, fetch the PEP 740 bundle from `/integrity/<project>/<version>/<filename>/provenance` and confirm its `subject` digest equals the `sha256` PyPI publishes for that file. There is currently **no** attestation for the npm package; its `dist.integrity` is an integrity pin, not provenance. See [Distribution channels and provenance](#distribution-channels-and-provenance).
91
165
  4. **Treat optional backend inputs as backend inputs.** Do not pass hostile symbolic expressions or untrusted scientific files without the validation/sandboxing appropriate to SymPy, HDF5, NetCDF, or the relevant backend.
92
166
  5. **Keep the environment current.** Review dependency updates and run vulnerability auditing against the exact environment deployed.
93
167
  6. **Do not use the library as the sole validation layer for safety-critical conclusions.** Independent domain validation remains necessary.
@@ -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.1",
5
+ "version": "2.2.2",
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",
@@ -17,7 +17,7 @@
17
17
  "name": "Furox-Art"
18
18
  }
19
19
  ],
20
- "datePublished": "2026-10-04",
20
+ "datePublished": "2026-10-05",
21
21
  "keywords": [
22
22
  "scientific computing",
23
23
  "numerical methods",