Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 40 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,35 @@ jobs:
python -m pip install -e .[dev,docs,notebooks]
python -m pip install reportlab pillow

- name: Resolve nSTAT data cache directory
id: nstat-data-dir
run: |
echo "dir=$(python tools/data/print_data_dir.py)" >> "$GITHUB_OUTPUT"

- name: Cache nSTAT example data
uses: actions/cache@v4
with:
path: ${{ steps.nstat-data-dir.outputs.dir }}
key: nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-v1
restore-keys: |
nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-

- name: Download nSTAT example data
run: |
python tools/data/download_example_data.py

- name: Checkout pinned MATLAB nSTAT reference
run: |
python tools/parity/checkout_matlab_reference.py \
--config parity/matlab_reference.yml \
--dest /tmp/upstream-nstat \
--metadata-out parity/matlab_reference_checkout_docs_smoke.json

- name: Rebuild generated docs/notebooks
run: |
python tools/docs/generate_help_pages.py
python tools/notebooks/generate_notebooks.py
python tools/notebooks/clean_notebooks.py --check

- name: Ensure generated artifacts are committed
run: |
Expand All @@ -71,7 +96,11 @@ jobs:
run: python tools/docs/verify_search_index.py

- name: Run smoke notebooks
run: python tools/notebooks/run_notebooks.py --group smoke --timeout 600
run: |
python tools/notebooks/execute_notebooks.py \
--group smoke \
--timeout 600 \
--out-report output/notebooks/notebook_execution_report.json

- name: Generate smoke validation PDF
run: |
Expand All @@ -93,6 +122,16 @@ jobs:
path: output/pdf/*.pdf
if-no-files-found: warn

- name: Upload smoke notebook execution artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: ci-smoke-notebook-execution
path: |
output/notebooks/notebook_execution_report.json
output/notebooks/executed/**
if-no-files-found: warn

- name: Run release gate checks
run: python tools/release/check_release_gate.py

Expand Down
36 changes: 35 additions & 1 deletion .github/workflows/full-parity-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,23 @@ jobs:
python -m pip install -e .[dev,docs,notebooks]
python -m pip install reportlab pillow

- name: Resolve nSTAT data cache directory
id: nstat-data-dir
run: |
echo "dir=$(python tools/data/print_data_dir.py)" >> "$GITHUB_OUTPUT"

- name: Cache nSTAT example data
uses: actions/cache@v4
with:
path: ${{ steps.nstat-data-dir.outputs.dir }}
key: nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-v1
restore-keys: |
nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-

- name: Download nSTAT example data
run: |
python tools/data/download_example_data.py

- name: Checkout pinned MATLAB nSTAT reference
run: |
python tools/parity/checkout_matlab_reference.py \
Expand All @@ -43,6 +60,10 @@ jobs:
run: |
python tools/parity/prepare_validation_images.py

- name: Validate notebook cleanliness
run: |
python tools/notebooks/clean_notebooks.py --check

- name: Run full parity and notebook gates
run: |
python tools/parity/build_parity_snapshot.py \
Expand All @@ -59,7 +80,10 @@ jobs:
python tools/parity/check_example_output_spec.py \
--report parity/function_example_alignment_report.json \
--spec parity/example_output_spec.yml
python tools/notebooks/run_notebooks.py --group all --timeout 900
python tools/notebooks/execute_notebooks.py \
--group all \
--timeout 900 \
--out-report output/notebooks/notebook_execution_report.json

- name: Generate class equivalence inventory/report artifacts
run: |
Expand Down Expand Up @@ -131,3 +155,13 @@ jobs:
name: nightly-validation-images
path: tmp/pdfs/validation_report/notebook_images
if-no-files-found: warn

- name: Upload notebook execution artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: nightly-notebook-execution
path: |
output/notebooks/notebook_execution_report.json
output/notebooks/executed/**
if-no-files-found: warn
22 changes: 22 additions & 0 deletions .github/workflows/image-mode-parity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,23 @@ jobs:
python -m pip install -e .[dev,notebooks]
python -m pip install reportlab pillow

- name: Resolve nSTAT data cache directory
id: nstat-data-dir
run: |
echo "dir=$(python tools/data/print_data_dir.py)" >> "$GITHUB_OUTPUT"

- name: Cache nSTAT example data
uses: actions/cache@v4
with:
path: ${{ steps.nstat-data-dir.outputs.dir }}
key: nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-v1
restore-keys: |
nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-

- name: Download nSTAT example data
run: |
python tools/data/download_example_data.py

- name: Checkout pinned MATLAB nSTAT reference
run: |
python tools/parity/checkout_matlab_reference.py \
Expand All @@ -43,6 +60,10 @@ jobs:
run: |
python tools/parity/prepare_validation_images.py

- name: Validate notebook cleanliness
run: |
python tools/notebooks/clean_notebooks.py --check

- name: Generate Python validation PDF (image mode)
run: |
python tools/reports/generate_validation_pdf.py \
Expand Down Expand Up @@ -73,6 +94,7 @@ jobs:
python tools/reports/check_pdf_image_parity.py \
--python-pdf output/pdf/image_mode_parity/python_pages.pdf \
--matlab-pdf output/pdf/image_mode_parity/matlab_pages.pdf \
--pairs-json output/pdf/image_mode_parity/pairs.json \
--out-dir output/pdf/image_mode_parity \
--dpi 150 \
--ssim-threshold 0.70 \
Expand Down
37 changes: 35 additions & 2 deletions .github/workflows/notebooks-full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,41 @@ jobs:
python -m pip install --upgrade pip
python -m pip install -e .[notebooks]

- name: Resolve nSTAT data cache directory
id: nstat-data-dir
run: |
echo "dir=$(python tools/data/print_data_dir.py)" >> "$GITHUB_OUTPUT"

- name: Cache nSTAT example data
uses: actions/cache@v4
with:
path: ${{ steps.nstat-data-dir.outputs.dir }}
key: nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-v1
restore-keys: |
nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-

- name: Download nSTAT example data
run: |
python tools/data/download_example_data.py

- name: Generate notebooks
run: python tools/notebooks/generate_notebooks.py
run: |
python tools/notebooks/generate_notebooks.py
python tools/notebooks/clean_notebooks.py --check

- name: Execute full notebook suite
run: python tools/notebooks/run_notebooks.py --group full --timeout 900
run: |
python tools/notebooks/execute_notebooks.py \
--group full \
--timeout 900 \
--out-report output/notebooks/notebook_execution_report.json

- name: Upload full notebook execution artifact
if: always()
uses: actions/upload-artifact@v4
with:
name: notebooks-full-execution
path: |
output/notebooks/notebook_execution_report.json
output/notebooks/executed/**
if-no-files-found: warn
21 changes: 21 additions & 0 deletions .github/workflows/parity-gate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,23 @@ jobs:
python -m pip install -e .[dev,notebooks]
python -m pip install pyyaml

- name: Resolve nSTAT data cache directory
id: nstat-data-dir
run: |
echo "dir=$(python tools/data/print_data_dir.py)" >> "$GITHUB_OUTPUT"

- name: Cache nSTAT example data
uses: actions/cache@v4
with:
path: ${{ steps.nstat-data-dir.outputs.dir }}
key: nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-v1
restore-keys: |
nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-

- name: Download nSTAT example data
run: |
python tools/data/download_example_data.py

- name: Checkout pinned MATLAB nSTAT reference
run: |
python tools/parity/checkout_matlab_reference.py \
Expand All @@ -42,6 +59,10 @@ jobs:
run: |
python tools/parity/prepare_validation_images.py

- name: Validate notebook cleanliness
run: |
python tools/notebooks/clean_notebooks.py --check

- name: Build parity snapshot and enforce gates
run: |
python tools/parity/build_parity_snapshot.py \
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release-rc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ jobs:
- name: Regenerate notebooks
run: |
python tools/notebooks/generate_notebooks.py
python tools/notebooks/clean_notebooks.py --check
git diff --exit-code

- name: Checkout pinned MATLAB nSTAT reference
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release-stable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ jobs:
- name: Rebuild notebooks and verify clean state
run: |
python tools/notebooks/generate_notebooks.py
python tools/notebooks/clean_notebooks.py --check
git diff --exit-code

- name: Hard checks (lint, typing, unit tests, docs)
Expand Down
24 changes: 21 additions & 3 deletions .github/workflows/validation-pdf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,22 @@ jobs:
python -m pip install -e .[dev,notebooks]
python -m pip install reportlab pillow

- name: Regenerate notebooks
- name: Resolve nSTAT data cache directory
id: nstat-data-dir
run: |
python tools/notebooks/generate_notebooks.py
git diff --exit-code
echo "dir=$(python tools/data/print_data_dir.py)" >> "$GITHUB_OUTPUT"

- name: Cache nSTAT example data
uses: actions/cache@v4
with:
path: ${{ steps.nstat-data-dir.outputs.dir }}
key: nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-v1
restore-keys: |
nstat-example-data-${{ runner.os }}-doi-10.6084-m9.figshare.4834640-

- name: Download nSTAT example data
run: |
python tools/data/download_example_data.py

- name: Checkout pinned MATLAB nSTAT reference
run: |
Expand All @@ -45,6 +57,12 @@ jobs:
--dest /tmp/upstream-nstat \
--metadata-out parity/matlab_reference_checkout.json

- name: Regenerate notebooks
run: |
python tools/notebooks/generate_notebooks.py
python tools/notebooks/clean_notebooks.py --check
git diff --exit-code

- name: Prepare deterministic validation images
run: |
python tools/parity/prepare_validation_images.py
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
__pycache__/
*.py[cod]
*.so
.DS_Store

# Packaging
build/
Expand All @@ -28,6 +29,9 @@ docs/_build/

# Local data cache
.data_cache/
data_cache/
output/data_download/
*.zip

# Local report artifacts
output/
Expand Down
Loading