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

Commit 0b3da02

Browse files
author
Ehsan Totoni
committed
h5 range
1 parent 667fc22 commit 0b3da02

1 file changed

Lines changed: 20 additions & 6 deletions

File tree

hpat/pio.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ def _gen_h5read(self, lhs_var, rhs):
188188
start_vars = None
189189
size_vars = self._gen_h5size(f_id, dset, dset_type.ndim, scope, loc, out)
190190
else:
191-
start_vars, size_vars = self._get_slice_range(rhs.index)
191+
start_vars, size_vars = self._get_slice_range(rhs.index, out)
192192
out.extend(mk_alloc(None, None, lhs_var, tuple(size_vars), dset_type.dtype, scope, loc))
193193
self._gen_h5read_call(f_id, dset, start_vars, size_vars, lhs_var, scope, loc, out)
194194
return out
@@ -217,8 +217,6 @@ def _gen_h5size(self, f_id, dset, ndims, scope, loc, out):
217217
return size_vars
218218

219219
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
222220
# g_pio_var = Global(hpat.pio_api)
223221
g_pio_var = ir.Var(scope, mk_unique_var("$pio_g_var"), loc)
224222
g_pio = ir.Global('pio_api', hpat.pio_api, loc)
@@ -241,6 +239,8 @@ def _gen_h5read_call(self, f_id, dset, start_vars, size_vars, lhs_var, scope, lo
241239
zero_var = ir.Var(scope, mk_unique_var("$const_zero"), loc)
242240
zero_assign = ir.Assign(ir.Const(0, loc), zero_var, loc)
243241
# starts: assign to zeros
242+
if not start_vars:
243+
start_vars = [zero_var]*ndims
244244
starts_var = ir.Var(scope, mk_unique_var("$h5_starts"), loc)
245245
start_tuple_call = ir.Expr.build_tuple(start_vars, loc)
246246
starts_assign = ir.Assign(start_tuple_call, starts_var, loc)
@@ -337,6 +337,20 @@ def _gen_h5create_group(self, stmt, f_id):
337337
self.h5_files[lhs_var.name] = "group"
338338
return [g_pio_assign, attr_assign, create_group_assign]
339339

340-
def _get_slice_range(self, index_slice):
341-
#
342-
return 0,0
340+
def _get_slice_range(self, index_slice, out):
341+
scope = index_slice.scope
342+
loc = index_slice.loc
343+
# start = s.start
344+
start_var = ir.Var(scope, mk_unique_var("$pio_range_start"), loc)
345+
start_attr_call = ir.Expr.getattr(index_slice, "start", loc)
346+
start_assign = ir.Assign(start_attr_call, start_var, loc)
347+
# stop = s.stop
348+
stop_var = ir.Var(scope, mk_unique_var("$pio_range_stop"), loc)
349+
stop_attr_call = ir.Expr.getattr(index_slice, "stop", loc)
350+
stop_assign = ir.Assign(stop_attr_call, stop_var, loc)
351+
# size = stop-start
352+
size_var = ir.Var(scope, mk_unique_var("$pio_range_size"), loc)
353+
size_call = ir.Expr.binop('-', stop_var, start_var, loc)
354+
size_assign = ir.Assign(size_call, size_var, loc)
355+
out += [start_assign, stop_assign, size_assign]
356+
return [start_var], [size_var]

0 commit comments

Comments
 (0)