Skip to content

Releases: Kitware/nrtk

v1.0.2

15 Apr 18:40

Choose a tag to compare

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_cli crashing on empty input datasets by adding an
    explicit check before attempting to perturb.
  • Fixed mock_missing_deps not restoring parent package attributes after
    re-importing modules, causing mock.patch on dotted paths through guarded
    packages to fail with AttributeError in subsequent tests.
  • Fixed TestOtfImportGuard not evicting cached _pybsm submodules, allowing
    the import guard in otf.py to be bypassed when pybsm was mocked as
    missing.
  • Fixed a gap in the test matrix where per-extra tox environments could not
    catch cross-test pollution between extras. Introduced an optional tox
    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 a require_marker fixture that properly excludes them, and by
    defining an optional marker that aggregates all other markers except
    notebooks so the new cross-extras session can select them.
  • Fixed linting failures surfaced by upgrading ruff.

v1.0.1

18 Mar 22:36

Choose a tag to compare

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, and sphinx-lint jobs from poetry run to tox, adding a .tox-setup CI base to centralize the tox version pin, combining ruff-lint and ruff-format into a single ruff job, and migrating the coverage job to tox -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 the Dockerfile into a multi-stage build with build-from-source and build-from-pypi targets, 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 .dockerignore to 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 verify job 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 .trivyignore for vulnerability scan exceptions.
  • Fixed missing container documentation by adding docs/containers/nrtk-perturber.rst with 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; stale master branch reference and release notes path in CONTRIBUTING.md; Alpha development status classifier in pyproject.toml; and a broken reference to non-existent docs/review_process.rst in release_process.rst.
  • Fixed missing poetry2conda section in pyproject.toml.
  • Fixed incorrect public/private API visibility for nrtk.impls.perturb_image.optical.RadialDistortionPerturber, nrtk.impls.perturb_image.optical.otf, nrtk.interfaces.PerturbImage, and nrtk.interfaces.PerturbImageFactory.
  • Fixed missing developer documentation by adding a Testing Architecture guide 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, the ImportGuardTestsMixin, tox environments, and the GitLab CI pipeline work together to validate NRTK's modular dependency model.
  • Fixed outdated JitterPerturber code sample and broken link in README.md.
  • Fixed unlinked Related Resources section in validation_and_trust.rst by 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/, an xaitk-notebook-tests CI job across Python 3.10–3.13, and broadening the ruff per-file-ignores pattern to **/*tests/*.py so notebook tests receive test-file lint exemptions.

v1.0.0

26 Feb 20:21

Choose a tag to compare

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 ComposePerturber for chaining multiple perturbations and AlbumentationsPerturber for 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

18 Jun 22:59

Choose a tag to compare

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/generic and
    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 WaterDropletPerturber to Risk Factors Table in risk_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.ipynb to 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.ipynb to provide additional
    information regarding pyBSM's OTF parameters.

Fixes

  • Fixed pytest-core CI job with import guards for MAITE and notebook releated
    tests.

  • Fixed LinspaceStepPerturber to follow default linspace behavior
    (endpoint=True)

  • Fixed errors in T&E Guides and added Colab link.

  • Fixed some broken URLs in jupyter notebooks

  • Generalized DummyPerturber class 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 Union and Optional type hints.

  • Improved the completeness score of pyright --verifytypes

  • Enabled D flag 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

09 Jun 19:38

Choose a tag to compare

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 WaterDropletPerturber under implementations.

Fixes

  • Fixed pyright errors