@@ -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