@@ -780,6 +780,14 @@ def __getitem__(self, key: IndexKey, /) -> Array:
780780 indexing = tuple (key_list )
781781
782782 out ._arr = wrapper .index_gen (self ._arr , ndims , wrapper .get_indices (indexing )) # type: ignore[arg-type]
783+
784+ if isinstance (key , Array ) and key .is_bool :
785+ wrapper .release_array (indexing )
786+ elif isinstance (key , tuple ):
787+ for i in range (len (key )):
788+ if isinstance (key [i ], Array ) and key [i ].is_bool :
789+ wrapper .release_array (indexing [i ])
790+
783791 return out
784792
785793 def __index__ (self ) -> int :
@@ -807,7 +815,6 @@ def __setitem__(self, key: IndexKey, value: int | float | bool | Array, /) -> No
807815
808816 """
809817 ndims = self .ndim
810-
811818 is_array_with_bool = isinstance (key , Array ) and type (key ) is afbool
812819
813820 if is_array_with_bool :
@@ -842,20 +849,27 @@ def __setitem__(self, key: IndexKey, value: int | float | bool | Array, /) -> No
842849 for elem in key :
843850 if isinstance (elem , Array ):
844851 if elem .is_bool :
845- key_list .append (wrapper .where (elem .arr ))
852+ locs = wrapper .where (elem .arr )
853+ key_list .append (locs )
846854 else :
847855 key_list .append (elem .arr )
848856 else :
849857 key_list .append (elem )
850858 indexing = tuple (key_list )
851859
852- indices = wrapper .get_indices (indexing )
860+ out = wrapper .assign_gen ( self . _arr , other_arr , ndims , wrapper . get_indices (indexing ) )
853861
854- out = wrapper .assign_gen (self ._arr , other_arr , ndims , indices )
862+ if isinstance (key , Array ) and key .is_bool :
863+ wrapper .release_array (indexing )
864+ elif isinstance (key , tuple ):
865+ for i in range (len (key )):
866+ if isinstance (key [i ], Array ) and key [i ].is_bool :
867+ wrapper .release_array (indexing [i ])
855868
856869 wrapper .release_array (self ._arr )
857870 if del_other :
858871 wrapper .release_array (other_arr )
872+
859873 self ._arr = out
860874
861875 def __str__ (self ) -> str :
0 commit comments