Skip to content
This repository has been archived by the owner on Nov 30, 2021. It is now read-only.

Commit

Permalink
optimize stratification description generation
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Jun 27, 2017
1 parent ae672ff commit 9dfd793
Showing 1 changed file with 21 additions and 20 deletions.
41 changes: 21 additions & 20 deletions phovea_data_hdf/hdf.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ def _resolve_categories(attrs):
cats = [dict(name=cat, label=name, color=col) for cat, name, col in
itertools.izip(cats, names, colors)]

print(cats)
return cats, converter


Expand Down Expand Up @@ -213,17 +212,21 @@ def rowids(self, range=None):


class HDFGroup(object):
def __init__(self, name, range, color):
def __init__(self, name, offset, data, color):
self.name = name
self.range = range
self.data = data
self.range = ranges.from_slice(offset, offset + len(data))
self.color = color

def __len__(self):
return len(self.range)
return len(self.data)

def dump(self):
return dict(name=self.name, range=str(self.range), color=self.color)

def dump_desc(self):
return dict(name=self.name, size=len(self), color=self.color)


def guess_color(name, i):
name = name.lower()
Expand All @@ -242,6 +245,7 @@ def __init__(self, group, project):
self._project = project
self._rowids = None
self.idtype = self._group._v_attrs.idtype
self._groups = None

def idtypes(self):
return [self.idtype]
Expand All @@ -251,19 +255,13 @@ def to_description(self):
r['idtype'] = self.idtype
if 'origin' in self._group._v_attrs:
r['origin'] = self._project + '/' + self._group._v_attrs.origin
r['groups'] = [dict(name=gf._v_title, size=len(gf),
color=gf._v_attrs['color'] if 'color' in gf._v_attrs else guess_color(gf._v_title, j))
for j, gf in enumerate(self._sortedgroup())]

r['groups'] = [g.dump_desc() for g in self.groups()]
r['ngroups'] = len(r['groups'])
r['size'] = [sum((g['size'] for g in r['groups']))]
return r

def _sortedgroup(self):
return sorted(self._group._v_children.itervalues(), key=lambda x: x._v_title)

def _rows(self):
return np.concatenate(self._sortedgroup())
return np.concatenate([g.data for g in self.groups()])

def rows(self, range=None):
n = self._rows()
Expand All @@ -280,13 +278,16 @@ def rowids(self, range=None):
return n[range.asslice()]

def groups(self):
i = 0
for j, g in enumerate(self._sortedgroup()):
name = g._v_title
color = g._v_attrs['color'] if 'color' in g._v_attrs else guess_color(name, j)
l = len(g)
yield HDFGroup(name, ranges.from_slice(i, i + l), color)
i += l
if self._groups is None:
self._groups = []
i = 0
for j, g in enumerate(sorted(self._group._v_children.itervalues(), key=lambda x: x._v_title)):
name = g._v_title
color = g._v_attrs['color'] if 'color' in g._v_attrs else guess_color(name, j)
l = len(g)
self._groups.append(HDFGroup(name, i, g, color))
i += l
return self._groups

def __getitem__(self, item):
group = getattr(self._group, item)
Expand Down Expand Up @@ -442,7 +443,7 @@ def __init__(self):
self.files = [HDFProject(f, base_dir) for f in glob_recursivly(base_dir, c.glob)]

def __len__(self):
return sum((len(f) for f in self.files))
return sum((len(f) for f in self))

def __iter__(self):
return iter((f for f in itertools.chain(*self.files) if f.can_read()))
Expand Down

0 comments on commit 9dfd793

Please sign in to comment.