Release v4.0.0: scikit-build-core packaging, CI gate, accuracy suites - #9
Conversation
…OpenMP DLL; add Python README
…deps, pip packages and environment prefix
…es and invalid kernel/copy cases; use cudaDeviceSynchronize in debug check
…thon module output and remove libomp DLL copy
…tion backlog Reorder the roadmap around the agreed sequence: (1) conda/mamba/pixi/uv packaging, (2) vcpkg/conan, (3) CPU fallback with warning + strict flag, (4) vRAM-resident filter pipelining with host-memory taps, (5) prioritized operation backlog. Document the develop-branch PR workflow and parallel lanes. Move C ABI/C#/NuGet, non-NVIDIA GPU, and GPU-direct I/O to later phases. Seed BACKLOG.md with a re-arrangeable priority table covering compositions, local kernels, the FFT track, and global ops with their chunking caveats. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Unify the Python build on scikit-build-core so a single `pip install .` drives CMake, compiles the Hydra CUDA extension into the hydra_image_processor package, and installs it. This is the same path used locally, by CI, and by the conda-forge feedstock, which lets the feedstock drop its source patches. - Move pyproject.toml to the repo root; version 4.0.0 is the single source of truth, and __version__ is read from installed metadata. - CMake: raise CUDA_STANDARD to 17, drop the hardcoded GPU architectures in favor of CMAKE_CUDA_ARCHITECTURES (default all-major), add a HYDRA_BUILD_TESTS option, and add package-relative install rules for the extension and shims. - Ship top-level HIP/Hydra compatibility shims so legacy `import HIP` / `import Hydra` keep working. - Remove the superseded in-repo conda-build recipe and MANIFEST.in; ignore build artifacts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the Windows-only conda-build workflow (which uploaded to a separate anaconda.org channel) with two workflows: - ci.yml: build and import the package on Windows and Linux for PRs and pushes, catching breakage before it reaches the conda-forge feedstock. Runners have no GPU, so GPU tests auto-skip; this only verifies the package builds and imports. - release.yml: on a `v*` tag, verify the tag matches pyproject's version and create a GitHub Release, which the conda-forge autotick bot picks up to open a feedstock version-bump PR. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- README: conda/mamba/pixi install, the NVIDIA GPU requirement, the unsupported pip/uv path, and the import convention. - Rewrite the Python package README for the new hydra_image_processor API and the HIP/Hydra back-compat shims. - Add CHANGELOG.md (4.0.0) and a build + release checklist in CONTRIBUTING.md. - Refresh GEMINI.md to reflect scikit-build-core and conda-forge distribution. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A standing pre-release verification checklist (TESTING.md) covering the local build, GPU accuracy suite, CI gate, feedstock dry-run, and release rehearsal. The GPU correctness steps must be run locally since CI is build-only. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The coordinate grid was shifted by vol_size/2 + 0.5, putting the ellipsoid center one voxel off (e.g. -6..+4 instead of -5..+5 for radius 5). Every morphological op using the mask diverged from the C++ createEllipsoidKernel / MATLAB results. With the fix, all eight ellipsoid-kernel ops match the MATLAB-generated ground truth exactly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
test_accuracy.cpp never compiled: it called a nonexistent ImageOwner::getLinearAddress and passed a float[3] where the generated CudaCall_Gaussian::run stub takes Vec<double> plus an lvalue ImageView for the output. The Gaussian energy-preservation check also assumed a volume too shallow for its sigma; the filter renormalizes truncated kernels at borders, so the impulse support must stay interior for the sum to be preserved. enable_testing() now runs at the top level so `ctest --test-dir build` actually finds CppAccuracyTest. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Port of src/MATLAB/+Test/AccuracyTest.m: 15 operations compared against the ground-truth TIFFs in test_data/ (integer results within 1 LSB, float within 1e-4, EntropyFilter as a soft check since its ground truth was saved min-max scaled). Documents the numpy<->Hydra axis convention: arrays pass as tifffile loads them (chan, z, y, x) with vector parameters in (z, y, x) order. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The pinned Jimver/cuda-toolkit network install of 12.6.2 broke as the runner images moved (apt failure on ubuntu-latest). Pull cuda-nvcc + cudart from conda-forge in the existing miniforge env instead - the same channel the feedstock builds against, and one less third-party action. Linux additionally gets conda-forge c/cxx compilers as the nvcc host compiler. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The setup-miniconda-created 'test' env resolves fine right after creation but later steps on windows-latest fail activation with EnvironmentNameNotFound (seen across two runs). Installing the toolchain, python included, into base sidesteps named-env activation entirely. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Without a generator override, CMake on windows-latest picks Visual Studio, whose CUDA support needs the VS-integration files that only a system CUDA toolkit install provides - the conda-forge cuda-nvcc package does not ship them, so configure fails on the runner. Verified locally: Ninja + conda-forge nvcc 12.9 + MSVC 19.44 builds the wheel end to end. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Job logs need authentication to read, but annotations are public; on failure the build step now emits the toolchain locations and the first error lines from the pip log as ::error:: annotations. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
windows-latest now ships Visual Studio 2026 (MSVC 14.51) and CUDA 12.9 nvcc refuses it outright (C1189: unsupported Microsoft Visual Studio version). nvcc 13.x supports current MSVC. The 12.x pairing stays covered by the conda-forge feedstock CI, which pins VS 2022, and was verified locally against MSVC 19.44. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The command framework headers relied on transitive <cstdint> includes, which newer libstdc++ (pulled in by the CUDA 13 / gcc toolchain on CI) no longer provides - uint8_t and friends came up undefined in ScriptioMaps.h. Include it explicitly in every header and TU that names the fixed-width types. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Sorry @ericwait, your pull request is larger than the review limit of 150000 diff characters
|
Important Review skippedToo many files! This PR contains 163 files, which is 13 over the limit of 150. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: ⛔ Files ignored due to path filters (31)
📒 Files selected for processing (163)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR fast-forwards main to a conda-forge-oriented v4.0.0 release state, centered on scikit-build-core packaging for the CUDA Python extension, CI/release gating, and restored/added GPU accuracy suites (C++ + Python TIFF) backed by Git LFS test assets.
Changes:
- Reworks the Python build/install path around
pyproject.toml+ scikit-build-core, installing the compiledHydraextension into thehydra_image_processorpackage and addingHIP/Hydralegacy import shims. - Adds CI build+import gates (Linux/Windows) and a tag-driven release workflow that enforces tag/version parity.
- Adds/repairs accuracy test coverage and associated LFS-tracked ground-truth TIFFs + documentation for release testing.
Reviewed changes
Copilot reviewed 193 out of 194 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| TESTING.md | Adds a release testing checklist, including local GPU accuracy gating steps. |
| test_data/VarFilter_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for Python/MATLAB accuracy suite. |
| test_data/VarFilter_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for Python/MATLAB accuracy suite. |
| test_data/test_c2_.tif | Adds LFS-tracked input TIFF (test volume channel). |
| test_data/test_c1.tif | Adds LFS-tracked input TIFF (test volume channel). |
| test_data/test_c1_.tif | Adds LFS-tracked input TIFF (test volume channel variant). |
| test_data/test_c0.tif | Adds LFS-tracked input TIFF (test volume channel). |
| test_data/StdFilter_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/StdFilter_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/Opener_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/Opener_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MultiplySum_c2_15-15-6.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MultiplySum_c1_15-15-6.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MinFilter_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MinFilter_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MedianFilter_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MedianFilter_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MeanFilter_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MeanFilter_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MaxFilter_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/MaxFilter_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/LoG_c2_4-4-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/LoG_c1_4-4-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/HighPassFilter_c2_19-19-9.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/HighPassFilter_c1_19-19-9.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/Gaussian_c2_19-19-9.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/Gaussian_c1_19-19-9.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/EntropyFilter_c2_5-5-2.tif | Adds LFS-tracked reference TIFF for EntropyFilter soft-check. |
| test_data/EntropyFilter_c1_5-5-2.tif | Adds LFS-tracked reference TIFF for EntropyFilter soft-check. |
| test_data/ElementWiseDifference_c2_reverse.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/ElementWiseDifference_c1_reverse.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/Closure_c2_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| test_data/Closure_c1_5-5-2.tif | Adds LFS-tracked ground-truth TIFF for accuracy suite. |
| src/Python/Test/test_accuracy.py | Adds a Python TIFF-based GPU accuracy gate mirroring the MATLAB suite. |
| src/Python/test-hydra.py | Adds a standalone smoke-test script for the legacy Hydra module import and basic calls. |
| src/Python/test_package.py | Adds a standalone smoke-test script for the Pythonic hydra_image_processor API. |
| src/Python/test_nonchunking.py | Updates a dev script to import Hydra (legacy shim) instead of HIP. |
| src/Python/test_import.py | Adds a script to validate portable import with bundled OpenMP DLL on Windows. |
| src/Python/README.md | Documents conda-forge installation, usage, and source builds for Python. |
| src/Python/Hydra.py | Adds legacy top-level Hydra import shim to re-export hydra_image_processor.Hydra. |
| src/Python/hydra_image_processor/utils/masks.py | Adds mask/structuring-element helpers (ball/ellipsoid) used by Python API/tests. |
| src/Python/hydra_image_processor/utils/init.py | Exposes mask helpers as part of the public utilities module. |
| src/Python/hydra_image_processor/README.md | Adds package-level README describing the Python wrapper architecture. |
| src/Python/hydra_image_processor/local/init.py | Adds CPU “local” layer API surface (currently placeholder stubs). |
| src/Python/hydra_image_processor/cuda/init.py | Adds CUDA wrapper layer exports for the Python package. |
| src/Python/hydra_image_processor/core.py | Adds GPU-first wrapper functions with fallback plumbing. |
| src/Python/hydra_image_processor/init.py | Adds package public API + metadata version sourcing from installed package metadata. |
| src/Python/HIP.so | Removes legacy LFS-tracked binary extension artifact from the repo. |
| src/Python/HIP.py | Adds legacy top-level HIP import shim to re-export hydra_image_processor.Hydra. |
| src/Python/example_usage.py | Adds an example script demonstrating the Pythonic API and utilities. |
| src/Python/environment.yml | Updates a conda environment definition for Python build/dev tooling. |
| src/Python/download-script.py | Adds a helper script to download GitHub Actions artifacts for local testing. |
| src/MATLAB/+Test/AccuracyTest.m | Adds/repairs MATLAB accuracy test suite aligned with test_data ground truth. |
| src/MATLAB/+Hydra/WienerFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/VarFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/Sum.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/StdFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/Opener.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/NLMeans.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/MultiplySum.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/MinFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/MedianFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/MeanFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/MaxFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/LoG.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/Info.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/IdentityFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/HighPassFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/Help.m | Adds MATLAB help wrapper for command help. |
| src/MATLAB/+Hydra/GetMinMax.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/Gaussian.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/EntropyFilter.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/ElementWiseDifference.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/Closure.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/CheckConfig.m | Adds/updates MATLAB wrapper using CUDA-first with local fallback. |
| src/MATLAB/+Hydra/@Cuda/WienerFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/VarFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Sum.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/StdFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Opener.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/NLMeans.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/MultiplySum.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/MinFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/MedianFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/MeanFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/MaxFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/LoG.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Info.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/IdentityFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Hydra.mexw64 | Adds LFS-tracked MATLAB mex binary for Windows. |
| src/MATLAB/+Hydra/@Cuda/HighPassFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Help.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/GetMinMax.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Gaussian.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/EntropyFilter.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/ElementWiseDifference.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/DeviceStats.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/DeviceCount.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/Cuda.m | Adds/updates MATLAB class interface listing CUDA entrypoints. |
| src/MATLAB/+Hydra/@Cuda/Closure.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/MATLAB/+Hydra/@Cuda/CheckConfig.m | Adds/updates generated MATLAB CUDA wrapper calling the mex dispatcher. |
| src/c/test_back/test.cpp | Adds missing <cstdint> include for newer toolchains. |
| src/c/test_back/test_accuracy.cpp | Adds a minimal C++ accuracy test executable (skips if no CUDA device). |
| src/c/test_back/CMakeLists.txt | Adds test_accuracy target and registers it with CTest. |
| src/c/ScriptCmds/ScriptioMaps.h | Adds explicit <cstdint> include to avoid relying on transitive headers. |
| src/c/ScriptCmds/ScriptCommandImpl.h | Adds explicit <cstdint> include to avoid relying on transitive headers. |
| src/c/ScriptCmds/GenCommands.h | Adds explicit <cstdint> include to avoid relying on transitive headers. |
| src/c/ScriptCmds/Commands/ScrCmdDeviceCount.h | Adds explicit <cstdint> include to avoid relying on transitive headers. |
| src/c/Python/PyIncludes.h | Renames NumPy unique symbol to match the Hydra module naming. |
| src/c/Python/PyArgConverter.h | Updates compile-time error strings from HIP to Hydra naming. |
| src/c/Python/HydraPyModule.cpp | Renames Python extension module from HIP to Hydra. |
| src/c/Python/CMakeLists.txt | Switches to Python3 targets, installs extension into package, installs shims. |
| src/c/Cuda/Kernel.cu | Fixes missing throw when creating offset kernel out of bounds. |
| src/c/Cuda/ImageChunk.h | Fixes missing throw in unsupported copy direction branch. |
| src/c/Cuda/CudaWienerFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaVarFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaUtilities.h | Updates debug sync macro from deprecated cudaThreadSynchronize to cudaDeviceSynchronize. |
| src/c/Cuda/CudaSum.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaStdFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaOpener.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaNLMeans.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMultiplySum.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMinMax.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMinFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMedianFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMeanFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMeanAndVariance.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaMaxFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaLoG.cuh | Fixes missing throw on sendROI failure across LoG stages. |
| src/c/Cuda/CudaIdentityFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaHighPassFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaGaussian.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaEntropyFilter.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaElementWiseDifference.cuh | Fixes missing throw on sendROI failure for either input ROI. |
| src/c/Cuda/CudaClosure.cuh | Fixes missing throw on sendROI failure. |
| src/c/Cuda/CudaAddTwoImages.cuh | Fixes missing throw on sendROI failure for either input ROI. |
| src/c/Cuda/_TemplateKernel.cuh | Fixes missing throw in template kernel example. |
| src/c/Cuda/CMakeLists.txt | Removes hardcoded architectures, adjusts OpenMP flagging, bumps CUDA standard to 17. |
| SECURITY.md | Adds a security policy document. |
| readme.md | Updates top-level README with conda-forge install, usage, and source build guidance. |
| pyproject.toml | Adds scikit-build-core-based Python packaging metadata and build configuration. |
| GEMINI.md | Adds repository guidance/overview document. |
| docs/images/VarFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/VarFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/test_c2__brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/test_c1__brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/StdFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/StdFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/Opener_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/Opener_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MultiplySum_c2_15-15-6_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MultiplySum_c1_15-15-6_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MinFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MinFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MedianFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MedianFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MeanFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MeanFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MaxFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/MaxFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/LoG_c2_4-4-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/LoG_c1_4-4-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/HighPassFilter_c2_19-19-9_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/HighPassFilter_c1_19-19-9_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/Gaussian_c2_19-19-9_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/Gaussian_c1_19-19-9_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/EntropyFilter_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/EntropyFilter_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/ElementWiseDifference_c2_reverse_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/ElementWiseDifference_c1_reverse_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/Closure_c2_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| docs/images/Closure_c1_5-5-2_brightMIP.png | Adds LFS-tracked documentation image asset. |
| CONTRIBUTING.md | Updates contribution guide and adds local build/test + release process notes. |
| CODE_OF_CONDUCT.md | Adds Contributor Covenant code of conduct. |
| CMakePresets.json | Adds a Visual Studio preset for Windows builds. |
| CMakeLists.txt | Updates minimum CMake version, default CUDA arch handling, Python3 discovery, test toggles. |
| CLAUDE.md | Adds repository build/test/architecture guidance document. |
| ci-readme.md | Adds CI/CD process documentation (appears to be historical guidance). |
| check_dll_deps.ps1 | Adds a PowerShell helper for inspecting Windows DLL dependencies. |
| CHANGELOG.md | Adds a v4.0.0 changelog with packaging/CI/test changes. |
| build-win32/build.md | Removes outdated Windows build instructions file. |
| build-win32/build.bat | Removes outdated Windows build batch script. |
| build-linux/build.md | Removes outdated Linux build instructions file. |
| BACKLOG.md | Adds a prioritized backlog/roadmap of operations. |
| .gitignore | Updates ignore rules for build artifacts and compiled extensions. |
| .github/workflows/release.yml | Adds a tag-driven release workflow with tag/version guard. |
| .github/workflows/matlab-multibuild.yml | Adds multi-platform MATLAB toolbox build workflow. |
| .github/workflows/ci.yml | Adds Windows/Linux build+import CI gate using conda-forge CUDA. |
| .github/PULL_REQUEST_TEMPLATE.md | Adds a PR template. |
| .gitattributes | Updates Git LFS tracking rules (adds *.tif). |
| .condaignore | Adds conda-build ignore list to reduce source tarball noise. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| - pip: | ||
| - e==1.4.5 | ||
| - hydra-image-processor==0.1.0 | ||
| - pefile==2024.8.26 |
|
|
||
| Usage: | ||
| python scripts/download_artifacts.py --run-id <RUN_ID> | ||
| """ |
| import sys | ||
| import zipfile | ||
| from pathlib import Path | ||
| from urllib.request import urlretrieve, urlopen |
| headers = {} | ||
| if token: | ||
| headers["Authorization"] = f"token {token}" | ||
|
|
||
| req = urlopen(url) | ||
| data = json.loads(req.read()) |
| # Use gh CLI if available for authenticated downloads | ||
| if token or subprocess.run(["gh", "--version"], capture_output=True).returncode == 0: | ||
| subprocess.run([ | ||
| "gh", "api", url, | ||
| "-H", "Accept: application/vnd.github+json", | ||
| "-H", "X-GitHub-Api-Version: 2022-11-28", | ||
| "--output", str(output_path) | ||
| ]) | ||
| else: | ||
| urlretrieve(url, output_path) |
| ```bash | ||
| cd src/Python | ||
| pip install -e . | ||
| ``` |
| # Hydra Image Processor - Python Package | ||
|
|
||
| A Pythonic wrapper for the Hydra Image Processor C++/CUDA library, providing GPU-accelerated image processing operations with automatic CPU fallback. | ||
|
|
| | Version | Supported | | ||
| | ------- | ------------------ | | ||
| | 3.x | :white_check_mark: | | ||
| | < 3.0 | :x: | |
| add_executable(test_back test.cpp) | ||
|
|
||
| target_link_libraries(test_back PRIVATE HydraCudaStatic) | ||
| target_include_directories(test_back PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}../Cuda) |
|
|
||
| target_link_libraries(test_accuracy PRIVATE HydraCudaStatic) | ||
|
|
||
| target_include_directories(test_accuracy PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}../Cuda) |
Fast-forwards main to the conda-forge branch for the v4.0.0 release.
Highlights
pip install .via scikit-build-core builds the CUDA extension and installshydra_image_processor(+HIP/Hydrashims); version single-sourced inpyproject.toml; in-repo conda recipe removed (distribution via conda-forge).src/Python/Test/test_accuracy.py) that gates releases.make_ellipsoid_maskoff-center bug; explicit<cstdint>includes for newer toolchains.Verification
🤖 Generated with Claude Code