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