11import numpy as np
22
3+ from parcels ._reprs import particlesetview_repr
4+
35
46class ParticleSetView :
57 """Class to be used in a kernel that links a View of the ParticleSet (on the kernel level) to a ParticleSet."""
68
7- def __init__ (self , data , index ):
9+ def __init__ (self , data , index , ptype ):
810 self ._data = data
911 self ._index = index
12+ self ._ptype = ptype
1013
1114 def __getattr__ (self , name ):
1215 # Return a proxy that behaves like the underlying numpy array but
@@ -25,11 +28,14 @@ def __getattr__(self, name):
2528 return self ._data [name ][self ._index ]
2629
2730 def __setattr__ (self , name , value ):
28- if name in ["_data" , "_index" ]:
31+ if name in ["_data" , "_index" , "_ptype" ]:
2932 object .__setattr__ (self , name , value )
3033 else :
3134 self ._data [name ][self ._index ] = value
3235
36+ def __repr__ (self ):
37+ return particlesetview_repr (self )
38+
3339 def __getitem__ (self , index ):
3440 # normalize single-element tuple indexing (e.g., (inds,))
3541 if isinstance (index , tuple ) and len (index ) == 1 :
@@ -50,7 +56,7 @@ def __getitem__(self, index):
5056 raise ValueError (
5157 f"Boolean index has incompatible length { arr .size } for selection of size { int (np .sum (base ))} "
5258 )
53- return ParticleSetView (self ._data , new_index )
59+ return ParticleSetView (self ._data , new_index , self . _ptype )
5460
5561 # Integer array/list, slice or single integer relative to the local view
5662 # (boolean masks were handled above). Normalize and map to global
@@ -65,12 +71,12 @@ def __getitem__(self, index):
6571 base_arr = np .asarray (base )
6672 sel = base_arr [idx ]
6773 new_index [sel ] = True
68- return ParticleSetView (self ._data , new_index )
74+ return ParticleSetView (self ._data , new_index , self . _ptype )
6975
7076 # Fallback: try to assign directly (preserves previous behaviour for other index types)
7177 try :
7278 new_index [base ] = index
73- return ParticleSetView (self ._data , new_index )
79+ return ParticleSetView (self ._data , new_index , self . _ptype )
7480 except Exception as e :
7581 raise TypeError (f"Unsupported index type for ParticleSetView.__getitem__: { type (index )!r} " ) from e
7682
0 commit comments