Skip to content

Commit d7627ac

Browse files
committed
>> wrap scalar values into pandas Series
1 parent 39ffc9a commit d7627ac

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

larray/inout/hdf.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import warnings
44

55
import numpy as np
6+
import pandas as pd
67
from pandas import HDFStore
78

89
from larray.core.array import Array
@@ -111,13 +112,14 @@ def read_hdf(filepath_or_buffer, key, fill_value=nan, na=nan, sort_rows=False, s
111112
key = np.char.decode(key, 'utf-8')
112113
axis = read_hdf(filepath_or_buffer, attrs['axis_key'])
113114
res = LGroup(key=key, name=name, axis=axis)
115+
elif _type == 'scalar':
116+
res = pd_obj.values
117+
# XXX : assert len(res) == 1 ?
118+
if len(res) == 1:
119+
res = res[0]
114120
except KeyError:
115-
scalar_key = key
116-
attrs = store.root._v_attrs
117-
if scalar_key not in attrs._v_attrnamesuser:
118-
filepath = filepath_or_buffer if isinstance(filepath_or_buffer, HDFStore) else store.filename
119-
raise KeyError('No item with name {} has been found in file {}'.format(key, filepath))
120-
res = attrs[scalar_key]
121+
filepath = filepath_or_buffer if isinstance(filepath_or_buffer, HDFStore) else store.filename
122+
raise KeyError('No item with name {} has been found in file {}'.format(key, filepath))
121123
return res
122124

123125

@@ -132,15 +134,11 @@ def _open_for_read(self):
132134
def _open_for_write(self):
133135
self.handle = HDFStore(self.fname)
134136

135-
@property
136-
def attrs(self):
137-
return self.handle.root._v_attrs
138-
139137
def list_items(self):
140138
keys = [key.strip('/') for key in self.handle.keys()]
141139
items = []
142140
# scalars
143-
items += [(key, 'scalar') for key in self.attrs._v_attrnamesuser if key != 'metadata']
141+
items += [(key.split('/')[-1], 'scalar') for key in keys if '__scalars__' in key]
144142
# axes
145143
items += [(key.split('/')[-1], 'Axis') for key in keys if '__axes__' in key]
146144
# groups
@@ -157,7 +155,7 @@ def _read_item(self, key, type, *args, **kwargs):
157155
elif type == 'Group':
158156
hdf_key = '__groups__/' + key
159157
elif type == 'scalar':
160-
hdf_key = key
158+
hdf_key = '__scalars__/' + key
161159
else:
162160
raise TypeError()
163161
return read_hdf(self.handle, hdf_key, *args, **kwargs)
@@ -174,9 +172,10 @@ def _dump_item(self, key, value, *args, **kwargs):
174172
hdf_axis_key = '__axes__/' + value.axis.name
175173
value.to_hdf(self.handle, hdf_key, hdf_axis_key, *args, **kwargs)
176174
elif isinstance(value, _supported_scalar_types):
177-
if key in self.attrs._v_attrnamessys + ['metadata']:
178-
raise KeyError("Key '{}' cannot be used because it is a protected name".format(key))
179-
self.attrs[key] = value
175+
hdf_key = '__scalars__/' + key
176+
s = pd.Series(value)
177+
self.handle.put(hdf_key, s)
178+
self.handle.get_storer(hdf_key).attrs.type = 'scalar'
180179
else:
181180
raise TypeError()
182181

0 commit comments

Comments
 (0)