scientific-computing-system 2.2.1__tar.gz → 2.2.3__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.3}/.github/workflows/cli-package-smoke.yml +8 -3
  2. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/npm-publish.yml +73 -1
  3. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/release.yml +14 -0
  4. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/tests.yml +60 -0
  5. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/CHANGELOG.md +238 -0
  6. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/CITATION.cff +3 -3
  7. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/PKG-INFO +17 -7
  8. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/README.md +15 -5
  9. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/SECURITY.md +114 -20
  10. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/codemeta.json +2 -2
  11. scientific_computing_system-2.2.3/docs/checks/verify_provenance_claims.py +468 -0
  12. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/npm.test.js +19 -1
  13. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/package.json +1 -1
  14. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/pyproject.toml +6 -2
  15. scientific_computing_system-2.2.3/requirements-build.lock +494 -0
  16. scientific_computing_system-2.2.3/scripts/check_release_toolchain.py +551 -0
  17. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_release_integrity.py +29 -1
  18. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/_version.py +1 -1
  19. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/__init__.py +11 -1
  20. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_parser.py +0 -4
  21. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/model_selection.py +12 -4
  22. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/voting.py +8 -2
  23. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/tools/adapters.py +18 -6
  24. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/tools/registry.py +3 -4
  25. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_bootstrap.py +2 -2
  26. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli.py +28 -0
  27. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_fitting_bootstrap.py +10 -11
  28. scientific_computing_system-2.2.3/tests/test_protocol_placeholders.py +204 -0
  29. scientific_computing_system-2.2.3/tests/test_provenance_claims.py +384 -0
  30. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_release_contract.py +17 -1
  31. scientific_computing_system-2.2.3/tests/test_release_toolchain.py +713 -0
  32. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_tool_adapters.py +2 -4
  33. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_tools_registry.py +5 -3
  34. scientific_computing_system-2.2.3/tests/test_verify_release_integrity.py +222 -0
  35. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_tooling.py +6 -1
  36. scientific_computing_system-2.2.1/requirements-build.lock +0 -17
  37. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/benchmarks.yml +0 -0
  38. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/bot-reviewer.yml +0 -0
  39. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/changelog.yml +0 -0
  40. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/codeql.yml +0 -0
  41. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/pr-automation.yml +0 -0
  42. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/pypi-registry-smoke.yml +0 -0
  43. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.gitignore +0 -0
  44. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/CONTRIBUTING.md +0 -0
  45. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/LICENSE +0 -0
  46. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/benchmarks/results.json +0 -0
  47. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/benchmarks/robust_runner.py +0 -0
  48. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/benchmarks/run_benchmarks.py +0 -0
  49. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/bin/scs.js +0 -0
  50. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/dashboard/app.py +0 -0
  51. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/ARCHITECTURE.md +0 -0
  52. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/CASE_STUDY_HUBBLE.md +0 -0
  53. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
  54. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/api.md +0 -0
  55. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/assets/icon.svg +0 -0
  56. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/assets/logo.svg +0 -0
  57. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/benchmarks.md +0 -0
  58. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/cookbook.md +0 -0
  59. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/getting-started.md +0 -0
  60. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/index.md +0 -0
  61. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/maintenance.md +0 -0
  62. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/ml_reference.md +0 -0
  63. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/related.md +0 -0
  64. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/research-workflows.md +0 -0
  65. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/stylesheets/extra.css +0 -0
  66. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tour_of_numerical_methods.md +0 -0
  67. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/core_demo.md +0 -0
  68. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/data_analysis_demo.md +0 -0
  69. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/diffeq_demo.md +0 -0
  70. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/fft2_demo.md +0 -0
  71. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/graph_demo.md +0 -0
  72. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/hypothesis_demo.md +0 -0
  73. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/hypothesis_tests_demo.md +0 -0
  74. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
  75. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/knowledge_demo.md +0 -0
  76. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/linalg_demo.md +0 -0
  77. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/math_utils_demo.md +0 -0
  78. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/ml_advanced_demo.md +0 -0
  79. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/ml_and_viz_demo.md +0 -0
  80. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/ml_demo.md +0 -0
  81. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/modeling_demo.md +0 -0
  82. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/montecarlo_demo.md +0 -0
  83. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_attention_demo.md +0 -0
  84. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_bpe_demo.md +0 -0
  85. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
  86. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_viz.md +0 -0
  87. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/numerical_integration_demo.md +0 -0
  88. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/optimization_demo.md +0 -0
  89. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/pandas_io_demo.md +0 -0
  90. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/pca_demo.md +0 -0
  91. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/probability_demo.md +0 -0
  92. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/quantum_demo.md +0 -0
  93. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/quick_start.md +0 -0
  94. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/scientific_demo.md +0 -0
  95. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/signals_demo.md +0 -0
  96. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/stats_demo.md +0 -0
  97. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/stiff_ode_demo.md +0 -0
  98. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/time_series_demo.md +0 -0
  99. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/why-pure-python.md +0 -0
  100. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/core_demo.py +0 -0
  101. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/data_analysis_demo.py +0 -0
  102. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/diffeq_demo.py +0 -0
  103. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/discovery_pipeline_demo.py +0 -0
  104. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/ensemble_showcase.py +0 -0
  105. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/fft2_demo.py +0 -0
  106. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/graph_demo.py +0 -0
  107. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_custom_generator.py +0 -0
  108. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_demo.py +0 -0
  109. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_tests_demo.py +0 -0
  110. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_with_stats_demo.py +0 -0
  111. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/interpolate_demo.py +0 -0
  112. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/knowledge_demo.py +0 -0
  113. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/linalg_demo.py +0 -0
  114. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/math_utils_demo.py +0 -0
  115. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/ml_and_viz_demo.py +0 -0
  116. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/modeling_demo.py +0 -0
  117. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/montecarlo_demo.py +0 -0
  118. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_attention_demo.py +0 -0
  119. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_bpe_demo.py +0 -0
  120. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_mini_gpt_demo.py +0 -0
  121. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_viz_demo.py +0 -0
  122. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/numerical_integration_demo.py +0 -0
  123. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/optimization_demo.py +0 -0
  124. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/pca_demo.py +0 -0
  125. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/pde_demo.py +0 -0
  126. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/plot_demo.py +0 -0
  127. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/plotting_notebook.ipynb +0 -0
  128. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/probability_demo.py +0 -0
  129. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/quantum_demo.py +0 -0
  130. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/scientific_demo.py +0 -0
  131. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/signals_demo.py +0 -0
  132. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/stats_demo.py +0 -0
  133. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/tour_of_numerical_methods.ipynb +0 -0
  134. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/index.js +0 -0
  135. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/mkdocs.yml +0 -0
  136. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/paper.bib +0 -0
  137. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/paper.md +0 -0
  138. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/requirements-dev.lock +0 -0
  139. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/requirements.lock +0 -0
  140. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/check_version_discipline.py +0 -0
  141. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/check_version_lockstep.py +0 -0
  142. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/publish.py +0 -0
  143. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_cli_install.py +0 -0
  144. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_cookbook.py +0 -0
  145. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_ml_reference.py +0 -0
  146. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_pypi_release.py +0 -0
  147. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/__init__.py +0 -0
  148. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/__main__.py +0 -0
  149. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/_paths.py +0 -0
  150. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/bayes/__init__.py +0 -0
  151. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/bayes/conjugate.py +0 -0
  152. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/causal.py +0 -0
  153. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/__main__.py +0 -0
  154. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_handlers.py +0 -0
  155. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_style.py +0 -0
  156. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_system_info.py +0 -0
  157. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/core/__init__.py +0 -0
  158. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/core/_numeric.py +0 -0
  159. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/core/models.py +0 -0
  160. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/__init__.py +0 -0
  161. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/dataset.py +0 -0
  162. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/loader.py +0 -0
  163. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/pandas_io.py +0 -0
  164. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/transform.py +0 -0
  165. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/viz.py +0 -0
  166. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_io/__init__.py +0 -0
  167. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_io/scientific.py +0 -0
  168. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_io/streaming.py +0 -0
  169. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/__init__.py +0 -0
  170. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/_implicit.py +0 -0
  171. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/solvers.py +0 -0
  172. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/symplectic.py +0 -0
  173. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/fractals/__init__.py +0 -0
  174. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/fractals/sets.py +0 -0
  175. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/genetics/__init__.py +0 -0
  176. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/genetics/sequence.py +0 -0
  177. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/graph/__init__.py +0 -0
  178. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/graph/algorithms.py +0 -0
  179. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/__init__.py +0 -0
  180. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/evaluator.py +0 -0
  181. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/generator.py +0 -0
  182. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/mining.py +0 -0
  183. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/infotheory/__init__.py +0 -0
  184. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/infotheory/measures.py +0 -0
  185. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/interpolate/__init__.py +0 -0
  186. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/__init__.py +0 -0
  187. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/graph.py +0 -0
  188. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/notes.py +0 -0
  189. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/retrieval.py +0 -0
  190. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/__init__.py +0 -0
  191. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/calculus.py +0 -0
  192. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/linalg.py +0 -0
  193. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/special.py +0 -0
  194. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/svd.py +0 -0
  195. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/__init__.py +0 -0
  196. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/boosting.py +0 -0
  197. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/clustering.py +0 -0
  198. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/decomposition.py +0 -0
  199. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/ensemble.py +0 -0
  200. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/linear_models.py +0 -0
  201. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/metrics.py +0 -0
  202. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/naive_bayes.py +0 -0
  203. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/neighbors.py +0 -0
  204. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/neural.py +0 -0
  205. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/preprocessing.py +0 -0
  206. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/tree.py +0 -0
  207. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/__init__.py +0 -0
  208. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/_base.py +0 -0
  209. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/_nodes.py +0 -0
  210. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/expression.py +0 -0
  211. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/fitting.py +0 -0
  212. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/model.py +0 -0
  213. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/solver.py +0 -0
  214. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/montecarlo/__init__.py +0 -0
  215. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/montecarlo/markov.py +0 -0
  216. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/montecarlo/methods.py +0 -0
  217. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/__init__.py +0 -0
  218. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/attention.py +0 -0
  219. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/__init__.py +0 -0
  220. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/_grad.py +0 -0
  221. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/ops.py +0 -0
  222. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/tensor.py +0 -0
  223. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/bpe.py +0 -0
  224. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/data.py +0 -0
  225. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/embed.py +0 -0
  226. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/layers.py +0 -0
  227. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/model.py +0 -0
  228. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/optim.py +0 -0
  229. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/training.py +0 -0
  230. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/viz.py +0 -0
  231. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/numerical_integration/__init__.py +0 -0
  232. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/numerical_integration/quadrature.py +0 -0
  233. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/__init__.py +0 -0
  234. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/_metaheuristics.py +0 -0
  235. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/constrained.py +0 -0
  236. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/minimize.py +0 -0
  237. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/pde/__init__.py +0 -0
  238. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/plot/__init__.py +0 -0
  239. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/plot/_backend.py +0 -0
  240. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/plot/charts.py +0 -0
  241. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/__init__.py +0 -0
  242. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/_advanced.py +0 -0
  243. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/distributions.py +0 -0
  244. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/extra_distributions.py +0 -0
  245. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/provenance/__init__.py +0 -0
  246. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/provenance/manifest.py +0 -0
  247. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/py.typed +0 -0
  248. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/__init__.py +0 -0
  249. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/circuit.py +0 -0
  250. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/multi_qubit.py +0 -0
  251. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/simulator.py +0 -0
  252. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/scientific/__init__.py +0 -0
  253. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/scientific/constants.py +0 -0
  254. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/scientific/formulas.py +0 -0
  255. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/sensitivity.py +0 -0
  256. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/__init__.py +0 -0
  257. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/filters.py +0 -0
  258. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/processing.py +0 -0
  259. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/stft.py +0 -0
  260. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/wavelet.py +0 -0
  261. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/__init__.py +0 -0
  262. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/_distributions.py +0 -0
  263. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/bootstrap.py +0 -0
  264. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/descriptive.py +0 -0
  265. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/hypothesis_tests.py +0 -0
  266. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/multiple_testing.py +0 -0
  267. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/nonparametric.py +0 -0
  268. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/power.py +0 -0
  269. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/regression.py +0 -0
  270. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/time_series.py +0 -0
  271. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/tools/__init__.py +0 -0
  272. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/uncertainty/__init__.py +0 -0
  273. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/uncertainty/propagation.py +0 -0
  274. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/units/__init__.py +0 -0
  275. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/units/core.py +0 -0
  276. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/__init__.py +0 -0
  277. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/adequacy.py +0 -0
  278. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/checks.py +0 -0
  279. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/drift.py +0 -0
  280. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/report.py +0 -0
  281. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/wavelets/__init__.py +0 -0
  282. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/wavelets/haar.py +0 -0
  283. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/__init__.py +0 -0
  284. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/engine.py +0 -0
  285. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/gates.py +0 -0
  286. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/orchestrator.py +0 -0
  287. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/selection.py +0 -0
  288. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/tooling.py +0 -0
  289. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/types.py +0 -0
  290. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/__init__.py +0 -0
  291. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/conftest.py +0 -0
  292. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_advanced_fitting.py +0 -0
  293. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_completion_coverage.py +0 -0
  294. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_guard_coverage.py +0 -0
  295. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_hardening.py +0 -0
  296. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_hardening_coverage.py +0 -0
  297. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_bayes_v2.py +0 -0
  298. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_benchmarks.py +0 -0
  299. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_causal.py +0 -0
  300. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli_color.py +0 -0
  301. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli_extended.py +0 -0
  302. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli_system_info.py +0 -0
  303. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_codemeta_version_lockstep.py +0 -0
  304. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_constrained_opt.py +0 -0
  305. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_core.py +0 -0
  306. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_analysis.py +0 -0
  307. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_analysis_lazy_bridge.py +0 -0
  308. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_analysis_pandas_io.py +0 -0
  309. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_io.py +0 -0
  310. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_io_optional_backends.py +0 -0
  311. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_io_scientific.py +0 -0
  312. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_dataset.py +0 -0
  313. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_dev_numpy_pin_contract.py +0 -0
  314. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_diffeq.py +0 -0
  315. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_diffeq_implicit.py +0 -0
  316. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_domain_validation.py +0 -0
  317. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_misc_numerical.py +0 -0
  318. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_ml_quantum_linalg.py +0 -0
  319. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_nlp.py +0 -0
  320. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_quantum_evaluator_cli.py +0 -0
  321. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_stats_optimization_signals.py +0 -0
  322. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_extra_distributions.py +0 -0
  323. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_fft2.py +0 -0
  324. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_fractals.py +0 -0
  325. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_genetics.py +0 -0
  326. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_graph.py +0 -0
  327. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hardening_privacy_provenance.py +0 -0
  328. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis.py +0 -0
  329. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis_engine.py +0 -0
  330. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis_mining.py +0 -0
  331. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis_tests.py +0 -0
  332. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_infotheory.py +0 -0
  333. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_interpolate.py +0 -0
  334. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_knowledge.py +0 -0
  335. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_layering.py +0 -0
  336. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_linalg_extended.py +0 -0
  337. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_linalg_qr_cholesky.py +0 -0
  338. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_markov.py +0 -0
  339. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_math_utils.py +0 -0
  340. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_boosting.py +0 -0
  341. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_clustering.py +0 -0
  342. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_ensemble.py +0 -0
  343. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_knn.py +0 -0
  344. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_linreg.py +0 -0
  345. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_logreg.py +0 -0
  346. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_metrics.py +0 -0
  347. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_model_selection.py +0 -0
  348. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_naive_bayes.py +0 -0
  349. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_pca.py +0 -0
  350. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_preprocessing.py +0 -0
  351. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_tree.py +0 -0
  352. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_viz.py +0 -0
  353. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_voting.py +0 -0
  354. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_modeling.py +0 -0
  355. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_modeling_fit_validation.py +0 -0
  356. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_montecarlo.py +0 -0
  357. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_multi_qubit.py +0 -0
  358. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_attention.py +0 -0
  359. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_autograd.py +0 -0
  360. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_bpe.py +0 -0
  361. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_embed.py +0 -0
  362. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_layers.py +0 -0
  363. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_model.py +0 -0
  364. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_training.py +0 -0
  365. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_viz.py +0 -0
  366. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_numerical_integration.py +0 -0
  367. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_numerical_invariants.py +0 -0
  368. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_numerical_oracles.py +0 -0
  369. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_optimization.py +0 -0
  370. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_optimization_metaheuristics.py +0 -0
  371. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_path_confinement.py +0 -0
  372. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_pde.py +0 -0
  373. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_plot_charts.py +0 -0
  374. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_plot_lazy.py +0 -0
  375. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_power.py +0 -0
  376. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_probability.py +0 -0
  377. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_probability_advanced.py +0 -0
  378. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_property_invariants.py +0 -0
  379. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_provenance.py +0 -0
  380. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_provenance_audit_hardening.py +0 -0
  381. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_public_api.py +0 -0
  382. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_quantum.py +0 -0
  383. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_readme_badges.py +0 -0
  384. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_readme_surface.py +0 -0
  385. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_retrieval.py +0 -0
  386. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_runtime_dependency_graph.py +0 -0
  387. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_scientific.py +0 -0
  388. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_selection_audit_hardening.py +0 -0
  389. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_sensitivity.py +0 -0
  390. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_sensitivity_global.py +0 -0
  391. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_signals.py +0 -0
  392. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_signals_filters.py +0 -0
  393. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_special_invariants.py +0 -0
  394. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_special_numerics.py +0 -0
  395. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_statistical_audit.py +0 -0
  396. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats.py +0 -0
  397. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_audit_coverage.py +0 -0
  398. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_multiple_testing.py +0 -0
  399. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_nonparametric.py +0 -0
  400. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_time_series.py +0 -0
  401. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stft.py +0 -0
  402. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_streaming_analytics.py +0 -0
  403. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_svd.py +0 -0
  404. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_symplectic.py +0 -0
  405. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_uncertainty.py +0 -0
  406. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_units.py +0 -0
  407. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation.py +0 -0
  408. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation_adequacy.py +0 -0
  409. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation_advanced.py +0 -0
  410. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation_drift.py +0 -0
  411. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_wavelet.py +0 -0
  412. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_wavelets_v2.py +0 -0
  413. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow.py +0 -0
  414. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_gates.py +0 -0
  415. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_orchestrator.py +0 -0
  416. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
  417. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_selection.py +0 -0
  418. {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/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: |
@@ -270,9 +270,25 @@ jobs:
270
270
  if npm view "scientific-computing-system@${version}" version >/dev/null 2>&1; then
271
271
  echo "::error::scientific-computing-system@${version} is already on npm"
272
272
  echo "::error::nothing to do; bump package.json (and the locked version surfaces) to publish again"
273
+ echo "::error::: read this BEFORE bumping anything ---"
274
+ echo "::error::npm uses the SAME 404 to mean two different things: a version that is not"
275
+ echo "::error::published yet, and a caller whose credential is not authorized to see it. An"
276
+ echo "::error::unregistered trusted publisher is a 404, not a 401/403, because npm will not"
277
+ echo "::error::tell an unauthenticated caller whether a package exists."
278
+ echo "::error::A red publish step therefore does NOT by itself mean 'already published'. Do not"
279
+ echo "::error::burn a release number bumping the version to 'fix' a 404: if the trusted publisher"
280
+ echo "::error::is unregistered the next version will fail identically, and you will have consumed"
281
+ echo "::error::a version on both registries for nothing."
273
282
  exit 1
274
283
  fi
275
284
  echo "PASS: scientific-computing-system@${version} is unpublished"
285
+ # This gate only proves absence. Say so, so its PASS cannot be read as
286
+ # "and we are authorized to publish it" -- the two are independent and
287
+ # only the first is tested here.
288
+ echo "NOTE: absence is all this gate proves. It says nothing about whether this job is"
289
+ echo "NOTE: authorized to publish: an unregistered trusted publisher also reads as 404. If"
290
+ echo "NOTE: 'npm publish' below fails with E404, the cause is the publisher registration,"
291
+ echo "NOTE: not the version."
276
292
 
277
293
  # Two supported modes, selected by the `use_token_fallback` dispatch input.
278
294
  #
@@ -355,9 +371,65 @@ jobs:
355
371
  echo "PASS: npm registry auth entry present (value not shown)"
356
372
  echo "PASS: the entry references NODE_AUTH_TOKEN by name, not a literal secret"
357
373
 
374
+ # The publish command is unchanged and the step is still fail-closed: a
375
+ # non-zero npm exit still ends the job with that same exit code. All that is
376
+ # added is the diagnosis, because npm's bare E404 was ambiguous enough to be
377
+ # read as a version problem:
378
+ #
379
+ # npm error 404 The requested resource 'scientific-computing-system@2.2.2'
380
+ # could not be found or you do not have permission to access it.
381
+ #
382
+ # Nothing in that line says which half is true. Observed on runs 37268729425
383
+ # and 37269325567: the version was genuinely unpublished (the gate above
384
+ # passed), the tarball built, provenance was signed and submitted to the
385
+ # Sigstore transparency log, and only then did the PUT 404. An unregistered
386
+ # trusted publisher is the cause, and "bump the version" would not have
387
+ # helped.
358
388
  - name: Publish to npm (OIDC trusted publishing, with provenance)
359
389
  if: ${{ !inputs.use_token_fallback }}
360
- run: npm publish --provenance --access public
390
+ run: |
391
+ # `-e` is on by default in this shell, so it is explicitly suspended
392
+ # around npm to capture the exit code instead of aborting before the
393
+ # log can be inspected.
394
+ set +e
395
+ log="${RUNNER_TEMP}/npm-publish.log"
396
+ npm publish --provenance --access public >"$log" 2>&1
397
+ status=$?
398
+ set -e
399
+ cat "$log"
400
+
401
+ if [ "$status" -ne 0 ]; then
402
+ echo "::error::npm publish failed (exit $status)"
403
+ if grep -qE 'E404|404 Not Found' "$log"; then
404
+ echo "::error::: this 404 is NOT a missing package and NOT a wrong version number ---"
405
+ echo "::error::scientific-computing-system exists on npm, and the gate above just proved"
406
+ echo "::error::this exact version is absent from it. npm reports an UNAUTHORIZED caller with"
407
+ echo "::error::the same 404 it uses for 'no such version', so the message cannot tell you"
408
+ echo "::error::which one you hit. Reading it as a version problem sends you to bump a version"
409
+ echo "::error::that still cannot publish."
410
+ echo "::error::If npm signed and submitted provenance above, the OIDC identity was accepted and"
411
+ echo "::error::the registry rejected the PUT for want of a matching trusted publisher."
412
+ echo "::error::A rejected or absent TOKEN looks different: 401, or ENEEDAUTH."
413
+ echo "::error::One-time maintainer fix, not automatable from CI:"
414
+ echo "::error:: npmjs.com -> package 'scientific-computing-system' -> Settings -> Trusted Publisher"
415
+ echo "::error:: Organization or user : Furox-Art"
416
+ echo "::error:: Package : scientific-computing-system"
417
+ echo "::error:: Workflow filename : npm-publish.yml"
418
+ echo "::error:: Environment name : npm"
419
+ echo "::error:: Allowed actions : npm publish <-- must be enabled, see below"
420
+ echo "::error::npm's current UI allows 'npm stage publish' by default for newly created"
421
+ echo "::error::configurations and makes direct 'npm publish' opt-in. This workflow calls"
422
+ echo "::error::'npm publish' directly, so registering the publisher WITHOUT also allowing"
423
+ echo "::error::'npm publish' will still fail -- with a permission error rather than a 404."
424
+ echo "::error::CLI equivalent, using your own npm login and 2FA:"
425
+ echo "::error:: npm trust github --file npm-publish.yml \\"
426
+ echo "::error:: --repo Furox-Art/scientific-computing-system --env npm --allow-publish"
427
+ else
428
+ echo "::error::not a 404; see the npm output above for the real cause"
429
+ fi
430
+ exit "$status"
431
+ fi
432
+ echo "PASS: npm publish returned 0"
361
433
 
362
434
  - name: Publish to npm (token mode, no provenance)
363
435
  if: ${{ inputs.use_token_fallback }}
@@ -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,244 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Distribution status of 2.2.2 — read this before assuming npm has it
11
+
12
+ The two registries are **not** in the same state for 2.2.2.
13
+
14
+ | Registry | `2.2.2` | Build attestation |
15
+ |---|---|---|
16
+ | **PyPI** `scientific-computing-system` | **published** | **PEP 740 provenance present** |
17
+ | **npm** `scientific-computing-system` | **NOT published** | none — the version does not exist on npm |
18
+
19
+ PyPI 2.2.2 is live and carries a PEP 740 attestation. Verified against the live
20
+ registries on 2026-10-05: the PEP 740 per-file provenance endpoint returns
21
+ **HTTP 200** for both files.
22
+
23
+ ```
24
+ curl -sS -o /dev/null -w '%{http_code}\n' \
25
+ https://pypi.org/integrity/scientific-computing-system/2.2.2/scientific_computing_system-2.2.2-py3-none-any.whl/provenance # 200
26
+ curl -sS -o /dev/null -w '%{http_code}\n' \
27
+ https://pypi.org/integrity/scientific-computing-system/2.2.2/scientific_computing_system-2.2.2.tar.gz/provenance # 200
28
+ ```
29
+
30
+ npm 2.2.2 does not exist. The published npm versions remain `1.0.0`, `2.2.0` and
31
+ `2.2.1`. Nothing about the npm launcher is broken — the publish is blocked on a
32
+ one-time npmjs.com registration, described next.
33
+
34
+ ### Pending: register the npm trusted publisher (one-time, maintainer, in a browser)
35
+
36
+ npmjs.com has **no trusted publisher** configured for the package
37
+ `scientific-computing-system`. Until one exists, the OIDC path cannot complete a
38
+ publish, and npm publishes no provenance for this package.
39
+
40
+ The coordinates to enter on npmjs.com → package `scientific-computing-system` →
41
+ **Settings → Trusted Publisher → GitHub Actions**:
42
+
43
+ | Field | Value |
44
+ |---|---|
45
+ | Organization or user | `Furox-Art` |
46
+ | Package | `scientific-computing-system` |
47
+ | Workflow filename | `npm-publish.yml` |
48
+ | Environment name | `npm` |
49
+ | Allowed actions | **`npm publish`** — must be enabled, see the warning below |
50
+
51
+ **The allowed-actions field is not optional in practice.** npm's current UI grants
52
+ `npm stage publish` by default on newly created configurations and makes direct
53
+ `npm publish` **opt-in**. This repository's workflow calls `npm publish` directly,
54
+ so registering the publisher *without* also allowing `npm publish` will leave the
55
+ publish failing — with a permission error this time rather than a 404.
56
+
57
+ The same registration from the CLI, using the maintainer's own npm login and 2FA:
58
+
59
+ ```
60
+ npm trust github --file npm-publish.yml \
61
+ --repo Furox-Art/scientific-computing-system --env npm --allow-publish
62
+ ```
63
+
64
+ ### The publish mode default is unchanged, and was never set to token
65
+
66
+ The mode is the `workflow_dispatch` input `use_token_fallback`, whose default is
67
+ `false` — that is **OIDC**. There is no `npm_publish_mode` variable; the repository
68
+ has **no Actions variables at all** (none at repository or organization scope), and
69
+ `npm_publish_mode` appears nowhere in the tree. Nothing needs to be switched back:
70
+ OIDC is already the default, and token mode remains an explicit per-run opt-in.
71
+
72
+ `NPM_TOKEN` does still exist as a repository secret. It is what token mode would
73
+ use, and it should be deleted once the trusted publisher is registered and the
74
+ first OIDC publish has succeeded.
75
+
76
+ ### Fixed: a 404 from npm no longer reads as "already published"
77
+
78
+ `npm publish` answered
79
+
80
+ ```
81
+ npm error 404 The requested resource 'scientific-computing-system@2.2.2' could not
82
+ be found or you do not have permission to access it.
83
+ ```
84
+
85
+ on runs 37268729425 and 37269325567, and that single line cannot distinguish the
86
+ two real causes. npm deliberately does not tell an unauthenticated caller whether a
87
+ package exists, so **an unregistered trusted publisher is reported as 404, not as
88
+ 401 or 403.**
89
+
90
+ Two failure surfaces were making that expensive to diagnose, and both now say so
91
+ out loud. Neither changes what the workflow does; both only change what it prints.
92
+
93
+ - **The publish step** now names the real cause when npm returns 404, states that
94
+ the package exists and the version is absent, prints the npmjs.com fields above,
95
+ and calls out the `npm publish` allowed-action requirement. A rejected or absent
96
+ token looks different (401, or `ENEEDAUTH`), and the step says that too.
97
+ - **The version-existence gate** now warns, at the point where it would otherwise
98
+ tell someone to bump the version, that a 404 also means "unauthorized". Bumping
99
+ to escape a 404 consumes a release number on both registries and still will not
100
+ publish while the publisher is unregistered.
101
+
102
+ Worth recording precisely: in **both** runs the version gate **passed**. The
103
+ tarball built, provenance was signed and submitted to the Sigstore transparency
104
+ log, and only the `PUT` failed. So both runs did prove the authentication failure,
105
+ and the fix is the registration above — not a version bump.
106
+
107
+ ## [v2.2.3] - 2026-10-05
108
+
109
+ This release exists to exercise the OIDC trusted-publish path, now that the
110
+ npmjs.com trusted publisher for `scientific-computing-system` is registered.
111
+
112
+ The previous npm 2.2.2 was published in token mode and therefore carries no
113
+ attestation. Nothing about the launcher changed: `src/` is untouched since
114
+ 2.2.2, and the only source change in this release is the version string itself.
115
+
116
+ ## [v2.2.2] - 2026-10-05
117
+
118
+ Clears the last 17 open CodeQL alerts in this repository. None of them was a
119
+ security vulnerability, and **none was a logic defect** — no discarded result, no
120
+ missing `return`. Nothing is suppressed: there is no `# nosec`, no path exclusion
121
+ and no `codeql.config` entry.
122
+
123
+ ### Behaviour change
124
+
125
+ **One, and it is a removal:** the private path `cds.cli._parser._build_parser` no
126
+ longer resolves.
127
+
128
+ `_build_parser` was an alias for `build_parser`, kept for backwards
129
+ compatibility. It was defined in `cds.cli._parser` but imported and re-exported by
130
+ `cds.cli.__init__`, so within its own module it was genuinely unreferenced —
131
+ which is exactly what `py/unused-global-variable` reported. The assignment has
132
+ moved to `cds.cli.__init__`, beside its only consumer and inside the `__all__`
133
+ that already exports it.
134
+
135
+ - `cds.cli._build_parser` is unchanged: still present, still in `__all__`, still
136
+ the same object as `cds.cli.build_parser`. This is the documented
137
+ backwards-compatibility surface and it keeps working.
138
+ - `cds.cli._parser._build_parser` is gone. Nothing in this repository referenced
139
+ it and the name is underscore-private, but a downstream script that reached
140
+ into the private submodule would break.
141
+
142
+ There is now a test pinning the alias, because the original defect was that
143
+ nothing asserted it existed.
144
+
145
+ ### Fixed
146
+
147
+ - **Protocol placeholders are docstrings, not bare `...`.** Nine
148
+ `py/ineffectual-statement` alerts across `src/cds/ml/model_selection.py`,
149
+ `src/cds/ml/voting.py` and `src/cds/tools/adapters.py` were the conventional
150
+ `...` terminating a `typing.Protocol` method. These are false positives in the
151
+ strict sense: `...` is the documented placeholder for a structurally-typed
152
+ method whose implementation lives in the real backend module, and no code path
153
+ executes it. `SoftVotingModel` is the only `@runtime_checkable` one, and
154
+ `isinstance` against a runtime protocol inspects attribute *presence* without
155
+ calling the body.
156
+
157
+ They became docstrings rather than `pass` because coverage.py excludes an
158
+ ellipsis-only body but counts `pass`; measured, swapping it in drops those
159
+ lines from 100% to 75% and breaks the coverage gate. `raise NotImplementedError`
160
+ has the same coverage problem and would additionally change behaviour if the
161
+ body were ever reached. `src/cds` already contained nine docstring-only bodies
162
+ with no alert on any of them.
163
+
164
+ - **`src/cds/tools/registry.py` imports `importlib` one way.** Three spellings
165
+ were mixed: `import importlib`, `import importlib.util` and
166
+ `from importlib import metadata`. The first was fully subsumed by the second.
167
+ Now `import importlib.metadata` and `import importlib.util`, with call sites
168
+ fully qualified. Four monkeypatch targets in `tests/` were retargeted to match.
169
+
170
+ - **Four `py/unnecessary-lambda` alerts in the test suite.** `lambda x: max(x)`
171
+ and `lambda values: sum(values)` are plain wrappers around a callable; the
172
+ callables are now passed directly.
173
+
174
+ - **`tests/test_fitting_bootstrap.py` imports `cds.modeling.fitting` one way.**
175
+ A module-level `from ... import` coexisted with function-local
176
+ `import ... as fitting`. The single `import ... as fitting` form is used now and
177
+ the module-level names are qualified through it.
178
+
179
+ ### Added
180
+
181
+ - **`tests/test_protocol_placeholders.py`** pins the protocol bodies on the AST,
182
+ because a docstring-only body and a docstring followed by `pass` compile to
183
+ almost identical instructions and only the syntax tree tells them apart. It also
184
+ asserts the placeholder semantics (`None` when called unbound), that
185
+ `SoftVotingModel` is still a working structural contract, and that every
186
+ declared signature and annotation still resolves. Negative-controlled against
187
+ four mutations, all caught: docstring-plus-`pass`, `...` reinstated, body
188
+ replaced by a real statement, and a statement appended after the docstring.
189
+
190
+ ### Changed
191
+
192
+ - README's pasted `cds --version` transcript now reads `System version 2.2.2`.
193
+ Every provenance and attestation statement in `README.md` and `SECURITY.md`
194
+ still refers to **2.2.1** deliberately: those describe the published release,
195
+ including its digests, and remain true until a newer one ships.
196
+
197
+
198
+ ### Fixed
199
+
200
+ - **Provenance claims are now scoped, measured, and guarded.** A follow-up report
201
+ asserted that PyPI had no PEP 740 attestation either. Re-measured directly, that
202
+ is **not** the case, so the previous text was left standing and made precise
203
+ rather than weakened:
204
+
205
+ - PyPI **2.2.1** serves a PEP 740 provenance bundle for **both** the wheel and
206
+ the sdist (HTTP 200 on the per-file `/integrity/.../provenance` endpoint),
207
+ and each bundle's `subject` digest equals the `sha256` PyPI publishes for
208
+ that file. The 404 in the report came from requesting
209
+ `https://pypi.org/integrity/scientific-computing-system/2.2.1/`, which is a
210
+ directory, not the per-file endpoint.
211
+ - npm **2.2.1** has **no** attestation: the attestations endpoint returns 404.
212
+ This part of the report was correct.
213
+
214
+ The security posture is therefore unchanged and more precisely stated. What
215
+ changed: `SECURITY.md` now separates the three things that were being conflated
216
+ — a **PEP 740 attestation** (Sigstore-signed, attests *who built this*),
217
+ **npm `dist.signatures`** (registry transport signing, attests nothing about
218
+ the build), and a **content digest** (`sha256` on PyPI, `dist.integrity` on
219
+ npm; pins *which bytes*, not *where they came from*). It lists the published
220
+ digests to pin, gives the commands that verify them, and states the exact
221
+ trusted-publisher coordinates still to be registered for npm.
222
+
223
+ - **Reproducible-build claim scoped to what was actually measured.** Two
224
+ consecutive builds of the same commit with the same pinned backend produced
225
+ byte-identical wheel and sdist. Those digests do **not** match the published
226
+ ones (the release runs a hash-locked Linux toolchain; the check ran elsewhere),
227
+ so the documentation now claims determinism for a fixed toolchain and
228
+ explicitly declines to claim the published artifacts are bit-for-bit
229
+ reproducible from source.
230
+
231
+ - **npm launcher prerequisite re-verified.** With `cds` absent from `PATH`, the
232
+ shim proceeds straight to interpreter resolution (`python`/`python3`/`py`) and
233
+ runs `python -m cds`; it never looks for a `cds` console script. README,
234
+ `SECURITY.md` and the docs already agreed on this wording, and it is now
235
+ backed by an explicit check rather than by reading the source.
236
+
237
+ ### Added
238
+
239
+ - `docs/checks/verify_provenance_claims.py` — a guard that parses the attestation
240
+ claims out of `README.md` and `SECURITY.md` and compares them against the live
241
+ registries, failing if the prose asserts something the registries contradict.
242
+ It also rejects prose that overstates `dist.integrity` as provenance or allows
243
+ the attested subject to differ from the published digest. Negative-controlled:
244
+ three false claims (PyPI not attested, npm attested, digest mismatch acceptable)
245
+ each turn it red. Wiring it into CI is left to the workflow owner; this change
246
+ is docs-only by scope.
247
+
10
248
  ## [v2.2.1] - 2026-10-04
11
249
 
12
250
  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.3
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.3
54
54
  url: "https://github.com/Furox-Art/scientific-computing-system"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: scientific-computing-system
3
- Version: 2.2.1
3
+ Version: 2.2.3
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.3
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.3
167
177
  $ cds constants # physical constants table
168
178
  ```
169
179