History#
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 xCDAT/xcdat#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 xCDAT/xcdat#696
Documentation#
Add project logos to README and project overview page on docs by Tom Vo in xCDAT/xcdat#686
Add links to JOSS and DOE EESM content by Tom Vo in xCDAT/xcdat#682
Add SciPy 2024 talk material by Tom Vo in xCDAT/xcdat#658, xCDAT/xcdat#678, xCDAT/xcdat#679, xCDAT/xcdat#680
Add JOSS badge to README by Tom Vo in xCDAT/xcdat#674
DevOps#
Update
setup.py
classifiers by Tom Vo in xCDAT/xcdat#691Update build workflow by Tom Vo in xCDAT/xcdat#698
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 xCDAT/xcdat#653
Update
add_missing_bounds()
to convertnp.timedelta64
topd.Timedelta
to support Xarray’s datetime component accessor _Jiwoo Lee in xCDAT/xcdat#660
Documentation#
Add JOSS paper by Tom Vo in xCDAT/xcdat#567
Add Parallel Computing with Dask Jupyter Notebook by Tom Vo in xCDAT/xcdat#489
Update regridding notebook for v0.7.0 by Jill Chengzhu Zhang in xCDAT/xcdat#646
Update FAQs, HPC guide, and Gentle Introduction by Tom Vo in xCDAT/xcdat#650
Simplify the contributing guide by Tom Vo in xCDAT/xcdat#593
Update notebook env setup instructions with kernel by Tom Vo in xCDAT/xcdat#652
Add instructions for setting ESMFMKFILE and update links to xESMF docs by Tom Vo in xCDAT/xcdat#643
Temporal average notebooks maintanance by Jiwoo Lee in xCDAT/xcdat#633
Review of spatial averaging and general dataset utilities by Stephen Po-Chedley in xCDAT/xcdat#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 xCDAT/xcdat#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 xCDAT/xcdat#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 xCDAT/xcdat#634
Fix climo notebook missing T bounds and add notebook env setup in all example notebooks by Tom Vo in xCDAT/xcdat#623
Update unweighted temporal averages to not require bounds by Tom Vo in xCDAT/xcdat#579
Documentation#
Update documentation styling for easier navigation by Tom Vo in xCDAT/xcdat#624
Add list of projects using xCDAT by Tom Vo in xCDAT/xcdat#617
Fix ESMFMKFILE env variable not set in RTD build by Tom Vo in xCDAT/xcdat#577
Deprecations#
Remove deprecated features and APIs by Tom Vo in xCDAT/xcdat#628, including:
horizontal_xesmf()
andhorizontal_regrid2()
**kwargs
fromcreate_grid()
add_bounds
accepting boolean arg inopen_dataset()
andopen_mfdataset()
Remove CDML/XML support from
open_dataset()
andopen_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#
Add defaults to add_missing_bounds by Ana Ordonez in xCDAT/xcdat#569
DevOps#
Make xESMF a required dependency by Tom Vo in xCDAT/xcdat#566
Documentation#
Update doc: Add link to the ESFG seminar xCDAT introduction video by Jiwoo Lee in xCDAT/xcdat#571
Fix v0.6.0 changelog headers for proper nesting by Tom Vo in xCDAT/xcdat#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#
Functions to produce accurate time bounds by Stephen Po-Chedley in xCDAT/xcdat#418
Add API extending xgcm vertical regridding by Jason Boutte in xCDAT/xcdat#388, xCDAT/xcdat#535, xCDAT/xcdat#525
Update
create_grid
args to improve usability by Jason Boutte in xCDAT/xcdat#507, xCDAT/xcdat#539
Deprecation#
Add deprecation warnings for
add_bounds
boolean args by Tom Vo in xCDAT/xcdat#548,Add deprecation warning for CDML/XML support in
open_mfdataset()
by Tom Vo in xCDAT/xcdat#503, xCDAT/xcdat#504
Bug Fixes#
Horizontal Regridding#
Improves error when axis is missing/incorrect attributes with regrid2 by Jason Boutte in xCDAT/xcdat#481
Fixes preserving ds/da attributes in the regrid2 module by Jason Boutte in xCDAT/xcdat#468
Fixes duplicate parameter in regrid2 docs by Jason Boutte in xCDAT/xcdat#532
Spatial Averaging#
Fix multi-file dataset spatial average orientation and weights when lon bounds span prime meridian by Stephen Po-Chedley in xCDAT/xcdat#495
Documentation#
Typo fix for climatology code example in docs by Jiwoo Lee in xCDAT/xcdat#491
Update documentation in regrid2.py by Jiwoo Lee in xCDAT/xcdat#509
Add more fields to GH Discussions question form by Tom Vo in xCDAT/xcdat#480
Add Q&A GH discussions template by Tom Vo in xCDAT/xcdat#479
Update FAQs question covering datasets with conflicting bounds by Tom Vo in xCDAT/xcdat#474
Add Google Groups mailing list to docs by Tom Vo in xCDAT/xcdat#452
Fix README link to CODE-OF-CONDUCT.rst by Tom Vo in xCDAT/xcdat#444
Replace LLNL E3SM License with xCDAT License by Tom Vo in xCDAT/xcdat#443
Update getting started and HPC documentation by Tom Vo in xCDAT/xcdat#553
DevOps#
Fix Python deprecation comment in conda env yml files by Tom Vo in xCDAT/xcdat#514
Simplify conda environments and move configs to
pyproject.toml
by Tom Vo in xCDAT/xcdat#512Update DevOps to cache conda and fix attributes not being preserved with
xarray > 2023.3.0
by Tom Vo in xCDAT/xcdat#465Update GH Actions to use
mamba
by Tom Vo in xCDAT/xcdat#450Update constraint
cf_xarray >=0.7.3
to workaround xarray import issue by Tom Vo in xCDAT/xcdat#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 xCDAT/xcdat#417
Wrap open_dataset and open_mfdataset to flexibly open datasets by Stephen Po-Chedley in xCDAT/xcdat#385
Add better support for using custom time coordinates in temporal APIs by Tom Vo in xCDAT/xcdat#415
Bug Fixes#
Raise warning if no time coords found with
decode_times
by Tom Vo in xCDAT/xcdat#409Bump conda env dependencies by Tom Vo in xCDAT/xcdat#408
Fix
swap_lon_axis()
breaking when sorting with singleton coords by Tom Vo in xCDAT/xcdat#392
Documentation#
Update xsearch-xcdat-example.ipynb by Stephen Po-Chedley in xCDAT/xcdat#425
Updates xesmf docs by Jason Boutte in xCDAT/xcdat#432
Add presentations and demos to sphinx toctree by Tom Vo in xCDAT/xcdat#422
Update temporal
.average
and.departures
docstrings by Tom Vo in xCDAT/xcdat#407
DevOps#
Bump conda env dependencies by Tom Vo in xCDAT/xcdat#408
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 xCDAT/xcdat#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
Decoding times (
decode_time()
) is now a lazy operation, which results in significant runtime improvements by Tom Vo in xCDAT/xcdat#343
Bug Fixes#
Fix
add_bounds()
not ignoring 0-dim singleton coords by Tom Vo and Stephen Po-Chedley in xCDAT/xcdat#343Fix name of spatial weights with singleton coord by Tom Vo in xCDAT/xcdat#379
Fixes
xesmf
flag that was missing which broke curvilinear regridding by Jason Boutte and Stephen Po-Chedley in xCDAT/xcdat#374
Documentation#
Add FAQs section for temporal metadata by Tom Vo in xCDAT/xcdat#383
Add gentle introduction notebook by Tom Vo in xCDAT/xcdat#373
Link repo to Zenodo and upload GitHub releases by Tom Vo in xCDAT/xcdat#367
Update project overview, FAQs, and add a link to xarray tutorials by Tom Vo in xCDAT/xcdat#365
Update feature list, add metadata interpretation to FAQs, and add
ipython
syntax highlighting for notebooks by Tom Vo in xCDAT/xcdat#362
DevOps#
Update release-drafter template by Tom Vo in xCDAT/xcdat#371 and xCDAT/xcdat#370
Automate release notes generation by Tom Vo in xCDAT/xcdat#368
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 xCDAT/xcdat#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 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 xCDAT/xcdat#328
Add doc for staying up to date with releases by Tom Vo in xCDAT/xcdat#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 xCDAT/xcdat#329
Fix incorrect results for group averaging with missing data by Stephen Po-Chedley in xCDAT/xcdat#320
Spatial Average#
Fix spatial bugs: handle datasets with domain bounds out of order and zonal averaging by Stephen Po-Chedley in xCDAT/xcdat#340
Horizontal Regridding#
Fix regridder storing NaNs for bounds by Stephen Po-Chedley in xCDAT/xcdat#344
Documentation#
Update README and add HPC/Jupyter Guidance by Stephen Po-Chedley in xCDAT/xcdat#331
Dependencies#
Make
xesmf
an optional dependency by Paul Durack in xCDAT/xcdat#334This is required because
xesmf
(andesmpy
which is a dependency) are not supported onosx-arm64
andwindows
at this time.Once these platforms are supported,
xesmf
can become a direct dependency ofxcdat
.
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#
Ignore singleton coordinates without dims when attempting to generate bounds by Stephen Po-Chedley in xCDAT/xcdat#281
Modify logic to not throw error for singleton coordinates (with no bounds) by Stephen Po-Chedley in xCDAT/xcdat#313
Time Axis and Coordinates#
Fix
TypeError
with Dask Arrays from multifile datasets in temporal averaging by Stephen Po-Chedley in xCDAT/xcdat#291Use
cftime
to avoid out of boundsdatetime
when decoding non-CF time coordinates by Stephen Po-Chedley and Tom Vo in xCDAT/xcdat#283Use
cftime
for temporal averaging operations to avoid out of boundsdatetime
by Stephen Po-Chedley and Tom Vo in xCDAT/xcdat#302Fix
open_mfdataset()
dropping time encoding attrs by Tom Vo in xCDAT/xcdat#309Replace “time” references with
self._dim
inclass TemporalAccessor
by Tom Vo in xCDAT/xcdat#312
Internal Changes#
Filters safe warnings. by Jason Boutte in xCDAT/xcdat#276
Documentation#
update conda install to conda create by Paul Durack in xCDAT/xcdat#294
Update project overview and planned features list by Tom Vo in xCDAT/xcdat#298
Fix bullet formatting in
README.rst
andindex.rst
by Tom Vo in xCDAT/xcdat#299Fix Jupyter headings not rendering with pandoc by Tom Vo in xCDAT/xcdat#318
DevOps#
Unify workspace settings with
settings.json
by Tom Vo in xCDAT/xcdat#297Run CI/CD on “push” and “workflow_dispatch” by Tom Vo in xCDAT/xcdat#287 and xCDAT/xcdat#288
Pin
numba=0.55.2
in dev env and constrainnumba>=0.55.2
in ci env by Tom Vo in xCDAT/xcdat#280Update conda env yml files and add missing dependencies by Tom Vo in xCDAT/xcdat#307
New Contributors#
Paul Durack made their first contribution in xCDAT/xcdat#294
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 xCDAT/xcdat#164
Add averages with time dimension removed by Tom Vo in xCDAT/xcdat#236
Update
_get_weights()
method inclass SpatialAccessor
andclass TemporalAccessor
by Tom Vo in xCDAT/xcdat#252Add
keep_weights
keyword attr to reduction methodsMake
_get_weights()
public inclass SpatialAccessor
Update
get_axis_coord()
to interpret more keys by Tom Vo in xCDAT/xcdat#262Along with the
axis
attr, it also now interpretsstandard_name
and the dimension name
Bug Fixes#
Fix
add_bounds()
breaking when time coords arecftime
objects by Tom Vo in xCDAT/xcdat#241Fix parsing of custom seasons for departures by Tom Vo in xCDAT/xcdat#246
Update
swap_lon_axis
to ignore same systems, which was causing odd behaviors for (0, 360) by Tom Vo in xCDAT/xcdat#257
Breaking Changes#
Remove
class XCDATAccessor
by Tom Vo in xCDAT/xcdat#222Update spatial
axis
arg supported type and keys by Tom Vo in xCDAT/xcdat#226Now only supports CF-compliant axis names (e.g., “X”, “Y”)
Remove
center_times
kwarg from temporal averaging methods by Tom Vo in xCDAT/xcdat#254
Documentation#
Revert official project name from “XCDAT” to “xCDAT” by Tom Vo in xCDAT/xcdat#231
[DOC] Add CDAT API mapping table and gallery examples by Tom Vo in xCDAT/xcdat#239
Internal Changes#
Update time coordinates object type from
MultiIndex
todatetime
/cftime
forTemporalAccessor
reduction methods and add convenience methods by Tom Vo in xCDAT/xcdat#221Extract method
_postprocess_dataset()
and make bounds generation optional by Tom Vo in xCDAT/xcdat#223Update
add_bounds
kwarg default value toTrue
by Tom Vo in xCDAT/xcdat#230Update
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 xCDAT/xcdat#263
Full Changelog: https://github.com/xCDAT/xcdat/compare/v0.2.0…v0.3.0
v0.2.0 (24 March 2022)#
New Features#
Add support for spatial averaging parallelism via Dask by Stephen Po-Chedley in xCDAT/xcdat#132
Refactor spatial averaging with more robust handling of longitude spanning prime meridian by Stephen Po-Chedley in xCDAT/xcdat#152
Update xcdat.open_mfdataset time decoding logic by Stephen Po-Chedley in xCDAT/xcdat#161
Add function to swap dataset longitude axis orientation by Tom Vo in xCDAT/xcdat#145
Add utility functions by Tom Vo in xCDAT/xcdat#205
Add temporal utilities and averaging functionalities by Tom Vo in xCDAT/xcdat#107
Bug Fixes#
Add exception for coords of len <= 1 or multidimensional coords in
fill_missing_bounds()
by Tom Vo in xCDAT/xcdat#141Update
open_mfdataset()
to avoid data vars dim concatenation by Tom Vo in xCDAT/xcdat#143Fix indexing on axis keys using generic map (related to spatial averaging) by Tom Vo in xCDAT/xcdat#172
Breaking Changes#
Rename accessor classes and methods for API consistency by Tom Vo in xCDAT/xcdat#142
Rename
fill_missing_bounds()
toadd_missing_bounds()
by Tom Vo in xCDAT/xcdat#157Remove data variable inference API by Tom Vo in xCDAT/xcdat#196
Rename spatial file and class by Tom Vo in xCDAT/xcdat#207
Documentation#
update README by Jill Chengzhu Zhang in xCDAT/xcdat#127
Update readme by Jiwoo Lee in xCDAT/xcdat#129
Update
HISTORY.rst
and fix docstrings by Tom Vo in xCDAT/xcdat#139Update
README.rst
content and add logo by Tom Vo in xCDAT/xcdat#153Update API Reference docs to list all APIs by Tom Vo in xCDAT/xcdat#155
Add
config.yml
for issue templates with link to discussions by Tom Vo in xCDAT/xcdat#176Add FAQs page to docs by Tom Vo in xCDAT/xcdat#181
Fix syntax of code examples from PR #181 by Tom Vo in xCDAT/xcdat#182
Replace markdown issue templates with GitHub yml forms by Tom Vo in xCDAT/xcdat#186
Update
README.rst
,index.rst
, andproject_maintenance.rst
by Tom Vo in xCDAT/xcdat#211
Deprecations#
Internal Changes#
Update logger levels to debug by Tom Vo in xCDAT/xcdat#148
Update and remove logger debug messages by Tom Vo in xCDAT/xcdat#193
DevOps#
Add
requires_dask
decorator for tests by Tom Vo in xCDAT/xcdat#177Update dependencies in
setup.py
anddev.yml
by Tom Vo in xCDAT/xcdat#174Add matrix testing and ci specific conda env by Tom Vo in xCDAT/xcdat#178
Suppress xarray warning in test suite by Tom Vo in xCDAT/xcdat#179
Drop support for Python 3.7 by Tom Vo in xCDAT/xcdat#187
Update conda env dependencies by Tom Vo in xCDAT/xcdat#189
Add deps to
pre-commit
mypy
and fix issues by Tom Vo in xCDAT/xcdat#191Add
matplotlib
to dev env, updateci.yml
and add Python 3.10 to build workflow by Tom Vo in xCDAT/xcdat#203Replace conda with mamba in rtd build by Tom Vo in xCDAT/xcdat#209
New Contributors#
Jill Chengzhu Zhang made their first contribution in xCDAT/xcdat#127
Jiwoo Lee made their first contribution in xCDAT/xcdat#129
Stephen Po-Chedley made their first contribution in xCDAT/xcdat#132
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 #87Does not support parallelism with Dask yet
Add wrappers for xarray’s
open_dataset
andopen_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 keysAdd
BoundsAccessor
class for accessing xcdat public methods from other accessor classesThis 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 (xarray-contrib/cf-xarray)
Documentation#
Visit the docs here: https://xcdat.readthedocs.io/en/latest/index.html
DevOps#
100% code coverage (https://app.codecov.io/gh/xCDAT/xcdat)
GH Actions for CI/CD build (xCDAT/xcdat)
Pytest and pytest-cov for test suite
Full Changelog: xCDAT/xcdat