0.26.0 ====== This release focuses on expanding T&E and saliency documentation, improving PyBSM integration and performance, adding Python 3.13 support, and refactoring internal utilities for better consistency and maintainability. Several fixes address documentation, naming, and floating-point precision issues. Updates ------- **Documentation and Guides** * Added a T&E guide and notebook demonstrating use of the ``JitterOTFPerturber`` to simulate camera motion jitter. * Added a How-To guide for saliency maps in an object detection workflow. * Revamped the Sphinx docs landing page using the ``sphinx-design`` extension. * Updated pre-commit hook configuration to format markdown tables. * Fixed broken documentation links. **Pybsm and Perturber Improvements** * Introduced new ABC PybsmOTFPerturber to improve code quality across PyBSM perturbers. * All OTF calculations now performed entirely within PyBSM. * PyBSM now caches the PSF to improve performance across multiple perturbations. * Added default configuration support in ``src/nrtk/impls/perturb_image/pybsm/utils.py``. * Added ``docs/examples/pybsm/data/uav_default_config_nrtk.json`` and the corresponding example notebook ``pybsm_default_config.ipynb``. * Replaced OpenCV calls in PyBSM perturbers with SciPy equivalents. * Fixed bug where sensor jitter amplitudes were not passed to PyBSM perturbers. **Perturber Interface and Regression Testing** Added ``RandomScalePerturber``. ``additional_params`` in ``PerturbImage.perturb`` is now treated as ``**kwargs``. Non-PyBSM perturbers now use ``PSNRImageSnapshotExtension`` for regression testing. PyBSM perturbers now use the PSNR regression testing module. **Internal Refactoring and Consistency** * Added lazy importing to all ``__init__.py`` files. * Added ``__all__`` declarations and ``from . import ...`` statements across all modules. * Removed ``xaitk-jatic`` from NRTK dependencies and extras. * Removed OpenCV dependency from ``WaterDropletPerturber``. * Updated ``WaterDropletPerturber.__init__`` to use a default seed of 1. * Removed ``water_droplet_utils.py`` (moved helper function to ``water_droplet_perturber``). * Moved custom Syrupy extension fixtures to ``conftest.py`` for reuse and improved readability of fuzzy comparator. * Added Python 3.13 support. **Math and Utility Updates** * Updated ``ccw_sort`` to use ``numpy.float128`` arrays. * Updated ``WaterDropletPerturber``'s ``get_bezier_curve`` to include a tolerance parameter (default ``1e-8``) for floating-point comparisons. * Updated snapshots for ``WaterDropletPerturber``'s ``test_ccw_sort`` and ``test_regression_get_bezier_curve``. **Compatibility and Naming** * Renamed ``linspace_step`` module to ``linspace`` to match class name. * Fixed diffusion pipeline loader compatibility with ``transformers>=4.55``.