scientific-computing-system 2.2.7__tar.gz → 2.2.11__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.7 → scientific_computing_system-2.2.11}/CHANGELOG.md +1819 -1775
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/CITATION.cff +54 -54
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/PKG-INFO +1 -1
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/codemeta.json +28 -28
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/hypothesis_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/package.json +45 -45
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/pyproject.toml +327 -327
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/_version.py +9 -9
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/validation/checks.py +99 -52
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/validation/drift.py +18 -4
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_property_invariants.py +15 -13
- scientific_computing_system-2.2.11/tests/test_validation_bounds_nonfinite_regression.py +27 -0
- scientific_computing_system-2.2.11/tests/test_validation_derived_moments_overflow.py +58 -0
- scientific_computing_system-2.2.11/tests/test_validation_derived_tolerance_overflow.py +51 -0
- scientific_computing_system-2.2.11/tests/test_validation_nonfinite_thresholds_regression.py +57 -0
- scientific_computing_system-2.2.11/tests/test_validation_ood_stable_and_coverage.py +61 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/benchmarks.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/bot-reviewer.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/changelog.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/cli-package-smoke.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/codeql.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/npm-publish.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/pr-automation.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/pypi-registry-smoke.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/release.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.github/workflows/tests.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/.gitignore +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/CONTRIBUTING.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/LICENSE +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/README.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/SECURITY.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/benchmarks/results.json +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/benchmarks/robust_runner.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/benchmarks/run_benchmarks.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/bin/scs.js +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/dashboard/app.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/ARCHITECTURE.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/CASE_STUDY_HUBBLE.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/CASE_STUDY_QUANTUM_ML.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/api.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/assets/icon.svg +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/assets/logo.svg +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/benchmarks.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/checks/verify_provenance_claims.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/cookbook.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/getting-started.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/index.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/maintenance.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/ml_reference.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/related.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/research-workflows.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/stylesheets/extra.css +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tour_of_numerical_methods.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/core_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/data_analysis_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/diffeq_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/fft2_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/graph_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/hypothesis_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/hypothesis_tests_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/hypothesis_with_stats_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/knowledge_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/linalg_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/math_utils_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/ml_advanced_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/ml_and_viz_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/ml_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/modeling_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/montecarlo_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/nlp_attention_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/nlp_bpe_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/nlp_mini_gpt_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/nlp_viz.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/numerical_integration_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/optimization_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/pandas_io_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/pca_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/probability_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/quantum_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/quick_start.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/scientific_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/signals_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/stats_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/stiff_ode_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/tutorials/time_series_demo.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/docs/why-pure-python.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/core_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/data_analysis_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/diffeq_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/discovery_pipeline_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/ensemble_showcase.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/fft2_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/graph_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/hypothesis_custom_generator.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/hypothesis_tests_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/hypothesis_with_stats_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/interpolate_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/knowledge_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/linalg_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/math_utils_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/ml_and_viz_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/modeling_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/montecarlo_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/nlp_attention_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/nlp_bpe_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/nlp_mini_gpt_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/nlp_viz_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/numerical_integration_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/optimization_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/pca_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/pde_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/plot_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/plotting_notebook.ipynb +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/probability_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/quantum_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/scientific_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/signals_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/stats_demo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/examples/tour_of_numerical_methods.ipynb +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/index.js +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/mkdocs.yml +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/npm.test.js +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/paper.bib +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/paper.md +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/requirements-build.lock +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/requirements-dev.lock +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/requirements.lock +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/check_release_toolchain.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/check_version_discipline.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/check_version_lockstep.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/publish.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/verify_cli_install.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/verify_cookbook.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/verify_ml_reference.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/verify_pypi_release.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/scripts/verify_release_integrity.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/__main__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/_paths.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/bayes/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/bayes/conjugate.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/causal.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/__main__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/_exit_codes.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/_handlers.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/_parser.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/_style.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/cli/_system_info.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/core/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/core/_numeric.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/core/models.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_analysis/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_analysis/dataset.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_analysis/loader.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_analysis/pandas_io.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_analysis/transform.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_analysis/viz.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_io/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_io/scientific.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/data_io/streaming.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/diffeq/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/diffeq/_implicit.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/diffeq/solvers.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/diffeq/symplectic.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/fractals/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/fractals/sets.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/genetics/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/genetics/sequence.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/graph/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/graph/algorithms.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/hypothesis/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/hypothesis/evaluator.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/hypothesis/generator.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/hypothesis/mining.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/infotheory/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/infotheory/measures.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/interpolate/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/knowledge/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/knowledge/graph.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/knowledge/notes.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/knowledge/retrieval.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/math_utils/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/math_utils/calculus.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/math_utils/linalg.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/math_utils/special.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/math_utils/svd.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/boosting.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/clustering.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/decomposition.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/ensemble.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/linear_models.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/metrics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/model_selection.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/naive_bayes.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/neighbors.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/neural.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/preprocessing.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/tree.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/ml/voting.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/_base.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/_nodes.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/expression.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/fitting.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/model.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/modeling/solver.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/montecarlo/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/montecarlo/markov.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/montecarlo/methods.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/attention.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/autograd/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/autograd/_grad.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/autograd/ops.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/autograd/tensor.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/bpe.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/data.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/embed.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/layers.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/model.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/optim.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/training.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/nlp/viz.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/numerical_integration/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/numerical_integration/quadrature.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/optimization/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/optimization/_metaheuristics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/optimization/constrained.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/optimization/minimize.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/pde/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/plot/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/plot/_backend.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/plot/charts.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/probability/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/probability/_advanced.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/probability/distributions.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/probability/extra_distributions.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/provenance/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/provenance/manifest.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/py.typed +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/quantum/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/quantum/circuit.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/quantum/multi_qubit.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/quantum/simulator.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/scientific/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/scientific/constants.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/scientific/formulas.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/sensitivity.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/signals/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/signals/filters.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/signals/processing.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/signals/stft.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/signals/wavelet.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/_distributions.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/bootstrap.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/descriptive.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/hypothesis_tests.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/multiple_testing.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/nonparametric.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/power.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/regression.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/stats/time_series.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/tools/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/tools/adapters.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/tools/registry.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/uncertainty/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/uncertainty/propagation.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/units/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/units/core.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/validation/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/validation/adequacy.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/validation/report.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/wavelets/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/wavelets/haar.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/engine.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/gates.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/orchestrator.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/selection.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/tooling.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/src/cds/workflow/types.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/__init__.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/conftest.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_advanced_fitting.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_completion_coverage.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_guard_coverage.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening_c1.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening_c2.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening_c3.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening_c4.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening_coverage.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_audit_hardening_h1.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_bayes_v2.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_benchmarks.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_bootstrap.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_causal.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_cli.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_cli_color.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_cli_exit_codes.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_cli_extended.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_cli_system_info.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_codemeta_version_lockstep.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_constrained_opt.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_core.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_data_analysis.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_data_analysis_lazy_bridge.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_data_analysis_pandas_io.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_data_io.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_data_io_optional_backends.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_data_io_scientific.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_dataset.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_dev_numpy_pin_contract.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_diffeq.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_diffeq_implicit.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_domain_validation.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_edge_misc_numerical.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_edge_ml_quantum_linalg.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_edge_nlp.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_edge_quantum_evaluator_cli.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_edge_stats_optimization_signals.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_extra_distributions.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_fft2.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_fitting_bootstrap.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_fractals.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_genetics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_graph.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_hardening_privacy_provenance.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_hypothesis.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_hypothesis_engine.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_hypothesis_mining.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_hypothesis_tests.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_infotheory.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_interpolate.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_knowledge.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_layering.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_linalg_extended.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_linalg_qr_cholesky.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_markov.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_math_utils.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_boosting.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_clustering.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_ensemble.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_knn.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_linreg.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_logreg.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_metrics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_model_selection.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_naive_bayes.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_pca.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_preprocessing.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_tree.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_viz.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_ml_voting.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_modeling.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_modeling_fit_validation.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_montecarlo.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_multi_qubit.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_attention.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_autograd.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_bpe.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_embed.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_layers.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_model.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_training.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_nlp_viz.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_numerical_integration.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_numerical_invariants.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_numerical_oracles.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_optimization.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_optimization_metaheuristics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_path_confinement.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_pde.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_plot_charts.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_plot_lazy.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_power.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_probability.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_probability_advanced.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_protocol_placeholders.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_provenance.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_provenance_audit_hardening.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_provenance_claims.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_public_api.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_quantum.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_readme_badges.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_readme_surface.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_release_contract.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_release_toolchain.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_retrieval.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_runtime_dependency_graph.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_scientific.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_seed_hygiene.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_selection_audit_hardening.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_sensitivity.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_sensitivity_global.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_signals.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_signals_filters.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_special_invariants.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_special_numerics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_statistical_audit.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_stats.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_stats_audit_coverage.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_stats_multiple_testing.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_stats_nonparametric.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_stats_time_series.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_stft.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_streaming_analytics.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_svd.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_symplectic.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_tool_adapters.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_tools_registry.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_uncertainty.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_units.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_validation.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_validation_adequacy.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_validation_advanced.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_validation_drift.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_verify_release_integrity.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_wavelet.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_wavelets_v2.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow_gates.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow_orchestrator.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow_orchestrator_blocked_review.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow_selection.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow_selection_coverage.py +0 -0
- {scientific_computing_system-2.2.7 → scientific_computing_system-2.2.11}/tests/test_workflow_tooling.py +0 -0
|
@@ -1,1775 +1,1819 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to **scientific-computing-system** will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [v2.2.
|
|
9
|
-
|
|
10
|
-
###
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
`
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
and
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
###
|
|
179
|
-
|
|
180
|
-
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
is
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
`
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
`
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
that
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
`
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
`
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
`
|
|
628
|
-
and
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
-
|
|
661
|
-
|
|
662
|
-
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
- **
|
|
671
|
-
`
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
- `
|
|
678
|
-
|
|
679
|
-
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
-
|
|
694
|
-
|
|
695
|
-
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
-
|
|
700
|
-
|
|
701
|
-
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
###
|
|
758
|
-
|
|
759
|
-
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
- **`cds.probability`**:
|
|
788
|
-
`
|
|
789
|
-
`
|
|
790
|
-
-
|
|
791
|
-
- **`cds.
|
|
792
|
-
`
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
-
|
|
852
|
-
|
|
853
|
-
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
-
|
|
925
|
-
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
###
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
`
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
the
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
- **`
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
-
|
|
1151
|
-
|
|
1152
|
-
`
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
###
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
- **
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
- **
|
|
1195
|
-
|
|
1196
|
-
`
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
- **
|
|
1239
|
-
`
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
###
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
-
|
|
1335
|
-
|
|
1336
|
-
dependency
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
## [v1.0
|
|
1359
|
-
|
|
1360
|
-
###
|
|
1361
|
-
|
|
1362
|
-
A
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
`
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
###
|
|
1405
|
-
|
|
1406
|
-
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
###
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
###
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
-
|
|
1494
|
-
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
- Feat(nlp):
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
###
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
-
|
|
1651
|
-
|
|
1652
|
-
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
-
|
|
1659
|
-
|
|
1660
|
-
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
-
|
|
1669
|
-
|
|
1670
|
-
-
|
|
1671
|
-
|
|
1672
|
-
-
|
|
1673
|
-
|
|
1674
|
-
-
|
|
1675
|
-
|
|
1676
|
-
-
|
|
1677
|
-
|
|
1678
|
-
-
|
|
1679
|
-
|
|
1680
|
-
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
-
|
|
1717
|
-
|
|
1718
|
-
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
- Ci:
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to **scientific-computing-system** will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [v2.2.11] - 2026-10-17
|
|
9
|
+
|
|
10
|
+
### Scientific validation CI and overflow resilience
|
|
11
|
+
|
|
12
|
+
- Restore the 100% branch-coverage contract for numeric drift and residual overflow detection through explicit extreme-input regressions and removal of unreachable redundant checks.
|
|
13
|
+
- Stabilize OOD reference means and standard deviations for large, finite observations; prevent NaN-derived false negatives and reject unrepresentable centered differences.
|
|
14
|
+
- Keep ordinary OOD thresholds, constant-reference semantics, and normal sample behavior unchanged.
|
|
15
|
+
|
|
16
|
+
## [v2.2.10] - 2026-10-17
|
|
17
|
+
|
|
18
|
+
### Fail-closed scientific moment diagnostics
|
|
19
|
+
|
|
20
|
+
- Refuse distribution-drift PASS when arithmetic overflow makes finite-input sample means, variances, or standardized shifts non-finite.
|
|
21
|
+
- Refuse residual-diagnostic PASS (or uncaught overflow) when derived residual means, centered differences, squares, or dependence statistics are not representable.
|
|
22
|
+
- Preserve explicit warnings for well-defined zero-variance mismatches; add focused regressions for extreme and ordinary numerical inputs.
|
|
23
|
+
|
|
24
|
+
## [v2.2.9] - 2026-10-17
|
|
25
|
+
|
|
26
|
+
### Scientific numerical tolerance overflow protection
|
|
27
|
+
|
|
28
|
+
- Reject derived infinite tolerances for independent-method agreement and conservation checks instead of silently returning PASS.
|
|
29
|
+
- Reject expanded OOD bounds that overflow to infinity when user-provided margins are finite.
|
|
30
|
+
- Add regression tests for overflow conditions and ordinary finite thresholds.
|
|
31
|
+
|
|
32
|
+
## [v2.2.8] - 2026-10-17
|
|
33
|
+
|
|
34
|
+
### Scientific validation fail-closed thresholds
|
|
35
|
+
|
|
36
|
+
- Reject NaN and infinite tolerances for independent-method agreement and conservation.
|
|
37
|
+
- Reject non-finite OOD margins, distribution-drift thresholds, and residual diagnostic limits.
|
|
38
|
+
- Add regression coverage for these parameter-contract failures and align the public
|
|
39
|
+
version tuple with the synchronized release metadata.
|
|
40
|
+
|
|
41
|
+
## [v2.2.7] - 2026-10-15
|
|
42
|
+
|
|
43
|
+
### Housekeeping — version lockstep
|
|
44
|
+
|
|
45
|
+
- Release 2.2.7 (2026-10-15): records the production/Stable line against
|
|
46
|
+
which the repository's locked surfaces (codemeta.json, pyproject.toml,
|
|
47
|
+
package.json, `cds --version`) are verified by
|
|
48
|
+
`tests/test_codemeta_version_lockstep.py`.
|
|
49
|
+
- Bumps the npm shim to the same 2.2.7 line so both publish channels ship
|
|
50
|
+
at identical versions, as documented in the README "Install" section.
|
|
51
|
+
|
|
52
|
+
## [v2.2.6] - 2026-10-13
|
|
53
|
+
|
|
54
|
+
### Housekeeping — second-round neighbour sweep
|
|
55
|
+
|
|
56
|
+
- `transpose` shares the ragged-input contract the rest of the matrix API has
|
|
57
|
+
held since 2.2.5. It indexed only the leading row's width, so a short row
|
|
58
|
+
lost entries silently (`[[1.0],[2.0,3.0]]` became `[[1.0, 2.0]]`): the
|
|
59
|
+
result described a matrix nobody supplied. It now fails closed through the
|
|
60
|
+
same `_require_rectangular` check `mat_mul` and Cholesky use.
|
|
61
|
+
- Geometric PMF boundary pinned: `geometric_pmf(0, p)` is 0 (no trial counted
|
|
62
|
+
1-based), and extreme `(k, p)` stays finite.
|
|
63
|
+
- `poisson_pmf(0, 0)` is 1 and the log-space PMFs were probed at their
|
|
64
|
+
previously-crashing inputs; no remaining overflow class found in the
|
|
65
|
+
probability module.
|
|
66
|
+
|
|
67
|
+
## [v2.2.5] - 2026-10-12
|
|
68
|
+
|
|
69
|
+
### Housekeeping — audit hardening
|
|
70
|
+
|
|
71
|
+
- Closes the findings of the full-repository audit: patched the concrete
|
|
72
|
+
defects (correctness, fail-closed behaviour, platform independence),
|
|
73
|
+
wired every standalone guard into CI, removed dead or duplicated code
|
|
74
|
+
paths, and pinned every doc claim to a test so it cannot silently
|
|
75
|
+
drift again. Regression tests fail without the corresponding fix.
|
|
76
|
+
|
|
77
|
+
## [Unreleased]
|
|
78
|
+
|
|
79
|
+
### Distribution status of 2.2.2 — read this before assuming npm has it
|
|
80
|
+
|
|
81
|
+
The two registries are **not** in the same state for 2.2.2.
|
|
82
|
+
|
|
83
|
+
| Registry | `2.2.2` | Build attestation |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| **PyPI** `scientific-computing-system` | **published** | **PEP 740 provenance present** |
|
|
86
|
+
| **npm** `scientific-computing-system` | **NOT published** | none — the version does not exist on npm |
|
|
87
|
+
|
|
88
|
+
PyPI 2.2.2 is live and carries a PEP 740 attestation. Verified against the live
|
|
89
|
+
registries on 2026-10-05: the PEP 740 per-file provenance endpoint returns
|
|
90
|
+
**HTTP 200** for both files.
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
curl -sS -o /dev/null -w '%{http_code}\n' \
|
|
94
|
+
https://pypi.org/integrity/scientific-computing-system/2.2.2/scientific_computing_system-2.2.2-py3-none-any.whl/provenance # 200
|
|
95
|
+
curl -sS -o /dev/null -w '%{http_code}\n' \
|
|
96
|
+
https://pypi.org/integrity/scientific-computing-system/2.2.2/scientific_computing_system-2.2.2.tar.gz/provenance # 200
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
npm 2.2.2 does not exist. The published npm versions remain `1.0.0`, `2.2.0` and
|
|
100
|
+
`2.2.1`. Nothing about the npm launcher is broken — the publish is blocked on a
|
|
101
|
+
one-time npmjs.com registration, described next.
|
|
102
|
+
|
|
103
|
+
### Pending: register the npm trusted publisher (one-time, maintainer, in a browser)
|
|
104
|
+
|
|
105
|
+
npmjs.com has **no trusted publisher** configured for the package
|
|
106
|
+
`scientific-computing-system`. Until one exists, the OIDC path cannot complete a
|
|
107
|
+
publish, and npm publishes no provenance for this package.
|
|
108
|
+
|
|
109
|
+
The coordinates to enter on npmjs.com → package `scientific-computing-system` →
|
|
110
|
+
**Settings → Trusted Publisher → GitHub Actions**:
|
|
111
|
+
|
|
112
|
+
| Field | Value |
|
|
113
|
+
|---|---|
|
|
114
|
+
| Organization or user | `Furox-Art` |
|
|
115
|
+
| Package | `scientific-computing-system` |
|
|
116
|
+
| Workflow filename | `npm-publish.yml` |
|
|
117
|
+
| Environment name | `npm` |
|
|
118
|
+
| Allowed actions | **`npm publish`** — must be enabled, see the warning below |
|
|
119
|
+
|
|
120
|
+
**The allowed-actions field is not optional in practice.** npm's current UI grants
|
|
121
|
+
`npm stage publish` by default on newly created configurations and makes direct
|
|
122
|
+
`npm publish` **opt-in**. This repository's workflow calls `npm publish` directly,
|
|
123
|
+
so registering the publisher *without* also allowing `npm publish` will leave the
|
|
124
|
+
publish failing — with a permission error this time rather than a 404.
|
|
125
|
+
|
|
126
|
+
The same registration from the CLI, using the maintainer's own npm login and 2FA:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
npm trust github --file npm-publish.yml \
|
|
130
|
+
--repo Furox-Art/scientific-computing-system --env npm --allow-publish
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### The publish mode default is unchanged, and was never set to token
|
|
134
|
+
|
|
135
|
+
The mode is the `workflow_dispatch` input `use_token_fallback`, whose default is
|
|
136
|
+
`false` — that is **OIDC**. There is no `npm_publish_mode` variable; the repository
|
|
137
|
+
has **no Actions variables at all** (none at repository or organization scope), and
|
|
138
|
+
`npm_publish_mode` appears nowhere in the tree. Nothing needs to be switched back:
|
|
139
|
+
OIDC is already the default, and token mode remains an explicit per-run opt-in.
|
|
140
|
+
|
|
141
|
+
`NPM_TOKEN` does still exist as a repository secret. It is what token mode would
|
|
142
|
+
use, and it should be deleted once the trusted publisher is registered and the
|
|
143
|
+
first OIDC publish has succeeded.
|
|
144
|
+
|
|
145
|
+
### Fixed: a 404 from npm no longer reads as "already published"
|
|
146
|
+
|
|
147
|
+
`npm publish` answered
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
npm error 404 The requested resource 'scientific-computing-system@2.2.2' could not
|
|
151
|
+
be found or you do not have permission to access it.
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
on runs 37268729425 and 37269325567, and that single line cannot distinguish the
|
|
155
|
+
two real causes. npm deliberately does not tell an unauthenticated caller whether a
|
|
156
|
+
package exists, so **an unregistered trusted publisher is reported as 404, not as
|
|
157
|
+
401 or 403.**
|
|
158
|
+
|
|
159
|
+
Two failure surfaces were making that expensive to diagnose, and both now say so
|
|
160
|
+
out loud. Neither changes what the workflow does; both only change what it prints.
|
|
161
|
+
|
|
162
|
+
- **The publish step** now names the real cause when npm returns 404, states that
|
|
163
|
+
the package exists and the version is absent, prints the npmjs.com fields above,
|
|
164
|
+
and calls out the `npm publish` allowed-action requirement. A rejected or absent
|
|
165
|
+
token looks different (401, or `ENEEDAUTH`), and the step says that too.
|
|
166
|
+
- **The version-existence gate** now warns, at the point where it would otherwise
|
|
167
|
+
tell someone to bump the version, that a 404 also means "unauthorized". Bumping
|
|
168
|
+
to escape a 404 consumes a release number on both registries and still will not
|
|
169
|
+
publish while the publisher is unregistered.
|
|
170
|
+
|
|
171
|
+
Worth recording precisely: in **both** runs the version gate **passed**. The
|
|
172
|
+
tarball built, provenance was signed and submitted to the Sigstore transparency
|
|
173
|
+
log, and only the `PUT` failed. So both runs did prove the authentication failure,
|
|
174
|
+
and the fix is the registration above — not a version bump.
|
|
175
|
+
|
|
176
|
+
## [v2.2.4] - 2026-10-12
|
|
177
|
+
|
|
178
|
+
### Housekeeping — release alignment
|
|
179
|
+
|
|
180
|
+
- Publishes the post-2.2.3 repository state (single-shot automatic npm
|
|
181
|
+
publishing, #165) to PyPI and npm: the 2.2.3 upload predates that commit, so
|
|
182
|
+
both registries were one commit behind `main`. No behavioural change.
|
|
183
|
+
|
|
184
|
+
## [v2.2.3] - 2026-10-05
|
|
185
|
+
|
|
186
|
+
This release exists to exercise the OIDC trusted-publish path, now that the
|
|
187
|
+
npmjs.com trusted publisher for `scientific-computing-system` is registered.
|
|
188
|
+
|
|
189
|
+
The previous npm 2.2.2 was published in token mode and therefore carries no
|
|
190
|
+
attestation. Nothing about the launcher changed: `src/` is untouched since
|
|
191
|
+
2.2.2, and the only source change in this release is the version string itself.
|
|
192
|
+
|
|
193
|
+
## [v2.2.2] - 2026-10-05
|
|
194
|
+
|
|
195
|
+
Clears the last 17 open CodeQL alerts in this repository. None of them was a
|
|
196
|
+
security vulnerability, and **none was a logic defect** — no discarded result, no
|
|
197
|
+
missing `return`. Nothing is suppressed: there is no `# nosec`, no path exclusion
|
|
198
|
+
and no `codeql.config` entry.
|
|
199
|
+
|
|
200
|
+
### Behaviour change
|
|
201
|
+
|
|
202
|
+
**One, and it is a removal:** the private path `cds.cli._parser._build_parser` no
|
|
203
|
+
longer resolves.
|
|
204
|
+
|
|
205
|
+
`_build_parser` was an alias for `build_parser`, kept for backwards
|
|
206
|
+
compatibility. It was defined in `cds.cli._parser` but imported and re-exported by
|
|
207
|
+
`cds.cli.__init__`, so within its own module it was genuinely unreferenced —
|
|
208
|
+
which is exactly what `py/unused-global-variable` reported. The assignment has
|
|
209
|
+
moved to `cds.cli.__init__`, beside its only consumer and inside the `__all__`
|
|
210
|
+
that already exports it.
|
|
211
|
+
|
|
212
|
+
- `cds.cli._build_parser` is unchanged: still present, still in `__all__`, still
|
|
213
|
+
the same object as `cds.cli.build_parser`. This is the documented
|
|
214
|
+
backwards-compatibility surface and it keeps working.
|
|
215
|
+
- `cds.cli._parser._build_parser` is gone. Nothing in this repository referenced
|
|
216
|
+
it and the name is underscore-private, but a downstream script that reached
|
|
217
|
+
into the private submodule would break.
|
|
218
|
+
|
|
219
|
+
There is now a test pinning the alias, because the original defect was that
|
|
220
|
+
nothing asserted it existed.
|
|
221
|
+
|
|
222
|
+
### Fixed
|
|
223
|
+
|
|
224
|
+
- **Protocol placeholders are docstrings, not bare `...`.** Nine
|
|
225
|
+
`py/ineffectual-statement` alerts across `src/cds/ml/model_selection.py`,
|
|
226
|
+
`src/cds/ml/voting.py` and `src/cds/tools/adapters.py` were the conventional
|
|
227
|
+
`...` terminating a `typing.Protocol` method. These are false positives in the
|
|
228
|
+
strict sense: `...` is the documented placeholder for a structurally-typed
|
|
229
|
+
method whose implementation lives in the real backend module, and no code path
|
|
230
|
+
executes it. `SoftVotingModel` is the only `@runtime_checkable` one, and
|
|
231
|
+
`isinstance` against a runtime protocol inspects attribute *presence* without
|
|
232
|
+
calling the body.
|
|
233
|
+
|
|
234
|
+
They became docstrings rather than `pass` because coverage.py excludes an
|
|
235
|
+
ellipsis-only body but counts `pass`; measured, swapping it in drops those
|
|
236
|
+
lines from 100% to 75% and breaks the coverage gate. `raise NotImplementedError`
|
|
237
|
+
has the same coverage problem and would additionally change behaviour if the
|
|
238
|
+
body were ever reached. `src/cds` already contained nine docstring-only bodies
|
|
239
|
+
with no alert on any of them.
|
|
240
|
+
|
|
241
|
+
- **`src/cds/tools/registry.py` imports `importlib` one way.** Three spellings
|
|
242
|
+
were mixed: `import importlib`, `import importlib.util` and
|
|
243
|
+
`from importlib import metadata`. The first was fully subsumed by the second.
|
|
244
|
+
Now `import importlib.metadata` and `import importlib.util`, with call sites
|
|
245
|
+
fully qualified. Four monkeypatch targets in `tests/` were retargeted to match.
|
|
246
|
+
|
|
247
|
+
- **Four `py/unnecessary-lambda` alerts in the test suite.** `lambda x: max(x)`
|
|
248
|
+
and `lambda values: sum(values)` are plain wrappers around a callable; the
|
|
249
|
+
callables are now passed directly.
|
|
250
|
+
|
|
251
|
+
- **`tests/test_fitting_bootstrap.py` imports `cds.modeling.fitting` one way.**
|
|
252
|
+
A module-level `from ... import` coexisted with function-local
|
|
253
|
+
`import ... as fitting`. The single `import ... as fitting` form is used now and
|
|
254
|
+
the module-level names are qualified through it.
|
|
255
|
+
|
|
256
|
+
### Added
|
|
257
|
+
|
|
258
|
+
- **`tests/test_protocol_placeholders.py`** pins the protocol bodies on the AST,
|
|
259
|
+
because a docstring-only body and a docstring followed by `pass` compile to
|
|
260
|
+
almost identical instructions and only the syntax tree tells them apart. It also
|
|
261
|
+
asserts the placeholder semantics (`None` when called unbound), that
|
|
262
|
+
`SoftVotingModel` is still a working structural contract, and that every
|
|
263
|
+
declared signature and annotation still resolves. Negative-controlled against
|
|
264
|
+
four mutations, all caught: docstring-plus-`pass`, `...` reinstated, body
|
|
265
|
+
replaced by a real statement, and a statement appended after the docstring.
|
|
266
|
+
|
|
267
|
+
### Changed
|
|
268
|
+
|
|
269
|
+
- README's pasted `cds --version` transcript now reads `System version 2.2.2`.
|
|
270
|
+
Every provenance and attestation statement in `README.md` and `SECURITY.md`
|
|
271
|
+
still refers to **2.2.1** deliberately: those describe the published release,
|
|
272
|
+
including its digests, and remain true until a newer one ships.
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
### Fixed
|
|
276
|
+
|
|
277
|
+
- **Provenance claims are now scoped, measured, and guarded.** A follow-up report
|
|
278
|
+
asserted that PyPI had no PEP 740 attestation either. Re-measured directly, that
|
|
279
|
+
is **not** the case, so the previous text was left standing and made precise
|
|
280
|
+
rather than weakened:
|
|
281
|
+
|
|
282
|
+
- PyPI **2.2.1** serves a PEP 740 provenance bundle for **both** the wheel and
|
|
283
|
+
the sdist (HTTP 200 on the per-file `/integrity/.../provenance` endpoint),
|
|
284
|
+
and each bundle's `subject` digest equals the `sha256` PyPI publishes for
|
|
285
|
+
that file. The 404 in the report came from requesting
|
|
286
|
+
`https://pypi.org/integrity/scientific-computing-system/2.2.1/`, which is a
|
|
287
|
+
directory, not the per-file endpoint.
|
|
288
|
+
- npm **2.2.1** has **no** attestation: the attestations endpoint returns 404.
|
|
289
|
+
This part of the report was correct.
|
|
290
|
+
|
|
291
|
+
The security posture is therefore unchanged and more precisely stated. What
|
|
292
|
+
changed: `SECURITY.md` now separates the three things that were being conflated
|
|
293
|
+
— a **PEP 740 attestation** (Sigstore-signed, attests *who built this*),
|
|
294
|
+
**npm `dist.signatures`** (registry transport signing, attests nothing about
|
|
295
|
+
the build), and a **content digest** (`sha256` on PyPI, `dist.integrity` on
|
|
296
|
+
npm; pins *which bytes*, not *where they came from*). It lists the published
|
|
297
|
+
digests to pin, gives the commands that verify them, and states the exact
|
|
298
|
+
trusted-publisher coordinates still to be registered for npm.
|
|
299
|
+
|
|
300
|
+
- **Reproducible-build claim scoped to what was actually measured.** Two
|
|
301
|
+
consecutive builds of the same commit with the same pinned backend produced
|
|
302
|
+
byte-identical wheel and sdist. Those digests do **not** match the published
|
|
303
|
+
ones (the release runs a hash-locked Linux toolchain; the check ran elsewhere),
|
|
304
|
+
so the documentation now claims determinism for a fixed toolchain and
|
|
305
|
+
explicitly declines to claim the published artifacts are bit-for-bit
|
|
306
|
+
reproducible from source.
|
|
307
|
+
|
|
308
|
+
- **npm launcher prerequisite re-verified.** With `cds` absent from `PATH`, the
|
|
309
|
+
shim proceeds straight to interpreter resolution (`python`/`python3`/`py`) and
|
|
310
|
+
runs `python -m cds`; it never looks for a `cds` console script. README,
|
|
311
|
+
`SECURITY.md` and the docs already agreed on this wording, and it is now
|
|
312
|
+
backed by an explicit check rather than by reading the source.
|
|
313
|
+
|
|
314
|
+
### Added
|
|
315
|
+
|
|
316
|
+
- `docs/checks/verify_provenance_claims.py` — a guard that parses the attestation
|
|
317
|
+
claims out of `README.md` and `SECURITY.md` and compares them against the live
|
|
318
|
+
registries, failing if the prose asserts something the registries contradict.
|
|
319
|
+
It also rejects prose that overstates `dist.integrity` as provenance or allows
|
|
320
|
+
the attested subject to differ from the published digest. Negative-controlled:
|
|
321
|
+
three false claims (PyPI not attested, npm attested, digest mismatch acceptable)
|
|
322
|
+
each turn it red. Wiring it into CI is left to the workflow owner; this change
|
|
323
|
+
is docs-only by scope.
|
|
324
|
+
|
|
325
|
+
## [v2.2.1] - 2026-10-04
|
|
326
|
+
|
|
327
|
+
Documentation and release-surface corrections. **No library behaviour change**:
|
|
328
|
+
nothing under `src/cds/` was modified except the `__version__` constant, so no
|
|
329
|
+
numerical kernel, public API signature or CLI subcommand differs from 2.2.0.
|
|
330
|
+
|
|
331
|
+
The reason this patch release exists: `README.md` is the `long_description`, and
|
|
332
|
+
PyPI only re-reads it when a new release is uploaded. 2.2.0 shipped the README as
|
|
333
|
+
it stood before the truthfulness work below, so the PyPI project page for 2.2.0
|
|
334
|
+
still advertises claims the repository has since retracted. Publishing 2.2.1 is
|
|
335
|
+
what makes the corrected README the one PyPI renders.
|
|
336
|
+
|
|
337
|
+
### Fixed
|
|
338
|
+
|
|
339
|
+
- **README performance claim corrected to the committed artifact.** The "catch"
|
|
340
|
+
paragraph asserted "~0.05 s versus ~0.0001 s ... roughly 580x slower" and
|
|
341
|
+
described it as "this machine's benchmark run", while pointing readers at
|
|
342
|
+
`docs/benchmarks.md` for "the hardware they came from". `benchmarks/results.json`
|
|
343
|
+
actually records 0.0696 s versus 0.000060 s (**1154.8x**) at commit `7213425`,
|
|
344
|
+
and that same file records Platform / CPU / Python / NumPy as "not recorded"
|
|
345
|
+
with an explicit "treat the absolute timings as unverified" warning. The line
|
|
346
|
+
added by the earlier truthfulness commit therefore contradicted the warnings it
|
|
347
|
+
shipped alongside. Both the README and `docs/why-pure-python.md` now quote the
|
|
348
|
+
artifact's own numbers and state that the environment was not recorded.
|
|
349
|
+
|
|
350
|
+
- **npm launcher prerequisite stated correctly.** README and `SECURITY.md` said
|
|
351
|
+
the `scs` shim works once `cds` is "on your PATH". `index.js` resolves an
|
|
352
|
+
interpreter (`python`/`python3`/`py`) and runs `python -m cds`; it never looks
|
|
353
|
+
for a console script on `PATH`. Corrected to "requires the Python distribution
|
|
354
|
+
installed so that `python -m cds` resolves".
|
|
355
|
+
|
|
356
|
+
- **Stale version references left behind by the 2.2.1 bump.** The README's pasted
|
|
357
|
+
`cds --version` transcript still read `System version 2.2.0` after the version
|
|
358
|
+
moved, and `SECURITY.md` still recommended pinning `==2.2.0`. Since the README
|
|
359
|
+
is the `long_description`, that line would have shipped verbatim to the PyPI
|
|
360
|
+
project page. Both were re-derived from live commands at 2.2.1.
|
|
361
|
+
|
|
362
|
+
Every other pasted transcript was re-checked against the installed 2.2.1 wheel
|
|
363
|
+
and found current: the quickstart output (SVD singular values, damped-oscillator
|
|
364
|
+
final state, regression fit), `cds modules` printing 26 rows and omitting exactly
|
|
365
|
+
the nine documented modules, the structural claims (34 subpackages, 35 public
|
|
366
|
+
feature modules, 505 names / 342 functions / 163 classes), the benchmark ratio
|
|
367
|
+
against `benchmarks/results.json`, and all five documented extras.
|
|
368
|
+
|
|
369
|
+
Two further `SECURITY.md` claims were false and are corrected: `scs` was
|
|
370
|
+
documented as needing a `cds` console script on `PATH` when the launcher
|
|
371
|
+
resolves an interpreter and runs `python -m cds` (verified: the shim prints
|
|
372
|
+
`System version 2.2.1` with no `cds` on `PATH`), and the PyPI attestation cell
|
|
373
|
+
claimed a PEP 740 bundle for the published 2.2.0 when PyPI serves none.
|
|
374
|
+
|
|
375
|
+
The pin example is now version-agnostic by construction, so it cannot rot at
|
|
376
|
+
the next bump.
|
|
377
|
+
|
|
378
|
+
- **Module-surface claims are now accurate.** "34 subpackages" silently omitted
|
|
379
|
+
the two top-level public modules (`causal.py`, `sensitivity.py`), and
|
|
380
|
+
"`cds modules` for the live list" was wrong twice over: that command prints a
|
|
381
|
+
curated 26-entry subset and omits `bayes`, `causal`, `core`, `fractals`,
|
|
382
|
+
`genetics`, `infotheory`, `interpolate`, `pde`, and `wavelets`. README,
|
|
383
|
+
`docs/api.md` and `docs/index.md` now state the real counts and flag
|
|
384
|
+
`cds modules` as a subset. The unsupported "46 public functions / 534 exports"
|
|
385
|
+
hero claim does not exist in the repository or in any reachable commit; the
|
|
386
|
+
README instead carries counts derived from the package itself (505 exports:
|
|
387
|
+
342 functions, 163 classes across 35 feature modules).
|
|
388
|
+
|
|
389
|
+
- **Documentation no longer claims npm is unpublished.** npm 2.2.0 is live and
|
|
390
|
+
npm is a supported channel, but `README.md` line 41 still said "npm is no
|
|
391
|
+
longer published". Because `README.md` is listed in the npm `files` allowlist,
|
|
392
|
+
that sentence shipped **verbatim inside the published 2.2.0 tarball**, so the
|
|
393
|
+
npm package page contradicted its own README. `README.md`, `SECURITY.md` and
|
|
394
|
+
`docs/related.md` now describe both channels accurately; the npm version badge
|
|
395
|
+
is restored now that the registry and PyPI agree.
|
|
396
|
+
|
|
397
|
+
- **A successful publish is no longer reported as a failure while npm is still
|
|
398
|
+
propagating it.** `npm publish` returns as soon as the registry accepts the
|
|
399
|
+
upload, but the version becomes readable on the read path asynchronously. The
|
|
400
|
+
post-publish check read once, immediately, and on run `37136131220` got
|
|
401
|
+
`npm error 404 No match found for version 2.2.0` — while 2.2.0 was in fact
|
|
402
|
+
published and recorded by the registry ninety seconds later. A maintainer
|
|
403
|
+
reading that run had every reason to believe the release had broken. Three
|
|
404
|
+
sibling repositories hit the same false failure.
|
|
405
|
+
|
|
406
|
+
The check now polls the registry with backoff over a budget of several minutes,
|
|
407
|
+
succeeds on the first match, and still fails closed if the version genuinely
|
|
408
|
+
never appears, emitting a `::warning::` first so a slow-but-successful publish
|
|
409
|
+
is never read as a hard failure.
|
|
410
|
+
|
|
411
|
+
It queries the registry's JSON API instead of `npm view`, which was a poor fit:
|
|
412
|
+
it reports "absent" and "denied" with the same `E404`, and it resolves against
|
|
413
|
+
the userconfig the job created for *writing*, so a read-only confirmation had no
|
|
414
|
+
reason to touch publish credentials at all. Both directions are exercised
|
|
415
|
+
against a stub registry, and the retry budget itself is asserted, since
|
|
416
|
+
shortening it to make a test fast is what caused the bug.
|
|
417
|
+
|
|
418
|
+
- **The publish path is now guarded rather than merely enabled.** The launcher
|
|
419
|
+
contract test previously asserted that publishing stayed disabled, which would
|
|
420
|
+
have silently passed against a disabled workflow. It now asserts a real
|
|
421
|
+
`npm publish --provenance` invocation, `id-token: write`, the absence of
|
|
422
|
+
`private: true`, the absence of the disabled stub, and the presence of every
|
|
423
|
+
gate that makes a publish safe: the registry version-existence check, the
|
|
424
|
+
`npm pack --dry-run` tarball allowlist, and the npm/Python version lockstep.
|
|
425
|
+
|
|
426
|
+
- **The npm toolchain version floor rejected a compliant toolchain.** The first
|
|
427
|
+
real publish run failed on this gate:
|
|
428
|
+
|
|
429
|
+
```
|
|
430
|
+
npm --version | grep -Eq '^11\.(5[1-9]|[6-9][0-9])\.|^1[2-9]\.'
|
|
431
|
+
::error::npm 11.5.1+ is required for OIDC trusted publishing
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
On Node 24, setup-node installs npm **11.19.0**. The `[6-9][0-9]` alternative
|
|
435
|
+
covers minors 60-99, so `19` never matched and the gate failed on a toolchain
|
|
436
|
+
that meets the floor. A regex cannot express "greater than or equal to" for a
|
|
437
|
+
dotted version without enumerating every minor, which is exactly the mistake
|
|
438
|
+
that shipped. The gate now parses the version, strips any leading `v` and
|
|
439
|
+
prerelease suffix, and compares major/minor/patch as integers against 11.5.1.
|
|
440
|
+
The Node half of the same gate ignored the patch component: it compared only
|
|
441
|
+
major and minor, so `22.9.0` was accepted even though the documented floor is
|
|
442
|
+
22.14.0. Both halves now use the same integer comparison.
|
|
443
|
+
|
|
444
|
+
- **Token-mode npm publish failed with `ENEEDAUTH` while holding a valid
|
|
445
|
+
secret.** The run reached `npm publish` with `NODE_AUTH_TOKEN` populated and
|
|
446
|
+
still got:
|
|
447
|
+
|
|
448
|
+
```
|
|
449
|
+
npm error code ENEEDAUTH
|
|
450
|
+
npm error need auth This command requires you to be logged in to
|
|
451
|
+
https://registry.npmjs.org/
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
Root cause: `actions/setup-node` was configured without `registry-url`, so it
|
|
455
|
+
wrote no npm userconfig at all. `NODE_AUTH_TOKEN` on its own is inert — npm only
|
|
456
|
+
substitutes it into a credential when some userconfig maps
|
|
457
|
+
`//registry.npmjs.org/` to `${NODE_AUTH_TOKEN}`. With no such entry npm never
|
|
458
|
+
attempts authentication, which is why the failure was `ENEEDAUTH` (no
|
|
459
|
+
authentication attempted) rather than `E401` (attempted and rejected) even
|
|
460
|
+
though the secret was present and correct. The fix is
|
|
461
|
+
`registry-url: "https://registry.npmjs.org"` on `setup-node`.
|
|
462
|
+
|
|
463
|
+
Separately, the credential check lived inline inside the publish step, so its
|
|
464
|
+
failure text appeared in the log while `npm publish` was invoked anyway. It is
|
|
465
|
+
now its own step ahead of both publish steps, so a non-zero exit ends the job
|
|
466
|
+
before npm can run, and it covers the OIDC mode too (verifying the runner
|
|
467
|
+
actually granted `id-token: write`, which the previous version never checked).
|
|
468
|
+
|
|
469
|
+
- **The `bin` map is now pinned by tests, so a broken launcher command cannot
|
|
470
|
+
ship silently.** The `npm warn publish "bin[scs]" script name bin/scs.js was
|
|
471
|
+
invalid and removed` message had been reported as a defect that would leave
|
|
472
|
+
the published package with no working `scs` command. **That report was wrong.**
|
|
473
|
+
npm normalises the redundant `./` prefix and ships the entry either way; the
|
|
474
|
+
packed tarball keeps `bin: { scs: "./bin/scs.js" }` alongside `bin/scs.js`, and
|
|
475
|
+
installing it creates `scs`, `scs.cmd` and `scs.ps1` and `scs --version`
|
|
476
|
+
succeeds. `axiomize@1.12.4`, published from the identical shape, ships the same
|
|
477
|
+
and is not deprecated. No `package.json` change is required.
|
|
478
|
+
|
|
479
|
+
What *is* a real hazard is the opposite: npm ships a `bin` pointing at a
|
|
480
|
+
missing file, or one excluded by `files`, with **no warning at all**. Five
|
|
481
|
+
tests now assert the bin map is a valid command-name to path mapping, that
|
|
482
|
+
every target exists and is covered by `files`, that the shim carries a `node`
|
|
483
|
+
shebang, and that the real tarball (`npm pack --dry-run --json`) still contains
|
|
484
|
+
both the shim and the bin entry. One further test documents that the `./`
|
|
485
|
+
prefix is intentional so the cosmetic warning is not "fixed" by a future
|
|
486
|
+
maintainer.
|
|
487
|
+
|
|
488
|
+
### Added
|
|
489
|
+
|
|
490
|
+
- **`tests/test_readme_surface.py`** derives the README's structural claims from
|
|
491
|
+
`src/cds/` and from the installed package: subpackage count, presence of both
|
|
492
|
+
top-level public modules, the export total, per-module table coverage, the
|
|
493
|
+
benchmark ratio against `benchmarks/results.json`, and a guard against
|
|
494
|
+
describing `cds modules` as exhaustive. This drift was previously invisible to
|
|
495
|
+
CI, which is how it survived several releases. Verified by mutation: five
|
|
496
|
+
separate re-introductions of the audited defects each turn the suite red.
|
|
497
|
+
|
|
498
|
+
- **`codemeta.json` is now a locked version surface.** It was left out of the
|
|
499
|
+
original five surfaces and drifted: it still declared `2.1.0` after the package
|
|
500
|
+
reached 2.2.0, while every other surface had moved. CodeMeta is a
|
|
501
|
+
machine-readable publication record, so a stale `version` there advertises the
|
|
502
|
+
previous release to every automated consumer while the installed package
|
|
503
|
+
reports a different one. `scripts/check_version_lockstep.py` now reads it and
|
|
504
|
+
`tests/test_codemeta_version_lockstep.py` fails CI on drift. It is also added
|
|
505
|
+
to the sdist allowlist, without which that suite failed with `FileNotFoundError`
|
|
506
|
+
when run from an unpacked sdist.
|
|
507
|
+
|
|
508
|
+
- README coverage: `cds.core` and `cds.graph` rows, `examples/` (35 runnable
|
|
509
|
+
files) and `dashboard/app.py` entries, all 13 CLI subcommands, the `[pandas]`
|
|
510
|
+
extra, `paper.md`/`paper.bib` (JOSS) and `codemeta.json`, and a Contributing
|
|
511
|
+
section with the `pip install -e ".[dev]"` / `pytest` / `mkdocs serve` loop and
|
|
512
|
+
the 100% blended-coverage gate. Duplicated prose was removed (the supply-chain
|
|
513
|
+
section now defers to `SECURITY.md` instead of restating it, and the generic
|
|
514
|
+
"Common use cases" filler is gone).
|
|
515
|
+
|
|
516
|
+
- **Two supported npm publish modes**, selected by the `use_token_fallback`
|
|
517
|
+
dispatch input (boolean, default `false`):
|
|
518
|
+
- **OIDC trusted publishing** (preferred, default) — `id-token: write`,
|
|
519
|
+
`npm publish --provenance`. No registry secret involved.
|
|
520
|
+
- **Token mode** (`use_token_fallback=true`) — uses the repository's existing
|
|
521
|
+
`NPM_TOKEN` secret via `NODE_AUTH_TOKEN`. This is the mode in use while the
|
|
522
|
+
npmjs.com trusted-publisher registration is pending.
|
|
523
|
+
|
|
524
|
+
The token mode deliberately omits `--provenance`. Provenance is an OIDC-only
|
|
525
|
+
Sigstore attestation: a token cannot mint one, and npm rejects the
|
|
526
|
+
combination. The token mode prints a NOTICE that the release carries no
|
|
527
|
+
provenance rather than passing a flag that cannot work or implying an
|
|
528
|
+
attestation exists. Both modes are fail-closed: a requested mode with no usable
|
|
529
|
+
credential exits non-zero with an actionable message, and token mode never runs
|
|
530
|
+
automatically, so a broken OIDC configuration cannot silently downgrade to the
|
|
531
|
+
long-lived credential.
|
|
532
|
+
|
|
533
|
+
### Changed
|
|
534
|
+
|
|
535
|
+
- **npm publishing is real again.** This reverses two earlier decisions, both
|
|
536
|
+
deliberate at the time and recorded here so the history is not silently erased:
|
|
537
|
+
the decision in `52717c5` to disable npm publishing (which replaced the publish
|
|
538
|
+
step with `run: echo "npm publishing is disabled; PyPI is the install path" &&
|
|
539
|
+
exit 0`), and `"private": true` in `package.json`, added by `#140` while
|
|
540
|
+
publishing was disabled. `private: true` makes `npm publish` refuse to run at
|
|
541
|
+
all, so the flag had to go before the workflow could work. The `files` allowlist
|
|
542
|
+
is retained: it is what keeps the repository (tests, CI workflows, 10k+
|
|
543
|
+
statements of Python, promo media) out of the published tarball. The npm
|
|
544
|
+
channel is on OIDC trusted publishing (`id-token: write`,
|
|
545
|
+
`npm publish --provenance`); no long-lived registry token is used on the
|
|
546
|
+
primary path.
|
|
547
|
+
|
|
548
|
+
- README shortened with **higher** coverage: the supply-chain section dropped from
|
|
549
|
+
209 lines to a 3-line summary plus a link, and "The catch" reduced to a short
|
|
550
|
+
paragraph.
|
|
551
|
+
|
|
552
|
+
- **This release carries a PyPI attestation; 2.2.0 does not.** PyPI's JSON API
|
|
553
|
+
reports zero PEP 740 attestation bundles for 2.2.0, which went out in token
|
|
554
|
+
mode — a token cannot mint a Sigstore attestation. 2.2.1 is published by
|
|
555
|
+
`release.yml` through `pypa/gh-action-pypi-publish` with Trusted Publishing
|
|
556
|
+
(OIDC), so it will carry one, as long as the `pypi` environment's trusted
|
|
557
|
+
publisher is configured — a misconfiguration fails the publish loudly rather
|
|
558
|
+
than degrading silently.
|
|
559
|
+
|
|
560
|
+
## [v2.2.0]
|
|
561
|
+
|
|
562
|
+
Security hardening of the provenance path surface: provenance manifest paths
|
|
563
|
+
are confined (`src/cds/_paths.py`), and the runtime dependency graph is guarded.
|
|
564
|
+
No numerical kernel or public API signature changed. (Content owned by the
|
|
565
|
+
security agent; this heading exists to satisfy the version-lockstep gate.)
|
|
566
|
+
|
|
567
|
+
## [v2.1.0] - 2026-09-30
|
|
568
|
+
|
|
569
|
+
Release-hardening pass covering the CI, quality-gate and packaging surface. No
|
|
570
|
+
numerical kernel, public API signature or `cds` CLI subcommand changed.
|
|
571
|
+
|
|
572
|
+
New public modules that first shipped in this release line (noted here because
|
|
573
|
+
the release notes below cover only the hardening pass): `cds.validation`
|
|
574
|
+
(cross-method verification, distribution-shift reporting), `cds.causal`
|
|
575
|
+
(assumption-gated estimators — no causal-structure inference from observational
|
|
576
|
+
correlation), `cds.sensitivity` (local and variance-based global sensitivity,
|
|
577
|
+
identifiability), `cds.units` (SI dimensional analysis), `cds.workflow`
|
|
578
|
+
(approval-gated, fail-closed orchestration), `cds.provenance` (manifests,
|
|
579
|
+
hashing, checkpoints), `cds.data_io` (streaming I/O, optional HDF5/NetCDF),
|
|
580
|
+
`cds.tools` (lazy optional-backend adapters), and `cds.uncertainty` (analytic
|
|
581
|
+
and correlated Monte-Carlo propagation).
|
|
582
|
+
|
|
583
|
+
### Fixed
|
|
584
|
+
|
|
585
|
+
- **npm launcher (`index.js`, `bin/scs.js`)**: the published launcher could not be
|
|
586
|
+
parsed by Node (`SyntaxError: Unexpected token ';'`), and had it parsed it
|
|
587
|
+
spawned `python -m scs.cli`, a module that has never existed in any release
|
|
588
|
+
(the import name is `cds`). Both defects shipped in `1.0.0` on npm and were
|
|
589
|
+
invisible because `npm test` was a placeholder that exited 1 without running
|
|
590
|
+
anything. The launcher is now syntactically valid, targets `python -m cds`,
|
|
591
|
+
propagates the child's exit status, and reports one actionable message when no
|
|
592
|
+
interpreter is found.
|
|
593
|
+
- **npm package contents**: `package.json` shipped no `files` allowlist, so a
|
|
594
|
+
publish would have uploaded the whole repository (tests, workflows, 10k+
|
|
595
|
+
statements of Python, promo media). Publication is now restricted to an
|
|
596
|
+
explicit allowlist.
|
|
597
|
+
- **npm version drift**: `package.json` declared `1.0.0` while the Python
|
|
598
|
+
distribution was at `2.1.0`. It now tracks the Python version and CI fails on
|
|
599
|
+
any drift.
|
|
600
|
+
- **Version-discipline bypass under rebase merges**
|
|
601
|
+
(`scripts/check_version_discipline.py --base-ref HEAD^1`): `HEAD^1` resolves to
|
|
602
|
+
the previous commit of the *same branch*, so in a multi-commit rebase merge only
|
|
603
|
+
the final commit's diff was inspected. A PR could change `src/cds/` in one
|
|
604
|
+
commit, follow with an unrelated commit, and pass the gate with no version bump
|
|
605
|
+
at all. The gate now diffs against the PR merge-base.
|
|
606
|
+
- **Release fail-closed behaviour**: the publish job could report success after a
|
|
607
|
+
verification step had failed. That path is closed; every verification failure
|
|
608
|
+
now fails the job before any registry or tag mutation.
|
|
609
|
+
- **Docs deployment ordering**: `deploy-docs` depended only on the `test` matrix,
|
|
610
|
+
so gh-pages could be updated from a run whose `audit`, `version_discipline` or
|
|
611
|
+
`test`-aggregate gates had failed. It now depends on the aggregate `CI` job.
|
|
612
|
+
- **sdist test-suite failure**: `tests/test_release_contract.py` reads
|
|
613
|
+
`.github/workflows/*.yml`, which the sdist `only-include` list omitted, so the
|
|
614
|
+
shipped source distribution could not pass its own test suite (13 failures).
|
|
615
|
+
The CI workflow files are now part of the sdist.
|
|
616
|
+
|
|
617
|
+
### Added
|
|
618
|
+
|
|
619
|
+
- **`npm test` contract suite** (`npm.test.js`): assertions covering
|
|
620
|
+
`node --check` parseability, the `cds` module target, argument forwarding, exit
|
|
621
|
+
status propagation, the `files` allowlist, npm/Python version agreement, and a
|
|
622
|
+
guard that `npm-publish.yml` stays a disabled no-op. CI runs `npm run check`
|
|
623
|
+
and `npm test` on every push and pull request; **nothing in CI publishes to
|
|
624
|
+
a registry**.
|
|
625
|
+
- **`scripts/check_version_lockstep.py`**: machine-enforced agreement across
|
|
626
|
+
`pyproject.toml`, `package.json`, `src/cds/_version.py`, `CITATION.cff`, the
|
|
627
|
+
runtime `cds.__version__` import, `CHANGELOG.md` and -- with `--dist-dir` --
|
|
628
|
+
the built wheel and sdist metadata. `2.1.0` had shipped to PyPI with no
|
|
629
|
+
`CHANGELOG.md` entry; that class of drift is now a red build.
|
|
630
|
+
- **Wheel/sdist content assertions in CI**: the packaging job now asserts the
|
|
631
|
+
exact filename, distribution name, version, `py.typed` marker, sdist root
|
|
632
|
+
directory and the absence of forbidden paths (test fixtures, promo media,
|
|
633
|
+
`.github`, `site/`) rather than building artifacts and trusting them.
|
|
634
|
+
- **Timeouts on every CI job** and per-job least-privilege `permissions:`.
|
|
635
|
+
|
|
636
|
+
### Changed
|
|
637
|
+
|
|
638
|
+
- All GitHub Actions references are pinned to full immutable commit SHAs;
|
|
639
|
+
previously several workflows used mutable `@v4` / `@v7` / `@v8` tags.
|
|
640
|
+
- Branch ruleset for `main` extended in place (not replaced) to require the
|
|
641
|
+
aggregate `CI` check plus the `Installed CLI Smoke`, version-discipline,
|
|
642
|
+
packaging and npm contract jobs, and to dismiss stale reviews on push.
|
|
643
|
+
- npm publishing stays disabled per product decision ("npm is no longer
|
|
644
|
+
published"; `npm-publish.yml` is a deliberate no-op). `package.json` is marked
|
|
645
|
+
`private`, the npm contract test asserts the workflow stays a no-op, and
|
|
646
|
+
nothing in CI uploads to a registry.
|
|
647
|
+
- Removed the dead workflow files that main did not already remove:
|
|
648
|
+
`wsl-science-runner-smoke.yml` (targeted a self-hosted runner label with zero
|
|
649
|
+
registered runners). The retired `public-external-validation-p08-*` experiment
|
|
650
|
+
workflows and the one-shot `p08-cancel-noncanonical-runs.yml` /
|
|
651
|
+
`tmp-compassion-raw-acquire.yml` jobs were deleted on `main` directly and are
|
|
652
|
+
kept deleted here.
|
|
653
|
+
|
|
654
|
+
## [v2.0.1] - 2026-09-29
|
|
655
|
+
|
|
656
|
+
Metadata-only patch release for improved PyPI discoverability. No runtime API or numerical behavior changes.
|
|
657
|
+
|
|
658
|
+
### Changed
|
|
659
|
+
|
|
660
|
+
- Expanded PyPI keywords and classifiers for reproducibility, uncertainty quantification, sensitivity analysis, dimensional analysis, scientific workflows, ODE/PDE, and related scientific-computing searches.
|
|
661
|
+
- Refreshed development lock versions required by the current security audit.
|
|
662
|
+
- Normalized repository trailing whitespace required by pre-commit.
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
### Added
|
|
666
|
+
|
|
667
|
+
- **Random Forest classifier** (`cds.ml`): bagged CART trees with
|
|
668
|
+
bootstrap resampling and per-split feature randomization (`sqrt`/`log2`
|
|
669
|
+
/ explicit count), fully deterministic under a seed.
|
|
670
|
+
- **Metrics** (`cds.ml`): `accuracy`, `confusion_matrix`,
|
|
671
|
+
`precision_recall_f1`, `macro_prf`, regression `mse`/`mae`/`r2_score`,
|
|
672
|
+
and tie-aware rank-based `roc_auc`.
|
|
673
|
+
- **Cross-validation** (`cds.ml.model_selection`): `k_fold_indices` and
|
|
674
|
+
`cross_val_score` over the shared estimator interface.
|
|
675
|
+
- **Interpolation module** (`cds.interpolate`): `interp1d` (linear /
|
|
676
|
+
nearest) and `interp2d` (bilinear on regular grids).
|
|
677
|
+
- **SVD** (`cds.math_utils`): one-sided Jacobi decomposition with
|
|
678
|
+
`svd`, `rank` and `condition_number`; full U/Vt factors.
|
|
679
|
+
- **STFT / spectrogram** (`cds.signals`): Hann/Hamming windows, framed
|
|
680
|
+
zero-padded transforms reusing the radix-2 FFT, `STFTResult`.
|
|
681
|
+
- **Gradient Boosting classifier** (`cds.ml`): logistic-loss boosted
|
|
682
|
+
regression trees with Newton leaf values; binary labels.
|
|
683
|
+
- **Bootstrap confidence intervals** (`cds.stats`): percentile-method
|
|
684
|
+
`bootstrap_ci` and two-sample `bootstrap_diff_ci`.
|
|
685
|
+
- **Metropolis-Hastings sampler** (`cds.montecarlo`): 1-D random-walk
|
|
686
|
+
MCMC with burn-in/thinning and acceptance-rate reporting.
|
|
687
|
+
- **Symplectic integrators** (`cds.diffeq`): semi-implicit Euler and
|
|
688
|
+
velocity Verlet with forward/backward integration.
|
|
689
|
+
- **Constrained optimization** (`cds.optimization`): projected gradient
|
|
690
|
+
descent for box bounds and quadratic-penalty constrained solves.
|
|
691
|
+
- **Hypergeometric & negative-binomial distributions**
|
|
692
|
+
(`cds.probability`), pmf + cdf for both.
|
|
693
|
+
- **TF-IDF ranked retrieval** (`cds.knowledge`): `rank_tfidf` across
|
|
694
|
+
concepts and notes with smoothed idf.
|
|
695
|
+
- **Haar wavelet transform** (`cds.signals`): `dwt` / `idwt` /
|
|
696
|
+
`dwt_multi_level`, orthonormal with perfect reconstruction.
|
|
697
|
+
- **PDE solvers** (`cds.pde`): explicit FTCS heat equation (Dirichlet /
|
|
698
|
+
Neumann, stability-guarded) and wave equation (CFL-guarded).
|
|
699
|
+
- **Gaussian Naive Bayes** (`cds.ml`): log-space scoring with variance
|
|
700
|
+
smoothing.
|
|
701
|
+
- **Correlation-mining engine** (`cds.hypothesis`): `mine_correlations`
|
|
702
|
+
turns numeric datasets into statistically tested, falsifiable
|
|
703
|
+
`Hypothesis` objects.
|
|
704
|
+
- **Power analysis** (`cds.stats`): `power_t_test`,
|
|
705
|
+
`power_proportion_test` and `required_n_per_group` sample-size solver.
|
|
706
|
+
- **VotingClassifier** (`cds.ml`): hard (majority vote) and soft
|
|
707
|
+
(averaged probabilities) ensembles over the shared estimator interface.
|
|
708
|
+
- Four new runnable demos under `examples/`: interpolation, PDE,
|
|
709
|
+
ensemble showcase and the end-to-end discovery pipeline.
|
|
710
|
+
- **PCA end-to-end demo** (`examples/pca_demo.py`): scaling vs raw
|
|
711
|
+
variance comparison, component selection, 2-D ASCII projection,
|
|
712
|
+
reconstruction error and train/test discipline, with a matching
|
|
713
|
+
tutorial (`docs/tutorials/pca_demo.md`).
|
|
714
|
+
- **ML correctness reference table** (`scripts/verify_ml_reference.py`,
|
|
715
|
+
`docs/ml_reference.md`), LogisticRegression, DecisionTree, KMeans,
|
|
716
|
+
PCA and LinearRegression checked against scikit-learn 1.9.0 outputs
|
|
717
|
+
on a fixed seeded dataset; one-command, dependency-free verification.
|
|
718
|
+
|
|
719
|
+
### Changed
|
|
720
|
+
|
|
721
|
+
- `DecisionTreeClassifier` now accepts `max_features` and `seed` for
|
|
722
|
+
random-forest-style split randomization (default behavior unchanged).
|
|
723
|
+
- The README now displays the sklearn-parity badge and links the ML
|
|
724
|
+
Reference table. (The matching `ml-reference` CI job is prepared but
|
|
725
|
+
not yet applied. It needs a push from a token with the `workflow`
|
|
726
|
+
OAuth scope; see the `backup/pre-reorder` branch.)
|
|
727
|
+
|
|
728
|
+
## [v2.0.0] - 2026-09-05
|
|
729
|
+
|
|
730
|
+
Scientific workflow platform release. Reorganises the project from a numerical
|
|
731
|
+
methods library into a layered system that separates computation, analysis,
|
|
732
|
+
scientific assurance, orchestration, and data handling.
|
|
733
|
+
|
|
734
|
+
### Added
|
|
735
|
+
|
|
736
|
+
- Uncertainty propagation, provenance capture, and tool discovery.
|
|
737
|
+
- Dimensional analysis, domain checks, and scalable data I/O.
|
|
738
|
+
- Scientific adapters, sensitivity analysis, and tool orchestration.
|
|
739
|
+
- CLI catalog refreshed for the expanded module set.
|
|
740
|
+
|
|
741
|
+
### Changed
|
|
742
|
+
|
|
743
|
+
- The project is organised into explicit layers (compute / analysis /
|
|
744
|
+
assurance / orchestration / data) with dependencies pointing downward.
|
|
745
|
+
- Release pipeline enforces a single publish authority.
|
|
746
|
+
|
|
747
|
+
## [v1.6.2] - 2026-08-23
|
|
748
|
+
|
|
749
|
+
Patch release carrying the PyPI deprecation tombstone for the former
|
|
750
|
+
`cognitive-discovery-system` distribution name, pointing users at
|
|
751
|
+
`scientific-computing-system`. No API change; the import name stayed `cds`.
|
|
752
|
+
|
|
753
|
+
## [v1.6.1] - 2026-08-21
|
|
754
|
+
|
|
755
|
+
A **patch** release completing the JSON round trip for core data models.
|
|
756
|
+
|
|
757
|
+
### Added
|
|
758
|
+
|
|
759
|
+
- **`cds.core`**: `Hypothesis.from_dict()`: the inverse of `to_dict()`.
|
|
760
|
+
CLI/JSON output can now be re-imported: enum strings are coerced back to
|
|
761
|
+
`Domain` / `HypothesisStatus`, ISO-8601 timestamps are parsed, and missing
|
|
762
|
+
optional keys fall back to constructor defaults. Invalid `status` values
|
|
763
|
+
raise `ValueError`.
|
|
764
|
+
|
|
765
|
+
### Changed
|
|
766
|
+
|
|
767
|
+
- Internal layering cleanup: shared special-function kernels moved to their
|
|
768
|
+
single home (`cds.math_utils.special`) so lower-level packages never depend
|
|
769
|
+
on higher-level ones; a suite-level import-direction guard enforces this.
|
|
770
|
+
- `cds.cli` is now a package (`_style` / `_handlers` / `_parser`) with
|
|
771
|
+
identical behaviour; refreshed module descriptions in `cds modules`.
|
|
772
|
+
|
|
773
|
+
## [v1.6.0] - 2026-08-21
|
|
774
|
+
|
|
775
|
+
A **minor** release deepening the ML, probability, ODE, and optimization
|
|
776
|
+
toolkits toward scikit-learn / SciPy teaching parity, still zero runtime
|
|
777
|
+
dependencies, still 100% blended coverage.
|
|
778
|
+
|
|
779
|
+
### Added
|
|
780
|
+
|
|
781
|
+
- **`cds.ml`**: `KNeighborsClassifier` / `KNeighborsRegressor` (brute-force,
|
|
782
|
+
deterministic tie-breaking), `KMeans` (k-means++ seeding, seeded),
|
|
783
|
+
`DecisionTreeClassifier` (CART + Gini), `LogisticRegression` (stable-BCE
|
|
784
|
+
gradient descent, optional L2), `LinearRegression` (closed-form vector OLS
|
|
785
|
+
via normal equations), `PCA` (cyclic Jacobi eigen-solver, transform /
|
|
786
|
+
inverse_transform), `StandardScaler`, `train_test_split` (seeded)
|
|
787
|
+
- **`cds.probability`**: chi-square and Student-t distributions
|
|
788
|
+
(`chi2_pdf/cdf/ppf`, `t_pdf/cdf/ppf`), `gamma_pdf` + `sample_gamma`
|
|
789
|
+
(Marsaglia–Tsang with shape<1 boost), `beta_pdf` + `sample_beta`
|
|
790
|
+
(exact gamma-ratio identity)
|
|
791
|
+
- **`cds.diffeq`**: implicit stiff solvers: `backward_euler`,
|
|
792
|
+
`trapezoid_method` (Crank–Nicolson) and their `_system` variants; unified
|
|
793
|
+
θ-method core with Newton iteration over analytic or central-difference
|
|
794
|
+
Jacobians via the shared PLU solver
|
|
795
|
+
- **`cds.optimization`**: `nelder_mead` simplex (degenerate-simplex and
|
|
796
|
+
symmetric false-convergence guards), `simulated_annealing` (Metropolis rule,
|
|
797
|
+
box bounds, seeded)
|
|
798
|
+
- **`cds.stats`**: nonparametric tests: `mann_whitney_u` and
|
|
799
|
+
`wilcoxon_signed_rank` with tie/zero corrections (normal approximation)
|
|
800
|
+
|
|
801
|
+
### Fixed
|
|
802
|
+
|
|
803
|
+
- Test-suite pyplot figures are now closed per test, silencing matplotlib's
|
|
804
|
+
"more than 20 figures" memory warning in long sessions
|
|
805
|
+
|
|
806
|
+
### Changed
|
|
807
|
+
|
|
808
|
+
- README "Why CDS?" pitch strengthened with proof numbers and a cross-domain
|
|
809
|
+
snippet; stale counts/versions synced across metadata (19 modules)
|
|
810
|
+
|
|
811
|
+
## [v1.5.0] - 2026-07-20
|
|
812
|
+
|
|
813
|
+
A **minor** release expanding algorithms across graph theory, Monte Carlo,
|
|
814
|
+
linear algebra, and CLI, still zero runtime dependencies.
|
|
815
|
+
|
|
816
|
+
### Added
|
|
817
|
+
|
|
818
|
+
- **`cds.graph`**: `degree`, `connected_components`, `bellman_ford`,
|
|
819
|
+
`floyd_warshall`, `prim_mst`
|
|
820
|
+
- **`cds.montecarlo`**: `mc_expectation`, `hit_or_miss` (2-D area estimation)
|
|
821
|
+
- **`cds.math_utils`**: `vector_norm`, `frobenius_norm`, `matrix_trace`
|
|
822
|
+
- **CLI**: `cds integrate <sin|cos|exp|x2|unit> --a --b -n --method`
|
|
823
|
+
|
|
824
|
+
## [v1.4.0] - 2026-07-20
|
|
825
|
+
|
|
826
|
+
A **minor** release expanding core scientific APIs and CLI ergonomics.
|
|
827
|
+
Zero runtime dependencies preserved.
|
|
828
|
+
|
|
829
|
+
### Added
|
|
830
|
+
|
|
831
|
+
- **`cds.probability`**: CDFs (`gaussian_cdf`, `uniform_cdf`, `exponential_cdf`),
|
|
832
|
+
`geometric_pmf`, samplers (`gaussian_sample` Box–Muller, `exponential_sample`,
|
|
833
|
+
`poisson_sample` Knuth)
|
|
834
|
+
- **`cds.stats`**: `spearman_correlation` (midranks), `percentile`, `z_scores`
|
|
835
|
+
- **`cds.scientific`**: constants `epsilon_0`, `g`, `mu_0`; formulas
|
|
836
|
+
`coulomb_force`, `centripetal_acceleration`, `pendulum_period`, `doppler_frequency`
|
|
837
|
+
- **CLI**: `cds stats <nums>`, `cds sample <dist> -n N --seed …`
|
|
838
|
+
|
|
839
|
+
### Changed
|
|
840
|
+
|
|
841
|
+
- `cds info` no longer hardcodes a stale test count; module list includes modeling/knowledge/nlp
|
|
842
|
+
|
|
843
|
+
## [v1.3.2] - 2026-07-20
|
|
844
|
+
|
|
845
|
+
A **patch** release expanding the optional ``cds[plot]`` surface.
|
|
846
|
+
|
|
847
|
+
### Added
|
|
848
|
+
|
|
849
|
+
- **`cds.plot` charts**: `plot_multi_series`, `plot_scatter`, `plot_regression`
|
|
850
|
+
(OLS via `cds.stats`), `plot_power_spectrum` (via `cds.signals`),
|
|
851
|
+
`plot_seasonal_decompose` (4-panel), `plot_heatmap`, `plot_loss`,
|
|
852
|
+
`save_figure(..., close=)` helper; histogram gains ``density=``
|
|
853
|
+
- **CLI**: `cds plot … --kind series|hist|acf --file out.png`
|
|
854
|
+
|
|
855
|
+
### Changed
|
|
856
|
+
|
|
857
|
+
- Docs / Cookbook / demo updated for the expanded plot API
|
|
858
|
+
|
|
859
|
+
## [v1.3.1] - 2026-07-20
|
|
860
|
+
|
|
861
|
+
A **patch** release. Fixes the console entry point so `cds` works after a
|
|
862
|
+
plain PyPI install.
|
|
863
|
+
|
|
864
|
+
### Fixed
|
|
865
|
+
|
|
866
|
+
- **`[project.scripts]`**: entry point was `cds.cli:app` but the CLI exports
|
|
867
|
+
`main` (argparse). Installing from PyPI then raised
|
|
868
|
+
`ImportError: cannot import name 'app' from 'cds.cli'`. Now points to
|
|
869
|
+
`cds.cli:main`. `python -m cds` was already correct.
|
|
870
|
+
|
|
871
|
+
## [v1.3.0] - 2026-07-20
|
|
872
|
+
|
|
873
|
+
A **minor** release focused on **visualization and ergonomics**. Adds the
|
|
874
|
+
optional ``cds[plot]`` matplotlib extra, a CLI PNG export path, a companion
|
|
875
|
+
notebook, and documentation. The zero-dependency core is unchanged: matplotlib
|
|
876
|
+
is only imported when a plot function runs (or when ``cds plot --file`` is
|
|
877
|
+
used).
|
|
878
|
+
|
|
879
|
+
### Added
|
|
880
|
+
|
|
881
|
+
- **`cds.plot` optional package** (`src/cds/plot/`):
|
|
882
|
+
- `plot_series`, `plot_histogram`, `plot_waveform`, `plot_spectrum`
|
|
883
|
+
- `plot_acf` / PACF stems via `cds.stats` time-series helpers
|
|
884
|
+
- `plot_optimization_path` for 2-D optimizer trajectories
|
|
885
|
+
- Lazy matplotlib backend with install-hint `ImportError`
|
|
886
|
+
- **Extra**: `pip install scientific-computing-system[plot]` (also in `[all]`)
|
|
887
|
+
- **CLI**: `cds plot 1,2,3 --file out.png` saves a PNG when matplotlib is
|
|
888
|
+
installed; without `--file` the existing ASCII terminal plot remains
|
|
889
|
+
- **Examples**: `examples/plot_demo.py`, `examples/plotting_notebook.ipynb`
|
|
890
|
+
- **Docs**: Cookbook matplotlib section, API reference for `cds.plot`, README /
|
|
891
|
+
module tables, ROADMAP v1.3.0 track
|
|
892
|
+
|
|
893
|
+
### Changed
|
|
894
|
+
|
|
895
|
+
- CI main matrix installs `.[pandas,plot]` so optional bridges stay at 100%
|
|
896
|
+
coverage; minimal-deps job omits `cds/plot/*` like `pandas_io`
|
|
897
|
+
- PyPI description mentions optional matplotlib plotting
|
|
898
|
+
|
|
899
|
+
## [v1.2.3] - 2026-06-29
|
|
900
|
+
|
|
901
|
+
A **patch** release. Fixes the release pipeline that silently broke every
|
|
902
|
+
publish since v1.1.8.
|
|
903
|
+
|
|
904
|
+
### Fixed
|
|
905
|
+
|
|
906
|
+
- **Release workflow (`release.yml`)**: removed an invalid
|
|
907
|
+
`administration: write` entry from the `sync-about` job's `permissions:`
|
|
908
|
+
block. `administration` is not a valid `permissions:` key, so GitHub
|
|
909
|
+
rejected the entire workflow file as a "workflow file issue" before any
|
|
910
|
+
job could start, failing in 0s and leaving v1.1.9 onward without a PyPI
|
|
911
|
+
upload or GitHub Release. The About-sync step is now best-effort
|
|
912
|
+
(`continue-on-error: true`) since `gh repo edit` needs an admin REST
|
|
913
|
+
scope the default `GITHUB_TOKEN` can't grant; the repo description is
|
|
914
|
+
synced by hand on release.
|
|
915
|
+
|
|
916
|
+
## [v1.2.2] - 2026-06-29
|
|
917
|
+
|
|
918
|
+
A **patch** release. No code changes. Documentation-only refresh.
|
|
919
|
+
|
|
920
|
+
### Changed
|
|
921
|
+
|
|
922
|
+
- **README: removed pictographic emoji** from the top navigation row, the
|
|
923
|
+
callout blocks, the "Support the project" section heading, and the trailing
|
|
924
|
+
sign-off. Em dashes are preserved. Brings the README in line with the
|
|
925
|
+
emoji-free house style already applied to the docs and live PR bodies.
|
|
926
|
+
- **`.gitignore`: ignore local promo-GIF QA scratch** (audit/compare/measure
|
|
927
|
+
scripts under `scripts/_*.py` and extracted frames under `assets/_qa_*/`),
|
|
928
|
+
which are one-off diagnostic tooling and were never meant to ship.
|
|
929
|
+
|
|
930
|
+
## [v1.2.1] - 2026-06-28
|
|
931
|
+
|
|
932
|
+
A **patch** release. No code changes. Metadata-only refresh to improve
|
|
933
|
+
PyPI discoverability.
|
|
934
|
+
|
|
935
|
+
### Changed
|
|
936
|
+
|
|
937
|
+
- **Strengthened PyPI `description`**: the short one-liner now names all 18
|
|
938
|
+
domain modules (quantum circuits, ML, NLP, signal processing, optimization,
|
|
939
|
+
statistics & time-series, ODE solvers, Monte Carlo, symbolic math, knowledge
|
|
940
|
+
graphs, hypothesis generation) and states the zero-runtime-dependency
|
|
941
|
+
guarantee. Improves search-result relevance on PyPI.
|
|
942
|
+
- **Expanded `keywords`** from 12 to 20 entries, aligning them with the GitHub
|
|
943
|
+
repository topics (added `machine-learning`, `nlp`, `numerical-integration`,
|
|
944
|
+
`knowledge-graph`, `symbolic-math`, `data-analysis`, `physics`,
|
|
945
|
+
`hypothesis-generation`, `numerical-methods`; dropped the redundant `fft`
|
|
946
|
+
in favour of the broader `signal-processing`).
|
|
947
|
+
|
|
948
|
+
## [v1.2.0] - 2026-06-25
|
|
949
|
+
|
|
950
|
+
A **minor** release. The theme is **horizontal expansion + hardening**: three
|
|
951
|
+
new domain features (time-series analysis, signal-filter design, 2-D
|
|
952
|
+
quadrature), an optional pandas interop extra, and a documentation overhaul
|
|
953
|
+
(Cookbook, Architecture guide, expanded Tour). Plus numerical-stability fixes
|
|
954
|
+
and a no-behavior-change refactor of the two largest source files.
|
|
955
|
+
|
|
956
|
+
No existing public API is removed or renamed; the `cds[pandas]` adapter is
|
|
957
|
+
gated behind an optional extra so the zero-dependency core is untouched.
|
|
958
|
+
|
|
959
|
+
### Added
|
|
960
|
+
|
|
961
|
+
- **`cds.stats`: time-series analysis** (`src/cds/stats/time_series.py`):
|
|
962
|
+
- `moving_average`, `exponential_smoothing`, `difference`, `seasonal_decompose`
|
|
963
|
+
- `autocorrelation_function` (sample ACF), `partial_autocorrelation_function` (PACF)
|
|
964
|
+
- `kpss_statistic` (stationarity test) and `ljung_box` (autocorrelation test),
|
|
965
|
+
both returning result objects with `.statistic` / `.p_value`
|
|
966
|
+
- Exported from the top-level `cds.stats` namespace.
|
|
967
|
+
- **`cds.signals`: filter design** (`src/cds/signals/filters.py`):
|
|
968
|
+
- `butter_lowpass(order, cutoff)`: Butterworth IIR low-pass coefficient design
|
|
969
|
+
- `apply_filter(signal, coeffs)`: direct-form IIR application
|
|
970
|
+
- `moving_median(signal, window)`: order-statistic denoiser (edge-preserving)
|
|
971
|
+
- **`cds.numerical_integration`: 2-D quadrature** (`src/cds/numerical_integration/`):
|
|
972
|
+
- `simpson_2d(f, ax, bx, ay, by, nx, ny)`: 2-D tensor-product Simpson rule
|
|
973
|
+
- `gaussian_quadrature_2d(f, ax, bx, ay, by, n)`: 2-D tensor-product Gauss-Legendre
|
|
974
|
+
- **`cds[pandas]` optional extra** (`src/cds/data_analysis/pandas_io.py`):
|
|
975
|
+
- `to_dataframe(data_set)` / `from_dataframe(df)` round-trip a `DataSet` to/from
|
|
976
|
+
a `pandas.DataFrame`, guarded so importing `cds` never requires pandas.
|
|
977
|
+
- Declared as an optional dependency in `pyproject.toml` (`pandas = {version = ...}`).
|
|
978
|
+
- **Documentation**:
|
|
979
|
+
- **`docs/cookbook.md`**: a new problem-oriented recipe book (~48 recipes, one
|
|
980
|
+
per concrete task), verified end-to-end against the real API by
|
|
981
|
+
`_verify_cookbook.py`.
|
|
982
|
+
- **`docs/ARCHITECTURE.md`**: layered module dependency graph and data flow.
|
|
983
|
+
- **Tour of Numerical Methods** expanded with 2-D quadrature, time-series, and
|
|
984
|
+
filter-design stops.
|
|
985
|
+
- `docs/index.md` Quick Navigation now links the Cookbook, Tour, and Architecture.
|
|
986
|
+
|
|
987
|
+
### Changed
|
|
988
|
+
|
|
989
|
+
- **`cds.modeling` refactor**: `expression.py` (708 lines) split into
|
|
990
|
+
`_base.py` (AST base classes, visitors) and `_nodes.py` (operator/leaf node
|
|
991
|
+
types). Pure reorganization; no public symbols moved or renamed.
|
|
992
|
+
- **`cds.stats` refactor**: distribution functions (normal/t/chi²/F CDFs and
|
|
993
|
+
inverses) extracted from `hypothesis_tests.py` into the private
|
|
994
|
+
`_distributions.py`, with `__all__` declared so the re-exports pass
|
|
995
|
+
`mypy --strict`.
|
|
996
|
+
|
|
997
|
+
### Fixed
|
|
998
|
+
|
|
999
|
+
- **`cds.math_utils.linalg`: numerical stability of pivoting.** Pivoting now
|
|
1000
|
+
uses a scale-relative threshold (`max(|row|) * epsilon`) instead of a fixed
|
|
1001
|
+
absolute epsilon, and rejects exact-zero pivots at sub-normal matrix scales.
|
|
1002
|
+
Prevents spurious singular-matrix errors and mis-pivoting on
|
|
1003
|
+
small-magnitude matrices. No change to well-scaled inputs.
|
|
1004
|
+
- **`cds.stats`**: `__all__` declared so the `_distributions` re-exports are
|
|
1005
|
+
recognized as intentional public surface under `mypy --strict`.
|
|
1006
|
+
- **Tests**: stabilized a flaky mean-homogeneity property test by anchoring on
|
|
1007
|
+
an absolute tolerance instead of a relative one.
|
|
1008
|
+
|
|
1009
|
+
## [v1.1.9] - 2026-06-24
|
|
1010
|
+
|
|
1011
|
+
### Minor — effect-size measures for the statistics & hypothesis stack
|
|
1012
|
+
|
|
1013
|
+
A backward-compatible feature release. Adds standardized **effect-size**
|
|
1014
|
+
measures to `cds.stats` so users can report the *magnitude* of an effect
|
|
1015
|
+
alongside its significance, closing the long-standing gap where a
|
|
1016
|
+
hypothesis test answered *"is there an effect?"* but not *"how large?"*.
|
|
1017
|
+
No existing API or behavior changes; all prior tests remain green.
|
|
1018
|
+
|
|
1019
|
+
### Added
|
|
1020
|
+
|
|
1021
|
+
- **`cds.stats`: effect-size measures** (`src/cds/stats/hypothesis_tests.py`):
|
|
1022
|
+
- `cohens_d(group_a, group_b)`: Cohen's *d* standardized mean difference
|
|
1023
|
+
between two samples (pooled-SD denominator).
|
|
1024
|
+
- `eta_squared_from_f(f, df1, df2)`: η² proportion of variance explained
|
|
1025
|
+
by group membership, derived from a one-way ANOVA *F* statistic.
|
|
1026
|
+
- `cramers_v(contingency_table)`: Cramér's *V* association strength for
|
|
1027
|
+
an *r* × *c* contingency table (χ²-based, normalized to `[0, 1]`).
|
|
1028
|
+
All three functions are exported from the top-level `cds.stats` namespace and
|
|
1029
|
+
documented in the tutorial (`docs/tutorials/hypothesis_tests_demo.md`).
|
|
1030
|
+
- **Tutorial section**: *"Effect sizes"* walkthrough in
|
|
1031
|
+
`hypothesis_tests_demo.md` showing how `cohens_d` / `cramers_v` pair with
|
|
1032
|
+
the existing `t_test` / `chi_square_independence` tests.
|
|
1033
|
+
- **Getting-started snippets** (EN + TR) and `docs/index.md` now surface the
|
|
1034
|
+
effect-size functions in the Python-API quick-start and module table.
|
|
1035
|
+
|
|
1036
|
+
### Documentation
|
|
1037
|
+
|
|
1038
|
+
- README module table, `docs/index.md` Key Features & module description,
|
|
1039
|
+
and the EN/TR getting-started guides now mention effect-size support.
|
|
1040
|
+
|
|
1041
|
+
## [v1.1.8] - 2026-06-21
|
|
1042
|
+
|
|
1043
|
+
### Patch — ODE backward integration bug fix
|
|
1044
|
+
|
|
1045
|
+
A user-facing **bug-fix release**. Forward integration is byte-identical
|
|
1046
|
+
to v1.1.7; only the previously-broken `t_end < t0` case changes behavior.
|
|
1047
|
+
Includes corrected deep-verification scripts and a docs sync, no new
|
|
1048
|
+
modules, no API additions.
|
|
1049
|
+
|
|
1050
|
+
### Fixed
|
|
1051
|
+
|
|
1052
|
+
- **`diffeq.solvers`: backward integration silently returned only the
|
|
1053
|
+
initial value.** The fixed-step (`euler`, `rk4`, `midpoint`) and
|
|
1054
|
+
adaptive (`rk45`) ODE solvers, plus `solve_system`, used a forward-only
|
|
1055
|
+
loop guard `while t < t_end - LOOP_EPSILON`. When `t_end < t0` the
|
|
1056
|
+
guard was immediately `False`, so the solvers did nothing and returned
|
|
1057
|
+
only `y0`. The integration direction is now derived from
|
|
1058
|
+
`copysign(1.0, t_end - t0)` and applied as
|
|
1059
|
+
`direction * min(dt, abs(t_end - t0))`; `dt` stays an unambiguous
|
|
1060
|
+
positive magnitude and the loop guard becomes
|
|
1061
|
+
`(t_end - t) * direction > LOOP_EPSILON`. A zero-length span
|
|
1062
|
+
(`t_end == t0`) still skips the loop because `copysign(1, 0) == +1`.
|
|
1063
|
+
For `rk45`, step size is tracked as an always-positive `h_mag` so the
|
|
1064
|
+
shrink/grow/snap logic keeps its forward semantics in either direction.
|
|
1065
|
+
7 new `TestBackwardIntegration` regression tests cover all five
|
|
1066
|
+
solvers.
|
|
1067
|
+
|
|
1068
|
+
- **`hypothesis.generator`: confidence overflow past `n >= 12`.** The
|
|
1069
|
+
generated-confidence formula `0.45 + i*0.05` overflowed the
|
|
1070
|
+
`Hypothesis.confidence` `le=1.0` constraint for 12+ hypotheses,
|
|
1071
|
+
raising `ValidationError`. Now clamped to `min(0.9, 0.4 + i*0.05)`.
|
|
1072
|
+
|
|
1073
|
+
### Changed (verification tooling)
|
|
1074
|
+
|
|
1075
|
+
- **`scripts/verify_d1_numerics.py`, `verify_d2_edge_cases.py`,
|
|
1076
|
+
`verify_d4_hypothesis.py`**, stale reference values/thresholds that
|
|
1077
|
+
produced spurious failures against correct code: D1.3 Romberg
|
|
1078
|
+
monotone-decrease check only asserted above `1e-13`; D1.4 RK45
|
|
1079
|
+
singularity now uses `t_end=2.0` (past the pole) so `RuntimeError` is
|
|
1080
|
+
genuinely triggered; D1.7/D1.2 odd-degree Gauss-Legendre exact
|
|
1081
|
+
integral corrected to `0`; Simpson `O(h^4)` thresholds loosened to
|
|
1082
|
+
match the method's order; D4.2 confidence expectation updated to the
|
|
1083
|
+
clamped formula. All three scripts now report **0 failures**.
|
|
1084
|
+
|
|
1085
|
+
### Documentation
|
|
1086
|
+
|
|
1087
|
+
- README "recent improvements" → v1.1.8 ODE fix entry; ROADMAP marks
|
|
1088
|
+
hatch-vcs / git-cliff as tried-and-abandoned with the real rollback
|
|
1089
|
+
reasons; SECURITY supported-versions refresh; dashboard UX
|
|
1090
|
+
touch-ups; nav/cross-ref drift. **No code or behavior changes.**
|
|
1091
|
+
|
|
1092
|
+
## [v1.1.7] - 2026-06-20
|
|
1093
|
+
|
|
1094
|
+
### Patch — PEP 639 SPDX license metadata
|
|
1095
|
+
|
|
1096
|
+
A maintenance release with **no API or behavior changes**. Standardizes
|
|
1097
|
+
the license declaration so it is recognized as a valid SPDX identifier
|
|
1098
|
+
both on PyPI and in package metadata, and removes drift-prone
|
|
1099
|
+
hardcoded numbers from the README.
|
|
1100
|
+
|
|
1101
|
+
### Changed
|
|
1102
|
+
|
|
1103
|
+
- **`pyproject.toml`**: adopted [PEP 639](https://peps.python.org/pep-0639/):
|
|
1104
|
+
replaced the legacy `license = {text = "MIT"}` table form with the
|
|
1105
|
+
SPDX `license = "MIT"` expression plus `license-files = ["LICENSE"]`.
|
|
1106
|
+
The wheel/sdist METADATA now emit `License-Expression: MIT` and
|
|
1107
|
+
`License-File: LICENSE`, which PyPI and GitHub recognize as a valid
|
|
1108
|
+
SPDX id (the old table form was not parsed, so the license read as
|
|
1109
|
+
unrecognized). Removed the now-redundant `License :: OSI Approved ::
|
|
1110
|
+
MIT License` classifier (deprecated under PEP 639; would trigger a
|
|
1111
|
+
metadata warning).
|
|
1112
|
+
|
|
1113
|
+
### Documentation
|
|
1114
|
+
|
|
1115
|
+
- **`README.md`**: removed hardcoded, drift-prone numbers (version
|
|
1116
|
+
tag, test count, module count) in favor of the existing PyPI / CI /
|
|
1117
|
+
codecov badges, so the docs no longer go stale between releases.
|
|
1118
|
+
|
|
1119
|
+
## [v1.1.6] - 2026-06-20
|
|
1120
|
+
|
|
1121
|
+
### Patch — release pipeline fix (OIDC → scoped API token)
|
|
1122
|
+
|
|
1123
|
+
A maintenance release with **no API or behavior changes**. Fixes the
|
|
1124
|
+
broken automated release pipeline: the previous Trusted Publishing (OIDC)
|
|
1125
|
+
path required a PyPI publisher configuration that was never set up, so
|
|
1126
|
+
the v1.1.5 tag push failed at the upload step with an `invalid-publisher`
|
|
1127
|
+
error. The pipeline now uses a scoped **PyPI API token** (stored as the
|
|
1128
|
+
`PYPI_API_TOKEN` repo secret), which is the sole publish authority.
|
|
1129
|
+
|
|
1130
|
+
This is the first release actually published by the automated pipeline,
|
|
1131
|
+
v1.1.4 and v1.1.5 were uploaded manually before the pipeline existed.
|
|
1132
|
+
|
|
1133
|
+
### Changed
|
|
1134
|
+
|
|
1135
|
+
- **`release.yml`**: removed the `id-token: write` permission and the
|
|
1136
|
+
Trusted Publishing path; publishes via `pypa/gh-action-pypi-publish`
|
|
1137
|
+
with `password: ${{ secrets.PYPI_API_TOKEN }}`. The workflow now also
|
|
1138
|
+
creates the GitHub Release (previously done by the local script).
|
|
1139
|
+
- **`scripts/publish.py`**: no longer uploads to PyPI or creates the
|
|
1140
|
+
GitHub release. It now builds, verified the built version against the
|
|
1141
|
+
tag, runs tests, and pushes the tag (which triggers CI). Removed the
|
|
1142
|
+
`--skip-release` flag and the local `~/.pypi-token` handling.
|
|
1143
|
+
- **`pyproject.toml`**: dropped `twine` from the `[all]` and `[dev]`
|
|
1144
|
+
extras (no longer needed locally).
|
|
1145
|
+
- **Version bump `1.1.5` → `1.1.6`** in `pyproject.toml`,
|
|
1146
|
+
`src/cds/_version.py`, and `CITATION.cff`.
|
|
1147
|
+
|
|
1148
|
+
### Documentation
|
|
1149
|
+
|
|
1150
|
+
- **`README.md`** and **`docs/maintenance.md`**: updated the release
|
|
1151
|
+
pipeline description to reflect the scoped-API-token flow and
|
|
1152
|
+
`release.yml` as the sole publish authority.
|
|
1153
|
+
|
|
1154
|
+
## [v1.1.5] - 2026-06-20
|
|
1155
|
+
|
|
1156
|
+
### Patch — quality, type-safety, test depth, and a 100% coverage gate
|
|
1157
|
+
|
|
1158
|
+
A patch release: no API changes, no behavior changes. A coordinated sweep
|
|
1159
|
+
of refactoring (type-safety, code deduplication), deeper testing
|
|
1160
|
+
(property-based invariants, shared fixtures), expanded documentation
|
|
1161
|
+
(tutorials, architecture guide), and a hardening of CI to enforce full
|
|
1162
|
+
blended coverage. The result is the cleanest, most thoroughly verified
|
|
1163
|
+
release to date: **17 modules, 1230 tests, and 100% code coverage
|
|
1164
|
+
(statement + branch)**.
|
|
1165
|
+
|
|
1166
|
+
### Added
|
|
1167
|
+
|
|
1168
|
+
- **Python 3.13 support**: added 3.13 to the CI test matrix and the
|
|
1169
|
+
`pyproject.toml` classifiers; the full suite is now green on 3.10–3.13.
|
|
1170
|
+
- **Shared test fixtures**: `tests/conftest.py` plus `tests/test_core.py`
|
|
1171
|
+
centralize reusable fixtures and core invariants, reducing duplication
|
|
1172
|
+
across the suite.
|
|
1173
|
+
- **Property-based invariant suite (B5)**: a Hypothesis-driven test set
|
|
1174
|
+
that exercises numerical invariants (associativity, identity,
|
|
1175
|
+
round-trip) over generated inputs, catching edge cases that
|
|
1176
|
+
example-based tests miss.
|
|
1177
|
+
- **Tutorials for optimization, signals, ML, and statistics (B3)**: new
|
|
1178
|
+
guided walkthroughs under `docs/tutorials/` covering the four most-used
|
|
1179
|
+
subsystems.
|
|
1180
|
+
- **Contributing architecture section (B4)**: `CONTRIBUTING.md` now
|
|
1181
|
+
documents the module layout and the data flow between subsystems, with
|
|
1182
|
+
stale cross-references fixed.
|
|
1183
|
+
- **`examples/modeling_demo.py`**: a new end-to-end example demonstrating
|
|
1184
|
+
the modeling workflow referenced by the tutorials.
|
|
1185
|
+
|
|
1186
|
+
### Changed
|
|
1187
|
+
|
|
1188
|
+
- **Closed remaining `Any` type escapes**: the last untyped boundaries in
|
|
1189
|
+
the core and hypothesis modules now carry concrete types; `mypy --strict`
|
|
1190
|
+
stays green.
|
|
1191
|
+
- **Generic `OptResult`**: the optimization result type is now generic
|
|
1192
|
+
over its scalar type, and the narrowing casts that worked around the old
|
|
1193
|
+
concrete signature have been removed.
|
|
1194
|
+
- **Deduplicated scalar central-difference**: the scalar central-
|
|
1195
|
+
difference implementation that existed in both `calculus` and
|
|
1196
|
+
`optimization` is now shared from a single source.
|
|
1197
|
+
- **Version bump `1.1.4` → `1.1.5`** in `pyproject.toml`,
|
|
1198
|
+
`src/cds/_version.py`, and `CITATION.cff`.
|
|
1199
|
+
|
|
1200
|
+
### CI
|
|
1201
|
+
|
|
1202
|
+
- **100% blended coverage gate**: CI now fails unless both statement and
|
|
1203
|
+
branch coverage reach 100%, locking in the coverage level as a
|
|
1204
|
+
non-regression boundary.
|
|
1205
|
+
- **Regenerated benchmark report**: the benchmark report and
|
|
1206
|
+
`results.json` were regenerated against the current codebase.
|
|
1207
|
+
|
|
1208
|
+
### Documentation
|
|
1209
|
+
|
|
1210
|
+
- **Synced stale test count and coverage**: corrected the documented test
|
|
1211
|
+
count (1165 → 1230) and coverage figure (~99.6% → 100%) to match CI.
|
|
1212
|
+
- **Roadmap items shipped**: roadmap entries #2 (modeling) and #3
|
|
1213
|
+
(knowledge organization) are marked released; the corresponding issues
|
|
1214
|
+
are closed.
|
|
1215
|
+
|
|
1216
|
+
## [v1.1.4] - 2026-06-19
|
|
1217
|
+
|
|
1218
|
+
### Patch — documentation, CI, and housekeeping cleanup
|
|
1219
|
+
|
|
1220
|
+
A patch release: no API changes, no behavior changes. Removes cosmetic
|
|
1221
|
+
distractions (emojis, sprint references) from issue templates and docs,
|
|
1222
|
+
fixes CI workflow schemas, and deletes ~3 500 lines of no-op autograd
|
|
1223
|
+
shim code that was never exercised at runtime.
|
|
1224
|
+
|
|
1225
|
+
### Changed
|
|
1226
|
+
|
|
1227
|
+
- **Issue templates**: removed decorative emojis from
|
|
1228
|
+
`bug_report.md`, `config.yml`, and `changelog.yml` for a cleaner,
|
|
1229
|
+
more professional appearance.
|
|
1230
|
+
- **`.github/labeler.yml`**: migrated to the `actions/labeler` v5
|
|
1231
|
+
configuration schema (`triage` → `labels` key).
|
|
1232
|
+
- **`.github/workflows/changelog.yml`**: fixed a missing trailing
|
|
1233
|
+
newline flagged by lint checks.
|
|
1234
|
+
- **Documentation**: stripped sprint-tracking references and
|
|
1235
|
+
ephemeral planning files (`docs/superpowers/plans/`,
|
|
1236
|
+
`docs/superpowers/specs/`); unified inline-code formatting across
|
|
1237
|
+
tutorials and case-study pages.
|
|
1238
|
+
- **Removed no-op autograd shims**: deleted `src/cds/nlp/autograd/`
|
|
1239
|
+
shim functions (`_grad.py` stubs, pass-through wrappers in
|
|
1240
|
+
`ops.py` and `tensor.py`) that were placeholders and never
|
|
1241
|
+
participated in any real gradient computation. ~3 500 lines removed.
|
|
1242
|
+
- **Examples**: aligned `ruff` formatting in
|
|
1243
|
+
`examples/data_analysis_demo.py` and
|
|
1244
|
+
`examples/ml_and_viz_demo.py`.
|
|
1245
|
+
- **Version bump `1.1.3` → `1.1.4`** in `pyproject.toml`,
|
|
1246
|
+
`src/cds/_version.py`, and `CITATION.cff`.
|
|
1247
|
+
|
|
1248
|
+
## [v1.1.3] - 2026-06-19
|
|
1249
|
+
|
|
1250
|
+
### Patch — type-safety cleanup
|
|
1251
|
+
|
|
1252
|
+
A patch release: no API changes, no behavior changes. Resolves the final
|
|
1253
|
+
block of `mypy --strict` errors so the type checker reports **0 errors
|
|
1254
|
+
across 136 files**. No public surface changed; all 1165 tests pass and
|
|
1255
|
+
the suite is unchanged.
|
|
1256
|
+
|
|
1257
|
+
### Fixed
|
|
1258
|
+
|
|
1259
|
+
- **43 `mypy --strict` errors resolved** across `examples/`, `dashboard/`,
|
|
1260
|
+
and `scripts/`. The fixes fall into five categories, none of which
|
|
1261
|
+
alter runtime behavior:
|
|
1262
|
+
- **`int` → `float` argument types**: numeric literals passed to APIs
|
|
1263
|
+
typed as `float` (e.g. integration tolerances, attention scaling)
|
|
1264
|
+
now use explicit `float` literals so the call matches the signature.
|
|
1265
|
+
- **`Domain` enum usage**: iteration and membership checks against the
|
|
1266
|
+
`Domain` enum now go through `Domain.__members__.values()` / explicit
|
|
1267
|
+
member references, matching the pattern established in v1.1.2 for
|
|
1268
|
+
CodeQL compatibility.
|
|
1269
|
+
- **Attention tensor rank**: reshape/transpose calls in
|
|
1270
|
+
`examples/nlp_attention_demo.py` and `examples/nlp_mini_gpt_demo.py`
|
|
1271
|
+
annotated to reflect the actual tensor rank rather than an
|
|
1272
|
+
over-narrow `Any`/scalar guess.
|
|
1273
|
+
- **Invariant list widening**: a few demo helper functions that
|
|
1274
|
+
return heterogeneous sequences now declare `list[object]` (or the
|
|
1275
|
+
specific union) instead of an impossible precise element type.
|
|
1276
|
+
- **`Protocol` signature alignment**: a duck-typed callback protocol
|
|
1277
|
+
in `scripts/publish.py` had a signature that diverged from its
|
|
1278
|
+
concrete implementations; the protocol and call sites now agree.
|
|
1279
|
+
|
|
1280
|
+
### Changed
|
|
1281
|
+
|
|
1282
|
+
- **Version bump `1.1.2` → `1.1.3`** in `pyproject.toml` and
|
|
1283
|
+
`src/cds/_version.py`.
|
|
1284
|
+
|
|
1285
|
+
## [v1.1.2] - 2026-06-19
|
|
1286
|
+
|
|
1287
|
+
### Patch — security hardening & CodeQL closure
|
|
1288
|
+
|
|
1289
|
+
A patch release: no API changes, no behavior changes. Closes the remaining
|
|
1290
|
+
CodeQL code-scanning alerts with a fix (not a workaround),
|
|
1291
|
+
tightens `main` branch protection, and improves the discoverability of the
|
|
1292
|
+
vulnerability-reporting flow. Brings the repo to **0 open** code-scanning
|
|
1293
|
+
alerts (22/22 closed: 20 fixed by code, 2 dismissed as documented false
|
|
1294
|
+
positives).
|
|
1295
|
+
|
|
1296
|
+
### Security
|
|
1297
|
+
|
|
1298
|
+
- **CodeQL `py/non-iterable-in-for-loop`: fix.** Enum iteration
|
|
1299
|
+
in `examples/core_demo.py` and `tests/test_hypothesis.py` now uses
|
|
1300
|
+
`Domain.__members__.values()` instead of `for x in Domain:`. This is the
|
|
1301
|
+
Enum API's standard member-collection view: functionally identical (same
|
|
1302
|
+
members, same insertion order, all 1164 tests pass) but the return type
|
|
1303
|
+
is an explicitly iterable mapping view that CodeQL's type resolver can
|
|
1304
|
+
follow. Previous attempts (idiomatic iteration, direct import from the
|
|
1305
|
+
defining module) did not satisfy the analyzer; this does, with no
|
|
1306
|
+
camouflage (`list()` wrapping) and no behavior change.
|
|
1307
|
+
- **`main` branch protection strengthened.** Added `required_status_checks`
|
|
1308
|
+
for `CI` and `CodeQL`, a PR can no longer merge into `main` while those
|
|
1309
|
+
checks are red. `enforce_admins` is left disabled so the maintainer
|
|
1310
|
+
retains a direct-push path; everything else (linear history, conversation
|
|
1311
|
+
resolution, no force-pushes, no deletions) is unchanged.
|
|
1312
|
+
- **Security-reporting guidance.** The README now links to `SECURITY.md`
|
|
1313
|
+
and the private-advisory flow; the bug-report issue template warns against
|
|
1314
|
+
opening public issues for vulnerabilities and redirects to private
|
|
1315
|
+
advisories.
|
|
1316
|
+
|
|
1317
|
+
### Changed
|
|
1318
|
+
|
|
1319
|
+
- **`CITATION.cff` version refresh.** Two stale `1.1.0` references (root and
|
|
1320
|
+
`preferred-citation` blocks) bumped to `1.1.2`. This was missed in v1.1.1.
|
|
1321
|
+
|
|
1322
|
+
## [v1.1.1] - 2026-06-19
|
|
1323
|
+
|
|
1324
|
+
### Patch — supply-chain & CI hardening
|
|
1325
|
+
|
|
1326
|
+
A patch release: no API changes, no behavior changes. Strengthens release
|
|
1327
|
+
integrity and CI correctness so downstream consumers and contributors get
|
|
1328
|
+
verifiable, low-churn workflows.
|
|
1329
|
+
|
|
1330
|
+
### Security
|
|
1331
|
+
|
|
1332
|
+
- **CodeQL static analysis** (`codeql.yml`): runs `security-and-quality`
|
|
1333
|
+
query pack on every push/PR into `main` plus a weekly schedule; findings
|
|
1334
|
+
surface as code-scanning alerts under the Security tab. Complements
|
|
1335
|
+
`attest.yml` (which signs release artifacts with build provenance) and
|
|
1336
|
+
`dependabot.yml` (dependency CVEs).
|
|
1337
|
+
- **README security badge**: live CodeQL status added next to the CI badge.
|
|
1338
|
+
|
|
1339
|
+
### Changed
|
|
1340
|
+
|
|
1341
|
+
- **`changelog.yml` made idempotent**: all dispatches now target a single
|
|
1342
|
+
fixed branch (`chore/changelog-regen`); `peter-evans/create-pull-request`
|
|
1343
|
+
updates the existing open PR instead of opening a duplicate per tag.
|
|
1344
|
+
Previously up to 6 stale changelog PRs accumulated; now only one is ever
|
|
1345
|
+
open. Also bumped the action `v6 → v7` and added a `concurrency` group to
|
|
1346
|
+
serialize simultaneous dispatches.
|
|
1347
|
+
- **`benchmarks.yml` respects branch protection**: switched from a direct
|
|
1348
|
+
bot push (rejected on protected `main`) to opening a PR via
|
|
1349
|
+
`peter-evans/create-pull-request@v7`, so regenerated artifacts merge
|
|
1350
|
+
through the normal review flow without breaking protection rules.
|
|
1351
|
+
|
|
1352
|
+
### Removed
|
|
1353
|
+
|
|
1354
|
+
- 6 stale auto-generated changelog PRs (#10, #19, #20, #21, #22, #23) and
|
|
1355
|
+
their per-tag branches, all superseded by the hand-curated CHANGELOG on
|
|
1356
|
+
`main`.
|
|
1357
|
+
|
|
1358
|
+
## [v1.1.0] - 2026-06-19
|
|
1359
|
+
|
|
1360
|
+
### Minor — two new modules (symbolic math + knowledge organization)
|
|
1361
|
+
|
|
1362
|
+
A backward-compatible feature release. Adds two new public subpackages
|
|
1363
|
+
(`cds.modeling`, `cds.knowledge`) without changing any existing API. The
|
|
1364
|
+
platform now spans **17 modules**, **1164 tests**, and **99.59%** coverage.
|
|
1365
|
+
|
|
1366
|
+
### Added
|
|
1367
|
+
|
|
1368
|
+
- **`cds.modeling`**: symbolic algebra for equation development:
|
|
1369
|
+
- An expression tree (`+`, `-`, `*`, `/`, `**`, unary `-`, variables,
|
|
1370
|
+
numbers) built by overloading Python operators on a `Variable`/`Constant`
|
|
1371
|
+
AST.
|
|
1372
|
+
- Symbolic differentiation (`diff`), algebraic simplification
|
|
1373
|
+
(`simplify`), substitution (`subs`), evaluation (`evaluate`), and
|
|
1374
|
+
LaTeX export (`to_latex`).
|
|
1375
|
+
- A `MathModel` for equation systems with `solve_equation` (Newton-Raphson
|
|
1376
|
+
root finding) and `fit_parameters` (least-squares parameter fitting to
|
|
1377
|
+
observations).
|
|
1378
|
+
- Runnable demo (`examples/modeling_demo.py`) + tutorial.
|
|
1379
|
+
- **`cds.knowledge`**: a knowledge-organization layer in three pure-Python,
|
|
1380
|
+
dependency-free files:
|
|
1381
|
+
- `graph.py`: `Concept`, `Relation` (typed directed edges), and a
|
|
1382
|
+
`KnowledgeGraph` with undirected traversal (shortest path via BFS,
|
|
1383
|
+
transitive closure, cycle detection), neighbors, and JSON persistence.
|
|
1384
|
+
- `notes.py`: `Note` + `Notebook` research notebook with tag and
|
|
1385
|
+
concept lookups, and JSON persistence.
|
|
1386
|
+
- `retrieval.py`: `search()` producing ranked `SearchResult` hits across
|
|
1387
|
+
both concepts and notes (matched field + normalized score).
|
|
1388
|
+
- Runnable demo (`examples/knowledge_demo.py`) + tutorial.
|
|
1389
|
+
- Both modules are wired into the package `__all__`, the CLI `modules`
|
|
1390
|
+
listing, and the API reference (`docs/api.md`).
|
|
1391
|
+
|
|
1392
|
+
### Maintenance
|
|
1393
|
+
|
|
1394
|
+
- Docs: resync README, `docs/index.md`, getting-started (EN + TR), and
|
|
1395
|
+
CITATION.cff to v1.1.0, module count 16→17, test count 883→1164,
|
|
1396
|
+
coverage 99.48%→99.59%. Keep `pyproject.toml` + `src/cds/_version.py`
|
|
1397
|
+
lockstepped at 1.1.0.
|
|
1398
|
+
- Chore(repo): ignore the `_demo_*.json` runtime artifacts the
|
|
1399
|
+
knowledge demo writes next to its script, so a demo run no longer
|
|
1400
|
+
dirties the working tree.
|
|
1401
|
+
|
|
1402
|
+
## [v1.0.4] - 2026-06-18
|
|
1403
|
+
|
|
1404
|
+
### Security & Tooling — CI hardening
|
|
1405
|
+
|
|
1406
|
+
A follow-up patch to v1.0.3. No behavior changes to the published package;
|
|
1407
|
+
fully backward compatible. Adds continuous dependency-vulnerability scanning
|
|
1408
|
+
to CI, tightens the type-check configuration, and resynchronizes docs that
|
|
1409
|
+
had drifted after v1.0.0.
|
|
1410
|
+
|
|
1411
|
+
### Maintenance
|
|
1412
|
+
|
|
1413
|
+
- Chore(ci): add a `pip-audit` job to the CI workflow (`tests.yml`). Runs
|
|
1414
|
+
once on the reference cell (Linux + Python 3.12) against the PyPI Advisory
|
|
1415
|
+
database. Currently `continue-on-error: true`, the dev/docs/test toolchain
|
|
1416
|
+
(jupyter, mkdocs, build, twine, pillow, lxml, ...) carries transitive deps
|
|
1417
|
+
with open CVEs unrelated to the published runtime (typer/pydantic/rich,
|
|
1418
|
+
which audit clean). Surfacing them every run gives visibility without
|
|
1419
|
+
red-flashing the matrix on a fresh advisory.
|
|
1420
|
+
- Chore(types): remove the global `ignore_missing_imports = true` from
|
|
1421
|
+
`[tool.mypy]`. CDS only depends on PEP 561 typed runtime libs (typer,
|
|
1422
|
+
pydantic, rich), all of which resolve cleanly under strict mypy (98 files,
|
|
1423
|
+
0 errors). Dropping the escape hatch means a future un-stubbed dependency
|
|
1424
|
+
surfaces a real error instead of being silently typed as `Any`.
|
|
1425
|
+
- Chore(repo): delete a stray Windows `nul` artifact left in the working tree.
|
|
1426
|
+
- Docs: resync README + `docs/` after v1.0.0: test count 845→878, version
|
|
1427
|
+
strings updated, `CITATION.cff` bumped to 1.0.4. Keep `pyproject.toml` +
|
|
1428
|
+
`src/cds/_version.py` lockstepped at 1.0.4.
|
|
1429
|
+
|
|
1430
|
+
## [v1.0.3] - 2026-06-18
|
|
1431
|
+
|
|
1432
|
+
### Hygiene — test-suite type correctness
|
|
1433
|
+
|
|
1434
|
+
A follow-up patch to v1.0.2. No behavior changes to the published package;
|
|
1435
|
+
fully backward compatible. Brings `tests/` to the same mypy baseline as
|
|
1436
|
+
`src/` so the full type-check (`mypy src/ tests/`) is green, and resolves
|
|
1437
|
+
post-release lint/test/publish findings caught after v1.0.2 shipped.
|
|
1438
|
+
|
|
1439
|
+
### Testing
|
|
1440
|
+
|
|
1441
|
+
- Test(types): clear all remaining mypy errors across `tests/` (39 files,
|
|
1442
|
+
0 errors). Fixes list-variance issues (`Parameter <: Tensor`), redundant
|
|
1443
|
+
`type: ignore` comments, and intentional error-path `**` operands.
|
|
1444
|
+
- Test(benchmarks): isolate benchmark test artifacts: `run_all()` /
|
|
1445
|
+
`_write_json()` accept an `output_dir` parameter so `pytest` no longer
|
|
1446
|
+
clobbers the committed `benchmarks/results.json`.
|
|
1447
|
+
|
|
1448
|
+
### Maintenance
|
|
1449
|
+
|
|
1450
|
+
- Chore(ci): resolve post-1.0.2 lint/test/publish findings (commit 5e429ec).
|
|
1451
|
+
- Docs: keep `pyproject.toml` + `src/cds/_version.py` lockstepped at 1.0.3.
|
|
1452
|
+
|
|
1453
|
+
## [v1.0.2] - 2026-06-18
|
|
1454
|
+
|
|
1455
|
+
### Hygiene — test isolation for benchmark artifacts
|
|
1456
|
+
|
|
1457
|
+
A follow-up patch to v1.0.1. No behavior changes to the published package;
|
|
1458
|
+
fully backward compatible. Resolves a repo-hygiene issue where running the
|
|
1459
|
+
benchmark test suite silently clobbered the committed
|
|
1460
|
+
`benchmarks/results.json` artifact (and `docs/benchmarks.md`) on every
|
|
1461
|
+
`pytest` invocation.
|
|
1462
|
+
|
|
1463
|
+
### Bug Fixes
|
|
1464
|
+
|
|
1465
|
+
- Fix(tests): `test_run_all_generates_report` no longer writes into the
|
|
1466
|
+
working tree. `run_all()` and `_write_json()` now accept an optional
|
|
1467
|
+
`output_dir` parameter; the test passes its `tmp_path`, so the committed
|
|
1468
|
+
`benchmarks/results.json` and `docs/benchmarks.md` are never modified by a
|
|
1469
|
+
test run. Verified: object hash of `results.json` is byte-identical before
|
|
1470
|
+
and after `pytest`.
|
|
1471
|
+
|
|
1472
|
+
### Testing
|
|
1473
|
+
|
|
1474
|
+
- Test(benchmarks): added a regression assertion that `results.json` lands
|
|
1475
|
+
in `tmp_path` (not `benchmarks/`) after `run_all(output_dir=...)`.
|
|
1476
|
+
|
|
1477
|
+
### Features
|
|
1478
|
+
|
|
1479
|
+
- Feat(benchmarks): `run_all(output_dir=None)` and
|
|
1480
|
+
`_write_json(record, output_dir=None)`, new optional parameter for
|
|
1481
|
+
redirecting artifact output. Defaults preserve existing CLI behaviour.
|
|
1482
|
+
|
|
1483
|
+
## [v1.0.1] - 2026-06-18
|
|
1484
|
+
|
|
1485
|
+
### Maintenance — typed, documented, hardened
|
|
1486
|
+
|
|
1487
|
+
A follow-up to the v1.0 stable release focused on packaging quality and
|
|
1488
|
+
numerical correctness guarantees. No behavior changes; fully backward
|
|
1489
|
+
compatible.
|
|
1490
|
+
|
|
1491
|
+
### Features
|
|
1492
|
+
|
|
1493
|
+
- Feat(packaging): declare PEP 561 type information: ship `src/cds/py.typed`
|
|
1494
|
+
marker and force-include it in the wheel so downstream users get full
|
|
1495
|
+
static type-checking support out of the box.
|
|
1496
|
+
- Feat(docs): add "type checked" badge to the README.
|
|
1497
|
+
|
|
1498
|
+
### Testing
|
|
1499
|
+
|
|
1500
|
+
- Test(invariants): add `tests/test_numerical_invariants.py`: 32
|
|
1501
|
+
property-based numerical invariants across 8 modules (linalg, signals,
|
|
1502
|
+
stats, quadrature, quantum, diffeq, monte carlo, probability). Fixed
|
|
1503
|
+
seed, fully reproducible, zero new dev dependencies.
|
|
1504
|
+
|
|
1505
|
+
### Documentation
|
|
1506
|
+
|
|
1507
|
+
- Docs(api): add docstrings to all 51 previously-undocumented public
|
|
1508
|
+
functions identified via AST scan (3 empty-docstring gaps closed).
|
|
1509
|
+
|
|
1510
|
+
### Bug Fixes
|
|
1511
|
+
|
|
1512
|
+
- Chore: bump version to 1.0.1.
|
|
1513
|
+
|
|
1514
|
+
## [v1.0.0] - 2026-06-18
|
|
1515
|
+
|
|
1516
|
+
### 1.0 — Stable release
|
|
1517
|
+
|
|
1518
|
+
Cognitive Discovery Platform reaches its first stable release. All five
|
|
1519
|
+
subsystems of the v1.0 completion spec are implemented, gated, and
|
|
1520
|
+
verified: 99.16% statement coverage (845 tests passing), zero mypy
|
|
1521
|
+
errors, clean ruff, and a strict mkdocs build.
|
|
1522
|
+
|
|
1523
|
+
### Features
|
|
1524
|
+
|
|
1525
|
+
- Feat(nlp): NLP visualisation module: attention heatmap, PCA projection, training curve ([7956597](7956597))
|
|
1526
|
+
- Feat(benchmarks): emit results.json with timestamp + git SHA provenance, add CI workflow ([4e18500](4e18500))
|
|
1527
|
+
|
|
1528
|
+
### Testing
|
|
1529
|
+
|
|
1530
|
+
- Test(coverage): close NLP edge-case gaps: tensor/ops/optim/bpe/layers/model/attention; reach 99.16% statement coverage ([6f0a487](6f0a487))
|
|
1531
|
+
- Style(tests): ruff format cleanup: collapse over-split listcomp, expand train() signature, remove duplicate inline imports ([36f4ee4](36f4ee4))
|
|
1532
|
+
|
|
1533
|
+
### Documentation
|
|
1534
|
+
|
|
1535
|
+
- Docs(examples): add 9 module demos + matching tutorials ([9f00fc5](9f00fc5))
|
|
1536
|
+
- Docs(api): restructure mkdocs nav, add api.md lead-ins, fix stale test counts ([4cad8be](4cad8be))
|
|
1537
|
+
- Docs(nlp): fix griffe warnings: split combined params in docstrings ([3aedff4](3aedff4))
|
|
1538
|
+
- Docs(benchmarks): regenerate results.json with current SHA provenance ([69c5a88](69c5a88))
|
|
1539
|
+
|
|
1540
|
+
### Bug Fixes
|
|
1541
|
+
|
|
1542
|
+
- Chore: bump version to 1.0.0 + Production/Stable classifier; sync _version.py
|
|
1543
|
+
|
|
1544
|
+
### Other
|
|
1545
|
+
|
|
1546
|
+
- Promoted from `Development Status :: 4 - Beta` to `Development Status :: 5 - Production/Stable`.
|
|
1547
|
+
|
|
1548
|
+
## [v0.10.0b1] - 2026-06-17
|
|
1549
|
+
|
|
1550
|
+
|
|
1551
|
+
### Features
|
|
1552
|
+
|
|
1553
|
+
|
|
1554
|
+
- Feat(nlp): autograd engine + MiniGPT-from-scratch ([5e0d308](5e0d308))
|
|
1555
|
+
|
|
1556
|
+
|
|
1557
|
+
### Documentation
|
|
1558
|
+
|
|
1559
|
+
|
|
1560
|
+
- Docs(changelog): regenerate for v0.9.0b8 (#17) ([2b0a7d3](2b0a7d3))
|
|
1561
|
+
|
|
1562
|
+
|
|
1563
|
+
## [v0.9.0b8] - 2026-06-17
|
|
1564
|
+
|
|
1565
|
+
|
|
1566
|
+
### Features
|
|
1567
|
+
|
|
1568
|
+
|
|
1569
|
+
- Feat(nlp): add multi-head attention + transformer block ([4f38cae](4f38cae))
|
|
1570
|
+
|
|
1571
|
+
|
|
1572
|
+
### Documentation
|
|
1573
|
+
|
|
1574
|
+
|
|
1575
|
+
- Docs(changelog): regenerate for v0.9.0b7 (#16) ([44ec93c](44ec93c))
|
|
1576
|
+
|
|
1577
|
+
|
|
1578
|
+
## [v0.9.0b7] - 2026-06-17
|
|
1579
|
+
|
|
1580
|
+
|
|
1581
|
+
### Bug Fixes
|
|
1582
|
+
|
|
1583
|
+
|
|
1584
|
+
- Fix: catch two more stale surfaces (CITATION.cff, mkdocs api.md) ([b59b6e3](b59b6e3))
|
|
1585
|
+
|
|
1586
|
+
|
|
1587
|
+
### Documentation
|
|
1588
|
+
|
|
1589
|
+
|
|
1590
|
+
- Docs(changelog): regenerate for v0.9.0b6 (#15) ([e1244ce](e1244ce))
|
|
1591
|
+
|
|
1592
|
+
|
|
1593
|
+
## [v0.9.0b6] - 2026-06-17
|
|
1594
|
+
|
|
1595
|
+
|
|
1596
|
+
### Bug Fixes
|
|
1597
|
+
|
|
1598
|
+
|
|
1599
|
+
- Fix: sync test count 572 to 655 across all surfaces ([952ffe0](952ffe0))
|
|
1600
|
+
|
|
1601
|
+
|
|
1602
|
+
### Documentation
|
|
1603
|
+
|
|
1604
|
+
|
|
1605
|
+
- Docs(changelog): regenerate for v0.9.0b5 (#14) ([f7a037b](f7a037b))
|
|
1606
|
+
|
|
1607
|
+
|
|
1608
|
+
## [v0.9.0b5] - 2026-06-17
|
|
1609
|
+
|
|
1610
|
+
|
|
1611
|
+
### Features
|
|
1612
|
+
|
|
1613
|
+
|
|
1614
|
+
- Feat(nlp): add cds.nlp module: BPE tokenizer + sinusoidal embeddings ([045b9d1](045b9d1))
|
|
1615
|
+
|
|
1616
|
+
|
|
1617
|
+
### Other
|
|
1618
|
+
|
|
1619
|
+
|
|
1620
|
+
- Build: drop hatch-vcs + setuptools_scm, switch to static versioning ([6e04d31](6e04d31))
|
|
1621
|
+
|
|
1622
|
+
|
|
1623
|
+
### Documentation
|
|
1624
|
+
|
|
1625
|
+
|
|
1626
|
+
- Docs(changelog): regenerate for v0.9.0b4 (#13) ([da52ee0](da52ee0))
|
|
1627
|
+
|
|
1628
|
+
|
|
1629
|
+
## [v0.9.0b4] - 2026-06-17
|
|
1630
|
+
|
|
1631
|
+
|
|
1632
|
+
### Bug Fixes
|
|
1633
|
+
|
|
1634
|
+
|
|
1635
|
+
- Fix: drop stale 'auditor' comment + sync 570 to 572 across docs and cli ([0dcaba6](0dcaba6))
|
|
1636
|
+
|
|
1637
|
+
|
|
1638
|
+
### Documentation
|
|
1639
|
+
|
|
1640
|
+
|
|
1641
|
+
- Docs(changelog): regenerate for v0.9.0b4 (#11) ([b1eda78](b1eda78))
|
|
1642
|
+
|
|
1643
|
+
|
|
1644
|
+
## [v0.9.0b3] - 2026-06-17
|
|
1645
|
+
|
|
1646
|
+
|
|
1647
|
+
### Bug Fixes
|
|
1648
|
+
|
|
1649
|
+
|
|
1650
|
+
- Fix(docs): include getting-started.tr.md in mkdocs nav; fix broken CONTRIBUTING link ([85316fe](85316fe))
|
|
1651
|
+
|
|
1652
|
+
- Fix: bump CITATION.cff top-level version to 0.9.0b2 ([80cc3b4](80cc3b4))
|
|
1653
|
+
|
|
1654
|
+
- Fix: bump CITATION.cff top-level version to 0.9.0b2 (was 0.8.5, missed during release) ([adee53c](adee53c))
|
|
1655
|
+
|
|
1656
|
+
- Fix: keep cast() in test_legendre (Python 3.10/3.11 mypy needs it, 3.12 ignores) ([bcd20fc](bcd20fc))
|
|
1657
|
+
|
|
1658
|
+
- Fix: resolve 34 mypy errors (matrix/fft type unions, plot float types, missing confidence arg, cli.Path) ([eea36a3](eea36a3))
|
|
1659
|
+
|
|
1660
|
+
- Fix: type local _legendre import as Callable[[int, float], tuple[float, float]] (cross-Python mypy fix) ([486bad5](486bad5))
|
|
1661
|
+
|
|
1662
|
+
- Fix: use # type: ignore[no-any-return] instead of cast() for cross-Python compat ([bd3aaa8](bd3aaa8))
|
|
1663
|
+
|
|
1664
|
+
|
|
1665
|
+
### Other
|
|
1666
|
+
|
|
1667
|
+
|
|
1668
|
+
- Build: add setuptools_scm local-scheme config (no-local-version, fallback) ([82d07c9](82d07c9))
|
|
1669
|
+
|
|
1670
|
+
- Build: exclude hatch-vcs generated _version.py from ruff ([76760d3](76760d3))
|
|
1671
|
+
|
|
1672
|
+
- Build: publish.py ignores hatch-vcs regenerated _version.py in dirty check ([bea5f71](bea5f71))
|
|
1673
|
+
|
|
1674
|
+
- Build: setuptools_scm version_scheme=no-guess-dev; fix wheel version regex ([8ccb292](8ccb292))
|
|
1675
|
+
|
|
1676
|
+
- Release: v0.9.0b1 - Beta milestone, CI multi-OS, hatch-vcs, git-cliff, attestation ([3e3928f](3e3928f))
|
|
1677
|
+
|
|
1678
|
+
- Release: v0.9.0b2 - same code, re-tag to trigger attest workflow (checkout fix) ([c54e900](c54e900))
|
|
1679
|
+
|
|
1680
|
+
- Release: v0.9.0b3 - branch protection, threat model, i18n, signed commits guide ([31983fe](31983fe))
|
|
1681
|
+
|
|
1682
|
+
|
|
1683
|
+
### Documentation
|
|
1684
|
+
|
|
1685
|
+
|
|
1686
|
+
- Docs(changelog): regenerate for v0.9.0b1 ([44f7823](44f7823))
|
|
1687
|
+
|
|
1688
|
+
- Docs(changelog): regenerate for v0.9.0b2 ([404532c](404532c))
|
|
1689
|
+
|
|
1690
|
+
- Docs(changelog): regenerate for v0.9.0b3 (#8) ([3a8ef95](3a8ef95))
|
|
1691
|
+
|
|
1692
|
+
- Docs(changelog): regenerate for v0.9.0b3 (#9) ([c4fcb9b](c4fcb9b))
|
|
1693
|
+
|
|
1694
|
+
- Docs: add threat model, signed commits guide, Why CDS comparison, Turkish i18n; update ROADMAP ([0ba07cf](0ba07cf))
|
|
1695
|
+
|
|
1696
|
+
- Docs: update SECURITY.md supported versions (0.6.x → 0.8.x) ([b42cf5f](b42cf5f))
|
|
1697
|
+
|
|
1698
|
+
|
|
1699
|
+
### Styling
|
|
1700
|
+
|
|
1701
|
+
|
|
1702
|
+
- Style: pre-commit auto-fix (trailing whitespace, import order, ruff format) ([9adbf5a](9adbf5a))
|
|
1703
|
+
|
|
1704
|
+
- Style: pre-commit auto-fix _version.py (add blank line before __version__) ([277b535](277b535))
|
|
1705
|
+
|
|
1706
|
+
|
|
1707
|
+
### Miscellaneous Tasks
|
|
1708
|
+
|
|
1709
|
+
|
|
1710
|
+
- Ci: changelog PR action needs explicit base branch (checked out on tag) ([b96d322](b96d322))
|
|
1711
|
+
|
|
1712
|
+
- Ci: changelog action checks out main (not tag) to avoid detached HEAD issues ([af3cd12](af3cd12))
|
|
1713
|
+
|
|
1714
|
+
- Ci: changelog workflow needs write contents + pull-requests perms ([a319a9f](a319a9f))
|
|
1715
|
+
|
|
1716
|
+
- Ci: changelog workflow uses PR instead of direct push (branch protection compat) ([3f593cb](3f593cb))
|
|
1717
|
+
|
|
1718
|
+
- Ci: fix attest + changelog workflows (checkout step, detached HEAD push) ([d2c9d6e](d2c9d6e))
|
|
1719
|
+
|
|
1720
|
+
- Ci: quote step name with colon (YAML parse error) ([0731ca8](0731ca8))
|
|
1721
|
+
|
|
1722
|
+
- Ci: rewrite tests.yml with simple bash conditional (no GitHub conditional parse issues) ([2cc8483](2cc8483))
|
|
1723
|
+
|
|
1724
|
+
- Ci: split test step into 2 by matrix (gate vs report-only) - fix missing fi ([9e68ff0](9e68ff0))
|
|
1725
|
+
|
|
1726
|
+
|
|
1727
|
+
## [v0.8.5] - 2026-06-16
|
|
1728
|
+
|
|
1729
|
+
|
|
1730
|
+
### Other
|
|
1731
|
+
|
|
1732
|
+
|
|
1733
|
+
- Release: v0.8.5 - cds[all] extras, auto-generated API ref, docs deploy ([12b03b0](12b03b0))
|
|
1734
|
+
|
|
1735
|
+
|
|
1736
|
+
## [v0.8.4] - 2026-06-16
|
|
1737
|
+
|
|
1738
|
+
|
|
1739
|
+
### Other
|
|
1740
|
+
|
|
1741
|
+
|
|
1742
|
+
- Release: v0.8.4 - pydantic upgrade ([58ee8d9](58ee8d9))
|
|
1743
|
+
|
|
1744
|
+
|
|
1745
|
+
## [v0.8.3] - 2026-06-16
|
|
1746
|
+
|
|
1747
|
+
|
|
1748
|
+
### Other
|
|
1749
|
+
|
|
1750
|
+
|
|
1751
|
+
- Release: v0.8.3 - example guard consistency ([5017680](5017680))
|
|
1752
|
+
|
|
1753
|
+
|
|
1754
|
+
## [v0.8.2] - 2026-06-16
|
|
1755
|
+
|
|
1756
|
+
|
|
1757
|
+
### Other
|
|
1758
|
+
|
|
1759
|
+
|
|
1760
|
+
- Release: v0.8.2 - docstrings, knowledge/ removal, CHANGELOG backfill ([f22150c](f22150c))
|
|
1761
|
+
|
|
1762
|
+
- Scripts: replace publish.ps1 with pure-Python publish.py ([c7c08e2](c7c08e2))
|
|
1763
|
+
|
|
1764
|
+
|
|
1765
|
+
### Miscellaneous Tasks
|
|
1766
|
+
|
|
1767
|
+
|
|
1768
|
+
- Ci: fix pre-commit and coverage gate for stable CI ([ca66c9f](ca66c9f))
|
|
1769
|
+
|
|
1770
|
+
- Ci: remove Docs workflow; relax coverage gate; re-enable legacy Pages ([cdcf5d0](cdcf5d0))
|
|
1771
|
+
|
|
1772
|
+
|
|
1773
|
+
## [v0.8.1] - 2026-06-16
|
|
1774
|
+
|
|
1775
|
+
|
|
1776
|
+
### Other
|
|
1777
|
+
|
|
1778
|
+
|
|
1779
|
+
- Release: v0.8.1 ([4dc49e2](4dc49e2))
|
|
1780
|
+
|
|
1781
|
+
|
|
1782
|
+
### Documentation
|
|
1783
|
+
|
|
1784
|
+
|
|
1785
|
+
- Docs(roadmap): link open enhancement issues #2 and #3 under Longer Term ([ee6103b](ee6103b))
|
|
1786
|
+
|
|
1787
|
+
- Docs: mark v0.8.0 as released; move 3 pending perf items to v0.8.1 ([80e6afe](80e6afe))
|
|
1788
|
+
|
|
1789
|
+
|
|
1790
|
+
### Testing
|
|
1791
|
+
|
|
1792
|
+
|
|
1793
|
+
- Test: hit 100% statement coverage; keep branch coverage off ([5c606c4](5c606c4))
|
|
1794
|
+
|
|
1795
|
+
|
|
1796
|
+
### Miscellaneous Tasks
|
|
1797
|
+
|
|
1798
|
+
|
|
1799
|
+
- Ci(pypi): fix pypi-publish workflow ([8335cb6](8335cb6))
|
|
1800
|
+
|
|
1801
|
+
- Ci(scripts): add publish.ps1 for local PyPI releases ([57e81a4](57e81a4))
|
|
1802
|
+
|
|
1803
|
+
- Ci: harden repo to 10/10 - pre-commit, lockfiles, coverage gate ([7c3b18f](7c3b18f))
|
|
1804
|
+
|
|
1805
|
+
- Ci: remove pypi-publish workflow ([043b7f5](043b7f5))
|
|
1806
|
+
|
|
1807
|
+
|
|
1808
|
+
## [v0.8.0] - 2026-06-16
|
|
1809
|
+
|
|
1810
|
+
|
|
1811
|
+
### Other
|
|
1812
|
+
|
|
1813
|
+
|
|
1814
|
+
- Squashed: collapse 108 commits into a single cohesive history ([d4e8aee](d4e8aee))
|
|
1815
|
+
|
|
1816
|
+
- Release: v0.8.0 - Performance & Benchmarks ([83211ef](83211ef))
|
|
1817
|
+
|
|
1818
|
+
|
|
1819
|
+
<!-- generated by git-cliff -->
|