scientific-computing-system 2.0.1__tar.gz → 2.2.0__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 (409) hide show
  1. scientific_computing_system-2.2.0/.github/workflows/benchmarks.yml +99 -0
  2. scientific_computing_system-2.2.0/.github/workflows/bot-reviewer.yml +59 -0
  3. scientific_computing_system-2.2.0/.github/workflows/changelog.yml +131 -0
  4. scientific_computing_system-2.2.0/.github/workflows/cli-package-smoke.yml +83 -0
  5. scientific_computing_system-2.2.0/.github/workflows/codeql.yml +55 -0
  6. scientific_computing_system-2.2.0/.github/workflows/npm-publish.yml +27 -0
  7. scientific_computing_system-2.2.0/.github/workflows/pr-automation.yml +80 -0
  8. scientific_computing_system-2.2.0/.github/workflows/pypi-registry-smoke.yml +121 -0
  9. scientific_computing_system-2.2.0/.github/workflows/release.yml +414 -0
  10. scientific_computing_system-2.2.0/.github/workflows/tests.yml +497 -0
  11. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/CHANGELOG.md +83 -0
  12. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/CITATION.cff +9 -9
  13. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/PKG-INFO +39 -3
  14. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/README.md +37 -1
  15. scientific_computing_system-2.2.0/bin/scs.js +12 -0
  16. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/index.md +8 -0
  17. scientific_computing_system-2.2.0/docs/related.md +14 -0
  18. scientific_computing_system-2.2.0/index.js +115 -0
  19. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/mkdocs.yml +5 -3
  20. scientific_computing_system-2.2.0/npm.test.js +169 -0
  21. scientific_computing_system-2.2.0/package.json +46 -0
  22. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/pyproject.toml +32 -9
  23. scientific_computing_system-2.2.0/requirements-build.lock +17 -0
  24. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/requirements-dev.lock +10 -10
  25. scientific_computing_system-2.2.0/scripts/check_version_discipline.py +263 -0
  26. scientific_computing_system-2.2.0/scripts/check_version_lockstep.py +269 -0
  27. scientific_computing_system-2.2.0/scripts/verify_cookbook.py +601 -0
  28. scientific_computing_system-2.2.0/scripts/verify_ml_reference.py +160 -0
  29. scientific_computing_system-2.2.0/scripts/verify_pypi_release.py +97 -0
  30. scientific_computing_system-2.2.0/scripts/verify_release_integrity.py +194 -0
  31. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/__init__.py +6 -2
  32. scientific_computing_system-2.2.0/src/cds/_paths.py +84 -0
  33. scientific_computing_system-2.2.0/src/cds/_version.py +9 -0
  34. scientific_computing_system-2.2.0/src/cds/causal.py +210 -0
  35. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_io/__init__.py +16 -0
  36. scientific_computing_system-2.2.0/src/cds/data_io/scientific.py +228 -0
  37. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/provenance/manifest.py +37 -8
  38. scientific_computing_system-2.2.0/src/cds/sensitivity.py +425 -0
  39. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/__init__.py +18 -0
  40. scientific_computing_system-2.2.0/src/cds/stats/multiple_testing.py +189 -0
  41. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/validation/__init__.py +20 -0
  42. scientific_computing_system-2.2.0/src/cds/validation/drift.py +217 -0
  43. scientific_computing_system-2.2.0/tests/test_causal.py +150 -0
  44. scientific_computing_system-2.2.0/tests/test_data_io_optional_backends.py +44 -0
  45. scientific_computing_system-2.2.0/tests/test_data_io_scientific.py +197 -0
  46. scientific_computing_system-2.2.0/tests/test_dev_numpy_pin_contract.py +193 -0
  47. scientific_computing_system-2.2.0/tests/test_path_confinement.py +240 -0
  48. scientific_computing_system-2.2.0/tests/test_readme_badges.py +89 -0
  49. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_release_contract.py +77 -0
  50. scientific_computing_system-2.2.0/tests/test_runtime_dependency_graph.py +247 -0
  51. scientific_computing_system-2.2.0/tests/test_sensitivity.py +166 -0
  52. scientific_computing_system-2.2.0/tests/test_stats_multiple_testing.py +85 -0
  53. scientific_computing_system-2.2.0/tests/test_validation_drift.py +116 -0
  54. scientific_computing_system-2.0.1/src/cds/_version.py +0 -12
  55. scientific_computing_system-2.0.1/src/cds/sensitivity.py +0 -204
  56. scientific_computing_system-2.0.1/tests/test_sensitivity.py +0 -59
  57. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/.gitignore +0 -0
  58. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/CONTRIBUTING.md +0 -0
  59. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/LICENSE +0 -0
  60. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/SECURITY.md +0 -0
  61. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/benchmarks/results.json +0 -0
  62. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/benchmarks/robust_runner.py +0 -0
  63. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/benchmarks/run_benchmarks.py +0 -0
  64. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/dashboard/app.py +0 -0
  65. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/ARCHITECTURE.md +0 -0
  66. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/CASE_STUDY_HUBBLE.md +0 -0
  67. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
  68. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/api.md +0 -0
  69. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/assets/icon.svg +0 -0
  70. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/assets/logo.svg +0 -0
  71. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/benchmarks.md +0 -0
  72. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/cookbook.md +0 -0
  73. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/getting-started.md +0 -0
  74. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/maintenance.md +0 -0
  75. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/ml_reference.md +0 -0
  76. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/research-workflows.md +0 -0
  77. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/stylesheets/extra.css +0 -0
  78. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tour_of_numerical_methods.md +0 -0
  79. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/core_demo.md +0 -0
  80. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/data_analysis_demo.md +0 -0
  81. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/diffeq_demo.md +0 -0
  82. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/fft2_demo.md +0 -0
  83. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/graph_demo.md +0 -0
  84. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/hypothesis_demo.md +0 -0
  85. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/hypothesis_tests_demo.md +0 -0
  86. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
  87. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/knowledge_demo.md +0 -0
  88. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/linalg_demo.md +0 -0
  89. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/math_utils_demo.md +0 -0
  90. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/ml_advanced_demo.md +0 -0
  91. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/ml_and_viz_demo.md +0 -0
  92. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/ml_demo.md +0 -0
  93. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/modeling_demo.md +0 -0
  94. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/montecarlo_demo.md +0 -0
  95. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/nlp_attention_demo.md +0 -0
  96. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/nlp_bpe_demo.md +0 -0
  97. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
  98. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/nlp_viz.md +0 -0
  99. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/numerical_integration_demo.md +0 -0
  100. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/optimization_demo.md +0 -0
  101. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/pandas_io_demo.md +0 -0
  102. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/pca_demo.md +0 -0
  103. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/probability_demo.md +0 -0
  104. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/quantum_demo.md +0 -0
  105. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/quick_start.md +0 -0
  106. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/scientific_demo.md +0 -0
  107. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/signals_demo.md +0 -0
  108. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/stats_demo.md +0 -0
  109. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/stiff_ode_demo.md +0 -0
  110. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/tutorials/time_series_demo.md +0 -0
  111. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/docs/why-pure-python.md +0 -0
  112. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/core_demo.py +0 -0
  113. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/data_analysis_demo.py +0 -0
  114. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/diffeq_demo.py +0 -0
  115. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/discovery_pipeline_demo.py +0 -0
  116. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/ensemble_showcase.py +0 -0
  117. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/fft2_demo.py +0 -0
  118. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/graph_demo.py +0 -0
  119. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/hypothesis_custom_generator.py +0 -0
  120. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/hypothesis_demo.py +0 -0
  121. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/hypothesis_tests_demo.py +0 -0
  122. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/hypothesis_with_stats_demo.py +0 -0
  123. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/interpolate_demo.py +0 -0
  124. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/knowledge_demo.py +0 -0
  125. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/linalg_demo.py +0 -0
  126. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/math_utils_demo.py +0 -0
  127. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/ml_and_viz_demo.py +0 -0
  128. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/modeling_demo.py +0 -0
  129. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/montecarlo_demo.py +0 -0
  130. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/nlp_attention_demo.py +0 -0
  131. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/nlp_bpe_demo.py +0 -0
  132. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/nlp_mini_gpt_demo.py +0 -0
  133. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/nlp_viz_demo.py +0 -0
  134. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/numerical_integration_demo.py +0 -0
  135. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/optimization_demo.py +0 -0
  136. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/pca_demo.py +0 -0
  137. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/pde_demo.py +0 -0
  138. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/plot_demo.py +0 -0
  139. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/plotting_notebook.ipynb +0 -0
  140. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/probability_demo.py +0 -0
  141. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/quantum_demo.py +0 -0
  142. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/scientific_demo.py +0 -0
  143. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/signals_demo.py +0 -0
  144. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/stats_demo.py +0 -0
  145. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/examples/tour_of_numerical_methods.ipynb +0 -0
  146. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/requirements.lock +0 -0
  147. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/scripts/publish.py +0 -0
  148. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/scripts/verify_cli_install.py +0 -0
  149. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/__main__.py +0 -0
  150. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/bayes/__init__.py +0 -0
  151. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/bayes/conjugate.py +0 -0
  152. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/cli/__init__.py +0 -0
  153. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/cli/__main__.py +0 -0
  154. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/cli/_handlers.py +0 -0
  155. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/cli/_parser.py +0 -0
  156. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/cli/_style.py +0 -0
  157. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/cli/_system_info.py +0 -0
  158. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/core/__init__.py +0 -0
  159. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/core/_numeric.py +0 -0
  160. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/core/models.py +0 -0
  161. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_analysis/__init__.py +0 -0
  162. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_analysis/dataset.py +0 -0
  163. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_analysis/loader.py +0 -0
  164. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_analysis/pandas_io.py +0 -0
  165. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_analysis/transform.py +0 -0
  166. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_analysis/viz.py +0 -0
  167. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/data_io/streaming.py +0 -0
  168. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/diffeq/__init__.py +0 -0
  169. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/diffeq/_implicit.py +0 -0
  170. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/diffeq/solvers.py +0 -0
  171. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/diffeq/symplectic.py +0 -0
  172. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/fractals/__init__.py +0 -0
  173. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/fractals/sets.py +0 -0
  174. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/genetics/__init__.py +0 -0
  175. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/genetics/sequence.py +0 -0
  176. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/graph/__init__.py +0 -0
  177. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/graph/algorithms.py +0 -0
  178. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/hypothesis/__init__.py +0 -0
  179. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/hypothesis/evaluator.py +0 -0
  180. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/hypothesis/generator.py +0 -0
  181. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/hypothesis/mining.py +0 -0
  182. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/infotheory/__init__.py +0 -0
  183. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/infotheory/measures.py +0 -0
  184. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/interpolate/__init__.py +0 -0
  185. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/knowledge/__init__.py +0 -0
  186. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/knowledge/graph.py +0 -0
  187. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/knowledge/notes.py +0 -0
  188. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/knowledge/retrieval.py +0 -0
  189. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/math_utils/__init__.py +0 -0
  190. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/math_utils/calculus.py +0 -0
  191. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/math_utils/linalg.py +0 -0
  192. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/math_utils/special.py +0 -0
  193. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/math_utils/svd.py +0 -0
  194. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/__init__.py +0 -0
  195. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/boosting.py +0 -0
  196. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/clustering.py +0 -0
  197. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/decomposition.py +0 -0
  198. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/ensemble.py +0 -0
  199. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/linear_models.py +0 -0
  200. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/metrics.py +0 -0
  201. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/model_selection.py +0 -0
  202. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/naive_bayes.py +0 -0
  203. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/neighbors.py +0 -0
  204. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/neural.py +0 -0
  205. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/preprocessing.py +0 -0
  206. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/tree.py +0 -0
  207. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/ml/voting.py +0 -0
  208. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/__init__.py +0 -0
  209. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/_base.py +0 -0
  210. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/_nodes.py +0 -0
  211. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/expression.py +0 -0
  212. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/fitting.py +0 -0
  213. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/model.py +0 -0
  214. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/modeling/solver.py +0 -0
  215. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/montecarlo/__init__.py +0 -0
  216. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/montecarlo/markov.py +0 -0
  217. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/montecarlo/methods.py +0 -0
  218. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/__init__.py +0 -0
  219. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/attention.py +0 -0
  220. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/autograd/__init__.py +0 -0
  221. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/autograd/_grad.py +0 -0
  222. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/autograd/ops.py +0 -0
  223. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/autograd/tensor.py +0 -0
  224. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/bpe.py +0 -0
  225. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/data.py +0 -0
  226. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/embed.py +0 -0
  227. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/layers.py +0 -0
  228. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/model.py +0 -0
  229. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/optim.py +0 -0
  230. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/training.py +0 -0
  231. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/nlp/viz.py +0 -0
  232. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/numerical_integration/__init__.py +0 -0
  233. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/numerical_integration/quadrature.py +0 -0
  234. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/optimization/__init__.py +0 -0
  235. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/optimization/_metaheuristics.py +0 -0
  236. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/optimization/constrained.py +0 -0
  237. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/optimization/minimize.py +0 -0
  238. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/pde/__init__.py +0 -0
  239. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/plot/__init__.py +0 -0
  240. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/plot/_backend.py +0 -0
  241. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/plot/charts.py +0 -0
  242. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/probability/__init__.py +0 -0
  243. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/probability/_advanced.py +0 -0
  244. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/probability/distributions.py +0 -0
  245. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/probability/extra_distributions.py +0 -0
  246. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/provenance/__init__.py +0 -0
  247. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/py.typed +0 -0
  248. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/quantum/__init__.py +0 -0
  249. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/quantum/circuit.py +0 -0
  250. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/quantum/multi_qubit.py +0 -0
  251. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/quantum/simulator.py +0 -0
  252. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/scientific/__init__.py +0 -0
  253. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/scientific/constants.py +0 -0
  254. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/scientific/formulas.py +0 -0
  255. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/signals/__init__.py +0 -0
  256. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/signals/filters.py +0 -0
  257. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/signals/processing.py +0 -0
  258. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/signals/stft.py +0 -0
  259. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/signals/wavelet.py +0 -0
  260. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/_distributions.py +0 -0
  261. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/bootstrap.py +0 -0
  262. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/descriptive.py +0 -0
  263. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/hypothesis_tests.py +0 -0
  264. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/nonparametric.py +0 -0
  265. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/power.py +0 -0
  266. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/regression.py +0 -0
  267. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/stats/time_series.py +0 -0
  268. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/tools/__init__.py +0 -0
  269. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/tools/adapters.py +0 -0
  270. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/tools/registry.py +0 -0
  271. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/uncertainty/__init__.py +0 -0
  272. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/uncertainty/propagation.py +0 -0
  273. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/units/__init__.py +0 -0
  274. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/units/core.py +0 -0
  275. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/validation/adequacy.py +0 -0
  276. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/validation/checks.py +0 -0
  277. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/validation/report.py +0 -0
  278. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/wavelets/__init__.py +0 -0
  279. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/wavelets/haar.py +0 -0
  280. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/__init__.py +0 -0
  281. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/engine.py +0 -0
  282. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/gates.py +0 -0
  283. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/orchestrator.py +0 -0
  284. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/selection.py +0 -0
  285. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/tooling.py +0 -0
  286. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/src/cds/workflow/types.py +0 -0
  287. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/__init__.py +0 -0
  288. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/conftest.py +0 -0
  289. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_advanced_fitting.py +0 -0
  290. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_audit_completion_coverage.py +0 -0
  291. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_audit_guard_coverage.py +0 -0
  292. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_audit_hardening.py +0 -0
  293. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_audit_hardening_coverage.py +0 -0
  294. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_bayes_v2.py +0 -0
  295. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_benchmarks.py +0 -0
  296. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_bootstrap.py +0 -0
  297. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_cli.py +0 -0
  298. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_cli_color.py +0 -0
  299. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_cli_extended.py +0 -0
  300. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_cli_system_info.py +0 -0
  301. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_constrained_opt.py +0 -0
  302. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_core.py +0 -0
  303. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_data_analysis.py +0 -0
  304. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_data_analysis_lazy_bridge.py +0 -0
  305. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_data_analysis_pandas_io.py +0 -0
  306. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_data_io.py +0 -0
  307. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_dataset.py +0 -0
  308. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_diffeq.py +0 -0
  309. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_diffeq_implicit.py +0 -0
  310. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_domain_validation.py +0 -0
  311. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_edge_misc_numerical.py +0 -0
  312. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_edge_ml_quantum_linalg.py +0 -0
  313. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_edge_nlp.py +0 -0
  314. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_edge_quantum_evaluator_cli.py +0 -0
  315. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_edge_stats_optimization_signals.py +0 -0
  316. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_extra_distributions.py +0 -0
  317. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_fft2.py +0 -0
  318. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_fitting_bootstrap.py +0 -0
  319. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_fractals.py +0 -0
  320. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_genetics.py +0 -0
  321. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_graph.py +0 -0
  322. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_hardening_privacy_provenance.py +0 -0
  323. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_hypothesis.py +0 -0
  324. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_hypothesis_engine.py +0 -0
  325. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_hypothesis_mining.py +0 -0
  326. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_hypothesis_tests.py +0 -0
  327. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_infotheory.py +0 -0
  328. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_interpolate.py +0 -0
  329. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_knowledge.py +0 -0
  330. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_layering.py +0 -0
  331. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_linalg_extended.py +0 -0
  332. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_linalg_qr_cholesky.py +0 -0
  333. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_markov.py +0 -0
  334. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_math_utils.py +0 -0
  335. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_boosting.py +0 -0
  336. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_clustering.py +0 -0
  337. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_ensemble.py +0 -0
  338. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_knn.py +0 -0
  339. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_linreg.py +0 -0
  340. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_logreg.py +0 -0
  341. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_metrics.py +0 -0
  342. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_model_selection.py +0 -0
  343. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_naive_bayes.py +0 -0
  344. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_pca.py +0 -0
  345. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_preprocessing.py +0 -0
  346. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_tree.py +0 -0
  347. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_viz.py +0 -0
  348. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_ml_voting.py +0 -0
  349. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_modeling.py +0 -0
  350. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_modeling_fit_validation.py +0 -0
  351. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_montecarlo.py +0 -0
  352. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_multi_qubit.py +0 -0
  353. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_attention.py +0 -0
  354. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_autograd.py +0 -0
  355. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_bpe.py +0 -0
  356. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_embed.py +0 -0
  357. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_layers.py +0 -0
  358. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_model.py +0 -0
  359. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_training.py +0 -0
  360. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_nlp_viz.py +0 -0
  361. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_numerical_integration.py +0 -0
  362. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_numerical_invariants.py +0 -0
  363. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_numerical_oracles.py +0 -0
  364. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_optimization.py +0 -0
  365. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_optimization_metaheuristics.py +0 -0
  366. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_pde.py +0 -0
  367. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_plot_charts.py +0 -0
  368. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_plot_lazy.py +0 -0
  369. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_power.py +0 -0
  370. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_probability.py +0 -0
  371. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_probability_advanced.py +0 -0
  372. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_property_invariants.py +0 -0
  373. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_provenance.py +0 -0
  374. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_provenance_audit_hardening.py +0 -0
  375. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_public_api.py +0 -0
  376. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_quantum.py +0 -0
  377. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_retrieval.py +0 -0
  378. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_scientific.py +0 -0
  379. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_selection_audit_hardening.py +0 -0
  380. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_sensitivity_global.py +0 -0
  381. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_signals.py +0 -0
  382. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_signals_filters.py +0 -0
  383. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_special_invariants.py +0 -0
  384. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_special_numerics.py +0 -0
  385. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_statistical_audit.py +0 -0
  386. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_stats.py +0 -0
  387. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_stats_audit_coverage.py +0 -0
  388. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_stats_nonparametric.py +0 -0
  389. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_stats_time_series.py +0 -0
  390. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_stft.py +0 -0
  391. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_streaming_analytics.py +0 -0
  392. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_svd.py +0 -0
  393. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_symplectic.py +0 -0
  394. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_tool_adapters.py +0 -0
  395. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_tools_registry.py +0 -0
  396. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_uncertainty.py +0 -0
  397. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_units.py +0 -0
  398. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_validation.py +0 -0
  399. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_validation_adequacy.py +0 -0
  400. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_validation_advanced.py +0 -0
  401. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_wavelet.py +0 -0
  402. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_wavelets_v2.py +0 -0
  403. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow.py +0 -0
  404. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow_gates.py +0 -0
  405. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow_orchestrator.py +0 -0
  406. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
  407. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow_selection.py +0 -0
  408. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow_selection_coverage.py +0 -0
  409. {scientific_computing_system-2.0.1 → scientific_computing_system-2.2.0}/tests/test_workflow_tooling.py +0 -0
@@ -0,0 +1,99 @@
1
+ name: Benchmarks
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 3 * * 1"
6
+ push:
7
+ tags:
8
+ - "v*"
9
+ workflow_dispatch:
10
+
11
+ # Benchmark execution itself is read-only. The only mutation path uses a
12
+ # short-lived GitHub App token passed directly to create-pull-request, so the
13
+ # workflow's default GITHUB_TOKEN never needs write scope.
14
+ permissions:
15
+ contents: read
16
+
17
+ concurrency:
18
+ group: benchmarks-${{ github.ref }}
19
+ cancel-in-progress: false
20
+
21
+ jobs:
22
+ regenerate:
23
+ name: Regenerate benchmark report
24
+ runs-on: ubuntu-latest
25
+ timeout-minutes: 20
26
+ permissions:
27
+ contents: read
28
+
29
+ steps:
30
+ - name: Checkout default branch (full history for SHA)
31
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
32
+ with:
33
+ fetch-depth: 0
34
+ ref: ${{ github.event.repository.default_branch }}
35
+ persist-credentials: false
36
+
37
+ - name: Set up Python
38
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
39
+ with:
40
+ python-version: "3.12"
41
+
42
+ - name: Install package
43
+ run: |
44
+ python -m pip install --upgrade pip
45
+ pip install ".[all]"
46
+
47
+ - name: Run reproducible robust benchmarks
48
+ run: python benchmarks/robust_runner.py
49
+
50
+ - name: Verify artifacts changed
51
+ id: changed
52
+ run: |
53
+ if git diff --quiet docs/benchmarks.md benchmarks/results.json; then
54
+ echo "changed=false" >> "$GITHUB_OUTPUT"
55
+ else
56
+ echo "changed=true" >> "$GITHUB_OUTPUT"
57
+ fi
58
+
59
+ - name: Check App credentials configured
60
+ id: cfg
61
+ env:
62
+ APP_ID: ${{ secrets.BOT_APP_ID }}
63
+ run: |
64
+ if [[ -n "$APP_ID" ]]; then
65
+ echo "configured=true" >> "$GITHUB_OUTPUT"
66
+ else
67
+ echo "configured=false" >> "$GITHUB_OUTPUT"
68
+ echo "::notice::BOT_APP_ID not set — Benchmarks cannot open a PR."
69
+ fi
70
+
71
+ - name: Generate GitHub App token (triggers downstream CI)
72
+ id: app-token
73
+ if: steps.cfg.outputs.configured == 'true'
74
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3
75
+ with:
76
+ app-id: ${{ secrets.BOT_APP_ID }}
77
+ private-key: ${{ secrets.BOT_APP_PRIVATE_KEY }}
78
+
79
+ - name: Open PR with regenerated artifacts
80
+ if: steps.changed.outputs.changed == 'true' && steps.cfg.outputs.configured == 'true'
81
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
82
+ with:
83
+ token: ${{ steps.app-token.outputs.token }}
84
+ base: ${{ github.event.repository.default_branch }}
85
+ commit-message: "ci(benchmarks): regenerate report and results.json"
86
+ branch: ci/benchmark-regen
87
+ title: "ci(benchmarks): regenerate report and results.json"
88
+ body: |
89
+ Automated benchmark regeneration from ${{ github.event_name }} trigger.
90
+
91
+ - `docs/benchmarks.md`
92
+ - `benchmarks/results.json`
93
+
94
+ The JSON includes schema version, package/source identity, environment
95
+ metadata, deterministic seed metadata, warmup policy, and median/MAD/p95
96
+ timing distributions. No code changes.
97
+ add-paths: |
98
+ docs/benchmarks.md
99
+ benchmarks/results.json
@@ -0,0 +1,59 @@
1
+ name: Bot Reviewer
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, reopened, ready_for_review]
6
+
7
+ env:
8
+ auto-approve-maintainer: "false"
9
+
10
+ permissions:
11
+ contents: read
12
+ pull-requests: write
13
+
14
+ jobs:
15
+ approve:
16
+ runs-on: ubuntu-latest
17
+ timeout-minutes: 10
18
+ steps:
19
+ - name: Check App credentials configured
20
+ id: cfg
21
+ env:
22
+ APP_ID: ${{ secrets.BOT_APP_ID }}
23
+ run: |
24
+ if [[ -n "$APP_ID" ]]; then
25
+ echo "configured=true" >> "$GITHUB_OUTPUT"
26
+ else
27
+ echo "configured=false" >> "$GITHUB_OUTPUT"
28
+ echo "::notice::BOT_APP_ID not set — Bot Reviewer inert."
29
+ fi
30
+ - name: Generate GitHub App token
31
+ id: app-token
32
+ if: steps.cfg.outputs.configured == 'true'
33
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3
34
+ with:
35
+ app-id: ${{ secrets.BOT_APP_ID }}
36
+ private-key: ${{ secrets.BOT_APP_PRIVATE_KEY }}
37
+ - name: Decide whether to approve
38
+ id: gate
39
+ if: steps.cfg.outputs.configured == 'true'
40
+ env:
41
+ ACTOR: ${{ github.actor }}
42
+ MAINTAINER: "Furox-Art"
43
+ AUTO_MAINTAINER: ${{ env.auto-approve-maintainer }}
44
+ run: |
45
+ approve="false"
46
+ if [[ "$ACTOR" == "dependabot[bot]" ]]; then
47
+ approve="true"
48
+ elif [[ "$AUTO_MAINTAINER" == "true" && "$ACTOR" == "$MAINTAINER" ]]; then
49
+ approve="true"
50
+ fi
51
+ echo "approve=$approve" >> "$GITHUB_OUTPUT"
52
+ - name: Submit approving review
53
+ if: steps.gate.outputs.approve == 'true'
54
+ env:
55
+ GH_TOKEN: ${{ steps.app-token.outputs.token }}
56
+ PR_URL: ${{ github.event.pull_request.html_url }}
57
+ run: |
58
+ gh pr review "$PR_URL" --approve --body \
59
+ "Automated approval by Bot Reviewer (actor: ${{ github.actor }}). CI/CodeQL still gate merge."
@@ -0,0 +1,131 @@
1
+ name: Generate CHANGELOG
2
+
3
+ # Manual-only trigger. Previously fired on every `v*` tag push, but the
4
+ # `git cliff --output CHANGELOG.md` invocation rewrites the ENTIRE file from
5
+ # git history and discards the hand-curated narrative entries (see PR #24,
6
+ # which was closed because it regressed v1.0.4/v1.0.3/v1.0.2 sections back to
7
+ # commit-hash-only stubs). cliff.toml groups by commit-message prefix while the
8
+ # repo uses hand-written descriptive sections — the two styles conflict.
9
+ #
10
+ # To regenerate locally for review only (without overwriting the curated file):
11
+ # git cliff --tag vX.Y.Z # preview to stdout
12
+ # git cliff --latest # preview latest tag's section
13
+ # Run this workflow manually only if you intend to review the diff carefully
14
+ # and reconcile the generated output with the hand-written sections.
15
+ #
16
+ # IDEMPOTENCY: all dispatches target a SINGLE fixed branch
17
+ # (chore/changelog-regen). peter-evans/create-pull-request updates the existing
18
+ # open PR on that branch (force-push) instead of opening a duplicate, so stale
19
+ # PRs no longer accumulate across tags/releases (the previous per-tag branch
20
+ # scheme left up to 6 OPEN PRs open at once — see #10/#19/#20/#21/#22/#23,
21
+ # all closed as superseded). The git-diff guard below additionally skips the
22
+ # action entirely when CHANGELOG.md is unchanged.
23
+ on:
24
+ workflow_dispatch:
25
+ inputs:
26
+ tag:
27
+ description: "Tag to generate the changelog for (e.g. v1.0.4)"
28
+ required: true
29
+ type: string
30
+
31
+ permissions:
32
+ contents: write
33
+ pull-requests: write
34
+
35
+ # Serialize dispatches: two concurrent runs would both regenerate CHANGELOG.md
36
+ # and force-push the single shared branch, racing each other. The fixed
37
+ # group also prevents the duplicate-PR accumulation the old per-tag scheme
38
+ # caused.
39
+ concurrency:
40
+ group: changelog-regen
41
+ cancel-in-progress: false
42
+
43
+ jobs:
44
+ changelog:
45
+ name: Generate CHANGELOG
46
+ runs-on: ubuntu-latest
47
+ timeout-minutes: 15
48
+ steps:
49
+ - name: Checkout main (not the tag, to avoid detached HEAD)
50
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
51
+ with:
52
+ ref: main
53
+ fetch-depth: 0
54
+
55
+ - name: Install git-cliff
56
+ uses: orhun/git-cliff-action@3d96a18cc4ec17e9dc69ddcc424ccafaf1f78ce2 # v4
57
+ with:
58
+ config: cliff.toml
59
+ args: --verbose --tag ${{ inputs.tag }} --output CHANGELOG.md
60
+
61
+ - name: Check for changes
62
+ id: check
63
+ run: |
64
+ if git diff --quiet CHANGELOG.md; then
65
+ echo "changed=false" >> "$GITHUB_OUTPUT"
66
+ else
67
+ echo "changed=true" >> "$GITHUB_OUTPUT"
68
+ fi
69
+
70
+ # Single fixed branch: create-pull-request updates the existing open PR
71
+ # on this branch (force-push) rather than opening a duplicate, so only
72
+ # one changelog PR is ever open at a time regardless of how many tags
73
+ # are dispatched.
74
+ #
75
+ # CONFIG GUARD: if the shared App is not configured yet, stop cleanly
76
+ # with a green job instead of letting create-github-app-token throw
77
+ # "Input required and not supplied: app-id". Mirrors the guard in
78
+ # benchmarks.yml / bot-reviewer.yml; once BOT_APP_ID is set this branch
79
+ # is always taken.
80
+ - name: Check App credentials configured
81
+ id: cfg
82
+ env:
83
+ APP_ID: ${{ secrets.BOT_APP_ID }}
84
+ run: |
85
+ if [[ -n "$APP_ID" ]]; then
86
+ echo "configured=true" >> "$GITHUB_OUTPUT"
87
+ else
88
+ echo "configured=false" >> "$GITHUB_OUTPUT"
89
+ echo "::notice::BOT_APP_ID not set — Changelog cannot open a PR that triggers CI. Stopping cleanly (see header)."
90
+ fi
91
+
92
+ # TOKEN CHOICE — why a GitHub App token, not the default GITHUB_TOKEN:
93
+ # A PR opened with the built-in GITHUB_TOKEN does NOT trigger the
94
+ # `pull_request` CI/CodeQL workflows (GitHub blocks GITHUB_TOKEN-sourced
95
+ # events from spawning new runs to prevent recursion). That left changelog
96
+ # PRs stuck at `action_required` (0s) under branch protection. A
97
+ # short-lived GitHub App installation token is exempt, so the required
98
+ # checks fire and the PR can merge without a manual nudge. The same App
99
+ # serves benchmarks.yml, changelog.yml, and bot-reviewer.yml.
100
+ - name: Generate GitHub App token (triggers downstream CI)
101
+ id: app-token
102
+ if: steps.cfg.outputs.configured == 'true'
103
+ uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3
104
+ with:
105
+ app-id: ${{ secrets.BOT_APP_ID }}
106
+ private-key: ${{ secrets.BOT_APP_PRIVATE_KEY }}
107
+
108
+ - name: Open or update PR with regenerated CHANGELOG
109
+ if: steps.check.outputs.changed == 'true' && steps.cfg.outputs.configured == 'true'
110
+ uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
111
+ with:
112
+ token: ${{ steps.app-token.outputs.token }}
113
+ commit-message: "docs(changelog): regenerate for ${{ inputs.tag }}"
114
+ title: "docs(changelog): regenerate for ${{ inputs.tag }} (MANUAL — review carefully)"
115
+ body: |
116
+ Auto-generated CHANGELOG update from git history.
117
+ Triggered by MANUAL workflow_dispatch for tag `${{ inputs.tag }}`.
118
+
119
+ REVIEW THE DIFF CAREFULLY before merging. git-cliff rewrites the
120
+ entire CHANGELOG.md from commit history; hand-curated narrative
121
+ entries (like the v1.0.4 "Security & Tooling" block) may be dropped
122
+ and need to be reconciled manually. See PR #24 for the regression
123
+ this caused under the previous tag-push trigger.
124
+
125
+ This PR lives on a single fixed branch (`chore/changelog-regen`);
126
+ re-running the workflow for a different tag updates this same PR
127
+ instead of opening a new one.
128
+ branch: chore/changelog-regen
129
+ base: main
130
+ delete-branch: true
131
+ add-paths: CHANGELOG.md
@@ -0,0 +1,83 @@
1
+ name: Installed CLI Smoke
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: cli-package-smoke-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ installed-cli:
18
+ name: installed CLI on ${{ matrix.os }} / Python 3.12
19
+ runs-on: ${{ matrix.os }}
20
+ timeout-minutes: 25
21
+ permissions:
22
+ contents: read
23
+ strategy:
24
+ fail-fast: false
25
+ matrix:
26
+ os: [ubuntu-latest, windows-latest, macos-latest]
27
+ steps:
28
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
29
+ with:
30
+ persist-credentials: false
31
+ - name: Set up Python
32
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
33
+ with:
34
+ python-version: "3.12"
35
+ - name: Build wheel
36
+ run: |
37
+ python -m pip install --upgrade pip
38
+ pip install build
39
+ python -m build --wheel
40
+ - name: Install wheel instead of source tree
41
+ shell: bash
42
+ run: |
43
+ set -euo pipefail
44
+ wheel="$(find dist -maxdepth 1 -name '*.whl' -print -quit)"
45
+ test -n "$wheel"
46
+ python -m pip install --force-reinstall --no-deps "$wheel"
47
+ - name: Verify installed console and module entry points
48
+ run: python scripts/verify_cli_install.py
49
+ # The wheel is installed from `dist/`, but the *source* tree is still on
50
+ # disk for the checkout. Without this, a source-tree import could mask a
51
+ # packaging defect (a missing module, a broken `py.typed`, a bad
52
+ # entry point) that the installed wheel would have failed on.
53
+ - name: Assert the installed wheel has no source-tree fallback
54
+ shell: bash
55
+ run: |
56
+ set -euo pipefail
57
+ python -m pip install --upgrade pip
58
+ python - <<'PY'
59
+ import importlib.util
60
+ import pathlib
61
+ import subprocess
62
+ import sys
63
+ import tempfile
64
+
65
+ checkout = pathlib.Path.cwd().resolve()
66
+ with tempfile.TemporaryDirectory() as tmp:
67
+ result = subprocess.run(
68
+ [sys.executable, "-c", "import cds, pathlib; print(pathlib.Path(cds.__file__).resolve())"],
69
+ cwd=tmp,
70
+ capture_output=True,
71
+ text=True,
72
+ check=True,
73
+ )
74
+ resolved = pathlib.Path(result.stdout.strip()).resolve()
75
+ if checkout in resolved.parents:
76
+ raise SystemExit(f"cds resolved from the checkout, not the wheel: {resolved}")
77
+ print(f"PASS: installed cds resolves to {resolved}")
78
+
79
+ spec = importlib.util.find_spec("cds")
80
+ if spec is None or not spec.origin:
81
+ raise SystemExit("cds is not importable from the installed distribution")
82
+ print("PASS: cds is importable from the installed distribution")
83
+ PY
@@ -0,0 +1,55 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths-ignore:
7
+ - '.github/CODEOWNERS'
8
+ - '.github/FUNDING.yml'
9
+ - '.github/ISSUE_TEMPLATE/**'
10
+ - '.github/PULL_REQUEST_TEMPLATE.md'
11
+ - 'CITATION.cff'
12
+ - 'CODE_OF_CONDUCT.md'
13
+ - 'CONTRIBUTING.md'
14
+ - 'LICENSE'
15
+ - 'SECURITY.md'
16
+ - 'docs/**'
17
+ - '*.md'
18
+ pull_request:
19
+ branches: [main]
20
+ schedule:
21
+ - cron: "37 4 * * 1"
22
+
23
+ concurrency:
24
+ group: codeql-${{ github.ref }}
25
+ cancel-in-progress: true
26
+
27
+ permissions:
28
+ contents: read
29
+ security-events: write
30
+
31
+ jobs:
32
+ analyze:
33
+ name: Analyze (${{ matrix.language }})
34
+ runs-on: ubuntu-latest
35
+ timeout-minutes: 30
36
+ strategy:
37
+ fail-fast: false
38
+ matrix:
39
+ language: [python]
40
+ steps:
41
+ - name: Checkout repository
42
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
43
+ with:
44
+ persist-credentials: false
45
+ - name: Initialize CodeQL
46
+ uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4
47
+ with:
48
+ languages: ${{ matrix.language }}
49
+ queries: security-and-quality
50
+ - name: Autobuild
51
+ uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4
52
+ - name: Perform CodeQL Analysis
53
+ uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4
54
+ with:
55
+ category: "/language:${{ matrix.language }}"
@@ -0,0 +1,27 @@
1
+ name: npm Publish
2
+
3
+ on:
4
+ workflow_dispatch:
5
+
6
+ concurrency:
7
+ group: npm-publish
8
+ cancel-in-progress: false
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ publish:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: actions/setup-node@v4
20
+ with:
21
+ node-version: "20"
22
+ registry-url: "https://registry.npmjs.org"
23
+
24
+ - name: Publish to npm
25
+ run: echo "npm publishing is disabled; PyPI is the install path" && exit 0
26
+ env:
27
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -0,0 +1,80 @@
1
+ name: PR Automation
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, reopened, labeled]
6
+ workflow_dispatch:
7
+ inputs:
8
+ pr_number:
9
+ description: 'PR number to run automation for'
10
+ required: true
11
+ type: string
12
+
13
+ concurrency:
14
+ group: pr-automation-${{ github.event.pull_request.number || inputs.pr_number }}
15
+ cancel-in-progress: true
16
+
17
+ permissions: {}
18
+
19
+ jobs:
20
+ labeler:
21
+ if: github.event_name == 'pull_request'
22
+ runs-on: ubuntu-latest
23
+ timeout-minutes: 10
24
+ permissions:
25
+ contents: read
26
+ pull-requests: write
27
+ steps:
28
+ - uses: actions/labeler@bf12e9b00b37c5c0ca2b87b79b2daf7891dbda13 # v7
29
+ with:
30
+ repo-token: "${{ secrets.GITHUB_TOKEN }}"
31
+
32
+ review-checklist:
33
+ runs-on: ubuntu-latest
34
+ timeout-minutes: 10
35
+ permissions:
36
+ contents: read
37
+ pull-requests: write
38
+ if: |
39
+ (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'needs-review')) ||
40
+ github.event_name == 'workflow_dispatch'
41
+ steps:
42
+ - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
43
+ with:
44
+ script: |
45
+ const { owner, repo } = context.repo;
46
+ let prNumber = context.issue ? context.issue.number : null;
47
+ if (context.eventName === 'workflow_dispatch') {
48
+ prNumber = parseInt('${{ inputs.pr_number }}');
49
+ }
50
+ if (!prNumber) {
51
+ console.log('No PR number provided');
52
+ return;
53
+ }
54
+ const { data: comments } = await github.rest.issues.listComments({
55
+ owner, repo, issue_number: prNumber
56
+ });
57
+ const hasChecklist = comments.some(c =>
58
+ c.body.includes('PR Review Checklist') && c.user.type === 'Bot'
59
+ );
60
+ if (hasChecklist) {
61
+ console.log('Review checklist comment already exists');
62
+ return;
63
+ }
64
+ const checklist = `## PR Review Checklist
65
+
66
+ Maintainer quick checklist for this PR:
67
+
68
+ - [ ] Tests added or updated where needed
69
+ - [ ] Documentation updated (README, docstrings, examples)
70
+ - [ ] No unnecessary dependencies added
71
+ - [ ] Code follows project style (run ruff locally)
72
+ - [ ] CHANGELOG updated if user-facing
73
+
74
+ Feel free to ping the maintainer for review.`;
75
+ await github.rest.issues.createComment({
76
+ owner,
77
+ repo,
78
+ issue_number: prNumber,
79
+ body: checklist
80
+ });
@@ -0,0 +1,121 @@
1
+ name: PyPI Registry CLI Smoke
2
+
3
+ on:
4
+ workflow_run:
5
+ workflows:
6
+ - Release
7
+ types:
8
+ - completed
9
+ push:
10
+ branches:
11
+ - main
12
+ paths:
13
+ - ".github/workflows/release.yml"
14
+ - ".github/workflows/pypi-registry-smoke.yml"
15
+ - "scripts/verify_pypi_release.py"
16
+ - "scripts/verify_release_integrity.py"
17
+
18
+ # Default-deny; each job below declares exactly the scopes it needs.
19
+ permissions:
20
+ contents: read
21
+
22
+ concurrency:
23
+ group: pypi-registry-smoke-${{ github.event.workflow_run.head_sha || github.sha }}
24
+ cancel-in-progress: false
25
+
26
+ jobs:
27
+ registry-cli:
28
+ if: >-
29
+ github.event_name == 'push' ||
30
+ (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success')
31
+ name: public PyPI CLI on ${{ matrix.os }} / Python 3.12
32
+ runs-on: ${{ matrix.os }}
33
+ timeout-minutes: 25
34
+ permissions:
35
+ contents: read
36
+ strategy:
37
+ fail-fast: false
38
+ matrix:
39
+ os:
40
+ - ubuntu-latest
41
+ - macos-latest
42
+ - windows-latest
43
+ steps:
44
+ - name: Check out released source
45
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
46
+ with:
47
+ ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
48
+
49
+ - name: Set up Python
50
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
51
+ with:
52
+ python-version: "3.12"
53
+
54
+ - name: Verify exact release from public PyPI
55
+ run: python scripts/verify_pypi_release.py
56
+
57
+ github-release-policy:
58
+ name: enforce metadata-only GitHub Release policy
59
+ needs: registry-cli
60
+ runs-on: ubuntu-latest
61
+ timeout-minutes: 15
62
+ permissions:
63
+ contents: write
64
+ steps:
65
+ - name: Check out released source
66
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
67
+ with:
68
+ ref: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_sha || github.sha }}
69
+
70
+ - name: Set up Python
71
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
72
+ with:
73
+ python-version: "3.12"
74
+
75
+ - name: Resolve package version
76
+ id: release
77
+ shell: bash
78
+ run: |
79
+ set -euo pipefail
80
+ version="$(python - <<'PY'
81
+ import tomllib
82
+ from pathlib import Path
83
+
84
+ project = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))["project"]
85
+ print(project["version"])
86
+ PY
87
+ )"
88
+ echo "version=$version" >> "$GITHUB_OUTPUT"
89
+ echo "tag=v$version" >> "$GITHUB_OUTPUT"
90
+
91
+ - name: Remove forbidden wheel and sdist assets from matching GitHub Release
92
+ env:
93
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
94
+ RELEASE_TAG: ${{ steps.release.outputs.tag }}
95
+ shell: bash
96
+ run: |
97
+ set -euo pipefail
98
+ release_id="$(
99
+ gh api "repos/$GITHUB_REPOSITORY/releases/tags/$RELEASE_TAG" --jq '.id'
100
+ )"
101
+ asset_ids="$(
102
+ gh api --paginate "repos/$GITHUB_REPOSITORY/releases/$release_id/assets" \
103
+ --jq '.[] | select((.name | endswith(".whl")) or (.name | endswith(".tar.gz"))) | .id'
104
+ )"
105
+ if [ -z "$asset_ids" ]; then
106
+ echo "No forbidden distribution assets found on $RELEASE_TAG."
107
+ else
108
+ for asset_id in $asset_ids; do
109
+ echo "Deleting forbidden GitHub Release distribution asset id=$asset_id"
110
+ gh api --method DELETE "repos/$GITHUB_REPOSITORY/releases/assets/$asset_id"
111
+ done
112
+ fi
113
+
114
+ - name: Verify public PyPI and asset-free GitHub Release policy
115
+ env:
116
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
117
+ RELEASE_VERSION: ${{ steps.release.outputs.version }}
118
+ run: >-
119
+ python scripts/verify_release_integrity.py
120
+ --version "$RELEASE_VERSION"
121
+ --repository "$GITHUB_REPOSITORY"