diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c9c5c4ba..378ca8ef 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -24,3 +24,55 @@ # Documentation source. /docs/ @farhadrgh @saeepaliwal + +# subquadratic-ops kernel bindings. +# +# @moradza maintains the upstream subquadratic-ops package these files bind to, +# so a change to the wrapper layer, its dtype/shape marshalling, or the +# torch.compile lowering should reach him automatically rather than by memory. +# +# He is listed ALONGSIDE the default owners, not instead of them: GitHub +# requires an approval from at least one codeowner per changed file, so this +# auto-requests his review without making him a hard blocker when he is +# unavailable. To make his approval mandatory for these paths, list @moradza +# alone on the line — note that would also stop @farhadrgh self-approving +# kernel changes. +/nvsubquadratic/ops/fftconv_custom.py @farhadrgh @saeepaliwal @moradza +/nvsubquadratic/ops/fftconv_lowering.py @farhadrgh @saeepaliwal @moradza +/nvsubquadratic/ops/causal_conv1d_custom.py @farhadrgh @saeepaliwal @moradza +/nvsubquadratic/modules/subq_ops_causal_conv1d.py @farhadrgh @saeepaliwal @moradza +/tests/ops/test_fused_fftconv2d.py @farhadrgh @saeepaliwal @moradza +/tests/ops/test_fftconv_lowering.py @farhadrgh @saeepaliwal @moradza +/tests/ops/test_fftconv_custom.py @farhadrgh @saeepaliwal @moradza +/tests/ops/test_fftconv_custom_1d.py @farhadrgh @saeepaliwal @moradza +/tests/ops/test_causal_conv1d_custom.py @farhadrgh @saeepaliwal @moradza +/tests/ops/test_subq_ops_fft_conv2d.py @farhadrgh @saeepaliwal @moradza +/tests/modules/test_subq_ops_causal_conv1d.py @farhadrgh @saeepaliwal @moradza +/tests/modules/test_ckconv_nd_subq.py @farhadrgh @saeepaliwal @moradza + +# ⚠️ PREREQUISITE for the two sections below: a CODEOWNERS entry naming a user +# WITHOUT write access to this repo is silently ignored — no auto-request, no +# required review, and no error beyond a soft warning in GitHub's CODEOWNERS +# editor. As of 2026-09-16 @dwromero and @Dafidofff have `read` only, so these +# rules are inert until someone with admin grants them write (Settings -> +# Collaborators, or add them to a team with write). @moradza already has write. +# +# Note @Dafidofff is David Wessels. A separate `@dwessels` account exists and is +# NOT him — naming it would produce a rule that silently never fires. + +# ImageNet / ViT5 experiments — @Dafidofff and @moradza. +/benchmarks/vit5_imagenet/ @farhadrgh @saeepaliwal @Dafidofff @moradza +/examples/imagenet_classification/ @farhadrgh @saeepaliwal @Dafidofff @moradza +/examples/vit5_imagenet/ @farhadrgh @saeepaliwal @Dafidofff @moradza +/reports/vit5_imagenet_dataloader_profiling/ @farhadrgh @saeepaliwal @Dafidofff @moradza +/experiments/datamodules/dali_imagenet_fused.py @farhadrgh @saeepaliwal @Dafidofff @moradza +/experiments/datamodules/tinyimagenet.py @farhadrgh @saeepaliwal @Dafidofff @moradza + +# Spatial-recall experiments — @dwromero and @Dafidofff. +/examples/spatial_recall_1d/ @farhadrgh @saeepaliwal @dwromero @Dafidofff +/examples/spatial_recall_2d/ @farhadrgh @saeepaliwal @dwromero @Dafidofff +/examples/spatial_recall_3d/ @farhadrgh @saeepaliwal @dwromero @Dafidofff +/examples/spatial_recall_v2/ @farhadrgh @saeepaliwal @dwromero @Dafidofff +/reports/spatial_recall/ @farhadrgh @saeepaliwal @dwromero @Dafidofff +/experiments/datamodules/spatial_recall_dataset.py @farhadrgh @saeepaliwal @dwromero @Dafidofff +/tests/test_spatial_recall_motion.py @farhadrgh @saeepaliwal @dwromero @Dafidofff diff --git a/.github/workflows/gpu-tests.yml b/.github/workflows/gpu-tests.yml index 536ed139..5cd33677 100644 --- a/.github/workflows/gpu-tests.yml +++ b/.github/workflows/gpu-tests.yml @@ -66,9 +66,30 @@ jobs: - name: Run pytest run: | + # pytest runs inside the container, so coverage has to be written to a + # bind mount or it disappears with --rm. The image runs as USER ubuntu + # (Dockerfile:218), whose uid need not match the runner's, hence 777. + mkdir -p "${{ github.workspace }}/coverage" + chmod 777 "${{ github.workspace }}/coverage" docker run --rm --gpus all \ + -v "${{ github.workspace }}/coverage:/coverage" \ nvsubquadratic-ci:${{ github.sha }} \ - python -m pytest nvsubquadratic/ tests/ -v --tb=short + python -m pytest nvsubquadratic/ tests/ -v --tb=short \ + --cov-report=xml:/coverage/coverage.xml + # --cov and --cov-report=term already come from pyproject addopts; this + # only adds the machine-readable report Codecov needs. + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + if: always() + continue-on-error: true + with: + files: ${{ github.workspace }}/coverage/coverage.xml + # Never let a Codecov outage or a missing token fail the job this + # workflow exists for. gpu-tests is a required status check and takes + # ~36 minutes; coverage reporting is not worth blocking a merge over. + fail_ci_if_error: false + token: ${{ secrets.CODECOV_TOKEN }} - name: Run distributed CP tests run: | diff --git a/.gitignore b/.gitignore index 85f56772..508a35d8 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ htmlcov/ .cache nosetests.xml coverage.xml +coverage/ *.cover *.py,cover .hypothesis/