Releases: xCDAT/xcdat
v0.6.0
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
- Functions to produce accurate time bounds by @pochedls in #418
- Add API extending xgcm vertical regridding by @jasonb5 in #388, #535, #525
- Update
create_gridargs to improve usability by @jasonb5 in #507, #539
Deprecation
- Add deprecation warnings for
add_boundsboolean args by @tomvothecoder in #548, - Add deprecation warning for CDML/XML support in
open_mfdataset()by @tomvothecoder in #503, #504
Bug Fixes
Horizontal Regridding
- Improves error when axis is missing/incorrect attributes with regrid2 by @jasonb5 in #481
- Fixes preserving ds/da attributes in the regrid2 module by @jasonb5 in #468
- Fixes duplicate parameter in regrid2 docs by @jasonb5 in #532
Spatial Averaging
- Fix multi-file dataset spatial average orientation and weights when lon bounds span prime meridian by @pochedls in #495
Documentation
- Typo fix for climatology code example in docs by @lee1043 in #491
- Update documentation in regrid2.py by @lee1043 in #509
- Add more fields to GH Discussions question form by @tomvothecoder in #480
- Add Q&A GH discussions template by @tomvothecoder in #479
- Update FAQs question covering datasets with conflicting bounds by @tomvothecoder in #474
- Add Google Groups mailing list to docs by @tomvothecoder in #452
- Fix README link to CODE-OF-CONDUCT.rst by @tomvothecoder in #444
- Replace LLNL E3SM License with xCDAT License by @tomvothecoder in #443
- Update getting started and HPC documentation by @tomvothecoder in #553
DevOps
- Fix Python deprecation comment in conda env yml files by @tomvothecoder in #514
- Simplify conda environments and move configs to
pyproject.tomlby @tomvothecoder in #512 - Update DevOps to cache conda and fix attributes not being preserved with
xarray > 2023.3.0by @tomvothecoder in #465 - Update GH Actions to use
mambaby @tomvothecoder in #450 - Update constraint
cf_xarray >=0.7.3to workaround xarray import issue by @tomvothecoder in #547
Full Changelog: v0.5.0...v0.6.0
v0.6.0rc1
v0.6.0rc1 (7 July 2023)
This is the first release candidate for the upcoming v0.6.0 release. This version is intended to be used for testing new features, improvements, and bug fixes. Refer to the changelog below for more information.
Features
- Functions to produce accurate time bounds by @pochedls in #418
- Add API extending xgcm vertical regridding by @jasonb5 in #388
- Update
create_gridargs to improve usability by @jasonb5 in #507
Bug Fixes
- Improves error when axis is missing/incorrect attributes by @jasonb5 in #481
- Fix multi-file dataset spatial average orientation and weights when lon bounds span prime meridian by @pochedls in #495
- Fixes preserving ds/da attributes in the regrid2 module by @jasonb5 in #468
Deprecations
- Add deprecation warning for CDML/XML support in
open_mfdataset()by @tomvothecoder in #503
Documentation
- Typo fix for doc by @lee1043 in #491
- Update documentation in regrid2.py by @lee1043 in #509
- Remove cdms-filemap references in API docstrings by @tomvothecoder in #504
- Add more fields to GH Discussions question form by @tomvothecoder in #480
- Add Q&A GH discussions template by @tomvothecoder in #479
- Update FAQs question covering datasets with conflicting bounds by @tomvothecoder in #474
- Add Google Groups mailing list to docs by @tomvothecoder in #452
- Fix README link to CODE-OF-CONDUCT.rst by @tomvothecoder in #444
- Replace LLNL E3SM License with xCDAT License by @tomvothecoder in #443
DevOps
- Fix Python deprecation comment in conda env yml files by @tomvothecoder in #514
- Simplify conda environments and move configs to
pyproject.tomlby @tomvothecoder in #512 - Update DevOps to cache conda and fix attributes not being preserved with
xarray > 2023.3.0by @tomvothecoder in #465 - Update GH Actions to use
mambaby @tomvothecoder in #450 - Bump to 0.6.0rc1 by @tomvothecoder in #515
Full Changelog: v0.5.0...v0.6.0rc1
v0.5.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 @tomvothecoder in #417
- Wrap open_dataset and open_mfdataset to flexibly open datasets by @pochedls in #385
- Add better support for using custom time coordinates in temporal APIs by @tomvothecoder in #415
Bug Fixes
- [Doc]: Fix missing
xesmfAPIs and update slides in intro notebook by @tomvothecoder in #428 - Raise warning if no time coords found with
decode_timesby @tomvothecoder in #409 - Bump conda env dependencies by @tomvothecoder in #408
- Fix
swap_lon_axis()breaking when sorting with singleton coords by @tomvothecoder in #392
Documentation
- Bump to v0.5.0 by @tomvothecoder in #436
- Update xsearch-xcdat-example.ipynb by @pochedls in #425
- Updates xesmf docs by @jasonb5 in #432
- [Doc]: Fix missing
xesmfAPIs and update slides in intro notebook by @tomvothecoder in #428 - Add presentations and demos to sphinx toctree by @tomvothecoder in #422
- [Doc]: Add
xsearchdemo notebook for CWSS Presentation by @tomvothecoder in #398 - Update temporal
.averageand.departuresdocstrings by @tomvothecoder in #407
DevOps
- Bump conda env dependencies by @tomvothecoder in #408
Full Changelog: v0.4.0...0.5.0
v0.4.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 @tomvothecoder and @pochedls in #343
- Rename
get_axis_coord()toget_dim_coords()andget_axis_dim()toget_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
- Rename
- Decoding times (
decode_time()) is now a lazy operation, which results in significant runtime improvements by @tomvothecoder in #343
Bug Fixes
- Fix
add_bounds()not ignoring 0-dim singleton coords by @tomvothecoder and @pochedls in #343 - Fix name of spatial weights with singleton coord by @tomvothecoder in #379
- Fixes
xesmfflag that was missing which broke curvilinear regridding by @jasonb5 and @pochedls in #374
Documentation
- Add FAQs section for temporal metadata by @tomvothecoder in #383
- Add gentle introduction notebook by @tomvothecoder in #373
- Link repo to Zenodo and upload GitHub releases by @tomvothecoder in #367
- Update project overview, FAQs, and add a link to xarray tutorials by @tomvothecoder in #365
- Update feature list, add metadata interpretation to FAQs, and add
ipythonsyntax highlighting for notebooks by @tomvothecoder in #362
DevOps
- Update release-drafter template by @tomvothecoder in #371 and #370
- Automate release notes generation by @tomvothecoder in #368
Full Changelog: v0.3.3...v0.4.0
v0.3.3
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 @tomvothecoder and @lee1043 in #350
- Affected CF calendar types include
gregorian,proleptic_gregorian, andstandard - 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 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).
- Affected CF calendar types include
Documentation
- Add horizontal regridding gallery notebook by @jasonb5 in #328
- Add doc for staying up to date with releases by @tomvothecoder in #355
Dependencies
xarray >= 0.21.0is the new constraint in the conda-forge recipe.- xcdat uses xarray.coding.times, which is only available in
xarray >= 0.21.0.
- xcdat uses xarray.coding.times, which is only available in
Full Changelog: v0.3.2...v0.3.3
v0.3.2
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 @tomvothecoder in #329
- Fix incorrect results for group averaging with missing data by @pochedls in #320
Spatial Average
- Fix spatial bugs: handle datasets with domain bounds out of order and zonal averaging by @pochedls in #340
Horizontal Regridding
Documentation
Dependencies
- Make
xesmfan optional dependency by @durack1 in #334- This is required because
xesmf(andesmpywhich is a dependency) are not supported onosx-arm64andwindowsat this time. - Once these platforms are supported,
xesmfcan become a direct dependency ofxcdat.
- This is required because
Full Changelog: v0.3.1...v0.3.2
v0.3.1
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
- Ignore singleton coordinates without dims when attempting to generate bounds Stephen Po-Chedley in #281
- Modify logic to not throw error for singleton coordinates (with no bounds) by Stephen Po-Chedley in #313
Time Axis and Coordinates
- Fix
TypeErrorwith Dask Arrays from multifile datasets in temporal averaging by Stephen Po-Chedley in #291 - Use
cftimeto avoid out of boundsdatetimewhen decoding non-CF time coordinates by Stephen Po-Chedley and Tom Vo in #283 - Use
cftimefor temporal averaging operations to avoid out of boundsdatetimeby 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._diminclass TemporalAccessorby Tom Vo in #312
Internal Changes
- Filters safe warnings. by Jason Boutte in #276
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.rstandindex.rstby Tom Vo in #299 - Fix Jupyter headings not rendering with pandoc by Tom Vo in #318
DevOps
- Unify workspace settings with
settings.jsonby Tom Vo in #297 - Run CI/CD on "push" and "workflow_dispatch" by Tom Vo in #287 and #288
- Pin
numba=0.55.2in dev env and constrainnumba>=0.55.2in ci env by Tom Vo in #280 - Update conda env yml files and add missing dependencies by Tom Vo in #307
New Contributors
- Paul Durack made their first contribution in #294
Full Changelog: v0.3.0...v0.3.1
v0.3.0
v0.3.0 (27 June 2022)
New Features
- Add horizontal regridding by @jasonb5 in #164
- Add averages with time dimension removed by @tomvothecoder in #236
- Update
_get_weights()method inclass SpatialAccessorandclass TemporalAccessorby @tomvothecoder in #252- Add
keep_weightskeyword attr to reduction methods - Make
_get_weights()public inclass SpatialAccessor
- Add
- Update
get_axis_coord()to interpret more keys by @tomvothecoder in #262- Along with the
axisattr, it also now interpretsstandard_nameand the dimension name
- Along with the
Bug Fixes
- Fix
add_bounds()breaking when time coords arecftimeobjects by @tomvothecoder in #241 - Fix parsing of custom seasons for departures by @tomvothecoder in #246
- Update
swap_lon_axisto ignore same systems, which was causing odd behaviors for (0, 360) by @tomvothecoder in #257
Breaking Changes
- Remove
class XCDATAccessorby @tomvothecoder in #222 - Update spatial
axisarg supported type and keys by @tomvothecoder in #226- Now only supports CF-compliant axis names (e.g., "X", "Y")
- Remove
center_timeskwarg from temporal averaging methods by @tomvothecoder in #254
Documentation
- Revert official project name from "XCDAT" to "xCDAT" by @tomvothecoder in #231
- [DOC] Add CDAT API mapping table and gallery examples by @tomvothecoder in #239
Internal Changes
- Update time coordinates object type from
MultiIndextodatetime/cftimeforTemporalAccessorreduction methods and add convenience methods by @tomvothecoder in #221 - Extract method
_postprocess_dataset()and make bounds generation optional by @tomvothecoder in #223 - Update
add_boundskwarg default value toTrueby @tomvothecoder in #230 - Update
decode_non_cf_timeto return input dataset if the time "units" attr can't be split into unit and reference date by @pochedls in #263
New Contributors
Full Changelog: v0.2.0...v0.3.0
v0.2.0
v0.2.0 (24 March 22)
New Features
- Add support for spatial averaging parallelism via Dask by @pochedls in #132
- Refactor spatial averaging with more robust handling of longitude spanning prime meridian by @pochedls in #152
- Update xcdat.open_mfdataset time decoding logic by @pochedls in #161
- Add function to swap dataset longitude axis orientation by @tomvothecoder in #145
- Add utility functions by @tomvothecoder in #205
- Add temporal utilities and averaging functionalities by @tomvothecoder in #107
Bug Fixes
- Add exception for coords of len <= 1 or multidimensional coords in
fill_missing_bounds()by @tomvothecoder in #141 - Update
open_mfdataset()to avoid data vars dim concatenation by @tomvothecoder in #143 - Fix indexing on axis keys using generic map (related to spatial averaging) by @tomvothecoder in #172
Breaking Changes
- Rename accessor classes and methods for API consistency by @tomvothecoder in #142
- Rename
fill_missing_bounds()toadd_missing_bounds()by @tomvothecoder in #157 - Remove data variable inference API by @tomvothecoder in #196
- Rename spatial file and class by @tomvothecoder in #207
Documentation
- update README by @chengzhuzhang in #127
- Update readme by @lee1043 in #129
- Update
HISTORY.rstand fix docstrings by @tomvothecoder in #139 - Update
README.rstcontent and add logo by @tomvothecoder in #153 - Update API Reference docs to list all APIs by @tomvothecoder in #155
- Add
config.ymlfor issue templates with link to discussions by @tomvothecoder in #176 - Add FAQs page to docs by @tomvothecoder in #181
- Fix syntax of code examples from PR #181 by @tomvothecoder in #182
- Replace markdown issue templates with GitHub yml forms by @tomvothecoder in #186
- Update
README.rst,index.rst, andproject_maintenance.rstby @tomvothecoder in #211
Deprecations
Internal Changes
- Update logger levels to debug by @tomvothecoder in #148
- Update and remove logger debug messages by @tomvothecoder in #193
DevOps
- Add
requires_daskdecorator for tests by @tomvothecoder in #177 - Update dependencies in
setup.pyanddev.ymlby @tomvothecoder in #174 - Add matrix testing and ci specific conda env by @tomvothecoder in #178
- Suppress xarray warning in test suite by @tomvothecoder in #179
- Drop support for Python 3.7 by @tomvothecoder in #187
- Update conda env dependencies by @tomvothecoder in #189
- Add deps to
pre-commitmypyand fix issues by @tomvothecoder in #191 - Add
matplotlibto dev env, updateci.ymland add Python 3.10 to build workflow by @tomvothecoder in #203 - Replace conda with mamba in rtd build by @tomvothecoder in #209
- Bump to 0.2.0 by @tomvothecoder in #212
New Contributors
- @chengzhuzhang made their first contribution in #127
- @lee1043 made their first contribution in #129
- @pochedls made their first contribution in #132
Full Changelog: v0.1.0...v0.2.0
v0.1.0
Below is a summary of changes in this version. In subsequent changelogs, the exact commits will be listed.
Features
- Add geospatial averaging API through
DatasetSpatialAverageAccessorclass by @pochedls and @tomvothecoder in #87- Does not support parallelism with Dask yet
- Add wrappers for xarray's
open_datasetandopen_mfdatasetto 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
DatasetBoundsAccessorclass for filling missing bounds, returning mapping of bounds, returning names of bounds keys - Add
BoundsAccessorclass 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
- This attr is set in
- Utilizes
cf_xarraypackage (https://github.com/xarray-contrib/cf-xarray)
Docs
- Visit the docs here: https://xcdat.readthedocs.io/en/latest/index.html
CI/CD
- 100% code coverage (https://app.codecov.io/gh/XCDAT/xcdat)
- GH Actions for CI/CD build (https://github.com/XCDAT/xcdat/actions)
- Pytest and pytest-cov for test suite
Full Changelog: https://github.com/XCDAT/xcdat/commits/v0.1.0