Skip to content
This repository was archived by the owner on Feb 2, 2024. It is now read-only.

Commit 667fc22

Browse files
author
Ehsan Totoni
committed
h5read range match
1 parent 7575288 commit 667fc22

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

hpat/pio.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,10 @@ def _run_assign(self, assign):
9696
if rhs.op=='getitem' and rhs.value.name in self.h5_files:
9797
self.h5_dsets[lhs] = (rhs.value, rhs.index)
9898
# x = f['dset'][:]
99-
if rhs.op=='static_getitem' and rhs.value.name in self.h5_dsets:
99+
# x = f['dset'][a:b]
100+
if (rhs.op=='static_getitem' or rhs.op=='getitem') and rhs.value.name in self.h5_dsets:
100101
return self._gen_h5read(assign.target, rhs)
102+
101103
# f.close or f.create_dataset
102104
if rhs.op=='getattr' and rhs.value.name in self.h5_files:
103105
if rhs.attr=='close':
@@ -182,9 +184,13 @@ def _gen_h5read(self, lhs_var, rhs):
182184
scope = rhs.value.scope
183185
# TODO: generate size, alloc calls
184186
out = []
185-
size_vars = self._gen_h5size(f_id, dset, dset_type.ndim, scope, loc, out)
187+
if rhs.op == 'static_getitem':
188+
start_vars = None
189+
size_vars = self._gen_h5size(f_id, dset, dset_type.ndim, scope, loc, out)
190+
else:
191+
start_vars, size_vars = self._get_slice_range(rhs.index)
186192
out.extend(mk_alloc(None, None, lhs_var, tuple(size_vars), dset_type.dtype, scope, loc))
187-
self._gen_h5read_call(f_id, dset, size_vars, lhs_var, scope, loc, out)
193+
self._gen_h5read_call(f_id, dset, start_vars, size_vars, lhs_var, scope, loc, out)
188194
return out
189195

190196
def _gen_h5size(self, f_id, dset, ndims, scope, loc, out):
@@ -210,7 +216,9 @@ def _gen_h5size(self, f_id, dset, ndims, scope, loc, out):
210216
out.append(size_assign)
211217
return size_vars
212218

213-
def _gen_h5read_call(self, f_id, dset, size_vars, lhs_var, scope, loc, out):
219+
def _gen_h5read_call(self, f_id, dset, start_vars, size_vars, lhs_var, scope, loc, out):
220+
if not start_vars:
221+
start_vars = [zero_var]*ndims
214222
# g_pio_var = Global(hpat.pio_api)
215223
g_pio_var = ir.Var(scope, mk_unique_var("$pio_g_var"), loc)
216224
g_pio = ir.Global('pio_api', hpat.pio_api, loc)
@@ -234,7 +242,7 @@ def _gen_h5read_call(self, f_id, dset, size_vars, lhs_var, scope, loc, out):
234242
zero_assign = ir.Assign(ir.Const(0, loc), zero_var, loc)
235243
# starts: assign to zeros
236244
starts_var = ir.Var(scope, mk_unique_var("$h5_starts"), loc)
237-
start_tuple_call = ir.Expr.build_tuple([zero_var]*ndims, loc)
245+
start_tuple_call = ir.Expr.build_tuple(start_vars, loc)
238246
starts_assign = ir.Assign(start_tuple_call, starts_var, loc)
239247
out += [ndims_assign, zero_assign, starts_assign, sizes_assign]
240248

@@ -328,3 +336,7 @@ def _gen_h5create_group(self, stmt, f_id):
328336
# add to files since group behavior is same as files for many calls
329337
self.h5_files[lhs_var.name] = "group"
330338
return [g_pio_assign, attr_assign, create_group_assign]
339+
340+
def _get_slice_range(self, index_slice):
341+
#
342+
return 0,0

0 commit comments

Comments
 (0)