Changelog
=========

Version 0.4.1 (Current)
------------------------

**Bug Fixes**

* **Spharm Recursion Stability**: Hardened the spherical-harmonic recursion
  coefficient handling to remove a small numerical instability observed in
  recent spharm workflows.
* **Gaussian Vector Initialization Robustness**: Fixed a Gaussian vector
  initialization edge case that could surface as NaNs on larger grids.
* **Regression Coverage**: Added tests around repeated Gaussian
  initialization and spharm validation paths to guard against regressions.

Version 0.4.0
------------------------

**New Features**

* **Atmospheric Diagnostics Expansion**: Added new compiled diagnostics and
  Python bindings for atmospheric-column workflows, including DCAPE and the
  updated tropical-cyclone / growth-rate calculation paths.
* **Hybrid and Sigma Interpolation Modernization**: Expanded the `vinth2p`
  family with clearer column-major and C-order entry points, improved ECMWF
  handling, and updated hybrid / sigma remapping helpers.

**Improvements**

* **Spharm and Wind Analysis Refactoring**: Refined spherical-harmonic and
  reduced-vector-wind internals to reduce wrapper overhead, improve caching,
  and make the public flow clearer.
* **Plotting Pipeline Acceleration**: Moved more scatter and curly-vector
  validation / sampling work into native helpers to reduce Python-side
  overhead and temporary-array churn.
* **Build and Documentation Cleanup**: Continued Meson build modernization
  and refreshed documentation and tests around the reorganized interfaces.

**Cleanup**

* **Legacy API Removal**: Removed the old Iris interface and other unused
  legacy paths, and tightened the wind-analysis / spectral-helper APIs.
* **Regression Coverage**: Added focused tests for the updated interpolation,
  plotting, spectral-helper, and wind-analysis paths.

Version 0.3.22
------------------------

**Improvements**

* **Tropical Cyclone Potential Intensity Diagnostics Modernization**:
  Updated the tropical cyclone potential intensity workflow to align with
  recent upstream validation data and decomposition conventions, while
  simplifying the Python interface and keeping the compiled backend as the
  primary execution path
* **spharm Internal Optimization**: Improved the internal spherical
  harmonic helper flow so repeated potential-field reconstruction can
  reuse intermediate spectral results more efficiently and avoid
  unnecessary wrapper overhead
* **windspharm Performance Improvements**: Reduced the Python-side
  overhead in the tested wind-decomposition workflow family while
  keeping the established public numerical conventions unchanged
* **Growth-rate and Pressure-Interpolation Additions**: Added compiled
  atmospheric-column growth diagnostics and pressure-coordinate
  interpolation support for Chemke-style workflows, including latitude-band
  dynamics, native spectral smoothing, direct batch evaluation, a new
  high-resolution / low-resolution zonal-wavenumber mode switch for the
  baroclinic solver, and supporting documentation

**Bug Fixes**

* **Tropical Cyclone Potential Intensity Parity And Robustness**: Fixed
  remaining pressure, outflow, and missing-column handling issues in the
  tropical cyclone potential intensity workflow, improved agreement with the
  current upstream reference implementation, and restored full focused Python
  coverage for the maintained wrapper layer
* **spharm and windspharm Regression Coverage**: Added focused tests for
  the updated internal spectral-helper and wind-analysis paths,
  including shape-validation coverage for the new optimized flow

Version 0.3.21
------------------------

**Improvements**

* **Scatter Placement Acceleration**: Moved the cell-interior candidate
  generation path in ``skyborn.plot.scatter`` into the native C helper so
  projected stippling workflows spend less time in Python loops and
  temporary array construction
* **Curly-Vector Display-Space Sampling Optimization**: Moved
  ``_NCLDisplaySampler`` display-cell validation and batch display-grid
  sampling into the native plotting helper, reducing intermediate-array
  overhead and lowering memory use for projected ``curly_vector``
  workflows on larger grids
* **Display-Curve Validation Fast Path**: Extended the native
  curly-vector tracer so it can return both data-space and display-space
  curves in one pass and run the display-curve quality screening in C
  while preserving the previous plotted geometry

**Cleanup**

* **Plot Internal Simplification**: Removed unused internal helper aliases
  from ``skyborn.plot.vector`` and kept the low-level plotting tests
  importing their implementation modules directly

Version 0.3.20
------------------------

**New Features**

* **Expanded Mann-Kendall Trend Analysis**: Aligned the supported core
  test families with ``pymannkendall`` while extending them to
  multidimensional NumPy and xarray workflows

  - Added public support for grouped multivariate, regional, correlated
    multivariate, seasonal, correlated seasonal, pre-whitening,
    trend-free pre-whitening, Hamed-Rao, Yue-Wang, and partial
    Mann-Kendall workflows
  - Added standalone partial-Mann-Kendall APIs for one-dimensional,
    multidimensional, and xarray inputs
  - Accelerated dense clean-series hot paths with private compiled kernels
    while preserving validated reference-compatible results

* **Hybrid-Pressure Diagnostics and Interpolation Kernels**: Added new
  compiled interpolation support in ``skyborn.interp``

  - Added modern Fortran kernels for ``interp_hybrid_to_pressure`` and
    ``interp_sigma_to_hybrid``
  - Added public diagnostics
    ``skyborn.interp.pressure_at_hybrid_levels`` and
    ``skyborn.interp.delta_pressure_hybrid``

**Improvements**

* **Interpolation Kernel Modernization**: Modernized the compiled
  ``rcm2rgrid``, ``rcm2points``, ``triple2grid``, ``grid2triple``, and
  shared ``linint2`` sources to free-form Fortran ``.f90`` while keeping
  the public entry points unchanged
* **Interpolation Performance and Build Cleanup**: Reduced eager wrapper
  overhead, trimmed temporary-array use, split duplicated support-library
  compilation in ``src/skyborn/interp/meson.build``, and renamed the
  internal ``vinth2p`` acceleration module from ``vinth2p_backend`` to
  ``vinth2p_kernels``
* **Scatter Stippling Enhancements**: Improved
  ``skyborn.plot.scatter`` so cell-interior stippling now works better
  for masked rectilinear grids and also supports inferred curvilinear
  cell geometry

**Bug Fixes**

* **Troposphere Cross-Section Support**: Extended
  ``skyborn.calc.troposphere`` WMO tropopause workflows to handle
  time-varying single-axis isobaric cross-sections such as
  ``(time, level, lat)`` and ``(time, level, lon)`` while preserving the
  correct output dimensions
* **rcm2rgrid xarray Coordinate Handling**: Dropped incompatible 2D
  auxiliary source-grid coordinates such as ``TLAT`` and ``TLONG`` after
  remapping instead of raising coordinate-size conflicts
* **Legacy Missing-Value Compatibility**: Restored legacy exact-hit
  missing-value behavior in ``rcm2points`` and ``rgrid2rcm`` so unresolved
  fields can still fall through to the historical interpolation logic when
  appropriate
* **Regression Coverage**: Added focused tests for the updated
  Mann-Kendall, troposphere, and interpolation dispatch and wrapper paths

Version 0.3.19
------------------------

**New Features**

* **Scatter Stippling API**: Added ``skyborn.plot.scatter`` for gridded
  map and profile stippling with NCL-style display-space thinning

**Improvements**

* **Unified Plotting Facade**: Added ``skyborn.plot.vector`` as the
  module-oriented public facade for the curly-vector feature family

  - ``skyborn.plot.vector.curly_vector``
  - ``skyborn.plot.vector.curly_vector_key``
  - ``skyborn.plot.vector.CurlyVectorPlotSet``
  - ``skyborn.plot.vector.CurlyVectorKey``

* **Plot Module Consolidation**: Consolidated the curly-vector
  implementation into ``skyborn.plot.vector`` and narrowed the
  ``skyborn.plot`` package-root export surface to the common public
  function-first entry points
* **Documentation and Test Updates**: Added focused plotting tests,
  examples, and documentation for the new scatter-stippling and
  ``skyborn.plot.vector`` workflows

**Cleanup**

* Removed the separate top-level implementation files
  ``ncl_vector.py``, ``vector_key.py``, and ``vector_plot.py`` from
  ``skyborn.plot``
* Removed the temporary package-level compatibility aliases for those
  deleted historical modules while keeping the intended public imports
  unchanged

Version 0.3.18
------------------------

**New Features**

* **Renamed Curly-Vector Public API**: Renamed the NCL-like vector
  plotting public API to:

  - ``skyborn.plot.curly_vector``
  - ``skyborn.plot.curly_vector_key``
  - ``skyborn.plot.CurlyVectorPlotSet``
  - ``skyborn.plot.CurlyVectorKey``

**Cleanup**

* **Removed Legacy Plotting Names**: Removed the historical public names
  ``velovect``, ``velovect_vertical_profile``, ``dataset_curly_vector``,
  ``curved_quiver``, ``add_curved_quiverkey``,
  ``CurvedQuiverplotSet``, and ``CurvedQuiverLegend``
* **Split Plotting Implementation**: Split the plotting implementation
  into clearer modules for the core renderer, the xarray / Cartopy
  dataset wrapper, and the reference-vector key artist

**Improvements**

* Replaced wildcard plotting exports with an explicit ``skyborn.plot``
  public API
* Added type annotations to the renamed public plotting entry points and
  key artist class
* Updated plotting tests, examples, and documentation for the renamed
  ``curly_vector`` public API

Version 0.3.17
------------------------

**🚀 New Features**

* **Optional CDO Integration Through ``skyborn.cdo``**: Added a compatibility namespace so users can access the standalone ``skyborn-cdo`` package from the main Skyborn API

  - Import path: ``from skyborn.cdo import Cdo``
  - Install path on supported platforms: ``pip install "skyborn[cdo]"``
  - Keeps ``skyborn-cdo`` as a separate binary-distribution package instead of forcing bundled CDO dependencies onto every Skyborn install
  - Targets the currently supported ``skyborn-cdo`` wheel platforms: Windows x86_64, Linux x86_64, and macOS arm64

* **Python 3.14 Support**: Added official support for Python 3.14 across all platforms (Linux, macOS, Windows)

* **manylinux2014 Wheels**: Added ``manylinux2014`` (glibc 2.17) wheel builds for compatibility with older Linux servers

  - Supports systems with glibc >= 2.17 (e.g., CentOS 7, RHEL 7 and equivalent)
  - Resolves installation failures on HPC clusters and older server environments
  - Wheel tag: ``manylinux_2_17_x86_64`` / ``manylinux2014_x86_64``

**🧹 Cleanup**

* **Removed conversion module**: Deleted the ``skyborn.conversion`` GRIB-to-NetCDF conversion module and its related tests and documentation

**🐛 Bug Fixes**

* **Aligned Modern spharm Fortran With Legacy SPHEREPACK Behavior**: Fixed the remaining numerical drift between the modernized ``.f90`` implementation and the legacy ``.f`` sources used by ``windspharm``

  - **Gaussian Stored Vector Synthesis Fix**: Corrected the ``vhsgs.f90`` ``vhgsi1`` coefficient index layout so ``gridtype='gaussian'`` with ``legfunc='stored'`` now matches the legacy implementation
  - **Precision Alignment**: Preserved the earlier modern Fortran fixes in ``vhaec.f90`` and ``vhsec.f90`` to keep transform precision aligned with the legacy sources
  - **Regression Coverage**: Added a dedicated ``spharm`` regression test to verify Gaussian stored vector analysis/synthesis matches ``legfunc='computed'``
  - **Integration Validation**: Rebuilt both modern ``.f90`` and legacy ``.f`` ``_spherepack`` extensions and verified ``spharm`` and ``windspharm`` workflows on synthetic cases and bundled example wind datasets

* **windspharm Performance Improvement**: Improved the modern ``spharm`` backend used by ``windspharm`` so common tested workflows are now roughly **15-55% faster** than the legacy SPHEREPACK-backed path while keeping engineering-equivalent results.

Version 0.3.16
--------------

**🐛 Bug Fixes**

* **Fixed Mann-Kendall xarray Dimension Handling**: Resolved critical dimension processing issues in ``mann_kendall_xarray`` function

  - **Scalar Dimension Filtering**: Fixed error when using ``sel()`` or ``isel()`` operations that create scalar dimensions (size=1)
  - **Dimension Order Preservation**: Corrected dimension ordering to preserve original array dimension sequence
  - **Root Cause**: Previous implementation didn't filter scalar dimensions and relied on unstable dictionary key ordering
  - **Solution**: Added ``data.sizes[d] > 1`` check and switched to ``data.dims`` iteration for stable ordering
  - **Impact**: Users can now safely use selective indexing (e.g., ``data.sel(lat=0)``) without dimension mismatch errors

* **CI/CD Infrastructure Updates**:

  - **Removed macOS Intel Support**: Dropped deprecated macos-13 (Intel) builds following GitHub's architecture policy changes
  - **Apple Silicon Focus**: Now exclusively building for macos-14 (Apple Silicon) for better performance and compatibility
  - **Simplified Deployment**: Streamlined macOS build configuration by removing conditional logic

* **Academic Metadata Enhancement**:

  - **Enhanced .zenodo.json**: Comprehensive package description now accurately covers all major features
  - **Better Citations**: Improved metadata for DOI generation including windspharm, gridfill, geostrophic wind, GPI/PI, trend analysis, and tropopause calculations
  - **Academic Impact**: More accurate representation for citation tracking and research attribution

**📦 Dependencies**

* Bump pypa/cibuildwheel from 3.2.1 to 3.3.0
* Bump actions/checkout from 5 to 6

**🧪 Testing**

* Added comprehensive dimension handling test suite with 5 test scenarios
* All 105 tests passing with 97% code coverage maintained
* Validated scalar dimension filtering and dimension order preservation

Version 0.3.15
---------------

**New Features in the interp Submodule: Enhanced Interpolation and Regridding Capabilities**

- **Added rcm2points**: Nearest neighbor interpolation from curvilinear grids to arbitrary point sets
- **Added rcm2rgrid**: Regridding from curvilinear grids to regular latitude-longitude grids
- **Added rgrid2rcm**: Reverse regridding from regular latitude-longitude grids to curvilinear grids
- **Added grid_to_triple**: Convert regular grids to irregular triplet representation (x, y, value)
- **Added triple_to_grid**: Map irregular triplets to regular grids (nearest neighbor, supports search radius/spherical distance)


Version 0.3.14
-------------------------

**🌀 New Genesis Potential Index (GPI) Module**

* **Tropical Cyclone Potential Intensity Calculations**: Complete implementation of Emanuel's potential intensity theory

  - **19-25x Performance Acceleration**: Achieves 19-25 times speedup compared to pure Python implementations
  - **Multi-Dimensional Support**: Handles single profiles, 3D gridded, and 4D time series data
  - **Comprehensive Unit Handling**: Automatic unit detection and conversion for temperature, pressure, and humidity
  - **xarray Native Interface**: Full integration with xarray data structures and metadata preservation

* **Key Features**:

  - **Potential Intensity Calculation**: Maximum sustained wind speed and minimum central pressure
  - **Smart Dimension Detection**: Automatically identifies time, level, lat, and lon dimensions
  - **Extensive Unit Support**: Handles various unit formats (K/°C/°F, Pa/hPa/mb/atm, kg/kg/g/kg/%)

* **Usage Examples**::

    from skyborn.calc.GPI.xarray import potential_intensity

    # Automatic dimension detection and unit conversion
    result = potential_intensity(sst, psl, pressure_levels, temperature, mixing_ratio)
    # Returns Dataset with min_pressure and pi (potential intensity)

Version 0.3.13
--------------

**GPI Synchronization**

* **Expanded tcpyPI-style diagnostics in the active PI backend**:

  - kept ``D:\Skyborn\src\skyborn\calc\GPI\fortran\tropical_cyclone_potential_intensity.f90``
    as the sole active Fortran source
  - added bulk Fortran diagnostics for 3D and 4D fields:
    ``t0``, ``otl``, ``lnpi``, ``lneff``, ``lndiseq``, and ``lnCKCD``
  - removed redundant Python compatibility helpers and restored explicit
    public decomposition entry points:
    ``log_decompose_pi(...)`` and ``pi_log_decomposition(...)``
  - restored inline parameter comments/docstrings in the PI backend and
    refreshed the package exports

* **Validation against local ``tcpyPI`` sample data**:

  - benchmark artifact:
    ``D:\Skyborn\.codex_tmp\gpi_tcpyPI_full_diagnostics_compare.json``
  - scatter plot artifact:
    ``D:\Skyborn\.codex_tmp\gpi_tcpyPI_full_diagnostics_scatter.png``
  - full-diagnostics benchmark:
    Skyborn ``3.21 s`` vs ``tcpyPI 22.33 s`` (``6.96x`` faster)
  - ``lnCKCD`` now matches stably instead of degrading to ``NaN`` on failed columns

**🔧 Breaking Changes**

* **Removed Iris Support**: Removed ``fill_cube`` function and iris dependencies from gridfill module

  - Use ``skyborn.gridfill.xarray.fill`` for xarray DataArrays instead
  - Iris cube support was causing package conflicts and installation difficulties
  - Focus shifted to xarray-based workflows which are more common in the scientific Python ecosystem

**🎯 Tropopause Calculation Enhancements**

* **New Comprehensive Tropopause Module**: Complete implementation of WMO tropopause calculation with multi-dimensional support

  - **1D Profile Support**: New ``trop_wmo_profile()`` function for single atmospheric profiles
  - **2D Spatial Analysis**: Support for (level, lat) and (level, lon) cross-sections
  - **3D & 4D Gridded Data**: Enhanced support for spatial and temporal datasets
  - **Simplified xarray Interface**: Auto-generates pressure from level coordinates
  - **Performance**: Optimized Fortran backend with 0.38ms per profile processing

* **Enhanced xarray Integration**:

  - **Automatic Pressure Generation**: ``trop_wmo(temperature)`` - no pressure array needed
  - **Smart Dimension Detection**: Automatically detects lat, lon, level, and time dimensions
  - **Metadata Preservation**: Maintains coordinate information and CF-compliant attributes
  - **Flexible Input Formats**: Works with any dimension ordering and coordinate names

* **Improved Code Quality**:

  - **Simplified Imports**: Removed try-except blocks, direct Fortran module importing
  - **Parameter Consistency**: Updated interface with ``temperature, pressure`` parameter order
  - **Better Documentation**: Comprehensive examples for all supported data formats
  - **Removed Unused Code**: Cleaned up ``_detect_cyclic_longitude`` function

**🌊 New Geostrophic Wind Module**

* **Complete Geostrophic Wind Implementation**: New high-performance module for calculating geostrophic wind components from geopotential height fields

  - **SIMD-Optimized Fortran Backend**: Vectorized calculations with OpenMP parallelization for optimal performance
  - **Multi-Dimensional Support**: Handles 2D, 3D, and 4D data arrays with automatic dimension handling
  - **Automatic Parameter Detection**: Smart longitude cyclicity detection and south-to-north latitude ordering
  - **Dual Interface Design**: Both NumPy arrays and xarray DataArrays supported

* **xarray Integration**: Seamless integration following established patterns

  - **Auto-Coordinate Detection**: ``from skyborn.calc.geostrophic.xarray import geostrophic_wind``
  - **Zero Manual Parameters**: ``result = geostrophic_wind(z)`` - that's it!
  - **CF-Compliant Output**: Standard metadata with eastward/northward wind components
  - **Multi-Resolution Support**: Adaptive algorithms work with 0.25° to 10° grids

* **Optimized Algorithms**: Production-ready implementation

  - **Finite Difference Method**: Uses geostrophic balance equations with proper boundary conditions
  - **Coriolis Parameter Handling**: Accurate f-plane approximation with pole region handling
  - **Memory Efficient**: Single precision (float32) processing with minimal memory footprint
  - **Flexible Grid Support**: Works with both cyclic and regional domains

**🔧 Technical Improvements**

* **Hybrid Build System**: Implemented innovative meson-setuptools hybrid architecture for seamless extension development

  - **Zero-Configuration Module Addition**: New Cython/C/Fortran modules automatically discovered and built
  - **Unified Workflow**: Single command ``python setup.py build_ext --inplace`` builds all extensions
  - **Cross-Platform Optimization**: Automatic compiler detection and platform-specific optimization flags
  - **Smart Extension Discovery**: ``setup.py`` automatically finds and compiles all submodules with ``meson.build`` files
  - **Backwards Compatible**: Maintains existing CI/CD workflows while enabling modern build features
  - **Developer Friendly**: Copy template ``meson.build``, modify module name, and it's ready to build

* **Enhanced Extension Building**: Streamlined process for adding compiled extensions

  - **Template-Based**: Simple copy and modify approach for new extensions
  - **Automatic Integration**: No manual ``setup.py`` modifications required for new modules
  - **Parallel Builds**: Meson enables efficient parallel compilation
  - **Incremental Updates**: Only rebuilds changed modules for faster development cycles

* **Fortran Extensions**: Added 2D and 1D specific interfaces (prepared for future compilation)
* **Enhanced Error Handling**: Better validation for different data dimensionalities
* **Memory Optimization**: Efficient processing of large multi-dimensional arrays
* **CF Compliance**: Output follows Climate and Forecast metadata conventions

**📊 New Functionality**

* **Spatial Correlation Analysis**: Added ``skyborn.calc.spatial_correlation`` function for analyzing spatial patterns of correlation between gridded data and time series
* **Enhanced Linear Regression**: Improved ``linear_regression`` function with robust NaN value handling for climate data with missing observations
* **Multi-Scale Analysis**: Seamlessly analyze from single profiles to global climate datasets
* **Time Series Support**: Process multi-year datasets with preserved temporal coordinates
* **Cross-Section Analysis**: Dedicated support for meridional and zonal cross-sections
* **Automatic Sorting**: Intelligent pressure level ordering with user override options

**🧪 Validation & Testing**

* Successfully tested on realistic atmospheric data (CESM2 model output)
* Verified accuracy: 99.96% success rate on 663,552 grid points
* Performance validated: 100 profiles processed in 38ms
* Cross-validated against standard atmospheric profiles

Version 0.3.12.post1
---------------------

**🔧 Critical Bug Fixes**

* **Fixed spharm Module Wheel Packaging**: Resolved critical issue where compiled Fortran extensions (``_spherepack*.pyd`` files) were missing from wheel distributions built via GitHub CI

  - **Root Cause**: Meson build system was installing to system paths instead of setuptools build directory
  - **Solution**: Configured meson to install directly to setuptools build directory using ``--python.purelibdir`` and ``--python.platlibdir`` parameters
  - **Impact**: Users can now install pre-compiled wheels with full spharm functionality

* **Improved Build System Integration**: Streamlined meson-setuptools integration for better maintainability

  - **Enhanced setup.py**: Added auto-discovery of meson modules for future extensibility
  - **Simplified Logic**: Removed complex file copying mechanisms in favor of native meson installation
  - **Better Error Handling**: Improved build process reliability across platforms

* **Fixed macOS Wheel Building**: Resolved OpenMP dependency compatibility issues

  - **Issue**: ``libgomp.1.dylib`` required minimum macOS 14.0 target version
  - **Solution**: Set ``MACOSX_DEPLOYMENT_TARGET=14.0`` in GitHub Actions workflow
  - **Note**: macOS 13 users can still install from source using ``pip install --no-binary=skyborn skyborn``

**Technical Improvements**

* **Enhanced Meson Configuration**:

  - Changed from ``install: false`` to ``install: true`` with proper ``install_dir`` configuration
  - Maintained smart copying logic for ``--inplace`` builds
  - Enhanced cross-platform compatibility

* **Streamlined GitHub Actions**:

  - Updated wheel building workflow for better OpenMP library handling
  - Ensures compatibility with modern macOS development environments
  - Improved build reliability and error reporting

**Validation**

* Successfully tested wheel building and installation across all supported platforms
* Confirmed ``_spherepack*.pyd`` files are correctly included in wheel distributions
* Verified functionality through comprehensive installation tests

Version 0.3.12
-------------------------------

**🚀 Major Performance Enhancements**

* **Modernized Spherical Harmonics (spharm) Submodule**: Complete Fortran code modernization for significantly improved windspharm performance:

  - **Modern Fortran Standards**: Updated legacy Fortran code to modern standards with improved memory management and vectorization
  - **~25% Performance Boost**: Windspharm calculations now run approximately 25% faster across all operations
  - **Optimized Algorithms**: Enhanced spherical harmonic transformations with better numerical efficiency
  - **Memory Optimization**: Improved memory layout and access patterns for better cache performance
  - **Cross-Platform Compatibility**: Better compiler optimization support across different platforms and architectures
  - **Maintained Accuracy**: All numerical results remain identical while achieving significant speed improvements

* **Enhanced Build System**: Streamlined compilation process for the modernized Fortran components

* **Python 3.13 Support**: Added full compatibility with Python 3.13:

  - **Wheel Distribution**: Pre-compiled wheels now available for Python 3.13 across all supported platforms
  - **Build System Compatibility**: Updated build configuration to support Python 3.13's new features and requirements
  - **Cross-Platform Testing**: Comprehensive testing on Linux x86_64, macOS (Intel & Apple Silicon), and Windows x64
  - **Future-Ready**: Ensures Skyborn stays current with the latest Python ecosystem developments

**🔧 Technical Improvements**

* **Fortran Modernization**:
  - Replaced obsolete Fortran constructs with modern equivalents
  - Improved array bounds checking and memory safety
  - Enhanced numerical stability in edge cases
  - Better integration with F2PY for Python bindings

* **Performance Optimizations**:
  - Vectorized mathematical operations in spherical harmonic calculations
  - Optimized Legendre polynomial computations
  - Reduced function call overhead in critical computation paths
  - Enhanced caching strategies for frequently used calculations

* **Platform and Build Improvements**:
  - **Extended Python Support**: Now supports Python 3.9, 3.10, 3.11, 3.12, and 3.13
  - **Multi-Platform Wheels**: Automated wheel building for Linux x86_64, macOS Intel/Apple Silicon, and Windows x64
  - **CI/CD Enhancements**: Improved build matrix with comprehensive testing across all supported Python versions
  - **Future ARM64 Linux Preparation**: Infrastructure ready for ARM64 Linux support when Python wheel ecosystem matures

**📊 Performance Benchmarks**

Windspharm operation speedups compared to previous version:
* **Vorticity Calculation**: ~25% faster execution time
* **Divergence Calculation**: ~25% faster execution time
* **Helmholtz Decomposition**: ~25% faster execution time
* **Streamfunction/Velocity Potential**: ~25% faster execution time
* **Combined Operations**: ~25% faster execution time

Version 0.3.11
-------------------------------

**🚀 Major Performance Improvements**

* **Optimized Mann-Kendall Trend Analysis**: Completely rewritten for significantly improved performance:

  - **Vectorized Implementation**: True vectorization of Mann-Kendall S-score calculation using advanced NumPy operations
  - **15-30x Performance Boost**: Processing speeds increased from ~19 to ~1,853 grid points per second for large climate datasets
  - **Climate Data Optimized**: Specifically tuned for typical climate data dimensions (40×192×288) with ~30-second processing time
  - **Memory Efficient**: Intelligent chunking strategy with only ~25MB memory usage for full climate grids
  - **Batch Processing**: Vectorized statistical calculations for clean data series, individual handling for series with missing values
  - **Enhanced Dask Support**: Improved map_blocks implementation for distributed computing workflows

* **Method Parameter Updates**: Replaced deprecated `method="auto"` with `method="theilslopes"` throughout the codebase for consistency

**🔧 Technical Improvements**

* **Simplified Import Structure**: Removed conditional/backup import logic in favor of direct scipy.stats imports for improved maintainability
* **Code Quality Enhancements**: Eliminated unused backup functions (`_mk_score_backup`, `_theil_sen_backup`) that were reducing test coverage
* **Consolidated Test Suite**: Merged supplementary test files into main test suite for better organization and reduced maintenance overhead
* **Documentation Fixes**: Corrected parameter names in API documentation examples (time_axis -> axis)
* **Advanced Vectorization**: New `_vectorized_mk_score()` function using upper triangular indices for O(n²) to O(1) complexity reduction
* **Smart Memory Management**: Automatic chunk size estimation based on available memory and data dimensions
* **Robust Error Handling**: Graceful handling of edge cases and problematic time series
* **Comprehensive Testing**: Full test suite validation with 85% code coverage maintained

**🎨 UI/UX Improvements**

* **Dark Mode Compatibility**: Fixed notification color gradients for better visibility in dark themes:

  - Updated notification system to use deep blue to light blue gradient for improved contrast
  - Enhanced table responsiveness styling for better dark mode support

* **Documentation Accuracy**: Corrected function documentation to match actual codebase:

  - Fixed plot module function listings to reflect actual available functions
  - Removed non-existent functions from documentation (plot_field, plot_vector_field, plot_streamlines, plot_contour)
  - Added proper documentation for actual functions (add_equal_axes, createFigure, curved_quiver, add_curved_quiverkey)
  - Updated windspharm interface references for accurate Sphinx linking
  - Standardized "XArray" to "Xarray" throughout documentation

**📊 Performance Benchmarks**

For typical climate data analysis scenarios:

* **Small datasets** (50x20x30): 6.3x speedup (251 -> 1,578 points/sec)
* **Medium datasets** (100x30x40): 14.8x speedup (74 -> 1,093 points/sec)
* **Large datasets** (200x40x50): 31.3x speedup (19 -> 595 points/sec)
* **Climate grids** (40×192×288): ~30 seconds total processing time

Version 0.3.10
-------------------------------

**🚀 New Features**

* **Advanced GridFill Module**: Major expansion of grid filling capabilities for atmospheric data interpolation:

  - **New XArray Interface**: Modern `skyborn.gridfill.xarray` module with automatic coordinate detection
  - **Comprehensive Tutorial**: Interactive Jupyter notebook demonstrating wind field gap filling techniques
  - **Multiple Interpolation Methods**: Basic Poisson, high-precision, zonal initialization, and relaxation parameter tuning
  - **Physical Validation**: Component-wise vs direct speed filling comparison for vector wind fields
  - **Quality Assessment**: Grid coverage validation and interpolation accuracy metrics

* **Rossby Wave Source Analysis**: Added comprehensive Rossby wave source calculation capabilities to the windspharm module:

  - New ``rossbywavesource()`` method in both standard and xarray interfaces
  - Implements the Sardeshmukh & Hoskins (1988) formulation: S = -ζₐ∇·v - v_χ·∇ζₐ
  - Support for custom truncation levels and Earth's angular velocity parameters
  - CF-compliant metadata for xarray output with proper units and standard names


**🔧 Improvements**

* **Test File Consolidation**: Merged duplicate gridfill test files for better maintainability
* **Better Grid Handling**: Improved spherical harmonic truncation validation for different grid sizes
* **Documentation Updates**: Enhanced gallery with new Rossby wave source visualization examples

**📚 Documentation**

* **New GridFill Tutorial**: Complete interactive demonstration including:

  - Advanced data interpolation techniques with real atmospheric wind data
  - Missing data simulation and quality assessment methodologies
  - Component-wise vs direct approach comparison for vector fields
  - Publication-quality visualizations with integer colorbar formatting
  - Performance analysis and best practices for atmospheric applications

* **New Tutorial Notebooks**: Added comprehensive examples for:

  - Rossby wave source analysis and visualization
  - Grid filling techniques with atmospheric data
  - Longitude coordinate system transformations

* **Enhanced Gallery**: Updated with new visualization examples including:

  - ``windspharm_rossby_wave_source_truncations.png`` showing truncation effects
  - ``gridfill_missing_data_overview.png`` demonstrating gap filling scenarios
  - ``gridfill_component_vs_direct_comparison.png`` showing physical constraint preservation
  - Improved figure captions and mathematical formulations
  - Better integration of notebook examples

**🧪 Testing**

* **Expanded Test Coverage**: Added comprehensive tests for new Rossby wave source functionality
* **Grid Size Validation**: Enhanced parameter validation for different grid resolutions
* **Cross-interface Testing**: Verified consistency between standard and xarray interfaces

**Technical Notes**

* All existing functionality remains backward compatible
* Enhanced error handling for grid size limitations in spherical harmonic calculations
* Improved memory efficiency for large-scale atmospheric analysis

Version 0.3.9
------------------------

**New Features**

* **Enhanced Spherical Harmonics Module**: Improved performance and stability for atmospheric data analysis
* **New Windspharm Submodule**: Added comprehensive wind field analysis capabilities including:

  - Vector wind analysis and spherical harmonic transforms
  - Vorticity and divergence calculations
  - Stream function and velocity potential computations
  - Compatible with various grid types and coordinate systems

* **Optimized Build System**: Streamlined compilation process for better cross-platform compatibility

**🔧 Improvements**

* **Better Error Handling**: Enhanced error messages and debugging information
* **Performance Optimizations**: Faster execution for large-scale atmospheric calculations
* **Code Quality**: Improved type hints and documentation coverage

**🐛 Bug Fixes**

* **Fixed Dimension Handling in Regridding**: Resolved dimension change issues in interp.regridding.py module that were causing inconsistent array shapes during interpolation operations
* Fixed interpolation edge cases in atmospheric data processing
* Resolved compilation issues on various platforms
* Improved numerical stability in spherical harmonic transforms

**📚 Documentation**

* **Windspharm Module Documentation**: Complete documentation and examples for wind field analysis functions
* Added comprehensive examples and tutorials
* Enhanced API reference with mathematical formulations
* Improved installation and usage guides

**🔧 Technical Details**

* **Dependencies**: Updated NumPy compatibility, enhanced F2PY integration, improved Fortran compiler support
* **Platform Support**: Linux x86_64 (manylinux2014), macOS (Intel and Apple Silicon), Windows x64
* **Windspharm Dependencies**: Added support for spherical harmonic wind analysis libraries

Version 0.3.8
--------------

**🔧 Bug Fixes**

* **fix**: remove obsolete Fortran wrapper file spherepack-f2pywrappers.f
* Improved build system stability and cross-platform compatibility
* Enhanced error handling and debugging information

**📚 Documentation**

* Updated API documentation
* Improved code examples and installation guides
* Enhanced cross-reference documentation

Version 0.3.7
--------------

**New Features**

* **Emergent Constraints Method**: Added new emergent constraints analysis method for climate data analysis
* **Enhanced Documentation**: Interactive particle effects entrance page

**🔧 Improvements**

* Optimized documentation structure and user interface
* Updated interactive documentation entry page with particle effects
* Improved cross-platform compatibility
* Enhanced code quality and test coverage

**📚 Documentation**

* New particle effects documentation entrance page
* Updated API documentation
* Improved code examples and usage guides
* Enhanced Sphinx Book Theme with blue color scheme

**🐛 Bug Fixes**

* Fixed minor issues and improved code quality
* Resolved documentation build issues
* Enhanced error handling

Version 0.3.6
--------------

* Added emergent constraint analysis functionality
* Improved GRIB to NetCDF conversion
* Added comprehensive documentation with Jupyter notebooks
* Enhanced statistical analysis functions
