11
11
import itertools
12
12
import warnings
13
13
import os
14
-
14
+ from six import string_types
15
+ from tables .exceptions import NoSuchNodeError
15
16
import numpy as np
16
17
from pandas import (Series , TimeSeries , DataFrame , Panel , Panel4D , Index ,
17
18
MultiIndex , Int64Index , Timestamp )
@@ -1478,6 +1479,7 @@ def infer(self, handler):
1478
1479
"""infer this column from the table: create and return a new object"""
1479
1480
table = handler .table
1480
1481
new_self = self .copy ()
1482
+ new_self ._handle = handler ._handle
1481
1483
new_self .set_table (table )
1482
1484
new_self .get_attr ()
1483
1485
new_self .read_metadata (handler )
@@ -1557,6 +1559,7 @@ def validate_names(self):
1557
1559
pass
1558
1560
1559
1561
def validate_and_set (self , handler , append , ** kwargs ):
1562
+ self ._handle = handler ._handle
1560
1563
self .set_table (handler .table )
1561
1564
self .validate_col ()
1562
1565
self .validate_attr (append )
@@ -2094,14 +2097,22 @@ def convert(self, values, nan_rep, encoding):
2094
2097
def get_attr (self ):
2095
2098
""" get the data for this colummn """
2096
2099
self .values = getattr (self .attrs , self .kind_attr , None )
2100
+ if self .values is None :
2101
+ try :
2102
+ self .values = self ._handle .get_node (self .attrs ._v_node ._v_parent ,
2103
+ self .kind_attr )[:].tolist ()
2104
+ except NoSuchNodeError :
2105
+ pass
2097
2106
self .dtype = getattr (self .attrs , self .dtype_attr , None )
2098
2107
self .meta = getattr (self .attrs , self .meta_attr , None )
2099
2108
self .set_kind ()
2100
2109
2101
2110
def set_attr (self ):
2102
2111
""" set the data for this colummn """
2103
- import pdb ;pdb .set_trace ()
2104
- setattr (self .attrs , self .kind_attr , self .values )
2112
+ #setattr(self.attrs, self.kind_attr, self.values)
2113
+ self ._handle .create_carray (self .attrs ._v_node ._v_parent ,
2114
+ self .kind_attr ,
2115
+ obj = np .array (self .values ))
2105
2116
setattr (self .attrs , self .meta_attr , self .meta )
2106
2117
if self .dtype is not None :
2107
2118
setattr (self .attrs , self .dtype_attr , self .dtype )
@@ -3063,9 +3074,21 @@ def set_info(self):
3063
3074
self .attrs .info = self .info
3064
3075
3065
3076
def set_non_index_axes (self ):
3077
+ replacement = []
3066
3078
for dim , flds in self .non_index_axes :
3067
3079
name = "non_index_axes_%d" % dim
3068
- self ._handle .create_carray (self .attrs ._v_node ._v_pathname , name , obj = np .array (flds ))
3080
+ self ._handle .create_carray (self .attrs ._v_node , name , obj = np .array (flds ))
3081
+ replacement .append ((dim , name ))
3082
+ self .attrs .non_index_axes = replacement
3083
+
3084
+ def get_non_index_axes (self ):
3085
+ non_index_axes = getattr (self .attrs , 'non_index_axes' , [])
3086
+ new = []
3087
+ for dim , flds in non_index_axes :
3088
+ if isinstance (flds , string_types ):
3089
+ flds = self ._handle .get_node (self .attrs ._v_node , flds )[:].tolist ()
3090
+ new .append ((dim , flds ))
3091
+ return new
3069
3092
3070
3093
def set_attrs (self ):
3071
3094
""" set our table type & indexables """
@@ -3084,8 +3107,7 @@ def set_attrs(self):
3084
3107
3085
3108
def get_attrs (self ):
3086
3109
""" retrieve our attributes """
3087
- self .non_index_axes = getattr (
3088
- self .attrs , 'non_index_axes' , None ) or []
3110
+ self .non_index_axes = self .get_non_index_axes ()
3089
3111
self .data_columns = getattr (
3090
3112
self .attrs , 'data_columns' , None ) or []
3091
3113
self .info = getattr (
0 commit comments