@@ -86,39 +86,39 @@ def __init__(self, dtype=np.int32, capacity=8, *, grow_use_add=None, grow_add=No
86
86
self ._zero = self ._data [0 ]
87
87
88
88
@classmethod
89
- def from_vector (cls , vector , * , grow_use_add = None , grow_add = None ):
89
+ def from_values (cls , values , * , grow_use_add = None , grow_add = None ):
90
90
"""
91
91
Create a DynamicVector from an existing vector.
92
92
93
93
Parameters:
94
- vector (sequence): The source array to initialize the vector.
94
+ values (sequence): The source array to initialize the vector.
95
95
grow_use_add (int, optional): Custom threshold to switch from multiplicative to additive growth.
96
96
grow_add (int, optional): Custom value for additive growth.
97
97
98
98
Returns:
99
99
DynamicVector: A new dynamic vector initialized with the values from the input vector.
100
100
"""
101
101
try :
102
- capacity = len (vector )
102
+ capacity = len (values )
103
103
except TypeError :
104
- return cls .from_iter (vector , grow_use_add , grow_add )
104
+ return cls .from_iter (values , grow_use_add , grow_add )
105
105
106
106
try :
107
- dtype = vector .dtype
107
+ dtype = values .dtype
108
108
except AttributeError :
109
109
try :
110
- dtype = type (vector [0 ])
110
+ dtype = type (values [0 ])
111
111
except IndexError :
112
- raise ValueError ("Either pass variable with dtype attribute, or len(vector ) must be greater than zero." )
112
+ raise ValueError ("Either pass variable with dtype attribute, or len(values ) must be greater than zero." )
113
113
114
- if isinstance (vector , DynamicVector ):
114
+ if isinstance (values , DynamicVector ):
115
115
if grow_use_add is None :
116
- grow_use_add = vector .grow_use_add
116
+ grow_use_add = values .grow_use_add
117
117
if grow_add is None :
118
- grow_add = vector .grow_add
118
+ grow_add = values .grow_add
119
119
120
120
dyn = cls (dtype , capacity , grow_use_add = grow_use_add , grow_add = grow_add )
121
- dyn .extend (vector )
121
+ dyn .extend (values )
122
122
return dyn
123
123
124
124
@classmethod
@@ -184,6 +184,10 @@ def view(self) -> np.ndarray:
184
184
but instead use `self.view` it as needed."""
185
185
return self ._data [: self ._size ]
186
186
187
+ # @view.setter
188
+ # def view(self, value):
189
+ # self._data[: self._size] = value
190
+
187
191
@property
188
192
def dtype (self ) -> np .dtype :
189
193
"""Returns the data type of the vector."""
@@ -509,10 +513,14 @@ def __len__(self) -> int:
509
513
return self ._size
510
514
511
515
def __repr__ (self ):
512
- return repr (self .view )
516
+ dyn = repr (self .view )
517
+ dyn = dyn [dyn .find ("(" ) :] # drop "array" from name
518
+ return f"DynamicVector{ dyn } "
513
519
514
520
def __str__ (self ):
515
- return str (self .view )
521
+ dyn = repr (self .view )
522
+ dyn = dyn [dyn .find ("[" ) : dyn .find ("]" ) + 1 ] # get core part of numpy array
523
+ return f"DynamicVector({ dyn } )"
516
524
517
525
def __iter__ (self ):
518
526
return iter (self .view )
@@ -801,4 +809,82 @@ def _reverse_in_place(array):
801
809
x .append (i )
802
810
print (x )
803
811
804
- x = DynamicVector .from_vector ([1 , 2 , 3 , 4 , 5 ])
812
+ x = DynamicVector .from_values ([1 , 2 , 3 , 4 , 5 ])
813
+
814
+ # Initialize with a list
815
+ vec = DynamicVector .from_values ([1 , 2 , 3 ]) # integer vector with three values
816
+
817
+ print (vec )
818
+ print (repr (vec ))
819
+ # Output: DynamicVector([1, 2, 3])
820
+ # Output: DynamicVector([1, 2, 3], dtype=int32)
821
+
822
+ # Access the underlying NumPy array via the 'view' property
823
+ print (vec .view )
824
+ print (vec [:])
825
+ # Output: [1 2 3]
826
+ # Output: [1 2 3] -> same as vec.view
827
+
828
+ # Perform NumPy operations
829
+ vec += 1
830
+ print (vec )
831
+ # Output: DynamicVector([2, 3, 4])
832
+
833
+ vec [1 ] = 99
834
+ print (vec )
835
+ # Output: DynamicVector([ 2, 99, 4])
836
+
837
+ vec [1 : len (vec )] = 8 # set element 2 and 3 to the value of 8.
838
+ print (vec )
839
+ # Output: DynamicVector([2, 8, 8])
840
+
841
+ vec [:] = [2 , 3 , 4 ]
842
+ print (vec )
843
+ # Output: DynamicVector([2, 3, 4])
844
+
845
+ # Append elements dynamically
846
+ vec .append (5 ) # Fast operation
847
+ print (vec )
848
+ # Output: DynamicVector([2, 3, 4, 5])
849
+
850
+ vec .extend ([7 , 8 , 9 ]) # Fast operation
851
+ print (vec )
852
+ # Output: DynamicVector([1, 2, 3, 5, 7, 8, 9])
853
+
854
+ # Insert at a specific index
855
+ vec .insert (1 , 10 )
856
+ print (vec )
857
+ # Output: DynamicVector([ 1, 10, 2, 3, 5, 7, 8, 9])
858
+
859
+ # Insert at a specific index
860
+ vec .insert_values (3 , [97 , 98 ])
861
+ print (vec )
862
+ # Output: DynamicVector([ 1, 10, 2, 97, 98, 3, 5, 7, 8, 9])
863
+
864
+ # Remove and return the last element
865
+ print (vec )
866
+ last_elem = vec .pop () # Fast operation
867
+ print (vec )
868
+ print (last_elem )
869
+ # Output: DynamicVector([ 1, 10, 2, 97, 98, 3, 5, 7, 8, 9])
870
+ # Output: DynamicVector([ 1, 10, 2, 97, 98, 3, 5, 7, 8])
871
+ # Output: 9
872
+
873
+ third_element = vec .pop (2 )
874
+ print (vec )
875
+ print (third_element )
876
+ # Output: DynamicVector([ 1, 10, 97, 98, 3, 5, 7, 8])
877
+ # Output: 2
878
+
879
+ # Slice behaves like NumPy arrays
880
+ sliced_vec = vec [1 :3 ]
881
+ print (sliced_vec )
882
+ # Output: [10 97]
883
+
884
+ vec [2 :5 ] = [51 , 52 , 53 ]
885
+ print (vec )
886
+ # Output: DynamicVector([ 1, 10, 51, 52, 53, 5, 7, 8])
887
+
888
+ vec [[1 , 3 , 5 ]] = [- 1 , - 2 , - 3 ]
889
+ print (vec )
890
+ # Output: DynamicVector([ 1, -1, 51, -2, 53, -3, 7, 8])
0 commit comments