Changelog
=========
Changes to XRayLabTool are documented in this file.
The format is based on `Keep a Changelog `_,
and this project adheres to `Semantic Versioning `_.
Version Categories
------------------
- **Added**: New features
- **Changed**: Changes in existing functionality
- **Deprecated**: Soon-to-be removed features
- **Removed**: Now removed features
- **Fixed**: Bug fixes
- **Security**: Vulnerability fixes
v0.4.1 (2026-04-07)
--------------------
**Fixed**
- Version bump for patch release
v0.4.0 (2026-04-07)
--------------------
**Added**
- Backend abstraction layer (``xraylabtool.backend``) supporting NumPy and JAX backends
- ``set_backend("jax")`` / ``set_backend("numpy")`` for runtime backend switching
- ``InterpolationFactory`` for backend-agnostic PCHIP interpolation (scipy ↔ interpax)
- PyQtGraph-based interactive plotting widgets (replaces matplotlib in GUI)
- JAX float64 auto-configuration at package import time
- 202 characterization tests with golden-value assertions for migration safety
- Optional ``[jax]`` dependency group: ``pip install xraylabtool[jax]``
- Optional ``[plots]`` dependency group for matplotlib (publication plots)
- Architecture Decision Records in ``docs/architecture/``
- Security scanning workflow and license compliance auditing
**Changed**
- All core computation modules now use backend ops instead of direct NumPy
- GUI plotting migrated from matplotlib to PyQtGraph for interactive performance
- ``ColorPalette.mpl_cycle`` renamed to ``ColorPalette.plot_cycle``
- ``apply_matplotlib_theme()`` replaced with ``apply_pyqtgraph_theme()``
- ``scipy.constants`` eliminated from utils.py (uses constants.py directly)
- matplotlib moved from required to optional dependency
- ReadTheDocs migrated to uv-based builds on Ubuntu 24.04 / Python 3.13
- CI updated to Python 3.13, latest GitHub Actions with SHA-pinned versions
**Deprecated**
- ``optimization/vectorized_core.py`` manual SIMD heuristics (use JAX backend instead)
- ``optimization/optimized_core.py`` monkey-patching (use ``set_backend('jax')``)
**Removed**
- ``ScalarFriendlyArray`` numpy subclass (replaced with plain numpy arrays)
- Direct matplotlib dependency (now optional via ``[plots]`` extra)
- Direct scipy.constants usage in computation path
v0.3.0 (2025-12-15)
--------------------
**Added**
- GUI modernization: dark mode toggle with persistent preferences
- New theme engine supporting light and dark themes
**Security**
- Replaced python-jose with PyJWT to address Minerva attack vulnerability
**Fixed**
- Plot clipping issues with scrollbars
- Single-point plot visibility in energy sweeps
- Log path toggle contrast
- GUI smoke test made non-blocking for CI reliability
**Maintenance**
- Removed obsolete workflows (security.yml, performance-monitoring.yml, dependabot.yml)
- Simplified lint job to use ruff only (removed isort/black)
- Updated tool versions in CI
- Added explicit permissions to all GitHub Actions workflows
v0.2.x (2025)
--------------
See the full history in `CHANGELOG.md `_
for detailed v0.2.0 through v0.2.7 release notes covering:
- Enhanced CLI with shell completion support
- Batch processing from CSV files
- Performance benchmarking suite (150,000+ calculations/sec)
- Cross-platform shell completion (bash, zsh, fish, PowerShell)
- Mamba support and environment isolation
v0.1.0 (2024)
--------------
**Added**
- Core X-ray optical properties calculations
- Support for single materials and compounds
- Complex refractive index calculations (delta, beta)
- Critical angle and attenuation length calculations
- Chemical formula parsing
- Energy-wavelength conversions
- Basic command-line interface
- Atomic scattering factor data for 92 elements
Compatibility Matrix
--------------------
.. list-table:: Platform and Python Version Support
:header-rows: 1
:widths: 20 20 20 20 20
* - Version
- Python 3.12
- Python 3.13
- Windows
- macOS/Linux
* - v0.4.1
- ✅
- ✅
- ✅
- ✅
* - v0.4.0
- ✅
- ✅
- ✅
- ✅
* - v0.3.0
- ✅
- ✅
- ✅
- ✅
* - v0.2.x
- ✅
- ✅
- ✅
- ✅
* - v0.1.0
- ✅
- ❌
- ✅
- ✅
Migration Guides
----------------
For upgrading between versions, see:
- :doc:`/guides/migration_guide_v0_4` — Upgrading from v0.3.0 to v0.4.0