1111import itertools
1212import warnings
1313import os
14-
14+ from six import string_types
15+ from tables .exceptions import NoSuchNodeError
1516import numpy as np
1617from pandas import (Series , TimeSeries , DataFrame , Panel , Panel4D , Index ,
1718 MultiIndex , Int64Index , Timestamp )
@@ -1478,6 +1479,7 @@ def infer(self, handler):
14781479 """infer this column from the table: create and return a new object"""
14791480 table = handler .table
14801481 new_self = self .copy ()
1482+ new_self ._handle = handler ._handle
14811483 new_self .set_table (table )
14821484 new_self .get_attr ()
14831485 new_self .read_metadata (handler )
@@ -1557,6 +1559,7 @@ def validate_names(self):
15571559 pass
15581560
15591561 def validate_and_set (self , handler , append , ** kwargs ):
1562+ self ._handle = handler ._handle
15601563 self .set_table (handler .table )
15611564 self .validate_col ()
15621565 self .validate_attr (append )
@@ -2094,14 +2097,22 @@ def convert(self, values, nan_rep, encoding):
20942097 def get_attr (self ):
20952098 """ get the data for this colummn """
20962099 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
20972106 self .dtype = getattr (self .attrs , self .dtype_attr , None )
20982107 self .meta = getattr (self .attrs , self .meta_attr , None )
20992108 self .set_kind ()
21002109
21012110 def set_attr (self ):
21022111 """ 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 ))
21052116 setattr (self .attrs , self .meta_attr , self .meta )
21062117 if self .dtype is not None :
21072118 setattr (self .attrs , self .dtype_attr , self .dtype )
@@ -3063,9 +3074,21 @@ def set_info(self):
30633074 self .attrs .info = self .info
30643075
30653076 def set_non_index_axes (self ):
3077+ replacement = []
30663078 for dim , flds in self .non_index_axes :
30673079 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
30693092
30703093 def set_attrs (self ):
30713094 """ set our table type & indexables """
@@ -3084,8 +3107,7 @@ def set_attrs(self):
30843107
30853108 def get_attrs (self ):
30863109 """ 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 ()
30893111 self .data_columns = getattr (
30903112 self .attrs , 'data_columns' , None ) or []
30913113 self .info = getattr (
0 commit comments