Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
240 commits
Select commit Hold shift + click to select a range
735dec5
Dependabot (#332)
malmans2 Apr 27, 2022
0b2c055
Bump actions/setup-python from 1 to 3 (#333)
dependabot[bot] Apr 27, 2022
29d14da
Bump codecov/codecov-action from 1 to 3 (#334)
dependabot[bot] Apr 27, 2022
5dd53ea
Bump actions/checkout from 2 to 3 (#335)
dependabot[bot] Apr 27, 2022
2c3801d
Check attrs before printing guess (#331)
malmans2 Apr 27, 2022
f24c1c3
ENH: Add "Celsius" alias (#336)
abel-bzz May 3, 2022
1fbc074
Explicit support for curvefit (#337)
dcherian Jun 3, 2022
33ce60b
Infer 1D bounds for nD variables. (#328)
dcherian Jun 3, 2022
ef7534d
keep compatibility with the development version of `pint` (#341)
keewis Jun 28, 2022
8c781ee
Drop py37 (#296)
dcherian Jun 28, 2022
aac9a15
CI improvements (#342)
dcherian Jun 28, 2022
b031b45
Explicit xarray imports (#343)
aulemahal Jun 29, 2022
28c32c2
[pre-commit.ci] pre-commit autoupdate (#345)
pre-commit-ci[bot] Jul 4, 2022
77d6b68
Add howfairis badge. (#308)
dcherian Jul 11, 2022
1f59021
rstcheck with sphinx config (#348)
dcherian Jul 11, 2022
b1fe3ff
Bump actions/setup-python from 3 to 4 (#344)
dependabot[bot] Jul 14, 2022
3ddf96a
Avoid quadratic behaviour when dropping bounds (#349)
dcherian Jul 14, 2022
2b889f4
Test with flox (#339)
dcherian Jul 15, 2022
5138806
Print variable name for cell measures warnings (#350)
dcherian Jul 15, 2022
ae58327
Release v0.7.4 (#351)
dcherian Jul 15, 2022
5034a07
Fix typo (#353)
mankoff Jul 22, 2022
d3b75a2
cf_xarray.datasets: hide auxiliary variables (#355)
mathause Aug 1, 2022
4748033
Performance improvement: Convert unnecessary (?) deep copies to shall…
lukelbd Aug 11, 2022
92ae91c
Accounting for NoneType coordinates in attrs/encoding (#359)
sol1105 Aug 15, 2022
6994625
Bump mamba-org/provision-with-micromamba from 12 to 13 (#364)
dependabot[bot] Sep 12, 2022
a97ad1b
Replace id comparison by value comparison in tests (#373)
aulemahal Nov 4, 2022
435add3
Bump xarray-contrib/ci-trigger from 1.1 to 1.2 (#372)
dependabot[bot] Nov 4, 2022
c364452
Bump mamba-org/provision-with-micromamba from 13 to 14 (#371)
dependabot[bot] Nov 4, 2022
2750e45
[pre-commit.ci] pre-commit autoupdate (#367)
pre-commit-ci[bot] Nov 4, 2022
614b8ef
check precision of vertex order (#361)
larsbuntemeyer Nov 4, 2022
205e673
2D bounds - simple version (#370)
aulemahal Nov 11, 2022
1298277
Correctly shaped bounds for add_bounds method (#347)
MuellerSeb Nov 15, 2022
0f98acb
v0.7.5
dcherian Nov 15, 2022
3795af6
whats-new for dev
dcherian Nov 15, 2022
bbb402f
Fix MultiIndex creation.
dcherian Dec 6, 2022
c6d0a44
Update CI
dcherian Dec 7, 2022
ff740af
allow custom criteria for name of DataArray (#379)
mathause Dec 7, 2022
20bdfdd
Fix add_bounds for heavily curved grids (#376)
aulemahal Dec 7, 2022
1674196
v0.7.6: whats-new (#382)
dcherian Dec 8, 2022
2b8b4fd
Fixed build badge (#385)
kthyng Dec 17, 2022
583c416
Fix for shapely 2.0 (#386)
aulemahal Dec 21, 2022
6dffb17
Use micromamba for optional-deps CI (#389)
dcherian Jan 15, 2023
1b373a2
whats-new for 0.7.7 (#388)
dcherian Jan 15, 2023
3407d29
Update and fix linters (rstcheck,mypy,pre-commit) (#387)
pre-commit-ci[bot] Jan 15, 2023
c09e156
Better typing (#394)
dcherian Jan 25, 2023
2713858
Add link to COSIMA Recipes model agnostic tutorial (#397)
aidanheerdegen Jan 27, 2023
736dfda
Migrate to pyproject.toml, ruff, add build CI (#400)
dcherian Jan 27, 2023
84e7ba2
Add optional deps (#403)
dcherian Jan 27, 2023
18c59cc
Update upstream dev CI (#404)
dcherian Jan 27, 2023
5a810c8
Add validate-pyproject pre-commit hook (#405)
dcherian Jan 30, 2023
6a29cc0
Fix upstream-dev CI (#406)
dcherian Jan 30, 2023
0f92bc2
Update CITATION.cff (#399)
dcherian Jan 30, 2023
b751c7c
Try pytest-pretty (#410)
dcherian Jan 31, 2023
368181c
Using regex package for match (#408)
kthyng Jan 31, 2023
fb8dff8
updated whats new for release (#413)
kthyng Jan 31, 2023
8221db8
Update changelog URL
dcherian Jan 31, 2023
47e4bfc
[skip-ci] Include data folder (#416)
dcherian Feb 1, 2023
7db0c9d
Update whats-new.rst (#414)
kthyng Feb 1, 2023
dbfbd9a
Bump mamba-org/provision-with-micromamba from 14 to 15 (#418)
dependabot[bot] Feb 1, 2023
ba68cb7
Update link to COSIMA tutorial (#419)
navidcy Feb 3, 2023
456e84b
Test and support 3.11 (#417)
dcherian Feb 3, 2023
0f79d98
added degrees units (#390)
larsbuntemeyer Feb 3, 2023
ade1362
Support grid_topology, mesh_topology CF roles. (#420)
dcherian Feb 6, 2023
0169831
Update CF standard name table v80 (#423)
dcherian Feb 8, 2023
5356069
add `cf.grid_mapping_names` (#391)
larsbuntemeyer Feb 8, 2023
1d8fe9d
Add rich repr (#409)
dcherian Feb 8, 2023
8231bfc
Add sgrid axes parsing (#421)
dcherian Feb 9, 2023
0d0c369
v0.8.0 release (#424)
dcherian Feb 9, 2023
0e3a899
Update README.rst
dcherian Feb 9, 2023
ce9cd5a
Update README.rst
dcherian Feb 9, 2023
3885b44
identify `X` and `Y` in rotated pole grids (#426)
larsbuntemeyer Feb 27, 2023
fdb9e17
Major speedups in mappers. (#427)
dcherian Mar 28, 2023
a8ec8da
Update CITATION.cff (#430)
dcherian Apr 3, 2023
c36a368
Bump pypa/gh-action-pypi-publish from 1.6.4 to 1.8.4 (#429)
dependabot[bot] Apr 3, 2023
45bc030
Bump pypa/gh-action-pypi-publish from 1.8.4 to 1.8.5 (#432)
dependabot[bot] May 1, 2023
782c9e3
Bump codecov/codecov-action from 3.1.1 to 3.1.3 (#433)
dependabot[bot] May 1, 2023
6fc7609
Don't look for `T` in sgrid axes (#435)
kthyng May 3, 2023
2d579f2
[pre-commit.ci] pre-commit autoupdate (#431)
pre-commit-ci[bot] May 3, 2023
ae99250
Use pooch instead of bundling standard name table (#436)
dcherian May 4, 2023
0f4bd99
use trusted publishing (#437)
keewis May 5, 2023
56bd9c9
Release notes for v0.8.1 (#439)
dcherian May 10, 2023
9383257
Update CITATION.cff
dcherian May 10, 2023
f79daa9
Fix broken link (#447)
VeckoTheGecko Jun 1, 2023
f0079b3
Bump codecov/codecov-action from 3.1.3 to 3.1.4 (#445)
dependabot[bot] Jun 1, 2023
fa09644
Bump pypa/gh-action-pypi-publish from 1.8.5 to 1.8.6 (#444)
dependabot[bot] Jun 1, 2023
fef87df
Add support for 'flag_masks' (#354)
Descanonge Jun 23, 2023
919fb9b
v0.8.2: whats-new, CITATION.cff (#451)
dcherian Jun 23, 2023
af901a4
Bump pypa/gh-action-pypi-publish from 1.8.6 to 1.8.7 (#452)
dependabot[bot] Jul 2, 2023
15eeb44
[pre-commit.ci] pre-commit autoupdate (#453)
pre-commit-ci[bot] Jul 4, 2023
62b50fb
Better flag masks repr (#454)
dcherian Jul 6, 2023
0647d3a
Add more rich repr tests (#455)
dcherian Jul 6, 2023
fad4998
more reprs in flag mask doc (#457)
dcherian Jul 6, 2023
e283a83
v0.8.3 (#456)
dcherian Jul 6, 2023
af8475a
added `ValueError` for missing `grid_mapping` variable (#458)
larsbuntemeyer Jul 12, 2023
cbf57df
remove distutils (#463)
ocefpaf Aug 9, 2023
24e22cf
Bump pypa/gh-action-pypi-publish from 1.8.7 to 1.8.10 (#466)
dependabot[bot] Sep 3, 2023
d15ea92
Bump actions/checkout from 3 to 4 (#470)
dependabot[bot] Oct 2, 2023
0f0e997
[pre-commit.ci] pre-commit autoupdate (#471)
pre-commit-ci[bot] Oct 3, 2023
e3254bd
Address some repo-review comments. (#474)
dcherian Oct 24, 2023
c4d662e
Bump to py3.9, test py3.12 (#475)
dcherian Oct 24, 2023
03583e4
Fix get_bounds_dim_name regression. (#473)
dcherian Oct 24, 2023
256f11c
Switch to setup-micromamba (#476)
dcherian Oct 24, 2023
8779ba8
v0.8.3: Update whats-new.rst (#477)
dcherian Oct 24, 2023
eb5b7e6
Set python-version as string (#479)
Zeitsperre Nov 2, 2023
f9034ac
Update pyproject.toml to `python>=3.9`
dcherian Nov 2, 2023
dc1fb1b
Do not include tests when calculating coverage (#482)
jsignell Dec 1, 2023
ff03ebf
Fix docs build (#480)
jsignell Dec 1, 2023
2648109
Fix codecov reporting (follow up to #482) (#483)
jsignell Dec 1, 2023
a70fed0
Bump pypa/gh-action-pypi-publish from 1.8.10 to 1.8.11 (#481)
dependabot[bot] Dec 5, 2023
2a1e4e1
Check compatibility of coordinate variable dimensions before assignme…
dcherian Dec 5, 2023
f573ed7
repo-review round 2 (#485)
dcherian Dec 5, 2023
02b1d74
Add conversion between cf and shapely for lines (#460)
jsignell Dec 11, 2023
159cce4
0.8.7: Update whats-new.rst (#486)
dcherian Dec 19, 2023
1114d49
[pre-commit.ci] pre-commit autoupdate (#490)
pre-commit-ci[bot] Jan 1, 2024
c2f2540
Ignore datasets.py from codecov
dcherian Jan 13, 2024
f6c8a1f
Add larger bit depth for displaying flag_masks (#492)
mps01060 Jan 13, 2024
1fe4359
Fix conversion between shapely and cf for lines (#493)
jsignell Jan 17, 2024
766b84a
Bump actions/setup-python from 4 to 5 (#488)
dependabot[bot] Jan 17, 2024
548d728
Bump actions/download-artifact from 3 to 4 (#489)
dependabot[bot] Jan 17, 2024
548ec97
Bump actions/upload-artifact from 3 to 4 (#487)
dependabot[bot] Jan 17, 2024
5ee1bc7
Highlight support for line geometries in docstring (#494)
dcherian Jan 17, 2024
35a8a02
Add conversion between shapely and cf for polygons (#495)
jsignell Jan 19, 2024
a9cebee
Whats-new for v0.8.8 (#496)
dcherian Jan 19, 2024
25f5635
cast units to `str` before applying any other preprocessor (#498)
keewis Jan 31, 2024
39305db
Bump codecov/codecov-action from 3.1.4 to 4.0.0 (#499)
dependabot[bot] Feb 1, 2024
2b33ce5
v0.8.9: Update whats-new.rst (#500)
dcherian Feb 7, 2024
10f297e
Remove pycompat ref in utils (#502)
aulemahal Feb 19, 2024
141dc1b
ruff settings: move 'ignore' to 'lint' section (#506)
mathause Mar 7, 2024
107d073
numpy 2 compat (#505)
mathause Mar 7, 2024
c0c72eb
Bump codecov/codecov-action from 4.0.0 to 4.1.0 (#504)
dependabot[bot] Mar 7, 2024
0eb7510
Bump pypa/gh-action-pypi-publish from 1.8.11 to 1.8.12 (#503)
dependabot[bot] Mar 7, 2024
61ef877
Fix scheduled nightly upstream test
dcherian Mar 16, 2024
9d2c87f
Bump codecov/codecov-action from 4.1.0 to 4.3.0 (#511)
dependabot[bot] May 1, 2024
08fb286
Add docs about converting between shapely and cf (#512)
jsignell May 3, 2024
24dd81b
Bump pypa/gh-action-pypi-publish from 1.8.12 to 1.8.14 (#509)
dependabot[bot] May 24, 2024
aa154c7
[pre-commit.ci] pre-commit autoupdate (#510)
pre-commit-ci[bot] Jun 19, 2024
52160a5
Bump codecov/codecov-action from 4.3.0 to 4.4.1 (#514)
dependabot[bot] Jun 19, 2024
0824df2
Docs cleanup (#518)
dcherian Jun 25, 2024
0db5233
Bump links to CF-1.11 (#519)
dcherian Jun 25, 2024
c511cc5
Add geometry encoding and decoding functions. (#517)
dcherian Jun 25, 2024
dffe63f
Bump codecov/codecov-action from 4.4.1 to 4.5.0 (#525)
dependabot[bot] Jul 1, 2024
5dfae7f
Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 (#524)
dependabot[bot] Jul 1, 2024
fae9460
Add grid_mapping for geometries if possible (#521)
dcherian Jul 1, 2024
9f1ca50
[pre-commit.ci] pre-commit autoupdate (#527)
pre-commit-ci[bot] Jul 1, 2024
a74efdb
Rewrite unit formatter for pint 0.24 and earlier (#523)
aulemahal Jul 5, 2024
3217aaf
Allow encoding/decoding multiple geometries (#526)
dcherian Jul 17, 2024
8102e18
Add release.yml
dcherian Jul 17, 2024
acc1eb0
Drop Python 3.9 (#530)
dcherian Aug 21, 2024
c349436
Speed up geometry encoding (#535)
dcherian Sep 11, 2024
bf9ba5a
Bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.0 (#533)
dependabot[bot] Sep 11, 2024
7072f70
add min xarray pin on run and numpy py ver linters (#536)
ocefpaf Sep 11, 2024
f474e5c
Avoid one deepcopy in geometry encoding (#537)
dcherian Sep 15, 2024
62ff402
Adds support for parametric vertical coordinate (#528)
jasonb5 Oct 22, 2024
eb2ad11
[pre-commit.ci] pre-commit autoupdate (#540)
pre-commit-ci[bot] Oct 22, 2024
f075675
Bump pypa/gh-action-pypi-publish from 1.10.0 to 1.10.2 (#539)
dependabot[bot] Oct 22, 2024
2ef5387
fix mypy (#541)
dcherian Oct 22, 2024
8852b9d
no more whats-new (#542)
dcherian Oct 22, 2024
e4223b4
Bump codecov/codecov-action from 4.5.0 to 4.6.0 (#546)
dependabot[bot] Nov 1, 2024
876166f
Bump mamba-org/setup-micromamba from 1 to 2 (#545)
dependabot[bot] Nov 1, 2024
22ee634
Bump pypa/gh-action-pypi-publish from 1.10.2 to 1.11.0 (#544)
dependabot[bot] Nov 1, 2024
b652bff
Bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.2 (#549)
dependabot[bot] Dec 1, 2024
1591ff5
Bump codecov/codecov-action from 4.6.0 to 5.0.7 (#548)
dependabot[bot] Dec 1, 2024
ae1ea94
Bump pypa/gh-action-pypi-publish from 1.12.2 to 1.12.3 (#551)
dependabot[bot] Jan 30, 2025
8c9cd90
Bump codecov/codecov-action from 5.0.7 to 5.1.2 (#550)
dependabot[bot] Jan 30, 2025
6d81913
Maintenance (#553)
dcherian Jan 30, 2025
f9ae54e
Bump pypa/gh-action-pypi-publish from 1.12.3 to 1.12.4 (#555)
dependabot[bot] Feb 26, 2025
b22765f
Bump codecov/codecov-action from 5.1.2 to 5.3.1 (#554)
dependabot[bot] Feb 26, 2025
59167f4
Bump codecov/codecov-action from 5.3.1 to 5.4.0 (#557)
dependabot[bot] Mar 6, 2025
c656abd
Add FlagGrouper (#556)
dcherian Mar 6, 2025
760b6b0
Add pooch downloader to workaround https://github.com/readthedocs/rea…
znichollscr Mar 6, 2025
ad28d6a
Fix API rendering? (#558)
dcherian Mar 6, 2025
360483e
Fix Grouper import (#560)
dcherian Mar 7, 2025
b11e491
Fixes decoding parametric coord (#561)
jasonb5 Mar 16, 2025
921490b
Fix SupportsArithmetic import (#563)
dcherian Mar 16, 2025
cb5e888
Update types (#564)
dcherian Mar 16, 2025
dc80226
Fix imports again (#565)
dcherian Mar 18, 2025
f0b7eb5
FlagGrouper: Encapsulate instead of subclassing UniqueGrouper (#569)
dcherian Apr 15, 2025
4be96ff
Bump codecov/codecov-action from 5.4.0 to 5.4.2 (#571)
dependabot[bot] May 1, 2025
82fbfe5
fix geometry detection (#573)
martinfleis Jun 20, 2025
b234dd9
[pre-commit.ci] pre-commit autoupdate (#567)
pre-commit-ci[bot] Jun 20, 2025
3bd61c0
Bump codecov/codecov-action from 5.4.2 to 5.4.3 (#572)
dependabot[bot] Jun 20, 2025
37adadb
Fix types (#574)
dcherian Jun 20, 2025
195fc2e
one more type fix (#575)
dcherian Jun 20, 2025
9698e04
Update Python version requirements to match SPEC-0 (#580)
dcherian Jul 16, 2025
3829d0c
[pre-commit.ci] pre-commit autoupdate (#578)
pre-commit-ci[bot] Jul 16, 2025
cfe87d0
Update `bounds_to_vertices` to handle descending arrays (#579)
tomvothecoder Aug 11, 2025
ad0c548
Bump actions/checkout from 4 to 5 (#585)
dependabot[bot] Sep 1, 2025
246f342
Bump codecov/codecov-action from 5.4.3 to 5.5.0 (#583)
dependabot[bot] Sep 1, 2025
6b18b75
Bump actions/download-artifact from 4 to 5 (#584)
dependabot[bot] Sep 1, 2025
f0b8083
handle monotonicity of cftime objects (#582)
larsbuntemeyer Sep 3, 2025
b714e00
Fix accidental data load (#587)
dcherian Sep 3, 2025
d91551f
Bump pypa/gh-action-pypi-publish in /.github/workflows (#588)
dependabot[bot] Sep 4, 2025
5609564
Support multiple grid mappings; Add new GridMapping dataclass (#586)
dcherian Sep 4, 2025
0545d81
Switch to uv (#589)
dcherian Sep 4, 2025
e6b7915
bump python on testpypi (#590)
dcherian Sep 4, 2025
70be853
Fix singleton coord in core dim orders (#592)
aulemahal Sep 8, 2025
ffafebe
[pre-commit.ci] pre-commit autoupdate (#600)
pre-commit-ci[bot] Oct 6, 2025
129a4ee
Bump actions/setup-python from 5 to 6 (#597)
dependabot[bot] Nov 1, 2025
afe0146
Bump codecov/codecov-action from 5.5.0 to 5.5.1 (#599)
dependabot[bot] Nov 1, 2025
b516bf5
Bump astral-sh/setup-uv from 4 to 7 (#604)
dependabot[bot] Nov 1, 2025
26c0c69
Bump actions/download-artifact from 5 to 6 (#603)
dependabot[bot] Nov 1, 2025
75f2dc6
Dont preserve attributes when creating bounds (#608)
aulemahal Dec 9, 2025
6dfd73c
Bump actions/checkout from 5 to 6 (#606)
dependabot[bot] Dec 9, 2025
e82882b
Bump actions/upload-artifact from 4 to 5 (#605)
dependabot[bot] Dec 11, 2025
a346a48
Raise ValueError in `_get_ordered_vertices()` with "mixed" order (#595)
tomvothecoder Dec 11, 2025
538cc9c
[pre-commit.ci] pre-commit autoupdate (#612)
pre-commit-ci[bot] Jan 5, 2026
2850ccd
Add HEALPix grid mapping support to GridMapping (#614)
dcherian Feb 3, 2026
dd89dd0
Add reduced gaussian grid mapping support (#613)
dcherian Feb 3, 2026
61fb1ea
Bump actions/upload-artifact from 5 to 6 (#611)
dependabot[bot] Feb 3, 2026
0c17e0e
Bump actions/download-artifact from 6 to 7 (#609)
dependabot[bot] Feb 3, 2026
3b1c922
Bump codecov/codecov-action from 5.5.1 to 5.5.2 (#610)
dependabot[bot] Feb 3, 2026
955e78b
Bump starlette from 0.47.3 to 0.49.1 (#616)
dependabot[bot] Feb 3, 2026
a2fc7cc
Bump urllib3 from 2.5.0 to 2.6.3 (#617)
dependabot[bot] Feb 3, 2026
dd22c0c
Bump fonttools from 4.59.2 to 4.60.2 (#615)
dependabot[bot] Feb 3, 2026
b39d00c
Bump pillow from 11.3.0 to 12.1.1 (#618)
dependabot[bot] Feb 11, 2026
017306f
Bump requests from 2.32.5 to 2.33.0 (#624)
dependabot[bot] Mar 27, 2026
9803061
Avoid overlapping bounds and/or gaps when points are irregularly spac…
bouweandela Mar 27, 2026
aede27a
Bump actions/download-artifact from 7 to 8 (#620)
dependabot[bot] Mar 27, 2026
982d8f6
Bump actions/upload-artifact from 6 to 7 (#619)
dependabot[bot] Mar 27, 2026
56a6ba6
Fix link to cosima model agnostic analysis (#626)
charles-turner-1 Mar 29, 2026
5d05556
Fix mypy checks (#630)
bouweandela Apr 1, 2026
24823dc
[pre-commit.ci] pre-commit autoupdate (#631)
pre-commit-ci[bot] Apr 6, 2026
d3cbbe5
Hoist regex import in _get_custom_criteria to module scope
dcherian May 1, 2026
cc071e9
Bump pytest from 8.4.2 to 9.0.3 (#634)
dependabot[bot] May 1, 2026
7bd3c7a
Bump pygments from 2.19.2 to 2.20.0 (#628)
dependabot[bot] May 1, 2026
aa5790b
Bump lxml from 6.0.1 to 6.1.0 (#635)
dependabot[bot] May 1, 2026
6c1144f
Bump pillow from 12.1.1 to 12.2.0 (#633)
dependabot[bot] May 1, 2026
9d9dd89
Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (#636)
dependabot[bot] May 1, 2026
07532e8
Bump codecov/codecov-action from 5.5.2 to 6.0.0 (#629)
dependabot[bot] May 1, 2026
4205e7f
Bump tornado from 6.5.2 to 6.5.5 (#621)
dependabot[bot] May 1, 2026
4c0957c
Optimize add_bounds (#627)
bouweandela May 1, 2026
8fa8978
Speed up Dataset.cf.bounds with a single-pass scan (#637)
dcherian May 2, 2026
9716f18
Bump urllib3 from 2.6.3 to 2.7.0 (#639)
dependabot[bot] May 12, 2026
af9fb12
Memoize parse_cell_methods_attr
dcherian May 2, 2026
c0a2cec
Short-circuit _getitem for direct variable-name keys
dcherian May 2, 2026
3aa7eee
Defer obj.cf.bounds in _getitem until needed
dcherian May 2, 2026
e27668a
Cache parse_grid_mapping too
dcherian May 12, 2026
0fd08cd
Cleanup
dcherian May 12, 2026
192f107
Update type
dcherian May 12, 2026
87fa240
Include topology vars when subsetting with `.cf` (#640)
dcherian May 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
5 changes: 5 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
changelog:
exclude:
authors:
- dependabot
- pre-commit-ci
122 changes: 67 additions & 55 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,87 +9,99 @@ on:
schedule:
- cron: "0 13 * * 1"

concurrency:
group: ${{ github.ref }}
cancel-in-progress: true

env:
COLUMNS: 120

jobs:
build:
name: Build (${{ matrix.python-version }}, ${{ matrix.os }})
name: Build (${{ matrix.python-version }}, ${{ matrix.os }}), ${{ matrix.env }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
python-version: ["3.7", "3.8", "3.9"]
python-version: ["3.11", "3.13"]
env: ["test"]
include:
- env: "test-min-deps"
python-version: "3.11"
os: ubuntu-latest
- env: "test-no-optional"
python-version: "3.13"
os: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: conda-incubator/setup-miniconda@v2
- uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch all history for all branches and tags.

- name: Set up Python
uses: actions/setup-python@v6
with:
channels: conda-forge
mamba-version: "*"
activate-environment: cf_xarray_test
auto-update-conda: false
python-version: ${{ matrix.python-version }}
- name: Set up conda environment
shell: bash -l {0}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
run: |
mamba env update -f ci/environment.yml
python -m pip install -e .
conda list
uv pip install --system -e .
uv pip install --system --group ${{ matrix.env }}

- name: Run Tests
shell: bash -l {0}
run: |
pytest --cov=./ --cov-report=xml
pytest -n auto --cov=./ --cov-report=xml

- name: Upload code coverage to Codecov
uses: codecov/codecov-action@v1
uses: codecov/codecov-action@v6.0.0
with:
file: ./coverage.xml
flags: unittests
env_vars: OS,PYTHON
env_vars: RUNNER_OS,PYTHON_VERSION
name: codecov-umbrella
fail_ci_if_error: false

no-optional-deps:
name: no-optional-deps
runs-on: ubuntu-latest
mypy:
name: mypy
runs-on: "ubuntu-latest"
strategy:
matrix:
python-version: ["3.11", "3.13"]
steps:
- uses: actions/checkout@v2
- uses: conda-incubator/setup-miniconda@v2
- uses: actions/checkout@v6
with:
channels: conda-forge
mamba-version: "*"
activate-environment: cf_xarray_test
auto-update-conda: false
python-version: ${{ matrix.python-version }}
- name: Set up conda environment
shell: bash -l {0}
run: |
mamba env update -f ci/environment-no-optional-deps.yml
python -m pip install -e .
conda list
- name: Run Tests
shell: bash -l {0}
run: |
pytest -n 2
fetch-depth: 0 # Fetch all history for all branches and tags.

upstream-dev:
name: upstream-dev
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: conda-incubator/setup-miniconda@v2
- name: Set up Python
uses: actions/setup-python@v6
with:
channels: conda-forge
mamba-version: "*"
activate-environment: cf_xarray_test
auto-update-conda: false
python-version: ${{ matrix.python-version }}
- name: Set up conda environment
shell: bash -l {0}

- name: Install uv
uses: astral-sh/setup-uv@v7
with:
enable-cache: true

- name: Install dependencies
run: |
mamba env update -f ci/upstream-dev-env.yml
python -m pip install -e .
conda list
- name: Run Tests
shell: bash -l {0}
uv pip install --system -e .
uv pip install --system --group test
uv pip install --system --group typing

- name: Run mypy
run: |
pytest -n 2
python -m mypy --install-types --non-interactive --cobertura-xml-report mypy_report cf_xarray/

- name: Upload mypy coverage to Codecov
uses: codecov/codecov-action@v6.0.0
with:
file: mypy_report/cobertura.xml
flags: mypy
env_vars: PYTHON_VERSION
name: codecov-umbrella
fail_ci_if_error: false
102 changes: 102 additions & 0 deletions .github/workflows/parse_logs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# type: ignore
import argparse
import functools
import json
import pathlib
import textwrap
from dataclasses import dataclass

from pytest import CollectReport, TestReport


@dataclass
class SessionStart:
pytest_version: str
outcome: str = "status"

@classmethod
def _from_json(cls, json):
json_ = json.copy()
json_.pop("$report_type")
return cls(**json_)


@dataclass
class SessionFinish:
exitstatus: str
outcome: str = "status"

@classmethod
def _from_json(cls, json):
json_ = json.copy()
json_.pop("$report_type")
return cls(**json_)


def parse_record(record):
report_types = {
"TestReport": TestReport,
"CollectReport": CollectReport,
"SessionStart": SessionStart,
"SessionFinish": SessionFinish,
}
cls = report_types.get(record["$report_type"])
if cls is None:
raise ValueError(f"unknown report type: {record['$report_type']}")

return cls._from_json(record)


@functools.singledispatch
def format_summary(report):
return f"{report.nodeid}: {report}"


@format_summary.register
def _(report: TestReport):
message = report.longrepr.chain[0][1].message
return f"{report.nodeid}: {message}"


@format_summary.register
def _(report: CollectReport):
message = report.longrepr.split("\n")[-1].removeprefix("E").lstrip()
return f"{report.nodeid}: {message}"


def format_report(reports, py_version):
newline = "\n"
summaries = newline.join(format_summary(r) for r in reports)
message = textwrap.dedent(
"""\
<details><summary>Python {py_version} Test Summary</summary>

```
{summaries}
```

</details>
"""
).format(summaries=summaries, py_version=py_version)
return message


if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("filepath", type=pathlib.Path)
args = parser.parse_args()

py_version = args.filepath.stem.split("-")[1]

print("Parsing logs ...")

lines = args.filepath.read_text().splitlines()
reports = [parse_record(json.loads(line)) for line in lines]

failed = [report for report in reports if report.outcome == "failed"]

message = format_report(failed, py_version=py_version)

output_file = pathlib.Path("pytest-logs.txt")
print(f"Writing output file to: {output_file.absolute()}")
output_file.write_text(message)
105 changes: 90 additions & 15 deletions .github/workflows/pypi.yaml
Original file line number Diff line number Diff line change
@@ -1,26 +1,101 @@
name: Upload Package to PyPI

name: Build and Upload to PyPI
on:
release:
types: [created]
types:
- published
push:
tags:
- 'v*'

jobs:
deploy:
build-artifacts:
runs-on: ubuntu-latest
if: github.repository == 'xarray-contrib/cf-xarray'
steps:
- uses: actions/checkout@v1
- name: Set up Python
uses: actions/setup-python@v1
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-python@v6
name: Install Python
with:
python-version: '3.x'
python-version: "3.11"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools setuptools-scm wheel twine
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
python -m pip install build twine

- name: Build tarball and wheels
run: |
git clean -xdf
git restore -SW .
python -m build

- name: Check built artifacts
run: |
python -m twine check --strict dist/*
pwd
if [ -f dist/cf_xarray-0.0.0.tar.gz ]; then
echo "❌ INVALID VERSION NUMBER"
exit 1
else
echo "✅ Looks good"
fi
- uses: actions/upload-artifact@v7
with:
name: releases
path: dist

test-built-dist:
needs: build-artifacts
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v6
name: Install Python
with:
python-version: "3.11"
- uses: actions/download-artifact@v8
with:
name: releases
path: dist
- name: List contents of built dist
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
ls -ltrh
ls -ltrh dist

- name: Verify the built dist/wheel is valid
if: github.event_name == 'push'
run: |
python -m pip install --upgrade pip
python -m pip install dist/cf_xarray*.whl
python -m cf_xarray.scripts.print_versions

- name: Publish package to TestPyPI
if: github.event_name == 'push'
uses: pypa/gh-action-pypi-publish@v1.14.0
with:
password: ${{ secrets.TESTPYPI_TOKEN }}
repository_url: https://test.pypi.org/legacy/
verbose: true


upload-to-pypi:
needs: test-built-dist
if: github.event_name == 'release'
runs-on: ubuntu-latest

environment:
name: pypi
url: https://pypi.org/p/cf-xarray
permissions:
id-token: write

steps:
- uses: actions/download-artifact@v8
with:
name: releases
path: dist
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@v1.14.0
with:
verbose: true
Loading