cf-xarray 0.10.4__tar.gz → 0.10.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/workflows/ci.yaml +2 -2
  2. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.pre-commit-config.yaml +3 -3
  3. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/PKG-INFO +3 -2
  4. cf_xarray-0.10.6/cf_xarray/_version.py +1 -0
  5. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/accessor.py +5 -5
  6. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/geometry.py +5 -3
  7. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/groupers.py +11 -4
  8. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_geometry.py +3 -1
  9. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray.egg-info/PKG-INFO +3 -2
  10. cf_xarray-0.10.4/cf_xarray/_version.py +0 -1
  11. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.binder/environment.yml +0 -0
  12. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.deepsource.toml +0 -0
  13. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/dependabot.yml +0 -0
  14. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/release.yml +0 -0
  15. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/workflows/parse_logs.py +0 -0
  16. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/workflows/pypi.yaml +0 -0
  17. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/workflows/testpypi-release.yaml +0 -0
  18. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.github/workflows/upstream-dev-ci.yaml +0 -0
  19. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.gitignore +0 -0
  20. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.readthedocs.yml +0 -0
  21. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/.tributors +0 -0
  22. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/CITATION.cff +0 -0
  23. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/LICENSE +0 -0
  24. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/README.rst +0 -0
  25. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/__init__.py +0 -0
  26. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/coding.py +0 -0
  27. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/criteria.py +0 -0
  28. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/datasets.py +0 -0
  29. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/formatting.py +0 -0
  30. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/helpers.py +0 -0
  31. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/options.py +0 -0
  32. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/parametric.py +0 -0
  33. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/py.typed +0 -0
  34. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/scripts/make_doc.py +0 -0
  35. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/scripts/print_versions.py +0 -0
  36. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/sgrid.py +0 -0
  37. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/__init__.py +0 -0
  38. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/conftest.py +0 -0
  39. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_accessor.py +0 -0
  40. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_coding.py +0 -0
  41. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_groupers.py +0 -0
  42. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_helpers.py +0 -0
  43. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_options.py +0 -0
  44. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_parametric.py +0 -0
  45. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_scripts.py +0 -0
  46. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/tests/test_units.py +0 -0
  47. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/units.py +0 -0
  48. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray/utils.py +0 -0
  49. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray.egg-info/SOURCES.txt +0 -0
  50. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray.egg-info/dependency_links.txt +0 -0
  51. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray.egg-info/requires.txt +0 -0
  52. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/cf_xarray.egg-info/top_level.txt +0 -0
  53. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/ci/doc.yml +0 -0
  54. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/ci/environment-all-min-deps.yml +0 -0
  55. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/ci/environment-no-optional-deps.yml +0 -0
  56. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/ci/environment.yml +0 -0
  57. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/ci/upstream-dev-env.yml +0 -0
  58. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/codecov.yml +0 -0
  59. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/2D_bounds_averaged.png +0 -0
  60. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/2D_bounds_error.png +0 -0
  61. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/2D_bounds_nonunique.png +0 -0
  62. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/Makefile +0 -0
  63. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/_static/dataset-diagram-logo.tex +0 -0
  64. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/_static/full-logo.png +0 -0
  65. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/_static/logo.png +0 -0
  66. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/_static/logo.svg +0 -0
  67. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/_static/rich-repr-example.png +0 -0
  68. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/_static/style.css +0 -0
  69. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/api.rst +0 -0
  70. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/bounds.md +0 -0
  71. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/cartopy_rotated_pole.png +0 -0
  72. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/coding.md +0 -0
  73. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/conf.py +0 -0
  74. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/contributing.rst +0 -0
  75. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/coord_axes.md +0 -0
  76. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/custom-criteria.md +0 -0
  77. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/dsg.md +0 -0
  78. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/examples/introduction.ipynb +0 -0
  79. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/faq.md +0 -0
  80. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/flags.md +0 -0
  81. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/geometry.md +0 -0
  82. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/grid_mappings.md +0 -0
  83. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/howtouse.md +0 -0
  84. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/index.rst +0 -0
  85. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/make.bat +0 -0
  86. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/parametricz.md +0 -0
  87. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/plotting.md +0 -0
  88. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/provenance.md +0 -0
  89. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/quickstart.md +0 -0
  90. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/roadmap.rst +0 -0
  91. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/selecting.md +0 -0
  92. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/sgrid_ugrid.md +0 -0
  93. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/units.md +0 -0
  94. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/doc/whats-new.rst +0 -0
  95. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/pyproject.toml +0 -0
  96. {cf_xarray-0.10.4 → cf_xarray-0.10.6}/setup.cfg +0 -0
@@ -70,7 +70,7 @@ jobs:
70
70
  run: |
71
71
  pytest -n auto --cov=./ --cov-report=xml
72
72
  - name: Upload code coverage to Codecov
73
- uses: codecov/codecov-action@v5.4.0
73
+ uses: codecov/codecov-action@v5.4.3
74
74
  with:
75
75
  file: ./coverage.xml
76
76
  flags: unittests
@@ -109,7 +109,7 @@ jobs:
109
109
  run: |
110
110
  python -m mypy --install-types --non-interactive --cobertura-xml-report mypy_report cf_xarray/
111
111
  - name: Upload mypy coverage to Codecov
112
- uses: codecov/codecov-action@v5.4.0
112
+ uses: codecov/codecov-action@v5.4.3
113
113
  with:
114
114
  file: mypy_report/cobertura.xml
115
115
  flags: mypy
@@ -10,7 +10,7 @@ repos:
10
10
 
11
11
  - repo: https://github.com/astral-sh/ruff-pre-commit
12
12
  # Ruff version.
13
- rev: 'v0.9.3'
13
+ rev: 'v0.11.4'
14
14
  hooks:
15
15
  - id: ruff
16
16
  args: ["--fix", "--show-fixes"]
@@ -24,7 +24,7 @@ repos:
24
24
  args: ['--config', 'pyproject.toml']
25
25
 
26
26
  - repo: https://github.com/executablebooks/mdformat
27
- rev: 0.7.21
27
+ rev: 0.7.22
28
28
  hooks:
29
29
  - id: mdformat
30
30
  additional_dependencies:
@@ -55,7 +55,7 @@ repos:
55
55
  - id: validate-cff
56
56
 
57
57
  - repo: https://github.com/abravalheri/validate-pyproject
58
- rev: v0.23
58
+ rev: v0.24.1
59
59
  hooks:
60
60
  - id: validate-pyproject
61
61
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cf_xarray
3
- Version: 0.10.4
3
+ Version: 0.10.6
4
4
  Summary: A convenience wrapper for using CF attributes on xarray objects
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -229,6 +229,7 @@ Requires-Dist: shapely; extra == "all"
229
229
  Requires-Dist: regex; extra == "all"
230
230
  Requires-Dist: rich; extra == "all"
231
231
  Requires-Dist: pooch; extra == "all"
232
+ Dynamic: license-file
232
233
 
233
234
  .. image:: https://img.shields.io/static/v1.svg?logo=Jupyter&label=Pangeo+Binder&message=GCE+us-central1&color=blue&style=for-the-badge
234
235
  :target: https://binder.pangeo.io/v2/gh/xarray-contrib/cf-xarray/main?urlpath=lab
@@ -0,0 +1 @@
1
+ __version__ = "0.10.6"
@@ -39,8 +39,8 @@ except ImportError:
39
39
  )
40
40
 
41
41
  try:
42
- from xarray.core.weighted import (
43
- Weighted, # type:ignore[import-not-found,no-redef,unused-ignore]
42
+ from xarray.core.weighted import ( # type:ignore[import-not-found,no-redef,unused-ignore]
43
+ Weighted,
44
44
  )
45
45
  except ImportError:
46
46
  from xarray.computation.weighted import ( # type:ignore[import-not-found,no-redef,unused-ignore]
@@ -1376,7 +1376,7 @@ class CFAccessor:
1376
1376
 
1377
1377
  def curvefit(
1378
1378
  self,
1379
- coords: Hashable | DataArray | Iterable[Hashable | DataArray],
1379
+ coords: Hashable | Iterable[Hashable],
1380
1380
  func: Callable[..., Any],
1381
1381
  reduce_dims: Hashable | Iterable[Hashable] | None = None,
1382
1382
  skipna: bool = True,
@@ -1386,8 +1386,8 @@ class CFAccessor:
1386
1386
  kwargs: dict[str, Any] | None = None,
1387
1387
  ):
1388
1388
  if coords is not None:
1389
- if isinstance(coords, Hashable | DataArray):
1390
- coords_iter: Iterable[Hashable | DataArray] = [coords]
1389
+ if isinstance(coords, Hashable):
1390
+ coords_iter: Iterable[Hashable] = [coords]
1391
1391
  else:
1392
1392
  coords_iter = coords
1393
1393
  coords = [
@@ -298,8 +298,10 @@ def encode_geometries(ds: xr.Dataset):
298
298
  geom_var_names = [
299
299
  name
300
300
  for name, var in ds._variables.items()
301
- if var.dtype == "O" and isinstance(var.data.flat[0], SHAPELY_TYPES)
301
+ if var.dtype == "geometry"
302
+ or (var.dtype == "O" and isinstance(var.data.flat[0], SHAPELY_TYPES))
302
303
  ]
304
+
303
305
  if not geom_var_names:
304
306
  return ds
305
307
 
@@ -410,8 +412,8 @@ def reshape_unique_geometries(
410
412
  out = out.unstack(temp_name)
411
413
 
412
414
  # geom_var was reshaped also, reconstruct it from the unique values.
413
- unique_indexes = xr.DataArray(unique_indexes, dims=(new_dim,))
414
- out[geom_var] = ds[geom_var].isel({old_name: unique_indexes})
415
+ unique_indexes_da = xr.DataArray(unique_indexes, dims=(new_dim,))
416
+ out[geom_var] = ds[geom_var].isel({old_name: unique_indexes_da})
415
417
  if old_name not in ds.coords:
416
418
  # If there was no coord before, drop the dummy one we made.
417
419
  out = out.drop_vars(old_name) # type: ignore[arg-type,unused-ignore] # Hashable/str stuff
@@ -2,11 +2,12 @@ from dataclasses import dataclass
2
2
 
3
3
  import numpy as np
4
4
  import pandas as pd
5
- from xarray.groupers import EncodedGroups, UniqueGrouper
5
+ from xarray import Variable
6
+ from xarray.groupers import EncodedGroups, Grouper, UniqueGrouper
6
7
 
7
8
 
8
9
  @dataclass
9
- class FlagGrouper(UniqueGrouper):
10
+ class FlagGrouper(Grouper):
10
11
  """
11
12
  Grouper object that allows convenient categorical grouping by a CF flag variable.
12
13
 
@@ -23,12 +24,12 @@ class FlagGrouper(UniqueGrouper):
23
24
  values = np.array(group.attrs["flag_values"])
24
25
  full_index = pd.Index(group.attrs["flag_meanings"].split(" "))
25
26
 
26
- self.labels = values
27
+ grouper = UniqueGrouper(labels=values)
27
28
 
28
29
  # TODO: we could optimize here, since `group` is already factorized,
29
30
  # but there are subtleties. For example, the attrs must be up to date,
30
31
  # any value that is not in flag_values will cause an error, etc.
31
- ret = super().factorize(group)
32
+ ret = grouper.factorize(group)
32
33
 
33
34
  ret.codes.attrs.pop("flag_values")
34
35
  ret.codes.attrs.pop("flag_meanings")
@@ -36,5 +37,11 @@ class FlagGrouper(UniqueGrouper):
36
37
  return EncodedGroups(
37
38
  codes=ret.codes,
38
39
  full_index=full_index,
40
+ unique_coord=Variable(
41
+ dims=ret.codes.name, data=np.array(full_index), attrs=ret.codes.attrs
42
+ ),
39
43
  group_indices=ret.group_indices,
40
44
  )
45
+
46
+ def reset(self):
47
+ raise NotImplementedError()
@@ -507,5 +507,7 @@ def test_encode_decode(geometry_ds, polygon_geometry):
507
507
  )
508
508
  multi_ds = xr.merge([polyds, geometry_ds[1]])
509
509
  for ds in (geometry_ds[1], polygon_geometry.to_dataset(), geom_dim_ds, multi_ds):
510
- roundtripped = decode_geometries(encode_geometries(ds))
510
+ encoded = encode_geometries(ds)
511
+ assert len(encoded.data_vars) > len(ds.data_vars)
512
+ roundtripped = decode_geometries(encoded)
511
513
  xr.testing.assert_identical(ds, roundtripped)
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: cf_xarray
3
- Version: 0.10.4
3
+ Version: 0.10.6
4
4
  Summary: A convenience wrapper for using CF attributes on xarray objects
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -229,6 +229,7 @@ Requires-Dist: shapely; extra == "all"
229
229
  Requires-Dist: regex; extra == "all"
230
230
  Requires-Dist: rich; extra == "all"
231
231
  Requires-Dist: pooch; extra == "all"
232
+ Dynamic: license-file
232
233
 
233
234
  .. image:: https://img.shields.io/static/v1.svg?logo=Jupyter&label=Pangeo+Binder&message=GCE+us-central1&color=blue&style=for-the-badge
234
235
  :target: https://binder.pangeo.io/v2/gh/xarray-contrib/cf-xarray/main?urlpath=lab
@@ -1 +0,0 @@
1
- __version__ = "0.10.4"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes