@@ -565,6 +565,7 @@ def __fspath__(self):
565
565
def root (self ):
566
566
""" return the root node """
567
567
self ._check_if_open ()
568
+ assert self ._handle is not None # for mypy
568
569
return self ._handle .root
569
570
570
571
@property
@@ -1393,6 +1394,8 @@ def groups(self):
1393
1394
"""
1394
1395
_tables ()
1395
1396
self ._check_if_open ()
1397
+ assert self ._handle is not None # for mypy
1398
+ assert _table_mod is not None # for mypy
1396
1399
return [
1397
1400
g
1398
1401
for g in self ._handle .walk_groups ()
@@ -1437,6 +1440,9 @@ def walk(self, where="/"):
1437
1440
"""
1438
1441
_tables ()
1439
1442
self ._check_if_open ()
1443
+ assert self ._handle is not None # for mypy
1444
+ assert _table_mod is not None # for mypy
1445
+
1440
1446
for g in self ._handle .walk_groups (where ):
1441
1447
if getattr (g ._v_attrs , "pandas_type" , None ) is not None :
1442
1448
continue
@@ -1862,6 +1868,8 @@ def __init__(
1862
1868
def __iter__ (self ):
1863
1869
# iterate
1864
1870
current = self .start
1871
+ if self .coordinates is None :
1872
+ raise ValueError ("Cannot iterate until get_result is called." )
1865
1873
while current < self .stop :
1866
1874
stop = min (current + self .chunksize , self .stop )
1867
1875
value = self .func (None , None , self .coordinates [current :stop ])
@@ -3196,7 +3204,7 @@ class Table(Fixed):
3196
3204
pandas_kind = "wide_table"
3197
3205
format_type : str = "table" # GH#30962 needed by dask
3198
3206
table_type : str
3199
- levels = 1
3207
+ levels : Union [ int , List [ Label ]] = 1
3200
3208
is_table = True
3201
3209
3202
3210
index_axes : List [IndexCol ]
@@ -3292,7 +3300,9 @@ def is_multi_index(self) -> bool:
3292
3300
"""the levels attribute is 1 or a list in the case of a multi-index"""
3293
3301
return isinstance (self .levels , list )
3294
3302
3295
- def validate_multiindex (self , obj ):
3303
+ def validate_multiindex (
3304
+ self , obj : FrameOrSeriesUnion
3305
+ ) -> Tuple [DataFrame , List [Label ]]:
3296
3306
"""
3297
3307
validate that we can store the multi-index; reset and return the
3298
3308
new object
@@ -3301,11 +3311,13 @@ def validate_multiindex(self, obj):
3301
3311
l if l is not None else f"level_{ i } " for i , l in enumerate (obj .index .names )
3302
3312
]
3303
3313
try :
3304
- return obj .reset_index (), levels
3314
+ reset_obj = obj .reset_index ()
3305
3315
except ValueError as err :
3306
3316
raise ValueError (
3307
3317
"duplicate names/columns in the multi-index when storing as a table"
3308
3318
) from err
3319
+ assert isinstance (reset_obj , DataFrame ) # for mypy
3320
+ return reset_obj , levels
3309
3321
3310
3322
@property
3311
3323
def nrows_expected (self ) -> int :
@@ -3433,7 +3445,7 @@ def get_attrs(self):
3433
3445
self .nan_rep = getattr (self .attrs , "nan_rep" , None )
3434
3446
self .encoding = _ensure_encoding (getattr (self .attrs , "encoding" , None ))
3435
3447
self .errors = _ensure_decoded (getattr (self .attrs , "errors" , "strict" ))
3436
- self .levels = getattr (self .attrs , "levels" , None ) or []
3448
+ self .levels : List [ Label ] = getattr (self .attrs , "levels" , None ) or []
3437
3449
self .index_axes = [a for a in self .indexables if a .is_an_indexable ]
3438
3450
self .values_axes = [a for a in self .indexables if not a .is_an_indexable ]
3439
3451
@@ -4562,11 +4574,12 @@ class AppendableMultiSeriesTable(AppendableSeriesTable):
4562
4574
def write (self , obj , ** kwargs ):
4563
4575
""" we are going to write this as a frame table """
4564
4576
name = obj .name or "values"
4565
- obj , self .levels = self .validate_multiindex (obj )
4577
+ newobj , self .levels = self .validate_multiindex (obj )
4578
+ assert isinstance (self .levels , list ) # for mypy
4566
4579
cols = list (self .levels )
4567
4580
cols .append (name )
4568
- obj .columns = cols
4569
- return super ().write (obj = obj , ** kwargs )
4581
+ newobj .columns = Index ( cols )
4582
+ return super ().write (obj = newobj , ** kwargs )
4570
4583
4571
4584
4572
4585
class GenericTable (AppendableFrameTable ):
@@ -4576,6 +4589,7 @@ class GenericTable(AppendableFrameTable):
4576
4589
table_type = "generic_table"
4577
4590
ndim = 2
4578
4591
obj_type = DataFrame
4592
+ levels : List [Label ]
4579
4593
4580
4594
@property
4581
4595
def pandas_type (self ) -> str :
@@ -4609,7 +4623,7 @@ def indexables(self):
4609
4623
name = "index" , axis = 0 , table = self .table , meta = meta , metadata = md
4610
4624
)
4611
4625
4612
- _indexables = [index_col ]
4626
+ _indexables : List [ Union [ GenericIndexCol , GenericDataIndexableCol ]] = [index_col ]
4613
4627
4614
4628
for i , n in enumerate (d ._v_names ):
4615
4629
assert isinstance (n , str )
@@ -4652,6 +4666,7 @@ def write(self, obj, data_columns=None, **kwargs):
4652
4666
elif data_columns is True :
4653
4667
data_columns = obj .columns .tolist ()
4654
4668
obj , self .levels = self .validate_multiindex (obj )
4669
+ assert isinstance (self .levels , list ) # for mypy
4655
4670
for n in self .levels :
4656
4671
if n not in data_columns :
4657
4672
data_columns .insert (0 , n )
@@ -5173,7 +5188,7 @@ def select_coords(self):
5173
5188
start = 0
5174
5189
elif start < 0 :
5175
5190
start += nrows
5176
- if self . stop is None :
5191
+ if stop is None :
5177
5192
stop = nrows
5178
5193
elif stop < 0 :
5179
5194
stop += nrows
0 commit comments