|
3 | 3 | from collections import Counter
|
4 | 4 |
|
5 | 5 | import numpy as np
|
6 |
| -import pandas as pd |
7 | 6 |
|
8 | 7 | from xarray.coding.times import CFDatetimeCoder, CFTimedeltaCoder
|
9 | 8 | from xarray.conventions import decode_cf
|
|
12 | 11 | from xarray.core.dtypes import get_fill_value
|
13 | 12 | from xarray.core.pycompat import array_type
|
14 | 13 |
|
15 |
| -cdms2_ignored_attrs = {"name", "tileIndex"} |
16 | 14 | iris_forbidden_keys = {
|
17 | 15 | "standard_name",
|
18 | 16 | "long_name",
|
@@ -60,92 +58,6 @@ def _filter_attrs(attrs, ignored_attrs):
|
60 | 58 | return {k: v for k, v in attrs.items() if k not in ignored_attrs}
|
61 | 59 |
|
62 | 60 |
|
63 |
| -def from_cdms2(variable): |
64 |
| - """Convert a cdms2 variable into an DataArray""" |
65 |
| - values = np.asarray(variable) |
66 |
| - name = variable.id |
67 |
| - dims = variable.getAxisIds() |
68 |
| - coords = {} |
69 |
| - for axis in variable.getAxisList(): |
70 |
| - coords[axis.id] = DataArray( |
71 |
| - np.asarray(axis), |
72 |
| - dims=[axis.id], |
73 |
| - attrs=_filter_attrs(axis.attributes, cdms2_ignored_attrs), |
74 |
| - ) |
75 |
| - grid = variable.getGrid() |
76 |
| - if grid is not None: |
77 |
| - ids = [a.id for a in grid.getAxisList()] |
78 |
| - for axis in grid.getLongitude(), grid.getLatitude(): |
79 |
| - if axis.id not in variable.getAxisIds(): |
80 |
| - coords[axis.id] = DataArray( |
81 |
| - np.asarray(axis[:]), |
82 |
| - dims=ids, |
83 |
| - attrs=_filter_attrs(axis.attributes, cdms2_ignored_attrs), |
84 |
| - ) |
85 |
| - attrs = _filter_attrs(variable.attributes, cdms2_ignored_attrs) |
86 |
| - dataarray = DataArray(values, dims=dims, coords=coords, name=name, attrs=attrs) |
87 |
| - return decode_cf(dataarray.to_dataset())[dataarray.name] |
88 |
| - |
89 |
| - |
90 |
| -def to_cdms2(dataarray, copy=True): |
91 |
| - """Convert a DataArray into a cdms2 variable""" |
92 |
| - # we don't want cdms2 to be a hard dependency |
93 |
| - import cdms2 |
94 |
| - |
95 |
| - def set_cdms2_attrs(var, attrs): |
96 |
| - for k, v in attrs.items(): |
97 |
| - setattr(var, k, v) |
98 |
| - |
99 |
| - # 1D axes |
100 |
| - axes = [] |
101 |
| - for dim in dataarray.dims: |
102 |
| - coord = encode(dataarray.coords[dim]) |
103 |
| - axis = cdms2.createAxis(coord.values, id=dim) |
104 |
| - set_cdms2_attrs(axis, coord.attrs) |
105 |
| - axes.append(axis) |
106 |
| - |
107 |
| - # Data |
108 |
| - var = encode(dataarray) |
109 |
| - cdms2_var = cdms2.createVariable( |
110 |
| - var.values, axes=axes, id=dataarray.name, mask=pd.isnull(var.values), copy=copy |
111 |
| - ) |
112 |
| - |
113 |
| - # Attributes |
114 |
| - set_cdms2_attrs(cdms2_var, var.attrs) |
115 |
| - |
116 |
| - # Curvilinear and unstructured grids |
117 |
| - if dataarray.name not in dataarray.coords: |
118 |
| - cdms2_axes = {} |
119 |
| - for coord_name in set(dataarray.coords.keys()) - set(dataarray.dims): |
120 |
| - coord_array = dataarray.coords[coord_name].to_cdms2() |
121 |
| - |
122 |
| - cdms2_axis_cls = ( |
123 |
| - cdms2.coord.TransientAxis2D |
124 |
| - if coord_array.ndim |
125 |
| - else cdms2.auxcoord.TransientAuxAxis1D |
126 |
| - ) |
127 |
| - cdms2_axis = cdms2_axis_cls(coord_array) |
128 |
| - if cdms2_axis.isLongitude(): |
129 |
| - cdms2_axes["lon"] = cdms2_axis |
130 |
| - elif cdms2_axis.isLatitude(): |
131 |
| - cdms2_axes["lat"] = cdms2_axis |
132 |
| - |
133 |
| - if "lon" in cdms2_axes and "lat" in cdms2_axes: |
134 |
| - if len(cdms2_axes["lon"].shape) == 2: |
135 |
| - cdms2_grid = cdms2.hgrid.TransientCurveGrid( |
136 |
| - cdms2_axes["lat"], cdms2_axes["lon"] |
137 |
| - ) |
138 |
| - else: |
139 |
| - cdms2_grid = cdms2.gengrid.AbstractGenericGrid( |
140 |
| - cdms2_axes["lat"], cdms2_axes["lon"] |
141 |
| - ) |
142 |
| - for axis in cdms2_grid.getAxisList(): |
143 |
| - cdms2_var.setAxis(cdms2_var.getAxisIds().index(axis.id), axis) |
144 |
| - cdms2_var.setGrid(cdms2_grid) |
145 |
| - |
146 |
| - return cdms2_var |
147 |
| - |
148 |
| - |
149 | 61 | def _pick_attrs(attrs, keys):
|
150 | 62 | """Return attrs with keys in keys list"""
|
151 | 63 | return {k: v for k, v in attrs.items() if k in keys}
|
|
0 commit comments