@@ -408,17 +408,9 @@ def __init__(
408
408
self ,
409
409
# could make a VariableArgs to use more generally, and refine these
410
410
# categories
411
- data_vars : Mapping [
412
- Hashable ,
413
- Union [
414
- "DataArray" ,
415
- Variable ,
416
- Tuple [Hashable , Any ],
417
- Tuple [Sequence [Hashable ], Any ],
418
- ],
419
- ] = None ,
411
+ data_vars : Mapping [Hashable , Any ] = None ,
420
412
coords : Mapping [Hashable , Any ] = None ,
421
- attrs : Mapping = None ,
413
+ attrs : Mapping [ Hashable , Any ] = None ,
422
414
compat = None ,
423
415
):
424
416
"""To load data from a file or file-like object, use the `open_dataset`
@@ -439,6 +431,8 @@ def __init__(
439
431
- mapping {var name: Variable}
440
432
- mapping {var name: (dimension name, array-like)}
441
433
- mapping {var name: (tuple of dimension names, array-like)}
434
+ - mapping {dimension name: array-like}
435
+ (it will be automatically moved to coords, see below)
442
436
443
437
Each dimension must have the same length in all variables in which
444
438
it appears.
@@ -460,6 +454,7 @@ def __init__(
460
454
- mapping {coord name: (dimension name, array-like)}
461
455
- mapping {coord name: (tuple of dimension names, array-like)}
462
456
- mapping {dimension name: array-like}
457
+ (the dimension name is implicitly set to be the same as the coord name)
463
458
464
459
The last notation implies that the coord name is the same as the
465
460
dimension name.
@@ -2052,17 +2047,13 @@ def relevant_keys(mapping):
2052
2047
]
2053
2048
2054
2049
coords = relevant_keys (self .coords )
2055
- indexers = [
2056
- (k , np .asarray (v )) # type: ignore
2057
- for k , v in indexers .items ()
2058
- ]
2059
- indexers_dict = dict (indexers )
2050
+ indexers = {k : np .asarray (v ) for k , v in indexers .items ()}
2060
2051
non_indexed_dims = set (self .dims ) - indexer_dims
2061
2052
non_indexed_coords = set (self .coords ) - set (coords )
2062
2053
2063
2054
# All the indexers should be iterables
2064
2055
# Check that indexers are valid dims, integers, and 1D
2065
- for k , v in indexers :
2056
+ for k , v in indexers . items () :
2066
2057
if k not in self .dims :
2067
2058
raise ValueError ("dimension %s does not exist" % k )
2068
2059
if v .dtype .kind != "i" : # type: ignore
@@ -2071,7 +2062,7 @@ def relevant_keys(mapping):
2071
2062
raise ValueError ("Indexers must be 1 dimensional" )
2072
2063
2073
2064
# all the indexers should have the same length
2074
- lengths = {len (v ) for k , v in indexers }
2065
+ lengths = {len (v ) for k , v in indexers . items () }
2075
2066
if len (lengths ) > 1 :
2076
2067
raise ValueError ("All indexers must be the same length" )
2077
2068
@@ -2109,12 +2100,9 @@ def relevant_keys(mapping):
2109
2100
variables = OrderedDict () # type: ignore
2110
2101
2111
2102
for name , var in reordered .variables .items ():
2112
- if name in indexers_dict or any (d in indexer_dims for d in var .dims ):
2103
+ if name in indexers or any (d in indexer_dims for d in var .dims ):
2113
2104
# slice if var is an indexer or depends on an indexed dim
2114
- slc = [
2115
- indexers_dict [k ] if k in indexers_dict else slice (None )
2116
- for k in var .dims
2117
- ]
2105
+ slc = [indexers .get (k , slice (None )) for k in var .dims ]
2118
2106
2119
2107
var_dims = [dim_name ] + [d for d in var .dims if d in non_indexed_dims ]
2120
2108
selection = take (var , tuple (slc ))
0 commit comments