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