datahold 4.0.0.dev3__tar.gz → 4.0.0.dev5__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.dev5}/PKG-INFO +1 -1
  2. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/pyproject.toml +1 -1
  3. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold/__init__.py +83 -97
  4. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold.egg-info/PKG-INFO +1 -1
  5. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_FrozenHoldDict.py +4 -4
  6. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_FrozenHoldList.py +15 -10
  7. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_FrozenHoldSet.py +4 -12
  8. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_HoldDict.py +14 -9
  9. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_HoldList.py +20 -16
  10. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_HoldSet.py +31 -35
  11. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_datahold_TestDataAttribute.py +3 -16
  12. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_datahold_TestMutableBehavior.py +1 -1
  13. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/LICENSE.txt +0 -0
  14. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/MANIFEST.in +0 -0
  15. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/README.rst +0 -0
  16. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v1.1.rst +0 -0
  17. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v1.2.rst +0 -0
  18. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v2.0.rst +0 -0
  19. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v2.1.rst +0 -0
  20. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v2.2.rst +0 -0
  21. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v2.3.rst +0 -0
  22. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v3.0.rst +0 -0
  23. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/docs/v4.0.rst +0 -0
  24. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/run_tests.py +0 -0
  25. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/setup.cfg +0 -0
  26. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold/py.typed +0 -0
  27. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold.egg-info/SOURCES.txt +0 -0
  28. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold.egg-info/dependency_links.txt +0 -0
  29. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold.egg-info/requires.txt +0 -0
  30. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/src/datahold.egg-info/top_level.txt +0 -0
  31. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_datahold_TestCopy.py +0 -0
  32. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_datahold_TestFrozenMutability.py +0 -0
  33. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/tests/test_testdata.py +0 -0
  34. {datahold-4.0.0.dev3 → datahold-4.0.0.dev5}/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.dev5
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.dev5"
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,25 +121,32 @@ 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
125
136
  @setdoc.basic
126
- def __init__(self: Self, data: Init[Item] = (), /) -> None: ...
137
+ def __fget__(self: Self) -> set[Item]: ...
127
138
 
139
+ @abstractmethod
128
140
  @setdoc.basic
129
- def __repr__(self: Self, /) -> str:
130
- return f"{type(self).__name__}({set(self.__fget__())!r})"
141
+ def __fset__(self: Self, data: Data[Item], /) -> None: ...
142
+
143
+ @setdoc.basic
144
+ def __init__(self: Self, data: Init[Item] = (), /) -> None:
145
+ self.__fset__(set(data))
131
146
 
132
- @abstractmethod
133
147
  @setdoc.basic
134
- def __fget__(self: Self) -> frozenset[Item]: ...
148
+ def __repr__(self: Self, /) -> str:
149
+ return f"{type(self).__name__}({set(self.__fget__())!r})"
135
150
 
136
151
  @setdoc.basic
137
152
  def difference(self: Self, /, *others: abc.Iterable[abc.Hashable]) -> Self:
@@ -171,7 +186,7 @@ class FrozenDataSet[Item: abc.Hashable](BaseDataSet[Item], abc.Hashable):
171
186
 
172
187
  @setdoc.basic
173
188
  def __hash__(self: Self) -> int:
174
- return hash(self.__fget__())
189
+ return hash(frozenset(self.__fget__()))
175
190
 
176
191
 
177
192
  class FrozenHoldSet[Item: abc.Hashable](
@@ -184,16 +199,12 @@ class FrozenHoldSet[Item: abc.Hashable](
184
199
 
185
200
  @setdoc.basic
186
201
  def __fget__(self: Self) -> FrozenHoldSet.Data[Item]:
187
- return self._data
202
+ return set(self._data)
188
203
 
189
204
  @setdoc.basic
190
205
  def __fset__(self: Self, data: FrozenHoldSet.Data[Item], /) -> None:
191
206
  self._data: FrozenHoldSet.Data[Item] = data
192
207
 
193
- @setdoc.basic
194
- def __init__(self: Self, data: FrozenHoldSet.Init[Item] = (), /) -> None:
195
- self.__fset__(frozenset(data))
196
-
197
208
 
198
209
  class DataSet[Item: abc.Hashable](
199
210
  BaseDataSet[Item],
@@ -211,14 +222,10 @@ 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
- @setdoc.basic
219
- def __init__(self: Self, data: abc.Iterable[Item] = (), /) -> None:
220
- self.__fset__(frozenset(data))
221
-
222
229
  @setdoc.basic
223
230
  def add(self: Self, item: Item, /) -> None:
224
231
  self.__fset__(self.__fget__() | {item})
@@ -236,14 +243,14 @@ class DataSet[Item: abc.Hashable](
236
243
  data: set[Item]
237
244
  data = set(self.__fget__())
238
245
  data.difference_update(*others)
239
- self.__fset__(frozenset(data))
246
+ self.__fset__(set(data))
240
247
 
241
248
  @setdoc.basic
242
249
  def discard(self: Self, item: abc.Hashable, /) -> None:
243
250
  data: set[Item]
244
251
  data = set(self.__fget__())
245
252
  data.discard(item)
246
- self.__fset__(frozenset(data))
253
+ self.__fset__(set(data))
247
254
 
248
255
  @setdoc.basic
249
256
  def intersection_update(
@@ -252,7 +259,7 @@ class DataSet[Item: abc.Hashable](
252
259
  data: set[Item]
253
260
  data = set(self.__fget__())
254
261
  data.intersection_update(*others)
255
- self.__fset__(frozenset(data))
262
+ self.__fset__(set(data))
256
263
 
257
264
  @setdoc.basic
258
265
  def symmetric_difference_update(
@@ -261,7 +268,7 @@ class DataSet[Item: abc.Hashable](
261
268
  data: set[Item]
262
269
  data = set(self.__fget__())
263
270
  data.symmetric_difference_update(other)
264
- self.__fset__(frozenset(data))
271
+ self.__fset__(set(data))
265
272
 
266
273
  @setdoc.basic
267
274
  def update(self: Self, /, *others: abc.Iterable[Item]) -> None:
@@ -278,11 +285,11 @@ class HoldSet[Item: abc.Hashable](
278
285
 
279
286
  @setdoc.basic
280
287
  def __fget__(self: Self) -> HoldSet.Data[Item]:
281
- return self._data
288
+ return set(self._data)
282
289
 
283
290
  @setdoc.basic
284
- def __fset__(self: Self, value: abc.Iterable[Item], /) -> None:
285
- self._data: HoldSet.Data[Item] = frozenset(value)
291
+ def __fset__(self: Self, value: HoldSet.Data[Item], /) -> None:
292
+ self._data: HoldSet.Data[Item] = value
286
293
 
287
294
 
288
295
  ### MAPPING ###
@@ -314,13 +321,7 @@ class BaseDataMapping[Key, Value](
314
321
  def __fget__(self: Self) -> Data[Key, Value]: ...
315
322
 
316
323
 
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]: ...
324
+ ### DICT ###
324
325
 
325
326
 
326
327
  class BaseDataDict[Key: abc.Hashable, Value](
@@ -330,22 +331,29 @@ class BaseDataDict[Key: abc.Hashable, Value](
330
331
 
331
332
  __slots__ = ()
332
333
 
333
- type Data[DataKey, DataValue] = frozendict[
334
- DataKey | str, Optional[DataValue]
335
- ]
334
+ type Data[DataKey, DataValue] = dict[DataKey | str, Optional[DataValue]]
336
335
  type Init[DataKey, DataValue] = (
337
336
  SupportsKeysAndGetitem[DataKey | str, Optional[DataValue]]
338
337
  | abc.Iterable[tuple[DataKey | str, Optional[DataValue]]]
339
338
  )
340
339
 
341
340
  @abstractmethod
341
+ @setdoc.basic
342
+ def __fset__(self: Self, data: Data[Key, Value], /) -> None: ...
343
+
342
344
  @setdoc.basic
343
345
  def __init__(
344
346
  self: Self,
345
347
  data: Init[Key, Value] = (),
346
348
  /,
347
349
  **kwargs: Optional[Value],
348
- ) -> None: ...
350
+ ) -> None:
351
+ data_: BaseDataDict.Data[Key, Value]
352
+ data_ = dict( # type: ignore[assignment]
353
+ data, # type: ignore[arg-type]
354
+ **kwargs,
355
+ )
356
+ self.__fset__(data_)
349
357
 
350
358
  @setdoc.basic
351
359
  def __or__(
@@ -386,7 +394,7 @@ class FrozenDataDict[Key: abc.Hashable, Value](
386
394
 
387
395
  @setdoc.basic
388
396
  def __hash__(self: Self) -> int:
389
- return hash(self.__fget__())
397
+ return hash(frozendict(self.__fget__()))
390
398
 
391
399
 
392
400
  class FrozenHoldDict[Key: abc.Hashable, Value](
@@ -397,23 +405,9 @@ class FrozenHoldDict[Key: abc.Hashable, Value](
397
405
 
398
406
  __slots__ = ()
399
407
 
400
- @setdoc.basic
401
- def __init__(
402
- self: Self,
403
- data: FrozenHoldDict.Init[Key, Value] = (),
404
- /,
405
- **kwargs: Optional[Value],
406
- ) -> None:
407
- self.__fset__(
408
- frozendict(
409
- data, # type: ignore[arg-type]
410
- **kwargs,
411
- )
412
- )
413
-
414
408
  @setdoc.basic
415
409
  def __fget__(self: Self) -> FrozenHoldDict.Data[Key, Value]:
416
- return self._data
410
+ return dict(self._data)
417
411
 
418
412
  @setdoc.basic
419
413
  def __fset__(self: Self, data: FrozenHoldDict.Data[Key, Value], /) -> None:
@@ -430,7 +424,10 @@ class DataDict[Key: abc.Hashable, Value](
430
424
 
431
425
  @setdoc.basic
432
426
  def __delitem__(self: Self, key: Key | str, /) -> None:
433
- self.__fset__(self.__fget__().delete(key))
427
+ data: DataDict.Data[Key, Value]
428
+ data = self.__fget__()
429
+ del data[key]
430
+ self.__fset__(data)
434
431
 
435
432
  @abstractmethod
436
433
  @setdoc.basic
@@ -440,15 +437,6 @@ class DataDict[Key: abc.Hashable, Value](
440
437
  @setdoc.basic
441
438
  def __fset__(self: Self, data: DataDict.Data[Key, Value], /) -> None: ...
442
439
 
443
- @setdoc.basic
444
- def __init__(
445
- self: Self,
446
- data: BaseDataDict.Init[Key, Value] = (),
447
- /,
448
- **kwargs: Optional[Value],
449
- ) -> None:
450
- self.__fset__(frozendict(data, **kwargs)) # type: ignore[arg-type]
451
-
452
440
  @setdoc.basic
453
441
  def __ior__(
454
442
  self: Self,
@@ -466,7 +454,10 @@ class DataDict[Key: abc.Hashable, Value](
466
454
  /,
467
455
  ) -> None:
468
456
  # what to do if Key includes unhashable types?
469
- self.__fset__(self.__fget__().set(key, value))
457
+ data: DataDict.Data[Key, Value]
458
+ data = self.__fget__()
459
+ data[key] = value
460
+ self.__fset__(data)
470
461
 
471
462
  @setdoc.basic
472
463
  def copy(self: Self) -> Self:
@@ -483,15 +474,15 @@ class HoldDict[Key: abc.Hashable, Value](
483
474
 
484
475
  @setdoc.basic
485
476
  def __fget__(self: Self) -> HoldDict.Data[Key, Value]:
486
- return self._data
477
+ return dict(self._data)
487
478
 
488
479
  @setdoc.basic
489
480
  def __fset__(
490
481
  self: Self,
491
- value: HoldDict.Init[Key, Value],
482
+ value: HoldDict.Data[Key, Value],
492
483
  /,
493
484
  ) -> None:
494
- self._data: HoldDict.Data[Key, Value] = frozendict(value) # type: ignore[arg-type]
485
+ self._data: HoldDict.Data[Key, Value] = value
495
486
 
496
487
 
497
488
  ### SEQUENCE ###
@@ -542,12 +533,15 @@ class BaseDataSequence[Item](
542
533
  def __fget__(self: Self) -> Data[Item]: ...
543
534
 
544
535
 
536
+ ### LIST ###
537
+
538
+
545
539
  class BaseDataList[Item](BaseDataSequence[Item]):
546
540
  """Provide an easy abc for custom list-like."""
547
541
 
548
542
  __slots__ = ()
549
543
 
550
- type Data[DataItem] = tuple[DataItem, ...]
544
+ type Data[DataItem] = list[DataItem]
551
545
  type Init[InitItem] = abc.Iterable[InitItem]
552
546
 
553
547
  @setdoc.basic
@@ -572,6 +566,10 @@ class BaseDataList[Item](BaseDataSequence[Item]):
572
566
  else:
573
567
  return NotImplemented
574
568
 
569
+ @abstractmethod
570
+ @setdoc.basic
571
+ def __fset__(self: Self, value: list[Item], /) -> None: ...
572
+
575
573
  @setdoc.basic
576
574
  def __ge__(self: Self, other: object, /) -> NotImplementedType | bool:
577
575
  if isinstance(other, BaseDataList):
@@ -603,9 +601,9 @@ class BaseDataList[Item](BaseDataSequence[Item]):
603
601
  else:
604
602
  return NotImplemented
605
603
 
606
- @abstractmethod
607
604
  @setdoc.basic
608
- def __init__(self: Self, data: Init[Item] = (), /) -> None: ...
605
+ def __init__(self: Self, data: Init[Item] = (), /) -> None:
606
+ self.__fset__(list(data))
609
607
 
610
608
  @setdoc.basic
611
609
  def __le__(self: Self, other: object, /) -> NotImplementedType | bool:
@@ -646,7 +644,7 @@ class FrozenDataList[Item](
646
644
 
647
645
  @setdoc.basic
648
646
  def __hash__(self: Self) -> int:
649
- return hash(self.__fget__())
647
+ return hash(tuple(self.__fget__()))
650
648
 
651
649
 
652
650
  class FrozenHoldList[Item](
@@ -659,16 +657,12 @@ class FrozenHoldList[Item](
659
657
 
660
658
  @setdoc.basic
661
659
  def __fget__(self: Self) -> FrozenHoldList.Data[Item]:
662
- return self._data
660
+ return list(self._data)
663
661
 
664
662
  @setdoc.basic
665
663
  def __fset__(self: Self, data: FrozenHoldList.Data[Item], /) -> None:
666
664
  self._data: FrozenHoldList.Data[Item] = data
667
665
 
668
- @setdoc.basic
669
- def __init__(self: Self, data: FrozenHoldList.Init[Item] = (), /) -> None:
670
- self.__fset__(tuple(data))
671
-
672
666
 
673
667
  class DataList[Item](
674
668
  BaseDataList[Item],
@@ -683,9 +677,9 @@ class DataList[Item](
683
677
  self: Self, other: SupportsIndex | Slice[SupportsIndex], /
684
678
  ) -> None:
685
679
  data: list[Item]
686
- data = list(self.__fget__())
680
+ data = self.__fget__()
687
681
  del data[other]
688
- self.__fset__(tuple(data))
682
+ self.__fset__(data)
689
683
 
690
684
  @abstractmethod
691
685
  @setdoc.basic
@@ -695,7 +689,7 @@ class DataList[Item](
695
689
  @setdoc.basic
696
690
  def __fset__(
697
691
  self: Self,
698
- value: DataList.Init[Item],
692
+ value: DataList.Data[Item],
699
693
  /,
700
694
  ) -> None: ...
701
695
 
@@ -704,14 +698,6 @@ class DataList[Item](
704
698
  self.__fset__(self.__fget__() * other)
705
699
  return self
706
700
 
707
- @setdoc.basic
708
- def __init__(
709
- self: Self,
710
- data: abc.Iterable[Item] = (),
711
- /,
712
- ) -> None:
713
- self.__fset__(tuple(data))
714
-
715
701
  @overload
716
702
  @setdoc.basic
717
703
  def __setitem__(
@@ -734,10 +720,10 @@ class DataList[Item](
734
720
  value: Item | abc.Iterable[Item],
735
721
  /,
736
722
  ) -> None:
737
- data: Any
738
- data = list(self.__fget__())
739
- data[key] = value
740
- self.__fset__(tuple(data))
723
+ data: list[Item]
724
+ data = self.__fget__()
725
+ data[key] = value # type: ignore[index, assignment]
726
+ self.__fset__(data)
741
727
 
742
728
  @setdoc.basic
743
729
  def copy(self: Self) -> Self:
@@ -746,16 +732,16 @@ class DataList[Item](
746
732
  @setdoc.basic
747
733
  def insert(self: Self, index: SupportsIndex, item: Item, /) -> None:
748
734
  data: list[Item]
749
- data = list(self.__fget__())
735
+ data = self.__fget__()
750
736
  data.insert(index, item)
751
- self.__fset__(tuple(data))
737
+ self.__fset__(data)
752
738
 
753
739
  @setdoc.basic
754
740
  def sort(self: Self, *, key: Any = None, reverse: bool = False) -> None:
755
741
  data: list[Item]
756
- data = list(self.__fget__())
742
+ data = self.__fget__()
757
743
  data.sort(key=key, reverse=reverse)
758
- self.__fset__(tuple(data))
744
+ self.__fset__(data)
759
745
 
760
746
 
761
747
  class HoldList[Item](
@@ -768,8 +754,8 @@ class HoldList[Item](
768
754
 
769
755
  @setdoc.basic
770
756
  def __fget__(self: Self) -> HoldList.Data[Item]:
771
- return self._data
757
+ return list(self._data)
772
758
 
773
759
  @setdoc.basic
774
- def __fset__(self: Self, value: abc.Iterable[Item], /) -> None:
775
- self._data: HoldList.Data[Item] = tuple(value)
760
+ def __fset__(self: Self, value: HoldList.Data[Item], /) -> None:
761
+ 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.dev5
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