3
3
import numpy as np
4
4
5
5
from .core .dataarray import DataArray
6
-
6
+ from .conventions import (
7
+ maybe_encode_timedelta , maybe_encode_datetime , decode_cf )
7
8
8
9
ignored_attrs = set (['name' , 'tileIndex' ])
9
10
10
11
11
- def _get_cdms2_attrs (var ):
12
- return dict ((k , v ) for k , v in var .attributes .items ()
13
- if k not in ignored_attrs )
14
-
15
-
16
12
def from_cdms2 (variable ):
17
13
"""Convert a cdms2 variable into an DataArray
18
14
"""
15
+ def get_cdms2_attrs (var ):
16
+ return dict ((k , v ) for k , v in var .attributes .items ()
17
+ if k not in ignored_attrs )
18
+
19
19
values = np .asarray (variable )
20
20
name = variable .id
21
- coords = [(v .id , np .asarray (v ), _get_cdms2_attrs (v ))
21
+ coords = [(v .id , np .asarray (v ), get_cdms2_attrs (v ))
22
22
for v in variable .getAxisList ()]
23
- attrs = _get_cdms2_attrs (variable )
24
- return DataArray (values , coords = coords , name = name , attrs = attrs )
25
-
26
-
27
- def _set_cdms2_attrs (var , attrs ):
28
- for k , v in attrs .items ():
29
- setattr (var , k , v )
23
+ attrs = get_cdms2_attrs (variable )
24
+ dataarray = DataArray (values , coords = coords , name = name , attrs = attrs )
25
+ return decode_cf (dataarray .to_dataset ())[dataarray .name ]
30
26
31
27
32
28
def to_cdms2 (dataarray ):
@@ -35,13 +31,21 @@ def to_cdms2(dataarray):
35
31
# we don't want cdms2 to be a hard dependency
36
32
import cdms2
37
33
34
+ def encode (var ):
35
+ return maybe_encode_timedelta (maybe_encode_datetime (var ))
36
+
37
+ def set_cdms2_attrs (var , attrs ):
38
+ for k , v in attrs .items ():
39
+ setattr (var , k , v )
40
+
38
41
axes = []
39
42
for dim in dataarray .dims :
40
- coord = dataarray .coords [dim ]
43
+ coord = encode ( dataarray .coords [dim ])
41
44
axis = cdms2 .createAxis (coord .values , id = dim )
42
- _set_cdms2_attrs (axis , coord .attrs )
45
+ set_cdms2_attrs (axis , coord .attrs )
43
46
axes .append (axis )
44
47
45
- var = cdms2 .createVariable (dataarray .values , axes = axes , id = dataarray .name )
46
- _set_cdms2_attrs (var , dataarray .attrs )
47
- return var
48
+ var = encode (dataarray )
49
+ cdms2_var = cdms2 .createVariable (var .values , axes = axes , id = dataarray .name )
50
+ set_cdms2_attrs (cdms2_var , var .attrs )
51
+ return cdms2_var
0 commit comments