3
3
import warnings
4
4
from collections import OrderedDict , defaultdict
5
5
from contextlib import suppress
6
+ from typing import Any , Mapping , Optional
6
7
7
8
import numpy as np
9
+ import pandas as pd
8
10
9
11
from . import utils
10
12
from .indexing import get_indexer_nd
11
13
from .utils import is_dict_like , is_full_slice
12
- from .variable import IndexVariable
14
+ from .variable import IndexVariable , Variable
13
15
14
16
15
17
def _get_joiner (join ):
@@ -260,8 +262,15 @@ def reindex_like_indexers(target, other):
260
262
return indexers
261
263
262
264
263
- def reindex_variables (variables , sizes , indexes , indexers , method = None ,
264
- tolerance = None , copy = True ):
265
+ def reindex_variables (
266
+ variables : Mapping [Any , Variable ],
267
+ sizes : Mapping [Any , int ],
268
+ indexes : Mapping [Any , pd .Index ],
269
+ indexers : Mapping ,
270
+ method : Optional [str ] = None ,
271
+ tolerance : Any = None ,
272
+ copy : bool = True ,
273
+ ) -> 'Tuple[OrderedDict[Any, Variable], OrderedDict[Any, pd.Index]]' :
265
274
"""Conform a dictionary of aligned variables onto a new set of variables,
266
275
filling in missing values with NaN.
267
276
@@ -274,7 +283,7 @@ def reindex_variables(variables, sizes, indexes, indexers, method=None,
274
283
sizes : dict-like
275
284
Dictionary from dimension names to integer sizes.
276
285
indexes : dict-like
277
- Dictionary of xarray.IndexVariable objects associated with variables.
286
+ Dictionary of indexes associated with variables.
278
287
indexers : dict
279
288
Dictionary with keys given by dimension names and values given by
280
289
arrays of coordinates tick labels. Any mis-matched coordinate values
@@ -300,13 +309,15 @@ def reindex_variables(variables, sizes, indexes, indexers, method=None,
300
309
Returns
301
310
-------
302
311
reindexed : OrderedDict
303
- Another dict, with the items in variables but replaced indexes.
312
+ Dict of reindexed variables.
313
+ new_indexes : OrderedDict
314
+ Dict of indexes associated with the reindexed variables.
304
315
"""
305
316
from .dataarray import DataArray
306
317
307
318
# build up indexers for assignment along each dimension
308
319
int_indexers = {}
309
- targets = {}
320
+ targets = OrderedDict ()
310
321
masked_dims = set ()
311
322
unchanged_dims = set ()
312
323
@@ -359,7 +370,7 @@ def reindex_variables(variables, sizes, indexes, indexers, method=None,
359
370
360
371
if dim in variables :
361
372
var = variables [dim ]
362
- args = (var .attrs , var .encoding )
373
+ args = (var .attrs , var .encoding ) # type: tuple
363
374
else :
364
375
args = ()
365
376
reindexed [dim ] = IndexVariable ((dim ,), indexers [dim ], * args )
@@ -384,7 +395,10 @@ def reindex_variables(variables, sizes, indexes, indexers, method=None,
384
395
385
396
reindexed [name ] = new_var
386
397
387
- return reindexed
398
+ new_indexes = OrderedDict (indexes )
399
+ new_indexes .update (targets )
400
+
401
+ return reindexed , new_indexes
388
402
389
403
390
404
def broadcast (* args , ** kwargs ):
0 commit comments