Skip to content

Commit 1e313e8

Browse files
boblatdaniel-makerx
authored andcommitted
refactor: addressing review feedback
1 parent b7b831d commit 1e313e8

File tree

2 files changed

+24
-35
lines changed

2 files changed

+24
-35
lines changed

src/_algopy_testing/primitives/array.py

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ def __getitem__(cls, item: tuple[type[_TArrayItem], type[_TArrayLength]]) -> typ
4545

4646
class ImmutableFixedArray(
4747
Serializable,
48-
MutableBytes,
4948
typing.Generic[_TArrayItem, _TArrayLength],
5049
metaclass=_ImmutableFixedArrayMeta,
5150
):
@@ -58,8 +57,8 @@ def __new__(cls, values: Iterable[_TArrayItem]) -> typing.Self:
5857
try:
5958
assert cls._element_type
6059
except AttributeError:
60+
items = list(values)
6161
try:
62-
items = list(values)
6362
item = items[0]
6463
except IndexError:
6564
raise TypeError("array must have an item type") from None
@@ -106,12 +105,11 @@ def __reversed__(self) -> typing.Iterator[_TArrayItem]:
106105
def length(self) -> UInt64:
107106
return UInt64(len(self._items))
108107

109-
def __len__(self) -> UInt64:
110-
return self.length
108+
def __len__(self) -> int:
109+
return len(self._items)
111110

112111
def __getitem__(self, index: UInt64 | int) -> _TArrayItem:
113-
value = self._items[index]
114-
return set_item_on_mutate(self, index, value)
112+
return self._items[index]
115113

116114
def __setitem__(self, index: UInt64 | int, value: _TArrayItem) -> _TArrayItem:
117115
self._items[int(index)] = value
@@ -180,11 +178,9 @@ class FixedArray(
180178
_length: int
181179

182180
def __new__(cls, values: Iterable[_TArrayItem]) -> typing.Self:
183-
try:
184-
assert cls._element_type
185-
except AttributeError:
181+
if not hasattr(cls, "_element_type"):
182+
items = list(values)
186183
try:
187-
items = list(values)
188184
item = items[0]
189185
except IndexError:
190186
raise TypeError("array must have an item type") from None
@@ -206,7 +202,7 @@ def __init__(self, values: Iterable[_TArrayItem]) -> None:
206202

207203
@classmethod
208204
def full(cls, item: _TArrayItem) -> typing.Self:
209-
return cls(item for _ in range(cls._length))
205+
return cls([item] * cls._length)
210206

211207
def __iter__(self) -> typing.Iterator[_TArrayItem]:
212208
return iter(self._items)
@@ -218,8 +214,8 @@ def __reversed__(self) -> typing.Iterator[_TArrayItem]:
218214
def length(self) -> UInt64:
219215
return UInt64(len(self._items))
220216

221-
def __len__(self) -> UInt64:
222-
return self.length
217+
def __len__(self) -> int:
218+
return len(self._items)
223219

224220
def __getitem__(self, index: UInt64 | int) -> _TArrayItem:
225221
value = self._items[index]
@@ -278,9 +274,7 @@ def __getitem__(cls, element_t: type) -> type:
278274
return c
279275

280276

281-
class ImmutableArray(
282-
Serializable, MutableBytes, typing.Generic[_TArrayItem], metaclass=_ImmutableArrayMeta
283-
):
277+
class ImmutableArray(Serializable, typing.Generic[_TArrayItem], metaclass=_ImmutableArrayMeta):
284278
_element_type: typing.ClassVar[type]
285279

286280
# ensure type is fully parameterized by looking up type from metaclass
@@ -316,12 +310,11 @@ def __reversed__(self) -> Iterator[_TArrayItem]:
316310
def length(self) -> UInt64:
317311
return UInt64(len(self._items))
318312

319-
def __len__(self) -> UInt64:
320-
return self.length
313+
def __len__(self) -> int:
314+
return len(self._items)
321315

322316
def __getitem__(self, index: UInt64 | int) -> _TArrayItem:
323-
value = self._items[index]
324-
return set_item_on_mutate(self, index, value)
317+
return self._items[index]
325318

326319
def __setitem__(self, index: UInt64 | int, value: _TArrayItem) -> _TArrayItem:
327320
self._items[int(index)] = value
@@ -437,8 +430,8 @@ def __new__(cls, values: Iterable[_TArrayItem]) -> typing.Self:
437430
try:
438431
assert cls._element_type
439432
except AttributeError:
433+
items = list(values)
440434
try:
441-
items = list(values)
442435
item = items[0]
443436
except IndexError:
444437
raise TypeError("array must have an item type") from None
@@ -464,8 +457,8 @@ def __reversed__(self) -> typing.Iterator[_TArrayItem]:
464457
def length(self) -> UInt64:
465458
return UInt64(len(self._items))
466459

467-
def __len__(self) -> UInt64:
468-
return self.length
460+
def __len__(self) -> int:
461+
return len(self._items)
469462

470463
def __getitem__(self, index: UInt64 | int) -> _TArrayItem:
471464
value = self._items[index]

tests/models/test_box.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -415,23 +415,22 @@ def test_arrays_and_struct_in_boxes(context: AlgopyTestContext) -> None: # noqa
415415
assert list(box2.value[0]) == [UInt64(1), UInt64(20), UInt64(3)]
416416

417417
# ImmutableArray
418-
nested_arr3 = ImmutableArray[Array[UInt64]](arr1, arr2)
419-
box3 = Box(ImmutableArray[Array[UInt64]], key=b"test_array_3")
418+
nested_arr3 = ImmutableArray[ImmutableArray[UInt64]](
419+
ImmutableArray(*arr1), ImmutableArray(*arr2)
420+
)
421+
box3 = Box(ImmutableArray[ImmutableArray[UInt64]], key=b"test_array_3")
420422
box3.value = nested_arr3
421423
_op_box_content, op_box_exists = algopy.op.Box.get(b"test_array_3")
422424
op_box_length, _ = algopy.op.Box.length(b"test_array_3")
423425
assert op_box_exists
424426
assert box3.length == op_box_length
425427

426-
box3.value[0][1] = UInt64(20)
427-
assert list(box3.value[0]) == [UInt64(1), UInt64(20), UInt64(3)]
428-
429428
# ImmutableFixedArray
430-
nested_arr4 = ImmutableFixedArray[FixedArray[UInt64, typing.Literal[3]], typing.Literal[2]](
431-
[arr3, arr4]
432-
)
429+
nested_arr4 = ImmutableFixedArray[
430+
ImmutableFixedArray[UInt64, typing.Literal[3]], typing.Literal[2]
431+
]([ImmutableFixedArray(arr3), ImmutableFixedArray(arr4)])
433432
box4 = Box(
434-
ImmutableFixedArray[FixedArray[UInt64, typing.Literal[3]], typing.Literal[2]],
433+
ImmutableFixedArray[ImmutableFixedArray[UInt64, typing.Literal[3]], typing.Literal[2]],
435434
key=b"test_array_4",
436435
)
437436
box4.value = nested_arr4
@@ -440,9 +439,6 @@ def test_arrays_and_struct_in_boxes(context: AlgopyTestContext) -> None: # noqa
440439
assert op_box_exists
441440
assert box4.length == op_box_length
442441

443-
box4.value[0][1] = UInt64(20)
444-
assert list(box4.value[0]) == [UInt64(1), UInt64(20), UInt64(3)]
445-
446442
# Struct
447443
struct1 = Swapped2(arr1, arr2)
448444
box5 = Box(

0 commit comments

Comments
 (0)