@@ -478,7 +478,6 @@ struct NDArray[dtype: DType = DType.float64](
478478 var size_at_dim : Int = self .ndshape[i]
479479 slice_list.append(Slice(0 , size_at_dim))
480480
481- # self.__setitem__(slice_list=slice_list, val=val)
482481 var n_slices : Int = len (slice_list)
483482 var ndims : Int = 0
484483 var count : Int = 0
@@ -842,40 +841,42 @@ struct NDArray[dtype: DType = DType.float64](
842841 var n_slices : Int = slice_list.__len__ ()
843842 var slices = List[Slice]()
844843 for i in range (n_slices):
844+ if i >= self .ndim:
845+ raise Error(" Error: Number of slices exceeds array dimensions" )
846+
845847 var start : Int = 0
846- var end : Int = 0
847- if slice_list[i].start is None and slice_list[i].end is None :
848- start = 0
849- end = self .ndshape[i]
850- temp = Slice(
851- start = Optional(start),
852- end = Optional(end),
853- step = Optional(slice_list[i].step),
854- )
855- slices.append(temp)
856- if slice_list[i].start is None and slice_list[i].end is not None :
857- start = 0
858- temp = Slice(
848+ var end : Int = self .ndshape[i]
849+ var step : Int = 1
850+ if slice_list[i].start is not None :
851+ start = slice_list[i].start.value()
852+ if start < 0 :
853+ # start += self.ndshape[i]
854+ raise Error(
855+ " Error: Negative indexing in slices not supported"
856+ " currently"
857+ )
858+
859+ if slice_list[i].end is not None :
860+ end = slice_list[i].end.value()
861+ if end < 0 :
862+ # end += self.ndshape[i] + 1
863+ raise Error(
864+ " Error: Negative indexing in slices not supported"
865+ " currently"
866+ )
867+
868+ step = slice_list[i].step
869+ if step == 0 :
870+ raise Error(" Error: Slice step cannot be zero" )
871+
872+ slices.append(
873+ Slice(
859874 start = Optional(start),
860- end = Optional(slice_list[i].end.value()),
861- step = Optional(slice_list[i].step),
862- )
863- slices.append(temp)
864- if slice_list[i].start is not None and slice_list[i].end is None :
865- end = self .ndshape[i]
866- temp = Slice(
867- start = Optional(slice_list[i].start.value()),
868875 end = Optional(end),
869- step = Optional(slice_list[i]. step),
876+ step = Optional(step),
870877 )
871- slices.append(temp)
872- if (
873- slice_list[i].start is not None
874- and slice_list[i].end is not None
875- ):
876- slices.append(slice_list[i])
877- else :
878- raise Error(" Error: Undefined Slice" )
878+ )
879+
879880 return slices^
880881
881882 fn __getitem__ (self , owned * slices : Slice) raises -> Self:
0 commit comments