Skip to content

Latest commit

 

History

History
842 lines (652 loc) · 30.7 KB

HISTORY.rst

File metadata and controls

842 lines (652 loc) · 30.7 KB

History

v0.7.3 (06 November 2024)

This patch release updates the NumPy constraint to numpy >=2.0.0,<3.0.0 to ensure compatibility with NumPy 2.0 (which introduces breaking changes). It also fixes a bug in the get_bounds() method where bounds could not be found on supported non-CF axes (e.g., "latitude", "longitude", etc.) even with the "bounds" attribute set on the axes.

Bug Fixes

  • Update get_bounds() to support mappable non-CF axes using "bounds" attr by Tom Vo in #708

Documentation

  • Add link to SciPy talk in docs by Tom Vo in #704

DevOps

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.7.2...v0.7.3

v0.7.2 (02 October 2024)

This patch release introduces significant performance improvements to the temporal grouping averaging APIs (group_average, climatology, and departures) and adds support for piControl and other simulations that have time coordinates starting at year 1 (e.g., “0001-01-01”) when dropping incomplete seasons.

Enhancements

  • [Refactor] Improve the performance of temporal group averaging by Tom Vo in #689

Bug Fixes

  • Update temporal.py to properly handle piControl and other simulations that start at year 1 when dropping incomplete seasons by Jiwoo Lee in #696

Documentation

DevOps

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.7.1...v0.7.2

v0.7.1 (24 June 2024)

This patch release fixes a bug in the Regrid2 API where a static order of dimensions are incorrectly expected. It updates add_missing_bounds() to convert np.timedelta64 values to pandas.Timedelta objects to support Xarray's datetime component accessor.

This release also includes numerous updates to the documentation, including adding a general guide to parallel computing with Dask notebook. It also ensures all existing notebooks and documentation are up to date with the latest and relevant information.

Bug Fixes

  • Fixes regrid2 mapping output to input ordering by Jason Boutte in #653
  • Update add_missing_bounds() to convert np.timedelta64 to pd.Timedelta to support Xarray's datetime component accessor _Jiwoo Lee in #660

Documentation

  • Add JOSS paper by Tom Vo in #567
  • Add Parallel Computing with Dask Jupyter Notebook by Tom Vo in #489
  • Update regridding notebook for v0.7.0 by Jill Chengzhu Zhang in #646
  • Update FAQs, HPC guide, and Gentle Introduction by Tom Vo in #650
  • Simplify the contributing guide by Tom Vo in #593
  • Update notebook env setup instructions with kernel by Tom Vo in #652
  • Add instructions for setting ESMFMKFILE and update links to xESMF docs by Tom Vo in #643
  • Temporal average notebooks maintanance by Jiwoo Lee in #633
  • Review of spatial averaging and general dataset utilities by Stephen Po-Chedley in #644

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.7.0...v0.7.1

v0.7.0 (10 April 2024)

This minor release includes enhancements to the performance of the Regrid2 API and fixes Regrid2 to align the behavior of how missing values are handled with CDAT. There are various bug fixes, documentation updates, and feature deprecations listed below.

Enhancements

  • Improving regrid2 performance by Jason Boutte in #533
  • Update Regrid2 missing and fill value behaviors to align with CDAT and add unmapped_to_nan arg for output data by Jason Boutte in #613

Bug Fixes

  • Fix Regrid2 to convert bounds as Dask Arrays to NumPy Arrays for compatibility with NumPy based code by Tom Vo and Jiwoo Lee in #634
  • Fix climo notebook missing T bounds and add notebook env setup in all example notebooks by Tom Vo in #623
  • Update unweighted temporal averages to not require bounds by Tom Vo in #579

Documentation

  • Update documentation styling for easier navigation by Tom Vo in #624
  • Add list of projects using xCDAT by Tom Vo in #617
  • Fix ESMFMKFILE env variable not set in RTD build by Tom Vo in #577

Deprecations

  • Remove deprecated features and APIs by Tom Vo in #628, including:
    • horizontal_xesmf() and horizontal_regrid2()
    • **kwargs from create_grid()
    • add_bounds accepting boolean arg in open_dataset() and open_mfdataset()
    • Remove CDML/XML support from open_dataset() and open_mfdataset() since CDAT is EOL since Dec/2023

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.6.1...v0.7.0

v0.6.1 (29 November 2023)

This patch version adds a default value to the axes argument in ds.bounds.add_missing_bounds() (axes=["X", "Y", "T"]). The axes argument was added in v0.6.0 and did not have a default value, which inadvertently introduced a breaking change to the API.

xesmf is now a required dependency because its core library, ESMF, supports Windows as of Feb/2023. More information can be found here.

Bug Fixes

DevOps

  • Make xESMF a required dependency by Tom Vo in #566

Documentation

  • Update doc: Add link to the ESFG seminar xCDAT introduction video by Jiwoo Lee in #571
  • Fix v0.6.0 changelog headers for proper nesting by Tom Vo in #559

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.6.0...v0.6.1

v0.6.0 (10 October 2023)

This minor version update consists of new features including vertical regridding (extension of xgcm), functions for producing accurate time bounds, and improving the usability of the create_grid API. It also includes bug fixes to preserve attributes when using regrid2 horizontal regridder and fixing multi-file datasets spatial average orientation and weights when lon bounds span prime meridian.

Features

Deprecation

  • Add deprecation warnings for add_bounds boolean args by Tom Vo in #548,
  • Add deprecation warning for CDML/XML support in open_mfdataset() by Tom Vo in #503, #504

Bug Fixes

Horizontal Regridding

  • Improves error when axis is missing/incorrect attributes with regrid2 by Jason Boutte in #481
  • Fixes preserving ds/da attributes in the regrid2 module by Jason Boutte in #468
  • Fixes duplicate parameter in regrid2 docs by Jason Boutte in #532

Spatial Averaging

  • Fix multi-file dataset spatial average orientation and weights when lon bounds span prime meridian by Stephen Po-Chedley in #495

Documentation

  • Typo fix for climatology code example in docs by Jiwoo Lee in #491
  • Update documentation in regrid2.py by Jiwoo Lee in #509
  • Add more fields to GH Discussions question form by Tom Vo in #480
  • Add Q&A GH discussions template by Tom Vo in #479
  • Update FAQs question covering datasets with conflicting bounds by Tom Vo in #474
  • Add Google Groups mailing list to docs by Tom Vo in #452
  • Fix README link to CODE-OF-CONDUCT.rst by Tom Vo in #444
  • Replace LLNL E3SM License with xCDAT License by Tom Vo in #443
  • Update getting started and HPC documentation by Tom Vo in #553

DevOps

  • Fix Python deprecation comment in conda env yml files by Tom Vo in #514
  • Simplify conda environments and move configs to pyproject.toml by Tom Vo in #512
  • Update DevOps to cache conda and fix attributes not being preserved with xarray > 2023.3.0 by Tom Vo in #465
  • Update GH Actions to use mamba by Tom Vo in #450
  • Update constraint cf_xarray >=0.7.3 to workaround xarray import issue by Tom Vo in #547

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.5.0...v0.6.0

v0.5.0 (27 March 2023)

This long-awaited minor release includes feature updates to support an optional user-specified climatology reference period when calculating climatologies and departures, support for opening datasets using the directory key of the legacy CDAT Climate Data Markup Language (CDML) format (an XML dialect), and improved support for using custom time coordinates in temporal APIs.

This release also includes a bug fix for singleton coordinates breaking the swap_lon_axis() function. Additionally, Jupyter Notebooks for presentations and demos have been added to the documentation.

Features

  • Update departures and climatology APIs with reference period by Tom Vo in #417
  • Wrap open_dataset and open_mfdataset to flexibly open datasets by Stephen Po-Chedley in #385
  • Add better support for using custom time coordinates in temporal APIs by Tom Vo in #415

Bug Fixes

  • Raise warning if no time coords found with decode_times by Tom Vo in #409
  • Bump conda env dependencies by Tom Vo in #408
  • Fix swap_lon_axis() breaking when sorting with singleton coords by Tom Vo in #392

Documentation

DevOps

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.4.0...v0.5.0

v0.4.0 (9 November 2022)

This minor release includes a feature update to support datasets that have N dimensions mapped to N coordinates to represent an axis. This means xcdat APIs are able to intelligently select which axis's coordinates and bounds to work with if multiple are present within the dataset. Decoding time is now a lazy operation, leading to significant upfront runtime improvements when opening datasets with decode_times=True.

A new notebook called “A Gentle Introduction to xCDAT” was added to the documentation gallery to help guide new xarray/xcdat users. xCDAT is now hosted on Zenodo with a DOI for citations.

There are various bug fixes for bounds, naming of spatial weights, and a missing flag for xesmf that broke curvilinear regridding.

Features

  • Support for N axis dimensions mapped to N coordinates by Tom Vo and Stephen Po-Chedley in #343
    • Rename get_axis_coord() to get_dim_coords() and get_axis_dim() to get_dim_keys()
    • Update spatial and temporal accessor class methods to refer to the dimension coordinate variable on the data_var being operated on, rather than the parent dataset
  • Decoding times (decode_time()) is now a lazy operation, which results in significant runtime improvements by Tom Vo in #343

Bug Fixes

Documentation

  • Add FAQs section for temporal metadata by Tom Vo in #383
  • Add gentle introduction notebook by Tom Vo in #373
  • Link repo to Zenodo and upload GitHub releases by Tom Vo in #367
  • Update project overview, FAQs, and add a link to xarray tutorials by Tom Vo in #365
  • Update feature list, add metadata interpretation to FAQs, and add ipython syntax highlighting for notebooks by Tom Vo in #362

DevOps

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.3.3...v0.4.0

v0.3.3 (12 October 2022)

This patch release fixes a bug where calculating daily climatologies/departures for specific CF calendar types that have leap days breaks when using cftime. It also includes documentation updates.

Bug Fixes

  • Drop leap days based on CF calendar type to calculate daily climatologies and departures by Tom Vo and Jiwoo Lee in #350
    • Affected CF calendar types include gregorian, proleptic_gregorian, and standard
    • Since a solution implementation for handling leap days is generally opinionated, we decided to go with the route of least complexity and overhead (drop the leap days before performing calculations). We may revisit adding more options for the user to determine how they want to handle leap days (based on how valuable/desired it is).

Documentation

  • Add horizontal regridding gallery notebook by Jason Boutte in #328
  • Add doc for staying up to date with releases by Tom Vo in #355

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.3.2...v0.3.3

v0.3.2 (16 September 2022)

This patch release focuses on bug fixes related to temporal averaging, spatial averaging, and regridding. xesmf is now an optional dependency because it is not supported on osx-arm64 and windows at this time. There is a new documentation page for HPC/Jupyter guidance.

Bug Fixes

Temporal Average

  • Fix multiple temporal avg calls on same dataset breaking by Tom Vo in #329
  • Fix incorrect results for group averaging with missing data by Stephen Po-Chedley in #320

Spatial Average

  • Fix spatial bugs: handle datasets with domain bounds out of order and zonal averaging by Stephen Po-Chedley in #340

Horizontal Regridding

Documentation

Dependencies

  • Make xesmf an optional dependency by Paul Durack in #334
    • This is required because xesmf (and esmpy which is a dependency) are not supported on osx-arm64 and windows at this time.
    • Once these platforms are supported, xesmf can become a direct dependency of xcdat.

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.3.1...v0.3.2

v0.3.1 (18 August 2022)

This patch release focuses on bug fixes including handling bounds generation with singleton coordinates and the use of cftime to represent temporal averaging outputs and non-CF compliant time coordinates (to avoid the pandas Timestamp limitations).

Bug Fixes

Bounds

Time Axis and Coordinates

  • Fix TypeError with Dask Arrays from multifile datasets in temporal averaging by Stephen Po-Chedley in #291
  • Use cftime to avoid out of bounds datetime when decoding non-CF time coordinates by Stephen Po-Chedley and Tom Vo in #283
  • Use cftime for temporal averaging operations to avoid out of bounds datetime by Stephen Po-Chedley and Tom Vo in #302
  • Fix open_mfdataset() dropping time encoding attrs by Tom Vo in #309
  • Replace “time” references with self._dim in class TemporalAccessor by Tom Vo in #312

Internal Changes

Documentation

  • update conda install to conda create by Paul Durack in #294
  • Update project overview and planned features list by Tom Vo in #298
  • Fix bullet formatting in README.rst andindex.rst by Tom Vo in #299
  • Fix Jupyter headings not rendering with pandoc by Tom Vo in #318

DevOps

  • Unify workspace settings with settings.json by Tom Vo in #297
  • Run CI/CD on “push” and “workflow_dispatch” by Tom Vo in #287 and #288
  • Pin numba=0.55.2 in dev env and constrain numba>=0.55.2 in ci env by Tom Vo in #280
  • Update conda env yml files and add missing dependencies by Tom Vo in #307

New Contributors

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.3.0...v0.3.1

v0.3.0 (27 June 2022)

New Features

  • Add horizontal regridding by Jason Boutte in #164
  • Add averages with time dimension removed by Tom Vo in #236
  • Update _get_weights() method in class SpatialAccessor and class TemporalAccessor by Tom Vo in #252
    • Add keep_weights keyword attr to reduction methods
    • Make _get_weights() public in class SpatialAccessor
  • Update get_axis_coord() to interpret more keys by Tom Vo in #262
    • Along with the axis attr, it also now interprets standard_name and the dimension name

Bug Fixes

  • Fix add_bounds() breaking when time coords are cftime objects by Tom Vo in #241
  • Fix parsing of custom seasons for departures by Tom Vo in #246
  • Update swap_lon_axis to ignore same systems, which was causing odd behaviors for (0, 360) by Tom Vo in #257

Breaking Changes

  • Remove class XCDATAccessor by Tom Vo in #222
  • Update spatial axis arg supported type and keys by Tom Vo in #226
    • Now only supports CF-compliant axis names (e.g., “X”, “Y”)
  • Remove center_times kwarg from temporal averaging methods by Tom Vo in #254

Documentation

  • Revert official project name from “XCDAT” to “xCDAT” by Tom Vo in #231
  • [DOC] Add CDAT API mapping table and gallery examples by Tom Vo in #239

Internal Changes

  • Update time coordinates object type from MultiIndex to datetime/cftime for TemporalAccessor reduction methods and add convenience methods by Tom Vo in #221
  • Extract method _postprocess_dataset() and make bounds generation optional by Tom Vo in #223
  • Update add_bounds kwarg default value to True by Tom Vo in #230
  • Update decode_non_cf_time to return input dataset if the time “units” attr can’t be split into unit and reference date by Stephen Po-Chedley in #263

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.2.0...v0.3.0

v0.2.0 (24 March 2022)

New Features

Bug Fixes

  • Add exception for coords of len <= 1 or multidimensional coords in fill_missing_bounds() by Tom Vo in #141
  • Update open_mfdataset() to avoid data vars dim concatenation by Tom Vo in #143
  • Fix indexing on axis keys using generic map (related to spatial averaging) by Tom Vo in #172

Breaking Changes

  • Rename accessor classes and methods for API consistency by Tom Vo in #142
  • Rename fill_missing_bounds() to add_missing_bounds() by Tom Vo in #157
  • Remove data variable inference API by Tom Vo in #196
  • Rename spatial file and class by Tom Vo in #207

Documentation

  • update README by Jill Chengzhu Zhang in #127
  • Update readme by Jiwoo Lee in #129
  • Update HISTORY.rst and fix docstrings by Tom Vo in #139
  • Update README.rst content and add logo by Tom Vo in #153
  • Update API Reference docs to list all APIs by Tom Vo in #155
  • Add config.yml for issue templates with link to discussions by Tom Vo in #176
  • Add FAQs page to docs by Tom Vo in #181
  • Fix syntax of code examples from PR #181 by Tom Vo in #182
  • Replace markdown issue templates with GitHub yml forms by Tom Vo in #186
  • Update README.rst, index.rst, and project_maintenance.rst by Tom Vo in #211

Deprecations

Internal Changes

  • Update logger levels to debug by Tom Vo in #148
  • Update and remove logger debug messages by Tom Vo in #193

DevOps

  • Add requires_dask decorator for tests by Tom Vo in #177
  • Update dependencies in setup.py and dev.yml by Tom Vo in #174
  • Add matrix testing and ci specific conda env by Tom Vo in #178
  • Suppress xarray warning in test suite by Tom Vo in #179
  • Drop support for Python 3.7 by Tom Vo in #187
  • Update conda env dependencies by Tom Vo in #189
  • Add deps to pre-commit mypy and fix issues by Tom Vo in #191
  • Add matplotlib to dev env, update ci.yml and add Python 3.10 to build workflow by Tom Vo in #203
  • Replace conda with mamba in rtd build by Tom Vo in #209

New Contributors

Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.1.0...v0.2.0

v0.1.0 (7 October 2021)

New Features

  • Add geospatial averaging API through DatasetSpatialAverageAccessor class by Stephen Po-Chedley and Tom Vo in #87
    • Does not support parallelism with Dask yet
  • Add wrappers for xarray's open_dataset and open_mfdataset to apply common operations such as:
    • If the dataset has a time dimension, decode both CF and non-CF time units
    • Generate bounds for supported coordinates if they don’t exist
    • Option to limit the Dataset to a single regular (non-bounds) data variable while retaining any bounds data variables
  • Add DatasetBoundsAccessor class for filling missing bounds, returning mapping of bounds, returning names of bounds keys
  • Add BoundsAccessor class for accessing xcdat public methods from other accessor classes
    • This will be probably be the API endpoint for most users, unless they prefer importing the individual accessor classes
  • Add ability to infer data variables in xcdat APIs based on the "xcdat_infer" Dataset attr
    • This attr is set in xcdat.open_dataset(), xcdat_mfdataset(), or manually
  • Utilizes cf_xarray package (https://github.com/xarray-contrib/cf-xarray)

Documentation

DevOps

Full Changelog: https://github.com/xCDAT/xcdat/commits/v0.1.0