datahold 4.0.0.dev3__tar.gz → 4.0.0.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/PKG-INFO +1 -1
  2. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/pyproject.toml +1 -1
  3. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold/__init__.py +70 -53
  4. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold.egg-info/PKG-INFO +1 -1
  5. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_FrozenHoldDict.py +4 -4
  6. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_FrozenHoldList.py +15 -10
  7. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_FrozenHoldSet.py +4 -12
  8. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_HoldDict.py +14 -9
  9. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_HoldList.py +20 -16
  10. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_HoldSet.py +31 -35
  11. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_datahold_TestDataAttribute.py +3 -16
  12. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_datahold_TestMutableBehavior.py +1 -1
  13. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/LICENSE.txt +0 -0
  14. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/MANIFEST.in +0 -0
  15. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/README.rst +0 -0
  16. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v1.1.rst +0 -0
  17. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v1.2.rst +0 -0
  18. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v2.0.rst +0 -0
  19. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v2.1.rst +0 -0
  20. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v2.2.rst +0 -0
  21. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v2.3.rst +0 -0
  22. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v3.0.rst +0 -0
  23. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/docs/v4.0.rst +0 -0
  24. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/run_tests.py +0 -0
  25. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/setup.cfg +0 -0
  26. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold/py.typed +0 -0
  27. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold.egg-info/SOURCES.txt +0 -0
  28. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold.egg-info/dependency_links.txt +0 -0
  29. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold.egg-info/requires.txt +0 -0
  30. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/src/datahold.egg-info/top_level.txt +0 -0
  31. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_datahold_TestCopy.py +0 -0
  32. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_datahold_TestFrozenMutability.py +0 -0
  33. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/test_testdata.py +0 -0
  34. {datahold-4.0.0.dev3 → datahold-4.0.0.dev4}/tests/testdata.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev3
3
+ Version: 4.0.0.dev4
4
4
  Summary: This project wraps common mutable datastructures for inheritance with modification.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License-Expression: MIT
@@ -34,7 +34,7 @@ license-files = [
34
34
  name = "datahold"
35
35
  readme = "README.rst"
36
36
  requires-python = ">=3.12"
37
- version = "4.0.0.dev3"
37
+ version = "4.0.0.dev4"
38
38
 
39
39
  [project.urls]
40
40
  Download = "https://pypi.org/project/datahold/#files"
@@ -52,6 +52,15 @@ class Missing(enum.Enum):
52
52
  type Slice[Index] = slice[Optional[Index], Optional[Index], Optional[Index]]
53
53
 
54
54
 
55
+ class SupportsKeysAndGetitem[Key, Value](Protocol):
56
+
57
+ @setdoc.basic
58
+ def __getitem__(self: Self, key: Never, /) -> Value: ...
59
+
60
+ @setdoc.basic
61
+ def keys(self: Self) -> abc.Iterable[Key]: ...
62
+
63
+
55
64
  ### COLLECTION ###
56
65
 
57
66
 
@@ -70,7 +79,6 @@ class BaseDataCollection[Item](
70
79
  abc.Sized,
71
80
  abc.Iterable[DataItem],
72
81
  abc.Container[Never],
73
- abc.Hashable,
74
82
  Protocol,
75
83
  ):
76
84
  """Provide collection data protocol."""
@@ -113,12 +121,15 @@ class BaseDataAbstractSet[Item](
113
121
  __slots__ = ()
114
122
 
115
123
 
124
+ ### SET ###
125
+
126
+
116
127
  class BaseDataSet[Item: abc.Hashable](BaseDataAbstractSet[Item]):
117
128
  """Provide an easy abc for custom set-like."""
118
129
 
119
130
  __slots__ = ()
120
131
 
121
- type Data[DataItem] = frozenset[DataItem]
132
+ type Data[DataItem] = set[DataItem]
122
133
  type Init[InitItem] = abc.Iterable[InitItem]
123
134
 
124
135
  @abstractmethod
@@ -131,7 +142,7 @@ class BaseDataSet[Item: abc.Hashable](BaseDataAbstractSet[Item]):
131
142
 
132
143
  @abstractmethod
133
144
  @setdoc.basic
134
- def __fget__(self: Self) -> frozenset[Item]: ...
145
+ def __fget__(self: Self) -> set[Item]: ...
135
146
 
136
147
  @setdoc.basic
137
148
  def difference(self: Self, /, *others: abc.Iterable[abc.Hashable]) -> Self:
@@ -171,7 +182,7 @@ class FrozenDataSet[Item: abc.Hashable](BaseDataSet[Item], abc.Hashable):
171
182
 
172
183
  @setdoc.basic
173
184
  def __hash__(self: Self) -> int:
174
- return hash(self.__fget__())
185
+ return hash(frozenset(self.__fget__()))
175
186
 
176
187
 
177
188
  class FrozenHoldSet[Item: abc.Hashable](
@@ -184,7 +195,7 @@ class FrozenHoldSet[Item: abc.Hashable](
184
195
 
185
196
  @setdoc.basic
186
197
  def __fget__(self: Self) -> FrozenHoldSet.Data[Item]:
187
- return self._data
198
+ return set(self._data)
188
199
 
189
200
  @setdoc.basic
190
201
  def __fset__(self: Self, data: FrozenHoldSet.Data[Item], /) -> None:
@@ -192,7 +203,7 @@ class FrozenHoldSet[Item: abc.Hashable](
192
203
 
193
204
  @setdoc.basic
194
205
  def __init__(self: Self, data: FrozenHoldSet.Init[Item] = (), /) -> None:
195
- self.__fset__(frozenset(data))
206
+ self.__fset__(set(data))
196
207
 
197
208
 
198
209
  class DataSet[Item: abc.Hashable](
@@ -211,13 +222,13 @@ class DataSet[Item: abc.Hashable](
211
222
  @setdoc.basic
212
223
  def __fset__(
213
224
  self: Self,
214
- value: DataSet.Init[Item],
225
+ value: DataSet.Data[Item],
215
226
  /,
216
227
  ) -> None: ...
217
228
 
218
229
  @setdoc.basic
219
230
  def __init__(self: Self, data: abc.Iterable[Item] = (), /) -> None:
220
- self.__fset__(frozenset(data))
231
+ self.__fset__(set(data))
221
232
 
222
233
  @setdoc.basic
223
234
  def add(self: Self, item: Item, /) -> None:
@@ -236,14 +247,14 @@ class DataSet[Item: abc.Hashable](
236
247
  data: set[Item]
237
248
  data = set(self.__fget__())
238
249
  data.difference_update(*others)
239
- self.__fset__(frozenset(data))
250
+ self.__fset__(set(data))
240
251
 
241
252
  @setdoc.basic
242
253
  def discard(self: Self, item: abc.Hashable, /) -> None:
243
254
  data: set[Item]
244
255
  data = set(self.__fget__())
245
256
  data.discard(item)
246
- self.__fset__(frozenset(data))
257
+ self.__fset__(set(data))
247
258
 
248
259
  @setdoc.basic
249
260
  def intersection_update(
@@ -252,7 +263,7 @@ class DataSet[Item: abc.Hashable](
252
263
  data: set[Item]
253
264
  data = set(self.__fget__())
254
265
  data.intersection_update(*others)
255
- self.__fset__(frozenset(data))
266
+ self.__fset__(set(data))
256
267
 
257
268
  @setdoc.basic
258
269
  def symmetric_difference_update(
@@ -261,7 +272,7 @@ class DataSet[Item: abc.Hashable](
261
272
  data: set[Item]
262
273
  data = set(self.__fget__())
263
274
  data.symmetric_difference_update(other)
264
- self.__fset__(frozenset(data))
275
+ self.__fset__(set(data))
265
276
 
266
277
  @setdoc.basic
267
278
  def update(self: Self, /, *others: abc.Iterable[Item]) -> None:
@@ -278,11 +289,11 @@ class HoldSet[Item: abc.Hashable](
278
289
 
279
290
  @setdoc.basic
280
291
  def __fget__(self: Self) -> HoldSet.Data[Item]:
281
- return self._data
292
+ return set(self._data)
282
293
 
283
294
  @setdoc.basic
284
- def __fset__(self: Self, value: abc.Iterable[Item], /) -> None:
285
- self._data: HoldSet.Data[Item] = frozenset(value)
295
+ def __fset__(self: Self, value: HoldSet.Data[Item], /) -> None:
296
+ self._data: HoldSet.Data[Item] = value
286
297
 
287
298
 
288
299
  ### MAPPING ###
@@ -314,13 +325,7 @@ class BaseDataMapping[Key, Value](
314
325
  def __fget__(self: Self) -> Data[Key, Value]: ...
315
326
 
316
327
 
317
- class SupportsKeysAndGetitem[Key, Value](Protocol):
318
-
319
- @setdoc.basic
320
- def __getitem__(self: Self, key: Never, /) -> Value: ...
321
-
322
- @setdoc.basic
323
- def keys(self: Self) -> abc.Iterable[Key]: ...
328
+ ### DICT ###
324
329
 
325
330
 
326
331
  class BaseDataDict[Key: abc.Hashable, Value](
@@ -330,9 +335,7 @@ class BaseDataDict[Key: abc.Hashable, Value](
330
335
 
331
336
  __slots__ = ()
332
337
 
333
- type Data[DataKey, DataValue] = frozendict[
334
- DataKey | str, Optional[DataValue]
335
- ]
338
+ type Data[DataKey, DataValue] = dict[DataKey | str, Optional[DataValue]]
336
339
  type Init[DataKey, DataValue] = (
337
340
  SupportsKeysAndGetitem[DataKey | str, Optional[DataValue]]
338
341
  | abc.Iterable[tuple[DataKey | str, Optional[DataValue]]]
@@ -386,7 +389,7 @@ class FrozenDataDict[Key: abc.Hashable, Value](
386
389
 
387
390
  @setdoc.basic
388
391
  def __hash__(self: Self) -> int:
389
- return hash(self.__fget__())
392
+ return hash(frozendict(self.__fget__()))
390
393
 
391
394
 
392
395
  class FrozenHoldDict[Key: abc.Hashable, Value](
@@ -405,7 +408,7 @@ class FrozenHoldDict[Key: abc.Hashable, Value](
405
408
  **kwargs: Optional[Value],
406
409
  ) -> None:
407
410
  self.__fset__(
408
- frozendict(
411
+ dict(
409
412
  data, # type: ignore[arg-type]
410
413
  **kwargs,
411
414
  )
@@ -413,7 +416,7 @@ class FrozenHoldDict[Key: abc.Hashable, Value](
413
416
 
414
417
  @setdoc.basic
415
418
  def __fget__(self: Self) -> FrozenHoldDict.Data[Key, Value]:
416
- return self._data
419
+ return dict(self._data)
417
420
 
418
421
  @setdoc.basic
419
422
  def __fset__(self: Self, data: FrozenHoldDict.Data[Key, Value], /) -> None:
@@ -430,7 +433,10 @@ class DataDict[Key: abc.Hashable, Value](
430
433
 
431
434
  @setdoc.basic
432
435
  def __delitem__(self: Self, key: Key | str, /) -> None:
433
- self.__fset__(self.__fget__().delete(key))
436
+ data: DataDict.Data[Key, Value]
437
+ data = self.__fget__()
438
+ del data[key]
439
+ self.__fset__(data)
434
440
 
435
441
  @abstractmethod
436
442
  @setdoc.basic
@@ -447,7 +453,12 @@ class DataDict[Key: abc.Hashable, Value](
447
453
  /,
448
454
  **kwargs: Optional[Value],
449
455
  ) -> None:
450
- self.__fset__(frozendict(data, **kwargs)) # type: ignore[arg-type]
456
+ self.__fset__(
457
+ dict(
458
+ data, # type: ignore[arg-type]
459
+ **kwargs,
460
+ )
461
+ )
451
462
 
452
463
  @setdoc.basic
453
464
  def __ior__(
@@ -466,7 +477,10 @@ class DataDict[Key: abc.Hashable, Value](
466
477
  /,
467
478
  ) -> None:
468
479
  # what to do if Key includes unhashable types?
469
- self.__fset__(self.__fget__().set(key, value))
480
+ data: DataDict.Data[Key, Value]
481
+ data = self.__fget__()
482
+ data[key] = value
483
+ self.__fset__(data)
470
484
 
471
485
  @setdoc.basic
472
486
  def copy(self: Self) -> Self:
@@ -483,15 +497,15 @@ class HoldDict[Key: abc.Hashable, Value](
483
497
 
484
498
  @setdoc.basic
485
499
  def __fget__(self: Self) -> HoldDict.Data[Key, Value]:
486
- return self._data
500
+ return dict(self._data)
487
501
 
488
502
  @setdoc.basic
489
503
  def __fset__(
490
504
  self: Self,
491
- value: HoldDict.Init[Key, Value],
505
+ value: HoldDict.Data[Key, Value],
492
506
  /,
493
507
  ) -> None:
494
- self._data: HoldDict.Data[Key, Value] = frozendict(value) # type: ignore[arg-type]
508
+ self._data: HoldDict.Data[Key, Value] = value
495
509
 
496
510
 
497
511
  ### SEQUENCE ###
@@ -542,12 +556,15 @@ class BaseDataSequence[Item](
542
556
  def __fget__(self: Self) -> Data[Item]: ...
543
557
 
544
558
 
559
+ ### LIST ###
560
+
561
+
545
562
  class BaseDataList[Item](BaseDataSequence[Item]):
546
563
  """Provide an easy abc for custom list-like."""
547
564
 
548
565
  __slots__ = ()
549
566
 
550
- type Data[DataItem] = tuple[DataItem, ...]
567
+ type Data[DataItem] = list[DataItem]
551
568
  type Init[InitItem] = abc.Iterable[InitItem]
552
569
 
553
570
  @setdoc.basic
@@ -646,7 +663,7 @@ class FrozenDataList[Item](
646
663
 
647
664
  @setdoc.basic
648
665
  def __hash__(self: Self) -> int:
649
- return hash(self.__fget__())
666
+ return hash(tuple(self.__fget__()))
650
667
 
651
668
 
652
669
  class FrozenHoldList[Item](
@@ -659,7 +676,7 @@ class FrozenHoldList[Item](
659
676
 
660
677
  @setdoc.basic
661
678
  def __fget__(self: Self) -> FrozenHoldList.Data[Item]:
662
- return self._data
679
+ return list(self._data)
663
680
 
664
681
  @setdoc.basic
665
682
  def __fset__(self: Self, data: FrozenHoldList.Data[Item], /) -> None:
@@ -667,7 +684,7 @@ class FrozenHoldList[Item](
667
684
 
668
685
  @setdoc.basic
669
686
  def __init__(self: Self, data: FrozenHoldList.Init[Item] = (), /) -> None:
670
- self.__fset__(tuple(data))
687
+ self.__fset__(list(data))
671
688
 
672
689
 
673
690
  class DataList[Item](
@@ -683,9 +700,9 @@ class DataList[Item](
683
700
  self: Self, other: SupportsIndex | Slice[SupportsIndex], /
684
701
  ) -> None:
685
702
  data: list[Item]
686
- data = list(self.__fget__())
703
+ data = self.__fget__()
687
704
  del data[other]
688
- self.__fset__(tuple(data))
705
+ self.__fset__(data)
689
706
 
690
707
  @abstractmethod
691
708
  @setdoc.basic
@@ -695,7 +712,7 @@ class DataList[Item](
695
712
  @setdoc.basic
696
713
  def __fset__(
697
714
  self: Self,
698
- value: DataList.Init[Item],
715
+ value: DataList.Data[Item],
699
716
  /,
700
717
  ) -> None: ...
701
718
 
@@ -710,7 +727,7 @@ class DataList[Item](
710
727
  data: abc.Iterable[Item] = (),
711
728
  /,
712
729
  ) -> None:
713
- self.__fset__(tuple(data))
730
+ self.__fset__(list(data))
714
731
 
715
732
  @overload
716
733
  @setdoc.basic
@@ -734,10 +751,10 @@ class DataList[Item](
734
751
  value: Item | abc.Iterable[Item],
735
752
  /,
736
753
  ) -> None:
737
- data: Any
738
- data = list(self.__fget__())
739
- data[key] = value
740
- self.__fset__(tuple(data))
754
+ data: list[Item]
755
+ data = self.__fget__()
756
+ data[key] = value # type: ignore[index, assignment]
757
+ self.__fset__(data)
741
758
 
742
759
  @setdoc.basic
743
760
  def copy(self: Self) -> Self:
@@ -746,16 +763,16 @@ class DataList[Item](
746
763
  @setdoc.basic
747
764
  def insert(self: Self, index: SupportsIndex, item: Item, /) -> None:
748
765
  data: list[Item]
749
- data = list(self.__fget__())
766
+ data = self.__fget__()
750
767
  data.insert(index, item)
751
- self.__fset__(tuple(data))
768
+ self.__fset__(data)
752
769
 
753
770
  @setdoc.basic
754
771
  def sort(self: Self, *, key: Any = None, reverse: bool = False) -> None:
755
772
  data: list[Item]
756
- data = list(self.__fget__())
773
+ data = self.__fget__()
757
774
  data.sort(key=key, reverse=reverse)
758
- self.__fset__(tuple(data))
775
+ self.__fset__(data)
759
776
 
760
777
 
761
778
  class HoldList[Item](
@@ -768,8 +785,8 @@ class HoldList[Item](
768
785
 
769
786
  @setdoc.basic
770
787
  def __fget__(self: Self) -> HoldList.Data[Item]:
771
- return self._data
788
+ return list(self._data)
772
789
 
773
790
  @setdoc.basic
774
- def __fset__(self: Self, value: abc.Iterable[Item], /) -> None:
775
- self._data: HoldList.Data[Item] = tuple(value)
791
+ def __fset__(self: Self, value: HoldList.Data[Item], /) -> None:
792
+ self._data: HoldList.Data[Item] = value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev3
3
+ Version: 4.0.0.dev4
4
4
  Summary: This project wraps common mutable datastructures for inheritance with modification.
5
5
  Author-email: Johannes <johannes.programming@gmail.com>
6
6
  License-Expression: MIT
@@ -19,12 +19,12 @@ class TestFrozenHoldDict(unittest.TestCase):
19
19
  def test_init(self: Self) -> None:
20
20
  obj: Any
21
21
  obj = FrozenHoldDict({"x": 42})
22
- self.assertEqual(obj.__fget__(), frozendict({"x": 42}))
22
+ self.assertEqual(obj.__fget__(), dict({"x": 42}))
23
23
 
24
24
  # data property
25
25
  def test_data(self: Self) -> None:
26
- self.assertIsInstance(self.obj.__fget__(), frozendict)
27
- self.assertEqual(self.obj.__fget__(), frozendict({"a": 1, "b": 2}))
26
+ self.assertIsInstance(self.obj.__fget__(), dict)
27
+ self.assertEqual(self.obj.__fget__(), dict({"a": 1, "b": 2}))
28
28
 
29
29
  # __contains__
30
30
  def test_contains(self: Self) -> None:
@@ -55,7 +55,7 @@ class TestFrozenHoldDict(unittest.TestCase):
55
55
 
56
56
  # __hash__
57
57
  def test_hash(self: Self) -> None:
58
- self.assertEqual(hash(self.obj), hash(self.obj.__fget__()))
58
+ self.assertEqual(hash(self.obj), hash(frozendict(self.obj.__fget__())))
59
59
  self.assertEqual(hash(self.obj), hash(self.same))
60
60
 
61
61
  # __or__
@@ -1,6 +1,6 @@
1
1
  __all__: list[str] = ["TestFrozenHoldLists"]
2
2
  import unittest
3
- from typing import Self
3
+ from typing import Any, Self
4
4
 
5
5
  from datahold import FrozenHoldList
6
6
 
@@ -14,13 +14,14 @@ class TestFrozenHoldList(unittest.TestCase):
14
14
 
15
15
  # __init__
16
16
  def test_init(self: Self) -> None:
17
+ obj: FrozenHoldList[int]
17
18
  obj = FrozenHoldList([42])
18
- self.assertEqual(obj.__fget__(), (42,))
19
+ self.assertEqual(obj.__fget__(), [42])
19
20
 
20
21
  # data property
21
22
  def test_data(self: Self) -> None:
22
- self.assertIsInstance(self.obj.__fget__(), tuple)
23
- self.assertEqual(self.obj.__fget__(), (1, 2, 3))
23
+ self.assertIsInstance(self.obj.__fget__(), list)
24
+ self.assertEqual(self.obj.__fget__(), [1, 2, 3])
24
25
 
25
26
  # __contains__
26
27
  def test_contains(self: Self) -> None:
@@ -33,6 +34,7 @@ class TestFrozenHoldList(unittest.TestCase):
33
34
  self.assertEqual(self.obj[-1], 3)
34
35
 
35
36
  def test_getitem_slice(self: Self) -> None:
37
+ result: Any
36
38
  result = self.obj[1:]
37
39
  self.assertEqual(result, FrozenHoldList([2, 3]))
38
40
  self.assertEqual(list(result), [2, 3])
@@ -57,33 +59,37 @@ class TestFrozenHoldList(unittest.TestCase):
57
59
 
58
60
  # __lt__
59
61
  def test_lt(self: Self) -> None:
62
+ expected: bool
60
63
  expected = self.obj.__fget__() < self.other.__fget__()
61
64
  self.assertEqual(self.obj < self.other, expected)
62
65
 
63
66
  # __le__
64
67
  def test_le(self: Self) -> None:
68
+ expected: bool
65
69
  expected = self.obj.__fget__() <= self.same.__fget__()
66
70
  self.assertEqual(self.obj <= self.same, expected)
67
71
 
68
72
  # __gt__
69
73
  def test_gt(self: Self) -> None:
74
+ expected: bool
70
75
  expected = self.other.__fget__() > self.obj.__fget__()
71
76
  self.assertEqual(self.other > self.obj, expected)
72
77
 
73
78
  # __ge__
74
79
  def test_ge(self: Self) -> None:
80
+ expected: bool
75
81
  expected = self.obj.__fget__() >= self.same.__fget__()
76
82
  self.assertEqual(self.obj >= self.same, expected)
77
83
 
78
84
  # __hash__
79
85
  def test_hash(self: Self) -> None:
80
- self.assertEqual(hash(self.obj), hash(self.obj.__fget__()))
86
+ self.assertEqual(hash(self.obj), hash(tuple(self.obj.__fget__())))
81
87
  self.assertEqual(hash(self.obj), hash(self.same))
82
88
 
83
89
  # __add__
84
90
  def test_add(self: Self) -> None:
91
+ result: Any
85
92
  result = self.obj + FrozenHoldList([4, 5])
86
-
87
93
  self.assertIsInstance(result, FrozenHoldList)
88
94
  self.assertEqual(
89
95
  result,
@@ -92,8 +98,8 @@ class TestFrozenHoldList(unittest.TestCase):
92
98
 
93
99
  # __mul__
94
100
  def test_mul(self: Self) -> None:
101
+ result: Any
95
102
  result = self.obj * 2
96
-
97
103
  self.assertIsInstance(result, FrozenHoldList)
98
104
  self.assertEqual(
99
105
  result,
@@ -102,8 +108,8 @@ class TestFrozenHoldList(unittest.TestCase):
102
108
 
103
109
  # __rmul__
104
110
  def test_rmul(self: Self) -> None:
111
+ result: Any
105
112
  result = 2 * self.obj
106
-
107
113
  self.assertIsInstance(result, FrozenHoldList)
108
114
  self.assertEqual(
109
115
  result,
@@ -126,15 +132,14 @@ class TestFrozenHoldList(unittest.TestCase):
126
132
 
127
133
  # count
128
134
  def test_count(self: Self) -> None:
135
+ obj: FrozenHoldList[int]
129
136
  obj = FrozenHoldList([1, 2, 1, 3, 1])
130
-
131
137
  self.assertEqual(obj.count(1), 3)
132
138
  self.assertEqual(obj.count(99), 0)
133
139
 
134
140
  # index
135
141
  def test_index(self: Self) -> None:
136
142
  self.assertEqual(self.obj.index(2), 1)
137
-
138
143
  with self.assertRaises(ValueError):
139
144
  self.obj.index(99)
140
145
 
@@ -15,12 +15,12 @@ class TestFrozenHoldSet(unittest.TestCase):
15
15
  # __init__
16
16
  def test_init(self: Self) -> None:
17
17
  obj = FrozenHoldSet([1, 2, 3])
18
- self.assertEqual(obj.__fget__(), frozenset({1, 2, 3}))
18
+ self.assertEqual(obj.__fget__(), {1, 2, 3})
19
19
 
20
20
  # data property
21
21
  def test_data(self: Self) -> None:
22
- self.assertIsInstance(self.obj.__fget__(), frozenset)
23
- self.assertEqual(self.obj.__fget__(), frozenset({1, 2, 3}))
22
+ self.assertIsInstance(self.obj.__fget__(), set)
23
+ self.assertEqual(self.obj.__fget__(), {1, 2, 3})
24
24
 
25
25
  # __contains__
26
26
  def test_contains(self: Self) -> None:
@@ -66,12 +66,11 @@ class TestFrozenHoldSet(unittest.TestCase):
66
66
  # __hash__
67
67
  def test_hash(self: Self) -> None:
68
68
  self.assertEqual(hash(self.obj), hash(self.same))
69
- self.assertEqual(hash(self.obj), hash(self.obj.__fget__()))
69
+ self.assertEqual(hash(self.obj), hash(frozenset(self.obj.__fget__())))
70
70
 
71
71
  # __or__
72
72
  def test_or(self: Self) -> None:
73
73
  result = FrozenHoldSet({1, 2}) | FrozenHoldSet({2, 3})
74
-
75
74
  self.assertIsInstance(result, FrozenHoldSet)
76
75
  self.assertEqual(
77
76
  result,
@@ -88,7 +87,6 @@ class TestFrozenHoldSet(unittest.TestCase):
88
87
  # union
89
88
  def test_union(self: Self) -> None:
90
89
  result = self.obj.union({4, 5})
91
-
92
90
  self.assertIsInstance(result, FrozenHoldSet)
93
91
  self.assertEqual(
94
92
  result,
@@ -98,7 +96,6 @@ class TestFrozenHoldSet(unittest.TestCase):
98
96
  # intersection
99
97
  def test_intersection(self: Self) -> None:
100
98
  result = self.obj.intersection({2, 3, 4})
101
-
102
99
  self.assertEqual(
103
100
  result,
104
101
  FrozenHoldSet({2, 3}),
@@ -107,7 +104,6 @@ class TestFrozenHoldSet(unittest.TestCase):
107
104
  # difference
108
105
  def test_difference(self: Self) -> None:
109
106
  result = self.obj.difference({2})
110
-
111
107
  self.assertEqual(
112
108
  result,
113
109
  FrozenHoldSet({1, 3}),
@@ -116,7 +112,6 @@ class TestFrozenHoldSet(unittest.TestCase):
116
112
  # symmetric_difference
117
113
  def test_symmetric_difference(self: Self) -> None:
118
114
  result = self.obj.symmetric_difference({3, 4})
119
-
120
115
  self.assertEqual(
121
116
  result,
122
117
  FrozenHoldSet({1, 2, 4}),
@@ -146,7 +141,6 @@ class TestFrozenHoldSet(unittest.TestCase):
146
141
  # __and__
147
142
  def test_and(self: Self) -> None:
148
143
  result = FrozenHoldSet({1, 2, 3}) & FrozenHoldSet({2, 3, 4})
149
-
150
144
  self.assertEqual(
151
145
  result,
152
146
  FrozenHoldSet({2, 3}),
@@ -155,7 +149,6 @@ class TestFrozenHoldSet(unittest.TestCase):
155
149
  # __sub__
156
150
  def test_sub(self: Self) -> None:
157
151
  result = FrozenHoldSet({1, 2, 3}) - FrozenHoldSet({2})
158
-
159
152
  self.assertEqual(
160
153
  result,
161
154
  FrozenHoldSet({1, 3}),
@@ -164,7 +157,6 @@ class TestFrozenHoldSet(unittest.TestCase):
164
157
  # __xor__
165
158
  def test_xor(self: Self) -> None:
166
159
  result = FrozenHoldSet({1, 2, 3}) ^ FrozenHoldSet({3, 4})
167
-
168
160
  self.assertEqual(
169
161
  result,
170
162
  FrozenHoldSet({1, 2, 4}),
@@ -8,13 +8,17 @@ from datahold import HoldDict
8
8
  class TestHoldDict(unittest.TestCase):
9
9
 
10
10
  def setUp(self: Self) -> None:
11
- self.obj: Any = HoldDict({"a": 1, "b": 2})
12
- self.same: Any = HoldDict({"a": 1, "b": 2})
13
- self.other: Any = HoldDict({"a": 1, "b": 3})
11
+ self.obj: Any
12
+ self.other: Any
13
+ self.same: Any
14
+ self.obj = HoldDict({"a": 1, "b": 2})
15
+ self.same = HoldDict({"a": 1, "b": 2})
16
+ self.other = HoldDict({"a": 1, "b": 3})
14
17
 
15
18
  # __init__
16
19
  def test_init(self: Self) -> None:
17
- obj: Any = HoldDict({"x": 42})
20
+ obj: Any
21
+ obj = HoldDict({"x": 42})
18
22
  self.assertEqual(obj.__fget__(), {"x": 42})
19
23
 
20
24
  # data property
@@ -61,8 +65,8 @@ class TestHoldDict(unittest.TestCase):
61
65
 
62
66
  # __or__
63
67
  def test_or(self: Self) -> None:
64
- result: Any = HoldDict({"a": 1}) | HoldDict({"b": 2})
65
-
68
+ result: Any
69
+ result = HoldDict({"a": 1}) | HoldDict({"b": 2})
66
70
  self.assertIsInstance(result, HoldDict)
67
71
  self.assertEqual(
68
72
  result,
@@ -78,8 +82,8 @@ class TestHoldDict(unittest.TestCase):
78
82
 
79
83
  # fromkeys
80
84
  def test_fromkeys(self: Self) -> None:
81
- result: Any = HoldDict.fromkeys(["x", "y"], 123)
82
-
85
+ result: Any
86
+ result = HoldDict.fromkeys(["x", "y"], 123)
83
87
  self.assertIsInstance(result, HoldDict)
84
88
  self.assertEqual(
85
89
  result,
@@ -126,7 +130,8 @@ class TestHoldDict(unittest.TestCase):
126
130
 
127
131
  # setdefault
128
132
  def test_setdefault(self: Self) -> None:
129
- value: Any = self.obj.setdefault("c", 3)
133
+ value: Any
134
+ value = self.obj.setdefault("c", 3)
130
135
  self.assertEqual(value, 3)
131
136
  self.assertEqual(self.obj["c"], 3)
132
137
 
@@ -1,6 +1,6 @@
1
1
  __all__: list[str] = ["TestHoldList"]
2
2
  import unittest
3
- from typing import Self
3
+ from typing import Any, Self
4
4
 
5
5
  from datahold import HoldList
6
6
 
@@ -8,19 +8,23 @@ from datahold import HoldList
8
8
  class TestHoldList(unittest.TestCase):
9
9
 
10
10
  def setUp(self: Self) -> None:
11
+ self.obj: HoldList[int]
12
+ self.other: HoldList[int]
13
+ self.same: HoldList[int]
11
14
  self.obj = HoldList([1, 2, 3])
12
15
  self.same = HoldList([1, 2, 3])
13
16
  self.other = HoldList([1, 2, 4])
14
17
 
15
18
  # __init__
16
19
  def test_init(self: Self) -> None:
20
+ obj: HoldList[int]
17
21
  obj = HoldList([42])
18
- self.assertEqual(obj.__fget__(), (42,))
22
+ self.assertEqual(obj.__fget__(), [42])
19
23
 
20
24
  # data property
21
25
  def test_data(self: Self) -> None:
22
- self.assertIsInstance(self.obj.__fget__(), tuple)
23
- self.assertEqual(self.obj.__fget__(), (1, 2, 3))
26
+ self.assertIsInstance(self.obj.__fget__(), list)
27
+ self.assertEqual(self.obj.__fget__(), [1, 2, 3])
24
28
 
25
29
  # __contains__
26
30
  def test_contains(self: Self) -> None:
@@ -40,7 +44,7 @@ class TestHoldList(unittest.TestCase):
40
44
  # __delitem__
41
45
  def test_delitem(self: Self) -> None:
42
46
  del self.obj[1]
43
- self.assertEqual(self.obj.__fget__(), (1, 3))
47
+ self.assertEqual(self.obj.__fget__(), [1, 3])
44
48
 
45
49
  # __iter__
46
50
  def test_iter(self: Self) -> None:
@@ -62,21 +66,25 @@ class TestHoldList(unittest.TestCase):
62
66
 
63
67
  # __lt__
64
68
  def test_lt(self: Self) -> None:
69
+ expected: bool
65
70
  expected = self.obj.__fget__() < self.other.__fget__()
66
71
  self.assertEqual(self.obj < self.other, expected)
67
72
 
68
73
  # __le__
69
74
  def test_le(self: Self) -> None:
75
+ expected: bool
70
76
  expected = self.obj.__fget__() <= self.same.__fget__()
71
77
  self.assertEqual(self.obj <= self.same, expected)
72
78
 
73
79
  # __gt__
74
80
  def test_gt(self: Self) -> None:
81
+ expected: bool
75
82
  expected = self.other.__fget__() > self.obj.__fget__()
76
83
  self.assertEqual(self.other > self.obj, expected)
77
84
 
78
85
  # __ge__
79
86
  def test_ge(self: Self) -> None:
87
+ expected: bool
80
88
  expected = self.same.__fget__() >= self.obj.__fget__()
81
89
  self.assertEqual(self.same >= self.obj, expected)
82
90
 
@@ -90,7 +98,6 @@ class TestHoldList(unittest.TestCase):
90
98
  # append
91
99
  def test_append(self: Self) -> None:
92
100
  self.obj.append(4)
93
-
94
101
  self.assertEqual(
95
102
  self.obj,
96
103
  HoldList([1, 2, 3, 4]),
@@ -99,7 +106,6 @@ class TestHoldList(unittest.TestCase):
99
106
  # extend
100
107
  def test_extend(self: Self) -> None:
101
108
  self.obj.extend([4, 5])
102
-
103
109
  self.assertEqual(
104
110
  self.obj,
105
111
  HoldList([1, 2, 3, 4, 5]),
@@ -108,7 +114,6 @@ class TestHoldList(unittest.TestCase):
108
114
  # insert
109
115
  def test_insert(self: Self) -> None:
110
116
  self.obj.insert(1, 99)
111
-
112
117
  self.assertEqual(
113
118
  self.obj,
114
119
  HoldList([1, 99, 2, 3]),
@@ -117,7 +122,6 @@ class TestHoldList(unittest.TestCase):
117
122
  # remove
118
123
  def test_remove(self: Self) -> None:
119
124
  self.obj.remove(2)
120
-
121
125
  self.assertEqual(
122
126
  self.obj,
123
127
  HoldList([1, 3]),
@@ -125,8 +129,8 @@ class TestHoldList(unittest.TestCase):
125
129
 
126
130
  # pop
127
131
  def test_pop(self: Self) -> None:
132
+ value: Any
128
133
  value = self.obj.pop()
129
-
130
134
  self.assertEqual(value, 3)
131
135
  self.assertEqual(
132
136
  self.obj,
@@ -136,7 +140,6 @@ class TestHoldList(unittest.TestCase):
136
140
  # clear
137
141
  def test_clear(self: Self) -> None:
138
142
  self.obj.clear()
139
-
140
143
  self.assertEqual(len(self.obj), 0)
141
144
 
142
145
  # index
@@ -148,8 +151,8 @@ class TestHoldList(unittest.TestCase):
148
151
 
149
152
  # count
150
153
  def test_count(self: Self) -> None:
154
+ obj: HoldList[int]
151
155
  obj = HoldList([1, 2, 2, 3])
152
-
153
156
  self.assertEqual(
154
157
  obj.count(2),
155
158
  2,
@@ -158,7 +161,6 @@ class TestHoldList(unittest.TestCase):
158
161
  # reverse
159
162
  def test_reverse(self: Self) -> None:
160
163
  self.obj.reverse()
161
-
162
164
  self.assertEqual(
163
165
  self.obj,
164
166
  HoldList([3, 2, 1]),
@@ -166,10 +168,9 @@ class TestHoldList(unittest.TestCase):
166
168
 
167
169
  # sort
168
170
  def test_sort(self: Self) -> None:
171
+ obj: HoldList[int]
169
172
  obj = HoldList([3, 1, 2])
170
-
171
173
  obj.sort()
172
-
173
174
  self.assertEqual(
174
175
  obj,
175
176
  HoldList([1, 2, 3]),
@@ -177,14 +178,15 @@ class TestHoldList(unittest.TestCase):
177
178
 
178
179
  # copy
179
180
  def test_copy(self: Self) -> None:
181
+ result: HoldList[Any]
180
182
  result = self.obj.copy()
181
-
182
183
  self.assertIsInstance(result, HoldList)
183
184
  self.assertEqual(result, self.obj)
184
185
  self.assertIsNot(result, self.obj)
185
186
 
186
187
  # __add__
187
188
  def test_add(self: Self) -> None:
189
+ result: HoldList[int]
188
190
  result = HoldList([1, 2]) + HoldList([3, 4])
189
191
  self.assertEqual(
190
192
  result,
@@ -193,6 +195,7 @@ class TestHoldList(unittest.TestCase):
193
195
 
194
196
  # __mul__
195
197
  def test_mul(self: Self) -> None:
198
+ result: HoldList[int]
196
199
  result = HoldList([1, 2]) * 2
197
200
  self.assertEqual(
198
201
  result,
@@ -201,6 +204,7 @@ class TestHoldList(unittest.TestCase):
201
204
 
202
205
  # __rmul__
203
206
  def test_rmul(self: Self) -> None:
207
+ result: HoldList[int]
204
208
  result = 2 * HoldList([1, 2])
205
209
  self.assertEqual(
206
210
  result,
@@ -7,19 +7,23 @@ from datahold import HoldSet
7
7
  class TestHoldSet(unittest.TestCase):
8
8
 
9
9
  def setUp(self: Self) -> None:
10
- self.obj: Any = HoldSet({1, 2, 3})
11
- self.same: Any = HoldSet({1, 2, 3})
12
- self.other: Any = HoldSet({3, 4, 5})
10
+ self.obj: Any
11
+ self.other: Any
12
+ self.same: Any
13
+ self.obj = HoldSet({1, 2, 3})
14
+ self.other = HoldSet({3, 4, 5})
15
+ self.same = HoldSet({1, 2, 3})
13
16
 
14
17
  # __init__
15
18
  def test_init(self: Self) -> None:
16
- obj: Any = HoldSet([1, 2, 3])
17
- self.assertEqual(obj.__fget__(), frozenset({1, 2, 3}))
19
+ obj: Any
20
+ obj = HoldSet([1, 2, 3])
21
+ self.assertEqual(obj.__fget__(), {1, 2, 3})
18
22
 
19
23
  # data property
20
24
  def test_data(self: Self) -> None:
21
- self.assertIsInstance(self.obj.__fget__(), frozenset)
22
- self.assertEqual(self.obj.__fget__(), frozenset({1, 2, 3}))
25
+ self.assertIsInstance(self.obj.__fget__(), set)
26
+ self.assertEqual(self.obj.__fget__(), {1, 2, 3})
23
27
 
24
28
  # __contains__
25
29
  def test_contains(self: Self) -> None:
@@ -64,8 +68,8 @@ class TestHoldSet(unittest.TestCase):
64
68
 
65
69
  # __or__
66
70
  def test_or(self: Self) -> None:
67
- result: Any = HoldSet({1, 2}) | HoldSet({2, 3})
68
-
71
+ result: Any
72
+ result = HoldSet({1, 2}) | HoldSet({2, 3})
69
73
  self.assertIsInstance(result, HoldSet)
70
74
  self.assertEqual(
71
75
  result,
@@ -74,8 +78,8 @@ class TestHoldSet(unittest.TestCase):
74
78
 
75
79
  # __and__
76
80
  def test_and(self: Self) -> None:
77
- result: Any = HoldSet({1, 2, 3}) & HoldSet({2, 3, 4})
78
-
81
+ result: Any
82
+ result = HoldSet({1, 2, 3}) & HoldSet({2, 3, 4})
79
83
  self.assertEqual(
80
84
  result,
81
85
  HoldSet({2, 3}),
@@ -83,8 +87,8 @@ class TestHoldSet(unittest.TestCase):
83
87
 
84
88
  # __sub__
85
89
  def test_sub(self: Self) -> None:
86
- result: Any = HoldSet({1, 2, 3}) - HoldSet({2})
87
-
90
+ result: Any
91
+ result = HoldSet({1, 2, 3}) - HoldSet({2})
88
92
  self.assertEqual(
89
93
  result,
90
94
  HoldSet({1, 3}),
@@ -92,8 +96,8 @@ class TestHoldSet(unittest.TestCase):
92
96
 
93
97
  # __xor__
94
98
  def test_xor(self: Self) -> None:
95
- result: Any = HoldSet({1, 2, 3}) ^ HoldSet({3, 4})
96
-
99
+ result: Any
100
+ result = HoldSet({1, 2, 3}) ^ HoldSet({3, 4})
97
101
  self.assertEqual(
98
102
  result,
99
103
  HoldSet({1, 2, 4}),
@@ -109,7 +113,6 @@ class TestHoldSet(unittest.TestCase):
109
113
  # add
110
114
  def test_add(self: Self) -> None:
111
115
  self.obj.add(4)
112
-
113
116
  self.assertEqual(
114
117
  self.obj,
115
118
  HoldSet({1, 2, 3, 4}),
@@ -118,7 +121,6 @@ class TestHoldSet(unittest.TestCase):
118
121
  # remove
119
122
  def test_remove(self: Self) -> None:
120
123
  self.obj.remove(2)
121
-
122
124
  self.assertEqual(
123
125
  self.obj,
124
126
  HoldSet({1, 3}),
@@ -128,7 +130,6 @@ class TestHoldSet(unittest.TestCase):
128
130
  def test_discard(self: Self) -> None:
129
131
  self.obj.discard(2)
130
132
  self.obj.discard(999)
131
-
132
133
  self.assertEqual(
133
134
  self.obj,
134
135
  HoldSet({1, 3}),
@@ -136,21 +137,19 @@ class TestHoldSet(unittest.TestCase):
136
137
 
137
138
  # pop
138
139
  def test_pop(self: Self) -> None:
139
- value: Any = self.obj.pop()
140
-
140
+ value: Any
141
+ value = self.obj.pop()
141
142
  self.assertNotIn(value, self.obj)
142
143
  self.assertEqual(len(self.obj), 2)
143
144
 
144
145
  # clear
145
146
  def test_clear(self: Self) -> None:
146
147
  self.obj.clear()
147
-
148
148
  self.assertEqual(len(self.obj), 0)
149
149
 
150
150
  # update
151
151
  def test_update(self: Self) -> None:
152
152
  self.obj.update({4, 5})
153
-
154
153
  self.assertEqual(
155
154
  self.obj,
156
155
  HoldSet({1, 2, 3, 4, 5}),
@@ -158,8 +157,8 @@ class TestHoldSet(unittest.TestCase):
158
157
 
159
158
  # union
160
159
  def test_union(self: Self) -> None:
161
- result: Any = self.obj.union({4, 5})
162
-
160
+ result: Any
161
+ result = self.obj.union({4, 5})
163
162
  self.assertIsInstance(result, HoldSet)
164
163
  self.assertEqual(
165
164
  result,
@@ -168,8 +167,8 @@ class TestHoldSet(unittest.TestCase):
168
167
 
169
168
  # intersection
170
169
  def test_intersection(self: Self) -> None:
171
- result: Any = self.obj.intersection({2, 3, 4})
172
-
170
+ result: Any
171
+ result = self.obj.intersection({2, 3, 4})
173
172
  self.assertEqual(
174
173
  result,
175
174
  HoldSet({2, 3}),
@@ -177,8 +176,8 @@ class TestHoldSet(unittest.TestCase):
177
176
 
178
177
  # difference
179
178
  def test_difference(self: Self) -> None:
180
- result: Any = self.obj.difference({2})
181
-
179
+ result: Any
180
+ result = self.obj.difference({2})
182
181
  self.assertEqual(
183
182
  result,
184
183
  HoldSet({1, 3}),
@@ -186,8 +185,8 @@ class TestHoldSet(unittest.TestCase):
186
185
 
187
186
  # symmetric_difference
188
187
  def test_symmetric_difference(self: Self) -> None:
189
- result: Any = self.obj.symmetric_difference({3, 4})
190
-
188
+ result: Any
189
+ result = self.obj.symmetric_difference({3, 4})
191
190
  self.assertEqual(
192
191
  result,
193
192
  HoldSet({1, 2, 4}),
@@ -209,8 +208,8 @@ class TestHoldSet(unittest.TestCase):
209
208
 
210
209
  # copy
211
210
  def test_copy(self: Self) -> None:
212
- result: Any = self.obj.copy()
213
-
211
+ result: Any
212
+ result = self.obj.copy()
214
213
  self.assertIsInstance(result, HoldSet)
215
214
  self.assertEqual(result, self.obj)
216
215
  self.assertIsNot(result, self.obj)
@@ -221,17 +220,14 @@ class TestHoldSet(unittest.TestCase):
221
220
  {1, 2} | HoldSet({2, 3}),
222
221
  HoldSet({1, 2, 3}),
223
222
  )
224
-
225
223
  self.assertEqual(
226
224
  {1, 2} & HoldSet({2, 3}),
227
225
  HoldSet({2}),
228
226
  )
229
-
230
227
  self.assertEqual(
231
228
  {1, 2} - HoldSet({2}),
232
229
  HoldSet({1}),
233
230
  )
234
-
235
231
  self.assertEqual(
236
232
  {1, 2} ^ HoldSet({2, 3}),
237
233
  HoldSet({1, 3}),
@@ -3,8 +3,6 @@ __all__: list[str] = ["TestDataAttribute"]
3
3
  import unittest
4
4
  from typing import Any, Self
5
5
 
6
- from frozendict import frozendict
7
-
8
6
  from datahold import (
9
7
  FrozenHoldDict,
10
8
  FrozenHoldList,
@@ -22,13 +20,8 @@ class TestDataAttribute(unittest.TestCase):
22
20
  obj: Any
23
21
  f = FrozenHoldDict({"a": 1})
24
22
  m = HoldDict({"a": 1})
25
-
26
23
  for obj in (f, m):
27
- self.assertIsInstance(obj.__fget__(), frozendict)
28
-
29
- # try to mutate underlying data
30
- with self.assertRaises((TypeError, AttributeError)):
31
- obj.__fget__()["b"] = 2
24
+ self.assertIsInstance(obj.__fget__(), dict)
32
25
 
33
26
  def test_list_data_is_tuple(self: Self) -> None:
34
27
  f: FrozenHoldList[Any]
@@ -36,11 +29,8 @@ class TestDataAttribute(unittest.TestCase):
36
29
  o: Any
37
30
  f = FrozenHoldList([1, 2, 3])
38
31
  m = HoldList([1, 2, 3])
39
-
40
32
  for o in (f, m):
41
- self.assertIsInstance(o.__fget__(), tuple)
42
- with self.assertRaises(Exception):
43
- o.__fget__().append(4)
33
+ self.assertIsInstance(o.__fget__(), list)
44
34
 
45
35
  def test_set_data_is_frozenset(self: Self) -> None:
46
36
  f: FrozenHoldSet[Any]
@@ -48,11 +38,8 @@ class TestDataAttribute(unittest.TestCase):
48
38
  obj: Any
49
39
  f = FrozenHoldSet({1, 2, 3})
50
40
  m = HoldSet({1, 2, 3})
51
-
52
41
  for obj in (f, m):
53
- self.assertIsInstance(obj.__fget__(), frozenset)
54
- with self.assertRaises(AttributeError):
55
- obj.__fget__().add(4)
42
+ self.assertIsInstance(obj.__fget__(), set)
56
43
 
57
44
 
58
45
  if __name__ == "__main__":
@@ -19,7 +19,7 @@ class TestMutableBehavior(unittest.TestCase):
19
19
  x = HoldList([1, 2])
20
20
  x.append(3)
21
21
  self.assertEqual(list(x), [1, 2, 3])
22
- self.assertEqual(x.__fget__(), (1, 2, 3))
22
+ self.assertEqual(x.__fget__(), [1, 2, 3])
23
23
 
24
24
  def test_hold_set_mutates_and_syncs_data(self: Self) -> None:
25
25
  s: HoldSet[Any]
File without changes
File without changes
File without changes
File without changes