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