@@ -1895,6 +1895,9 @@ def __init__(
1895
1895
freq = None ,
1896
1896
tz = None ,
1897
1897
index_name = None ,
1898
+ table = None ,
1899
+ meta = None ,
1900
+ metadata = None ,
1898
1901
):
1899
1902
1900
1903
if not isinstance (name , str ):
@@ -1910,9 +1913,9 @@ def __init__(
1910
1913
self .freq = freq
1911
1914
self .tz = tz
1912
1915
self .index_name = index_name
1913
- self .table = None
1914
- self .meta = None
1915
- self .metadata = None
1916
+ self .table = table
1917
+ self .meta = meta
1918
+ self .metadata = metadata
1916
1919
1917
1920
if pos is not None :
1918
1921
self .set_pos (pos )
@@ -1968,19 +1971,6 @@ def is_indexed(self) -> bool:
1968
1971
# 'error: "None" has no attribute "cols"'
1969
1972
return getattr (self .table .cols , self .cname ).is_indexed # type: ignore
1970
1973
1971
- def copy (self ):
1972
- new_self = copy .copy (self )
1973
- return new_self
1974
-
1975
- def infer (self , handler : "Table" ):
1976
- """infer this column from the table: create and return a new object"""
1977
- table = handler .table
1978
- new_self = self .copy ()
1979
- new_self .table = table
1980
- new_self .get_attr ()
1981
- new_self .read_metadata (handler )
1982
- return new_self
1983
-
1984
1974
def convert (self , values : np .ndarray , nan_rep , encoding : str , errors : str ):
1985
1975
""" set the values from this selection: take = take ownership """
1986
1976
assert isinstance (values , np .ndarray ), type (values )
@@ -2136,10 +2126,6 @@ def set_attr(self):
2136
2126
""" set the kind for this column """
2137
2127
setattr (self .attrs , self .kind_attr , self .kind )
2138
2128
2139
- def read_metadata (self , handler ):
2140
- """ retrieve the metadata for this columns """
2141
- self .metadata = handler .read_metadata (self .cname )
2142
-
2143
2129
def validate_metadata (self , handler : "AppendableTable" ):
2144
2130
""" validate that kind=category does not change the categories """
2145
2131
if self .meta == "category" :
@@ -2207,10 +2193,27 @@ class DataCol(IndexCol):
2207
2193
_info_fields = ["tz" , "ordered" ]
2208
2194
2209
2195
def __init__ (
2210
- self , name : str , values = None , kind = None , typ = None , cname = None , pos = None ,
2196
+ self ,
2197
+ name : str ,
2198
+ values = None ,
2199
+ kind = None ,
2200
+ typ = None ,
2201
+ cname = None ,
2202
+ pos = None ,
2203
+ table = None ,
2204
+ meta = None ,
2205
+ metadata = None ,
2211
2206
):
2212
2207
super ().__init__ (
2213
- name = name , values = values , kind = kind , typ = typ , pos = pos , cname = cname
2208
+ name = name ,
2209
+ values = values ,
2210
+ kind = kind ,
2211
+ typ = typ ,
2212
+ pos = pos ,
2213
+ cname = cname ,
2214
+ table = table ,
2215
+ meta = meta ,
2216
+ metadata = metadata ,
2214
2217
)
2215
2218
self .dtype = None
2216
2219
self .data = None
@@ -3420,10 +3423,8 @@ def get_attrs(self):
3420
3423
self .encoding = _ensure_encoding (getattr (self .attrs , "encoding" , None ))
3421
3424
self .errors = _ensure_decoded (getattr (self .attrs , "errors" , "strict" ))
3422
3425
self .levels = getattr (self .attrs , "levels" , None ) or []
3423
- self .index_axes = [a .infer (self ) for a in self .indexables if a .is_an_indexable ]
3424
- self .values_axes = [
3425
- a .infer (self ) for a in self .indexables if not a .is_an_indexable
3426
- ]
3426
+ self .index_axes = [a for a in self .indexables if a .is_an_indexable ]
3427
+ self .values_axes = [a for a in self .indexables if not a .is_an_indexable ]
3427
3428
self .metadata = getattr (self .attrs , "metadata" , None ) or []
3428
3429
3429
3430
def validate_version (self , where = None ):
@@ -3466,7 +3467,18 @@ def indexables(self):
3466
3467
# index columns
3467
3468
for i , (axis , name ) in enumerate (self .attrs .index_cols ):
3468
3469
atom = getattr (desc , name )
3469
- index_col = IndexCol (name = name , axis = axis , pos = i , typ = atom )
3470
+ md = self .read_metadata (name )
3471
+ meta = "category" if md is not None else None
3472
+ index_col = IndexCol (
3473
+ name = name ,
3474
+ axis = axis ,
3475
+ pos = i ,
3476
+ typ = atom ,
3477
+ table = self .table ,
3478
+ meta = meta ,
3479
+ metadata = md ,
3480
+ )
3481
+ index_col .get_attr ()
3470
3482
_indexables .append (index_col )
3471
3483
3472
3484
# values columns
@@ -3481,7 +3493,19 @@ def f(i, c):
3481
3493
3482
3494
atom = getattr (desc , c )
3483
3495
adj_name = _maybe_adjust_name (c , self .version )
3484
- return klass (name = adj_name , cname = c , pos = base_pos + i , typ = atom )
3496
+ md = self .read_metadata (c )
3497
+ meta = "category" if md is not None else None
3498
+ obj = klass (
3499
+ name = adj_name ,
3500
+ cname = c ,
3501
+ pos = base_pos + i ,
3502
+ typ = atom ,
3503
+ table = self .table ,
3504
+ meta = meta ,
3505
+ metadata = md ,
3506
+ )
3507
+ obj .get_attr ()
3508
+ return obj
3485
3509
3486
3510
# Note: the definition of `values_cols` ensures that each
3487
3511
# `c` below is a str.
@@ -4474,10 +4498,8 @@ def get_attrs(self):
4474
4498
self .nan_rep = None
4475
4499
self .levels = []
4476
4500
4477
- self .index_axes = [a .infer (self ) for a in self .indexables if a .is_an_indexable ]
4478
- self .values_axes = [
4479
- a .infer (self ) for a in self .indexables if not a .is_an_indexable
4480
- ]
4501
+ self .index_axes = [a for a in self .indexables if a .is_an_indexable ]
4502
+ self .values_axes = [a for a in self .indexables if not a .is_an_indexable ]
4481
4503
self .data_columns = [a .name for a in self .values_axes ]
4482
4504
4483
4505
@cache_readonly
@@ -4488,13 +4510,31 @@ def indexables(self):
4488
4510
# TODO: can we get a typ for this? AFAICT it is the only place
4489
4511
# where we aren't passing one
4490
4512
# the index columns is just a simple index
4491
- _indexables = [GenericIndexCol (name = "index" , axis = 0 )]
4513
+ md = self .read_metadata ("index" )
4514
+ meta = "category" if md is not None else None
4515
+ index_col = GenericIndexCol (
4516
+ name = "index" , axis = 0 , table = self .table , meta = meta , metadata = md
4517
+ )
4518
+ index_col .get_attr ()
4519
+
4520
+ _indexables = [index_col ]
4492
4521
4493
4522
for i , n in enumerate (d ._v_names ):
4494
4523
assert isinstance (n , str )
4495
4524
4496
4525
atom = getattr (d , n )
4497
- dc = GenericDataIndexableCol (name = n , pos = i , values = [n ], typ = atom )
4526
+ md = self .read_metadata (n )
4527
+ meta = "category" if md is not None else None
4528
+ dc = GenericDataIndexableCol (
4529
+ name = n ,
4530
+ pos = i ,
4531
+ values = [n ],
4532
+ typ = atom ,
4533
+ table = self .table ,
4534
+ meta = meta ,
4535
+ metadata = md ,
4536
+ )
4537
+ dc .get_attr ()
4498
4538
_indexables .append (dc )
4499
4539
4500
4540
return _indexables
0 commit comments