Releases: Kitware/nrtk
v1.0.2
v1.0.2
This patch release hardens the nrtk_perturber_cli entrypoint against empty
input datasets, fixes two cross-test pollution bugs in the import-guard test
infrastructure, and resolves linting failures surfaced by a ruff upgrade.
It also closes a gap in the test matrix where per-extra tox environments were
missing cross-extras pollution issues.
Fixes
- Fixed
nrtk_perturber_clicrashing on empty input datasets by adding an
explicit check before attempting to perturb. - Fixed
mock_missing_depsnot restoring parent package attributes after
re-importing modules, causingmock.patchon dotted paths through guarded
packages to fail withAttributeErrorin subsequent tests. - Fixed
TestOtfImportGuardnot evicting cached_pybsmsubmodules, allowing
the import guard inotf.pyto be bypassed whenpybsmwas mocked as
missing. - Fixed a gap in the test matrix where per-extra tox environments could not
catch cross-test pollution between extras. Introduced anoptionaltox
environment and CI job that runs all non-notebook tests in a single session
with every extra installed. - Fixed pytest collecting marker-gated tests when no marker was specified, by
adding arequire_markerfixture that properly excludes them, and by
defining anoptionalmarker that aggregates all other markers except
notebooksso the new cross-extras session can select them. - Fixed linting failures surfaced by upgrading
ruff.
v1.0.1
v1.0.1
This patch release contains fixes to CI/CD pipelines, container builds, documentation, public/private API visibility, and notebook execution. Key areas include completing the tox migration for CI quality jobs, fixing the container build pipeline, correcting documentation errors and metadata, and resolving notebook path and import guard issues.
Fixes
- Fixed incomplete tox migration in the CI quality stage by migrating
ruff,pyright, andsphinx-lintjobs frompoetry runto tox, adding a.tox-setupCI base to centralize the tox version pin, combiningruff-lintandruff-formatinto a singleruffjob, and migrating the coverage job totox -e coverage. - Fixed container CI pipeline by redesigning it with separate build jobs for branch (
build-branch), main (build-main), and release (build-release) builds. Restructured theDockerfileinto a multi-stage build withbuild-from-sourceandbuild-from-pypitargets, removing the Poetry dependency. Switched to CPU-only PyTorch, reducing image size from ~9.2 GB to ~2.7 GB. Added a versioned image tagging scheme and switched.dockerignoreto a whitelist approach. - Fixed missing container security and lifecycle tooling by adding SBOM generation (Syft), vulnerability scanning (Trivy), cosign image signing, and SBOM attestation to all build jobs. Added a
verifyjob for signature verification and smoke testing, a nightly scheduled sweep to remove stale branch images and cosign artifacts, and stale artifact cleanup when overwriting existing tags. Added.trivyignorefor vulnerability scan exceptions. - Fixed missing container documentation by adding
docs/containers/nrtk-perturber.rstwith image tag reference, usage instructions, input arguments, error codes, and cosign verification commands. - Fixed documentation errors including a typo, broken anchor link, extras case, and missing pyBSM hyperlink in
README.md; stalemasterbranch reference and release notes path inCONTRIBUTING.md; Alpha development status classifier inpyproject.toml; and a broken reference to non-existentdocs/review_process.rstinrelease_process.rst. - Fixed missing
poetry2condasection inpyproject.toml. - Fixed incorrect public/private API visibility for
nrtk.impls.perturb_image.optical.RadialDistortionPerturber,nrtk.impls.perturb_image.optical.otf,nrtk.interfaces.PerturbImage, andnrtk.interfaces.PerturbImageFactory. - Fixed missing developer documentation by adding a
Testing Architectureguide with a Quick Start for running tox, the environment-to-extras mapping table, and a checklist for adding new implementations. The guide also covers how import guards, pytest markers, canary tests, theImportGuardTestsMixin, tox environments, and the GitLab CI pipeline work together to validate NRTK's modular dependency model. - Fixed outdated
JitterPerturbercode sample and broken link inREADME.md. - Fixed unlinked Related Resources section in
validation_and_trust.rstby adding:doc:cross-references and removing the unused Parameter Defaults entry. - Fixed XAITK-Saliency notebook execution errors including incorrect path resolution when running via papermill, keyword argument and visualization errors in the object detection notebook, and import guards not aligned with current codebase patterns. Enabled GPU-accelerated PyTorch in notebook install cells.
- Fixed missing XAITK-Saliency notebook test coverage by adding import guard unit tests under
docs/examples/nrtk_xaitk_workflow/notebook_tests/, anxaitk-notebook-testsCI job across Python 3.10–3.13, and broadening theruffper-file-ignores pattern to**/*tests/*.pyso notebook tests receive test-file lint exemptions.
v1.0.0
v1.0.0
This is the first stable release of the Natural Robustness Toolkit (NRTK). The API is hardened and will follow semantic versioning going forward: patch releases (1.0.x) for bug fixes, minor releases (1.x.0) for backward-compatible features, and major releases (x.0.0) for breaking changes.
v1.0.0 establishes the full foundation of NRTK for still-imagery computer vision robustness evaluation. Future releases will expand into full-motion video, additional sensor modalities, and broader operational domains.
There are no functional changes from v0.27.2 — this is a drop-in replacement.
What's in v1.0.0
27 perturber implementations across five categories:
- Photometric (12) — blur (average, Gaussian, median), enhancement (brightness, color, contrast, sharpness), and noise (Gaussian, salt, pepper, salt-and-pepper, speckle)
- Optical (8) — physics-based perturbations via pyBSM (pybsm, defocus, jitter, turbulence aperture, detector, circular aperture) and radial distortion
- Geometric (4) — random crop, translation, rotation, and scale
- Environment (2) — haze and water droplets
- Generative (experimental) (1) — diffusion-based perturbation
- Plus
ComposePerturberfor chaining multiple perturbations andAlbumentationsPerturberfor integration with the Albumentations library
4 perturbation factories for systematic parameter sweeps: step, linspace, one-step, and multivariate.
8 operational risk modules mapping real-world degradation factors to NRTK perturbations (atmospheric turbulence, defocus, extreme illumination, haze, high-frequency vibration, radial distortion, sensor noise and resolution, water droplets), with an interactive risk matrix.
JATIC ecosystem integration — NRTK is part of the JATIC product suite for AI Test & Evaluation. The nrtk.interop module provides full MAITE compliance, enabling NRTK perturbations to be applied directly to MAITE-wrapped datasets and models alongside other JATIC tools such as DataEval and XAITK-Saliency. This includes augmentation adapters for both classification and detection tasks.
Validation and Trust page documenting current validation status, known limitations, and a quarterly-updated roadmap.
Comprehensive documentation following Diátaxis structure (Getting Started, Tutorials, How-To Guides, Explanations, Reference) with 19 example notebooks spanning core tutorials, MAITE workflows, and XAITK-Saliency integration.
Modular dependency architecture — NRTK's core has a minimal dependency footprint, with 10 optional extras that allow users to install only what they need. This makes NRTK deployable into a wide range of environments, including hardened or restricted systems with strict dependency policies. Python 3.10–3.13 supported.
Acknowledgment
This material is based upon work supported by the Chief Digital and Artificial Intelligence Office under Contract No. 519TC-23-9-2032. The views and conclusions contained herein are those of the author(s) and should not be interpreted as necessarily representing the official policies or endorsements, either expressed or implied, of the U.S. Government.
v0.23.0
v0.23.0
Expanded documentation and tutorial coverage, including new guides for the
WaterDropletPerturber, operational risks, and interoperability. Improved
installation instructions, docstring formatting, and cross-referencing. Fixed
perturber behavior, notebook errors, CI test issues, and linting violations.
Strengthened type checking and test utility consistency.
Updates / New Features
Examples
- Added an example notebook guide to demonstrate the use of the
WaterDropletPerturber.
Documentation
-
Improved inline documentation and docstring formatting for files under
src/nrtk/perturb_image/impls/genericand
src/nrtk/perturb_image/impls/pybsm. -
Improved installation documentation for README.md
-
Added a new section to the installation guide that lists the key dependencies
for each perturber. -
Added a documentation page outlining operational risks
-
Ensure intra-documentation links are consistent
-
Added explanatory context to figure 1 in
nrtk_explanation.rst. -
Added missing T&E notebooks to
nrtk_jatic/testing_and_eval_guides.rst. -
Added
WaterDropletPerturberto Risk Factors Table inrisk_factors.rst. -
Improved documentation based on Phase-1 documentation feedback.
-
Added link to getting started within tutorial to ensure readers are familiar
with core concepts. -
Added a note to the review process documentation on use of MRs instead of PRs.
-
Improved documentation for
nrtk_tutorial.ipynbto enable better tutorial
transitions. -
Moved T&E guides and COCO scoring notebooks to
Tutorials. -
Improved Interoperability clarity and organization.
-
Added links to pyBSM documentation for image formation concepts.
-
Improved documentation for
otf_visualization.ipynbto provide additional
information regarding pyBSM's OTF parameters.
Fixes
-
Fixed pytest-core CI job with import guards for MAITE and notebook releated
tests. -
Fixed
LinspaceStepPerturberto follow default linspace behavior
(endpoint=True) -
Fixed errors in T&E Guides and added Colab link.
-
Fixed some broken URLs in jupyter notebooks
-
Generalized
DummyPerturberclass to be used in tests. -
Use context handlers for file opens in
tests/impls/score_detections/test_coco_scorer.py -
Fixed ruff rules and updated linting.
-
Removed
UnionandOptionaltype hints. -
Improved the completeness score of pyright --verifytypes
-
Enabled
Dflag for ruff and fixed associated errors. -
Update RTD config to convert SVGs and use a different LaTeX engine with
support for unicode characters.
v0.22.0
Added new peturber: WaterDropletPerturber. Improved T&E guide descriptions.
Updates / New Features
Core Features
- Added implementation for
WaterDropletPerturber.
CI/CD
- Install extras for pyright CI jobs
Documentation
-
Update T&E guides with documentation links, image plotting, and parameter descriptions.
-
Added module entry for
WaterDropletPerturberunder implementations.
Fixes
- Fixed pyright errors