33import functools
44import warnings
55from collections .abc import Hashable
6+ from typing import Any
67
78import numpy as np
89import pandas as pd
@@ -362,6 +363,17 @@ def _assert_indexes_invariants_checks(
362363 if isinstance (v , IndexVariable )
363364 }
364365 assert indexes .keys () <= index_vars , (set (indexes ), index_vars )
366+ assert all (
367+ k in index_vars
368+ for k , v in possible_coord_variables .items ()
369+ if v .dims == (k ,)
370+ ), {k : type (v ) for k , v in possible_coord_variables .items ()}
371+
372+ assert not any (
373+ isinstance (v , IndexVariable )
374+ for k , v in possible_coord_variables .items ()
375+ if k not in indexes .keys ()
376+ ), {k : type (v ) for k , v in possible_coord_variables .items ()}
365377
366378 # check pandas index wrappers vs. coordinate data adapters
367379 for k , index in indexes .items ():
@@ -401,11 +413,17 @@ def _assert_indexes_invariants_checks(
401413 )
402414
403415
404- def _assert_variable_invariants (var : Variable , name : Hashable = None ):
416+ def _assert_variable_invariants (
417+ var : Variable | Any ,
418+ name : Hashable = None ,
419+ ) -> None :
405420 if name is None :
406421 name_or_empty : tuple = ()
407422 else :
408423 name_or_empty = (name ,)
424+
425+ assert isinstance (var , Variable ), {name : type (var )}
426+
409427 assert isinstance (var ._dims , tuple ), name_or_empty + (var ._dims ,)
410428 assert len (var ._dims ) == len (var ._data .shape ), name_or_empty + (
411429 var ._dims ,
@@ -418,35 +436,28 @@ def _assert_variable_invariants(var: Variable, name: Hashable = None):
418436
419437
420438def _assert_dataarray_invariants (da : DataArray , check_default_indexes : bool ):
421- assert isinstance (da ._variable , Variable ), da ._variable
422439 _assert_variable_invariants (da ._variable )
423440
424441 assert isinstance (da ._coords , dict ), da ._coords
425- assert all (isinstance (v , Variable ) for v in da ._coords .values ()), da ._coords
426442
427443 if check_default_indexes :
428444 assert all (set (v .dims ) <= set (da .dims ) for v in da ._coords .values ()), (
429445 da .dims ,
430446 {k : v .dims for k , v in da ._coords .items ()},
431447 )
432- assert all (
433- isinstance (v , IndexVariable )
434- for (k , v ) in da ._coords .items ()
435- if v .dims == (k ,)
436- ), {k : type (v ) for k , v in da ._coords .items ()}
437448
438449 for k , v in da ._coords .items ():
439450 _assert_variable_invariants (v , k )
440451
441- if da ._indexes is not None :
442- _assert_indexes_invariants_checks (
443- da ._indexes , da ._coords , da .dims , check_default = check_default_indexes
444- )
452+ assert da ._indexes is not None
453+ _assert_indexes_invariants_checks (
454+ da ._indexes , da ._coords , da .dims , check_default = check_default_indexes
455+ )
445456
446457
447458def _assert_dataset_invariants (ds : Dataset , check_default_indexes : bool ):
448459 assert isinstance (ds ._variables , dict ), type (ds ._variables )
449- assert all ( isinstance ( v , Variable ) for v in ds . _variables . values ()), ds . _variables
460+
450461 for k , v in ds ._variables .items ():
451462 _assert_variable_invariants (v , k )
452463
@@ -466,17 +477,10 @@ def _assert_dataset_invariants(ds: Dataset, check_default_indexes: bool):
466477 ds ._dims [k ] == v .sizes [k ] for v in ds ._variables .values () for k in v .sizes
467478 ), (ds ._dims , {k : v .sizes for k , v in ds ._variables .items ()})
468479
469- if check_default_indexes :
470- assert all (
471- isinstance (v , IndexVariable )
472- for (k , v ) in ds ._variables .items ()
473- if v .dims == (k ,)
474- ), {k : type (v ) for k , v in ds ._variables .items () if v .dims == (k ,)}
475-
476- if ds ._indexes is not None :
477- _assert_indexes_invariants_checks (
478- ds ._indexes , ds ._variables , ds ._dims , check_default = check_default_indexes
479- )
480+ assert ds ._indexes is not None
481+ _assert_indexes_invariants_checks (
482+ ds ._indexes , ds ._variables , ds ._dims , check_default = check_default_indexes
483+ )
480484
481485 assert isinstance (ds ._encoding , type (None ) | dict )
482486 assert isinstance (ds ._attrs , type (None ) | dict )
0 commit comments