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.
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/cli-package-smoke.yml +8 -3
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/npm-publish.yml +73 -1
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/release.yml +14 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/tests.yml +60 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/CHANGELOG.md +238 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/CITATION.cff +3 -3
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/PKG-INFO +17 -7
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/README.md +15 -5
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/SECURITY.md +114 -20
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/codemeta.json +2 -2
- scientific_computing_system-2.2.3/docs/checks/verify_provenance_claims.py +468 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/npm.test.js +19 -1
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/package.json +1 -1
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/pyproject.toml +6 -2
- scientific_computing_system-2.2.3/requirements-build.lock +494 -0
- scientific_computing_system-2.2.3/scripts/check_release_toolchain.py +551 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_release_integrity.py +29 -1
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/_version.py +1 -1
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/__init__.py +11 -1
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_parser.py +0 -4
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/model_selection.py +12 -4
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/voting.py +8 -2
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/tools/adapters.py +18 -6
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/tools/registry.py +3 -4
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_bootstrap.py +2 -2
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli.py +28 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_fitting_bootstrap.py +10 -11
- scientific_computing_system-2.2.3/tests/test_protocol_placeholders.py +204 -0
- scientific_computing_system-2.2.3/tests/test_provenance_claims.py +384 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_release_contract.py +17 -1
- scientific_computing_system-2.2.3/tests/test_release_toolchain.py +713 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_tool_adapters.py +2 -4
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_tools_registry.py +5 -3
- scientific_computing_system-2.2.3/tests/test_verify_release_integrity.py +222 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_tooling.py +6 -1
- scientific_computing_system-2.2.1/requirements-build.lock +0 -17
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/benchmarks.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/bot-reviewer.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/changelog.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/codeql.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/pr-automation.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/pypi-registry-smoke.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.gitignore +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/CONTRIBUTING.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/LICENSE +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/benchmarks/results.json +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/benchmarks/robust_runner.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/benchmarks/run_benchmarks.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/bin/scs.js +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/dashboard/app.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/ARCHITECTURE.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/CASE_STUDY_HUBBLE.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/api.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/assets/icon.svg +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/assets/logo.svg +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/benchmarks.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/cookbook.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/getting-started.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/index.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/maintenance.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/ml_reference.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/related.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/research-workflows.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/stylesheets/extra.css +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tour_of_numerical_methods.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/core_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/data_analysis_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/diffeq_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/fft2_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/graph_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/hypothesis_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/hypothesis_tests_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/knowledge_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/linalg_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/math_utils_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/ml_advanced_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/ml_and_viz_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/ml_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/modeling_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/montecarlo_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_attention_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_bpe_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/nlp_viz.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/numerical_integration_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/optimization_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/pandas_io_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/pca_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/probability_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/quantum_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/quick_start.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/scientific_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/signals_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/stats_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/stiff_ode_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/tutorials/time_series_demo.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/docs/why-pure-python.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/core_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/data_analysis_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/diffeq_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/discovery_pipeline_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/ensemble_showcase.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/fft2_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/graph_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_custom_generator.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_tests_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/hypothesis_with_stats_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/interpolate_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/knowledge_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/linalg_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/math_utils_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/ml_and_viz_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/modeling_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/montecarlo_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_attention_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_bpe_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_mini_gpt_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/nlp_viz_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/numerical_integration_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/optimization_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/pca_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/pde_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/plot_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/plotting_notebook.ipynb +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/probability_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/quantum_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/scientific_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/signals_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/stats_demo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/examples/tour_of_numerical_methods.ipynb +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/index.js +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/mkdocs.yml +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/paper.bib +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/paper.md +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/requirements-dev.lock +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/requirements.lock +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/check_version_discipline.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/check_version_lockstep.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/publish.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_cli_install.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_cookbook.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_ml_reference.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/scripts/verify_pypi_release.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/__main__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/_paths.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/bayes/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/bayes/conjugate.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/causal.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/__main__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_handlers.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_style.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/cli/_system_info.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/core/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/core/_numeric.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/core/models.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/dataset.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/loader.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/pandas_io.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/transform.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_analysis/viz.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_io/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_io/scientific.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/data_io/streaming.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/_implicit.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/solvers.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/diffeq/symplectic.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/fractals/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/fractals/sets.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/genetics/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/genetics/sequence.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/graph/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/graph/algorithms.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/evaluator.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/generator.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/hypothesis/mining.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/infotheory/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/infotheory/measures.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/interpolate/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/graph.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/notes.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/knowledge/retrieval.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/calculus.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/linalg.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/special.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/math_utils/svd.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/boosting.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/clustering.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/decomposition.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/ensemble.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/linear_models.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/metrics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/naive_bayes.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/neighbors.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/neural.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/preprocessing.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/ml/tree.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/_base.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/_nodes.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/expression.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/fitting.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/model.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/modeling/solver.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/montecarlo/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/montecarlo/markov.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/montecarlo/methods.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/attention.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/_grad.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/ops.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/autograd/tensor.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/bpe.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/data.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/embed.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/layers.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/model.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/optim.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/training.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/nlp/viz.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/numerical_integration/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/numerical_integration/quadrature.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/_metaheuristics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/constrained.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/optimization/minimize.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/pde/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/plot/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/plot/_backend.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/plot/charts.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/_advanced.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/distributions.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/probability/extra_distributions.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/provenance/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/provenance/manifest.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/py.typed +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/circuit.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/multi_qubit.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/quantum/simulator.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/scientific/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/scientific/constants.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/scientific/formulas.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/sensitivity.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/filters.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/processing.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/stft.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/signals/wavelet.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/_distributions.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/bootstrap.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/descriptive.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/hypothesis_tests.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/multiple_testing.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/nonparametric.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/power.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/regression.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/stats/time_series.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/tools/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/uncertainty/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/uncertainty/propagation.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/units/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/units/core.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/adequacy.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/checks.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/drift.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/validation/report.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/wavelets/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/wavelets/haar.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/engine.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/gates.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/orchestrator.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/selection.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/tooling.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/src/cds/workflow/types.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/__init__.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/conftest.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_advanced_fitting.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_completion_coverage.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_guard_coverage.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_hardening.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_audit_hardening_coverage.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_bayes_v2.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_benchmarks.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_causal.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli_color.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli_extended.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_cli_system_info.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_codemeta_version_lockstep.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_constrained_opt.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_core.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_analysis.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_analysis_lazy_bridge.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_analysis_pandas_io.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_io.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_io_optional_backends.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_data_io_scientific.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_dataset.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_dev_numpy_pin_contract.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_diffeq.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_diffeq_implicit.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_domain_validation.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_misc_numerical.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_ml_quantum_linalg.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_nlp.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_quantum_evaluator_cli.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_edge_stats_optimization_signals.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_extra_distributions.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_fft2.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_fractals.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_genetics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_graph.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hardening_privacy_provenance.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis_engine.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis_mining.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_hypothesis_tests.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_infotheory.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_interpolate.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_knowledge.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_layering.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_linalg_extended.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_linalg_qr_cholesky.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_markov.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_math_utils.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_boosting.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_clustering.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_ensemble.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_knn.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_linreg.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_logreg.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_metrics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_model_selection.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_naive_bayes.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_pca.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_preprocessing.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_tree.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_viz.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_ml_voting.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_modeling.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_modeling_fit_validation.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_montecarlo.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_multi_qubit.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_attention.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_autograd.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_bpe.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_embed.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_layers.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_model.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_training.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_nlp_viz.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_numerical_integration.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_numerical_invariants.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_numerical_oracles.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_optimization.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_optimization_metaheuristics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_path_confinement.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_pde.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_plot_charts.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_plot_lazy.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_power.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_probability.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_probability_advanced.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_property_invariants.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_provenance.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_provenance_audit_hardening.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_public_api.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_quantum.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_readme_badges.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_readme_surface.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_retrieval.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_runtime_dependency_graph.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_scientific.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_selection_audit_hardening.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_sensitivity.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_sensitivity_global.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_signals.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_signals_filters.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_special_invariants.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_special_numerics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_statistical_audit.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_audit_coverage.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_multiple_testing.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_nonparametric.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stats_time_series.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_stft.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_streaming_analytics.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_svd.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_symplectic.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_uncertainty.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_units.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation_adequacy.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation_advanced.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_validation_drift.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_wavelet.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_wavelets_v2.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_gates.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_orchestrator.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
- {scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/tests/test_workflow_selection.py +0 -0
- {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
|
-
|
|
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:
|
|
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
|
{scientific_computing_system-2.2.1 → scientific_computing_system-2.2.3}/.github/workflows/tests.yml
RENAMED
|
@@ -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.
|
|
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-
|
|
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.
|
|
53
|
+
version: 2.2.3
|
|
54
54
|
url: "https://github.com/Furox-Art/scientific-computing-system"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: scientific-computing-system
|
|
3
|
-
Version: 2.2.
|
|
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:
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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.
|
|
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:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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.
|
|
176
|
+
System version 2.2.3
|
|
167
177
|
$ cds constants # physical constants table
|
|
168
178
|
```
|
|
169
179
|
|