datahold 4.0.0.dev22__tar.gz → 4.0.0.dev24__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 (37) hide show
  1. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/PKG-INFO +1 -1
  2. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/pyproject.toml +1 -1
  3. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold/__init__.py +106 -102
  4. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/PKG-INFO +1 -1
  5. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/SOURCES.txt +2 -2
  6. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_abstractmethods.py +5 -9
  7. datahold-4.0.0.dev24/tests/test_name.py +81 -0
  8. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/testdata.toml +7 -31
  9. datahold-4.0.0.dev22/tests/test_prefix.py +0 -41
  10. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/LICENSE.txt +0 -0
  11. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/MANIFEST.in +0 -0
  12. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/README.rst +0 -0
  13. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v1.1.rst +0 -0
  14. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v1.2.rst +0 -0
  15. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.0.rst +0 -0
  16. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.1.rst +0 -0
  17. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.2.rst +0 -0
  18. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.3.rst +0 -0
  19. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v3.0.rst +0 -0
  20. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v4.0.rst +0 -0
  21. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/run_tests.py +0 -0
  22. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/setup.cfg +0 -0
  23. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold/py.typed +0 -0
  24. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/dependency_links.txt +0 -0
  25. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/requires.txt +0 -0
  26. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/top_level.txt +0 -0
  27. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_FrozenListSlot.py +0 -0
  28. /datahold-4.0.0.dev22/tests/test_MutableListHold.py → /datahold-4.0.0.dev24/tests/test_MutableListSlot.py +0 -0
  29. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_all.py +0 -0
  30. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_attributes.py +0 -0
  31. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_docs.py +0 -0
  32. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_generic.py +0 -0
  33. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_internal_comparison.py +0 -0
  34. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_issubclass.py +0 -0
  35. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_nested.py +0 -0
  36. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_sorted.py +0 -0
  37. {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_variance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev22
3
+ Version: 4.0.0.dev24
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
@@ -31,7 +31,7 @@ license-files = [
31
31
  name = "datahold"
32
32
  readme = "README.rst"
33
33
  requires-python = ">=3.11"
34
- version = "4.0.0.dev22"
34
+ version = "4.0.0.dev24"
35
35
 
36
36
  [project.urls]
37
37
  Download = "https://pypi.org/project/datahold/#files"
@@ -86,6 +86,15 @@ type Slice[Index] = slice[Optional[Index], Optional[Index], Optional[Index]]
86
86
  ### COLLECTION ###
87
87
 
88
88
 
89
+ class Collection_Frozen[Item](
90
+ abc.Sized,
91
+ abc.Iterable[Item],
92
+ Protocol,
93
+ ):
94
+ @setdoc.basic
95
+ def __contains__(self: Self, other: Never, /) -> bool: ...
96
+
97
+
89
98
  class Collection[Item](
90
99
  abc.Sized,
91
100
  abc.Iterable[Item],
@@ -93,14 +102,7 @@ class Collection[Item](
93
102
  ):
94
103
  """Provide abc for custom collection."""
95
104
 
96
- @setdoc.basic
97
- class __Frozen__[Item_](
98
- abc.Sized,
99
- abc.Iterable[Item_],
100
- Protocol,
101
- ):
102
- @setdoc.basic
103
- def __contains__(self: Self, other: Never, /) -> bool: ...
105
+ type __Frozen__[Item_] = Collection_Frozen[Item_]
104
106
 
105
107
  @setdoc.basic
106
108
  def __contains__(self: Self, other: object, /) -> bool:
@@ -111,10 +113,10 @@ class Collection[Item](
111
113
 
112
114
  @abstractmethod
113
115
  @setdoc.basic
114
- def __frozen__(self: Self, /) -> __Frozen__[Item]: ...
116
+ def __frozen__(self: Self, /) -> Collection_Frozen[Item]: ...
115
117
 
116
118
  @setdoc.basic
117
- def __iter__(self: Self) -> abc.Iterator[Item]:
119
+ def __iter__(self: Self, /) -> abc.Iterator[Item]:
118
120
  return iter(self.__frozen__())
119
121
 
120
122
  @setdoc.basic
@@ -131,20 +133,20 @@ class Set[Item: abc.Hashable](Collection[Item], abc.Set[Item]):
131
133
  __slots__ = ()
132
134
 
133
135
 
136
+ class MutableSet_Mutable[Item: abc.Hashable](Protocol):
137
+ @setdoc.basic
138
+ def add(self: Self, item: Item, /) -> object: ...
139
+ @setdoc.basic
140
+ def discard(self: Self, item: abc.Hashable, /) -> object: ...
134
141
  class MutableSet[Item: abc.Hashable](Set[Item], abc.MutableSet[Item]):
135
142
  """Provide abc for custom mutable set."""
136
143
 
137
144
  __slots__ = ()
145
+ type __Mutable__[Item_] = MutableSet_Mutable[Item_]
138
146
 
139
- @setdoc.basic
140
- class __Mutable__[Item_: abc.Hashable](Protocol):
141
- @setdoc.basic
142
- def add(self: Self, item: Item_, /) -> object: ...
143
- @setdoc.basic
144
- def discard(self: Self, item: abc.Hashable, /) -> object: ...
145
147
  @abstractmethod
146
148
  @setdoc.basic
147
- def __mutate__(self: Self) -> ContextManager[__Mutable__[Item]]: ...
149
+ def __mutate__(self: Self) -> ContextManager[MutableSet_Mutable[Item]]: ...
148
150
  @setdoc.basic
149
151
  def add(self: Self, item: Item, /) -> None:
150
152
  with self.__mutate__() as mutable:
@@ -204,7 +206,7 @@ class FrozenSetLike[Item: abc.Hashable](SetLike[Item], abc.Hashable):
204
206
  __slots__ = ()
205
207
 
206
208
  @setdoc.basic
207
- def __hash__(self: Self) -> int:
209
+ def __hash__(self: Self, /) -> int:
208
210
  return hash(self.__frozen__())
209
211
 
210
212
 
@@ -219,7 +221,6 @@ class MutableSetLike[Item: abc.Hashable](SetLike[Item], MutableSet[Item]):
219
221
  with self.__mutate__() as mutable:
220
222
  return frozenset(mutable)
221
223
 
222
- @abstractmethod
223
224
  @setdoc.basic
224
225
  def __init__(self: Self, data: abc.Iterable[Item] = (), /) -> None:
225
226
  with self.__mutate__() as mutable:
@@ -266,7 +267,7 @@ class SetSlot[Item: abc.Hashable](SetLike[Item]):
266
267
  _slot: SetSlot.__Frozen__[Item]
267
268
 
268
269
  @setdoc.basic
269
- def __frozen__(self: Self) -> SetSlot.__Frozen__[Item]:
270
+ def __frozen__(self: Self, /) -> SetSlot.__Frozen__[Item]:
270
271
  return self._slot
271
272
 
272
273
 
@@ -287,7 +288,11 @@ class MutableSetSlot[Item](SetSlot[Item], MutableSetLike[Item]):
287
288
 
288
289
  @contextmanager
289
290
  @setdoc.basic
290
- def __mutate__(self: Self, /) -> abc.Generator[set[Item], None, None]:
291
+ def __mutate__(
292
+ self: Self,
293
+ /,
294
+ ) -> abc.Generator[MutableSetSlot.__Mutable__[Item], None, None]:
295
+ slot: MutableSetSlot.__Mutable__[Item]
291
296
  slot = set(getattr(self, "_slot", ()))
292
297
  yield slot
293
298
  self._slot = frozenset(slot)
@@ -296,6 +301,9 @@ class MutableSetSlot[Item](SetSlot[Item], MutableSetLike[Item]):
296
301
  ### MAPPING ###
297
302
 
298
303
 
304
+ class Mapping_Frozen[Key, Value](Collection_Frozen[Key], Protocol):
305
+ @setdoc.basic
306
+ def __getitem__(self: Self, key: abc.Hashable, /) -> Value: ...
299
307
  class Mapping[Key: abc.Hashable, Value](
300
308
  Collection[Key],
301
309
  abc.Mapping[Key, Value],
@@ -304,12 +312,8 @@ class Mapping[Key: abc.Hashable, Value](
304
312
 
305
313
  __slots__ = ()
306
314
 
307
- @setdoc.basic
308
- class __Frozen__[FrozenKey, FrozenValue](
309
- Collection.__Frozen__[FrozenKey], Protocol
310
- ):
311
- @setdoc.basic
312
- def __getitem__(self: Self, key: abc.Hashable, /) -> FrozenValue: ...
315
+ type __Frozen__[Key_, Value_] = Mapping_Frozen[Key_, Value_]
316
+
313
317
  @abstractmethod
314
318
  @setdoc.basic
315
319
  def __frozen__(self: Self, /) -> __Frozen__[Key, Value]: ...
@@ -318,6 +322,15 @@ class Mapping[Key: abc.Hashable, Value](
318
322
  return self.__frozen__()[key]
319
323
 
320
324
 
325
+ class MutableMapping_Mutable[Key_, Value_](
326
+ Protocol,
327
+ ):
328
+ @setdoc.basic
329
+ def __delitem__(self: Self, key: Key_ | str, /) -> object: ...
330
+ @setdoc.basic
331
+ def __setitem__(
332
+ self: Self, key: Key_ | str, value: Optional[Value_], /
333
+ ) -> object: ...
321
334
  class MutableMapping[Key: abc.Hashable, Value](
322
335
  Mapping[Key, Value],
323
336
  abc.MutableMapping[Key | str, Optional[Value]],
@@ -326,16 +339,7 @@ class MutableMapping[Key: abc.Hashable, Value](
326
339
 
327
340
  __slots__ = ()
328
341
 
329
- @setdoc.basic
330
- class __Mutable__[Key_, Value_](
331
- Protocol,
332
- ):
333
- @setdoc.basic
334
- def __delitem__(self: Self, key: Key_ | str, /) -> object: ...
335
- @setdoc.basic
336
- def __setitem__(
337
- self: Self, key: Key_ | str, value: Optional[Value_], /
338
- ) -> object: ...
342
+ type __Mutable__[Key_, Value_] = MutableMapping_Mutable[Key_, Value_]
339
343
 
340
344
  @setdoc.basic
341
345
  def __delitem__(self: Self, key: Key | str, /) -> None:
@@ -349,7 +353,8 @@ class MutableMapping[Key: abc.Hashable, Value](
349
353
  def __setitem__(
350
354
  self: Self, key: Key | str, value: Optional[Value], /
351
355
  ) -> None:
352
- self[key] = value
356
+ with self.__mutate__() as mutable:
357
+ mutable[key] = value
353
358
 
354
359
 
355
360
  ### DICT-LIKE ###
@@ -396,7 +401,7 @@ class DictLike[Key: abc.Hashable, Value](
396
401
  def fromkeys(
397
402
  cls: type[Self],
398
403
  iterable: abc.Iterable[Key | str],
399
- value: Optional[Value],
404
+ value: Optional[Value] = None,
400
405
  /,
401
406
  ) -> Self:
402
407
  return cls(dict.fromkeys(iterable, value))
@@ -520,30 +525,28 @@ class MutableDictSlot[Key: abc.Hashable, Value](
520
525
  ### SEQUENCE ###
521
526
 
522
527
 
528
+ class Sequence_Frozen[Item](
529
+ Collection_Frozen[Item],
530
+ Protocol,
531
+ ):
532
+ @overload
533
+ @setdoc.basic
534
+ def __getitem__(self: Self, key: int, /) -> Item: ...
535
+ @overload
536
+ @setdoc.basic
537
+ def __getitem__(self: Self, key: Slice[int], /) -> abc.Sequence[Item]: ...
538
+ @setdoc.basic
539
+ def __getitem__(
540
+ self: Self,
541
+ key: int | Slice[int],
542
+ /,
543
+ ) -> Item | abc.Sequence[Item]: ...
523
544
  class Sequence[Item](Collection[Item], abc.Sequence[Item]):
524
545
  """Provide abc for customized sequence."""
525
546
 
526
547
  __slots__ = ()
548
+ type __Frozen__[Item_] = Sequence_Frozen[Item_]
527
549
 
528
- @setdoc.basic
529
- class __Frozen__[Item_](
530
- Collection.__Frozen__[Item_],
531
- Protocol,
532
- ):
533
- @overload
534
- @setdoc.basic
535
- def __getitem__(self: Self, key: int, /) -> Item_: ...
536
- @overload
537
- @setdoc.basic
538
- def __getitem__(
539
- self: Self, key: Slice[int], /
540
- ) -> abc.Sequence[Item_]: ...
541
- @setdoc.basic
542
- def __getitem__(
543
- self: Self,
544
- key: int | Slice[int],
545
- /,
546
- ) -> Item_ | abc.Sequence[Item_]: ...
547
550
  @abstractmethod
548
551
  @setdoc.basic
549
552
  def __frozen__(self: Self, /) -> __Frozen__[Item]: ...
@@ -560,54 +563,55 @@ class Sequence[Item](Collection[Item], abc.Sequence[Item]):
560
563
  return self.__frozen__()[key]
561
564
 
562
565
 
566
+ class MutableSequence_Mutable[Item](Protocol):
567
+ @overload
568
+ @setdoc.basic
569
+ def __delitem__(self: Self, key: SupportsIndex, /) -> None: ...
570
+ @overload
571
+ @setdoc.basic
572
+ def __delitem__(self: Self, key: Slice[SupportsIndex], /) -> None: ...
573
+ @setdoc.basic
574
+ def __delitem__(
575
+ self: Self, key: SupportsIndex | Slice[SupportsIndex], /
576
+ ) -> None: ...
577
+ @overload
578
+ @setdoc.basic
579
+ def __getitem__(self: Self, key: int, /) -> Item: ...
580
+ @overload
581
+ @setdoc.basic
582
+ def __getitem__(
583
+ self: Self, key: Slice[int], /
584
+ ) -> abc.MutableSequence[Item]: ...
585
+ @setdoc.basic
586
+ def __getitem__(
587
+ self: Self,
588
+ key: int | Slice[int],
589
+ /,
590
+ ) -> Item | abc.MutableSequence[Item]: ...
591
+ @overload
592
+ @setdoc.basic
593
+ def __setitem__(self: Self, key: int, value: Item, /) -> None: ...
594
+ @overload
595
+ @setdoc.basic
596
+ def __setitem__(
597
+ self: Self, key: Slice[int], value: abc.Iterable[Item], /
598
+ ) -> None: ...
599
+ @setdoc.basic
600
+ def __setitem__(
601
+ self: Self,
602
+ key: int | Slice[int],
603
+ value: Item | abc.Iterable[Item],
604
+ /,
605
+ ) -> None: ...
606
+ @setdoc.basic
607
+ def insert(self: Self, index: int, item: Item, /) -> None: ...
608
+
609
+
563
610
  class MutableSequence[Item](Sequence[Item], abc.MutableSequence[Item]):
564
611
  """Provide abc for custom mutable sequence."""
565
612
 
566
613
  __slots__ = ()
567
-
568
- @setdoc.basic
569
- class __Mutable__[Item_](Protocol):
570
- @overload
571
- @setdoc.basic
572
- def __delitem__(self: Self, key: SupportsIndex, /) -> None: ...
573
- @overload
574
- @setdoc.basic
575
- def __delitem__(self: Self, key: Slice[SupportsIndex], /) -> None: ...
576
- @setdoc.basic
577
- def __delitem__(
578
- self: Self, key: SupportsIndex | Slice[SupportsIndex], /
579
- ) -> None: ...
580
- @overload
581
- @setdoc.basic
582
- def __getitem__(self: Self, key: int, /) -> Item_: ...
583
- @overload
584
- @setdoc.basic
585
- def __getitem__(
586
- self: Self, key: Slice[int], /
587
- ) -> abc.MutableSequence[Item_]: ...
588
- @setdoc.basic
589
- def __getitem__(
590
- self: Self,
591
- key: int | Slice[int],
592
- /,
593
- ) -> Item_ | abc.MutableSequence[Item_]: ...
594
- @overload
595
- @setdoc.basic
596
- def __setitem__(self: Self, key: int, value: Item_, /) -> None: ...
597
- @overload
598
- @setdoc.basic
599
- def __setitem__(
600
- self: Self, key: Slice[int], value: abc.Iterable[Item_], /
601
- ) -> None: ...
602
- @setdoc.basic
603
- def __setitem__(
604
- self: Self,
605
- key: int | Slice[int],
606
- value: Item_ | abc.Iterable[Item_],
607
- /,
608
- ) -> None: ...
609
- @setdoc.basic
610
- def insert(self: Self, index: int, item: Item_, /) -> None: ...
614
+ type __Mutable__[Item_] = MutableSequence_Mutable[Item_]
611
615
 
612
616
  @overload
613
617
  @setdoc.basic
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datahold
3
- Version: 4.0.0.dev22
3
+ Version: 4.0.0.dev24
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
@@ -20,7 +20,7 @@ src/datahold.egg-info/dependency_links.txt
20
20
  src/datahold.egg-info/requires.txt
21
21
  src/datahold.egg-info/top_level.txt
22
22
  tests/test_FrozenListSlot.py
23
- tests/test_MutableListHold.py
23
+ tests/test_MutableListSlot.py
24
24
  tests/test_abstractmethods.py
25
25
  tests/test_all.py
26
26
  tests/test_attributes.py
@@ -28,8 +28,8 @@ tests/test_docs.py
28
28
  tests/test_generic.py
29
29
  tests/test_internal_comparison.py
30
30
  tests/test_issubclass.py
31
+ tests/test_name.py
31
32
  tests/test_nested.py
32
- tests/test_prefix.py
33
33
  tests/test_sorted.py
34
34
  tests/test_variance.py
35
35
  tests/testdata.toml
@@ -12,22 +12,18 @@ import datahold
12
12
 
13
13
 
14
14
  class TestAbstractmethods(unittest.TestCase):
15
- def _test(
16
- self: Self, name: str, abstractmethods: Optional[list[str]] = None, /
17
- ) -> None:
15
+ def _test(self: Self, name: str, abstractmethods: set[str], /) -> None:
18
16
  datatype: Any
19
- if abstractmethods is None:
20
- return
21
17
  datatype = getattr(datahold, name)
22
- self.assertSetEqual(datatype.__abstractmethods__, set(abstractmethods))
18
+ self.assertLessEqual(len(datatype.__abstractmethods__), 2)
19
+ self.assertSetEqual(datatype.__abstractmethods__, abstractmethods)
23
20
  self.assertEqual(ins.isabstract(datatype), bool(abstractmethods))
24
21
 
25
22
  def test_abstractmethods(self: Self, /) -> None:
26
- data: Any
27
23
  name: Any
28
- for name, data in Lazy.lazy.datatypes.items():
24
+ for name in Lazy.lazy.datatypes.keys():
29
25
  with self.subTest(datatype=name):
30
- self._test(name, data.get("abstractmethods"))
26
+ self._test(name, Lazy.get_abstractmethods(name))
31
27
 
32
28
 
33
29
  if __name__ == "__main__":
@@ -0,0 +1,81 @@
1
+ from __future__ import annotations
2
+
3
+ __all__: list[str] = ["TestName"]
4
+
5
+ import unittest
6
+ from collections import abc
7
+ from typing import Self
8
+
9
+ from Lazy import Lazy
10
+
11
+ import datahold
12
+
13
+
14
+ class TestName(unittest.TestCase):
15
+
16
+ def _test_name(self: Self, name: str, /) -> None:
17
+ prefix: str
18
+ suffix: str
19
+ if name.startswith("Frozen"):
20
+ prefix = "Frozen"
21
+ elif name.startswith("Mutable"):
22
+ prefix = "Mutable"
23
+ else:
24
+ prefix = ""
25
+ if name.endswith("Like"):
26
+ suffix = "Like"
27
+ elif name.endswith("Slot"):
28
+ suffix = "Slot"
29
+ else:
30
+ suffix = ""
31
+ # all
32
+ datatype = getattr(datahold, name)
33
+ self.assertEqual(datatype.__name__, name)
34
+ self.assertTrue(hasattr(datatype, "__Frozen__"))
35
+ self.assertTrue(hasattr(datatype, "__frozen__"))
36
+ self.assertTrue(issubclass(datatype, datahold.Collection))
37
+ # frozen
38
+ if prefix == "Frozen":
39
+ self.assertIsNot(datatype.__hash__, object.__hash__)
40
+ self.assertTrue(issubclass(datatype, abc.Hashable))
41
+ self.assertFalse(hasattr(datatype, "__Mutable__"))
42
+ self.assertFalse(hasattr(datatype, "__mutate__"))
43
+ self.assertTrue(
44
+ issubclass(datatype, Lazy.get_import("datahold." + name[6:]))
45
+ )
46
+ # mutable
47
+ if prefix == "Mutable":
48
+ self.assertIn(datatype.__hash__, [None, object.__hash__])
49
+ self.assertTrue(hasattr(datatype, "__Mutable__"))
50
+ self.assertTrue(hasattr(datatype, "__mutate__"))
51
+ self.assertTrue(
52
+ issubclass(datatype, Lazy.get_import("datahold." + name[7:]))
53
+ )
54
+ # no prefix
55
+ if prefix == "":
56
+ self.assertIn(datatype.__hash__, [None, object.__hash__])
57
+ self.assertFalse(hasattr(datatype, "__Mutable__"))
58
+ self.assertFalse(hasattr(datatype, "__mutate__"))
59
+ # like
60
+ if suffix == "Like":
61
+ self.assertTrue(hasattr(datatype, "__init__"))
62
+ # slot
63
+ if suffix == "Slot":
64
+ self.assertTrue(hasattr(datatype, "__init__"))
65
+ self.assertTrue(
66
+ issubclass(
67
+ datatype, Lazy.get_import("datahold." + name[:-4] + "Like")
68
+ )
69
+ )
70
+ # no suffix
71
+ if suffix == "":
72
+ self.assertIs(datatype.__init__, object.__init__)
73
+
74
+ def test_name(self: Self, /) -> None:
75
+ for name in Lazy.lazy.datatypes.keys():
76
+ with self.subTest(datatype=name):
77
+ self._test_name(name)
78
+
79
+
80
+ if __name__ == "__main__":
81
+ unittest.main(verbosity=2)
@@ -1,5 +1,8 @@
1
1
  [datatypes.Collection]
2
2
 
3
+ [datatypes.DictLike.attributes]
4
+ __or__ = "datahold.DictLike"
5
+
3
6
  [datatypes.DictLike.issubclass]
4
7
  "collections.abc.Mapping" = true
5
8
  "datahold.Mapping" = true
@@ -16,12 +19,6 @@
16
19
  "collections.abc.Hashable" = true
17
20
  "datahold.FrozenDictLike" = true
18
21
 
19
- [datatypes.FrozenListLike]
20
- abstractmethods = [
21
- "__frozen__",
22
- "__init__",
23
- ]
24
-
25
22
  [datatypes.FrozenListLike.attributes]
26
23
  __frozen__ = "datahold.ListLike"
27
24
  __init__ = "datahold.ListLike"
@@ -40,9 +37,6 @@ __Mutable__ = ""
40
37
  [datatypes.FrozenListLike.varia]
41
38
  generic = 1
42
39
 
43
- [datatypes.FrozenListSlot]
44
- abstractmethods = []
45
-
46
40
  [datatypes.FrozenListSlot.TestInternalComparsion.ge.test_greater_value]
47
41
  a = "_1_3"
48
42
  b = "_1_2"
@@ -166,12 +160,6 @@ generic = 1
166
160
  "collections.abc.Set" = true
167
161
  "datahold.Collection" = true
168
162
 
169
- [datatypes.ListLike]
170
- abstractmethods = [
171
- "__frozen__",
172
- "__init__",
173
- ]
174
-
175
163
  [datatypes.ListLike.attributes]
176
164
  __frozen__ = "datahold.ListLike"
177
165
  __init__ = "datahold.ListLike"
@@ -194,11 +182,6 @@ __Mutable__ = ""
194
182
  [datatypes.ListLike.varia]
195
183
  generic = 1
196
184
 
197
- [datatypes.ListSlot]
198
- abstractmethods = [
199
- "__init__",
200
- ]
201
-
202
185
  [datatypes.ListSlot.nested]
203
186
  __Frozen__ = "builtins.tuple"
204
187
  __Mutable__ = ""
@@ -210,6 +193,10 @@ generic = 1
210
193
  "collections.abc.Mapping" = true
211
194
  "datahold.Collection" = true
212
195
 
196
+ [datatypes.MutableDictLike.attributes]
197
+ __ior__ = "datahold.MutableDictLike"
198
+ __or__ = "datahold.DictLike"
199
+
213
200
  [datatypes.MutableDictLike.issubclass]
214
201
  "collections.abc.Mapping" = true
215
202
  "collections.abc.MutableMapping" = true
@@ -221,11 +208,6 @@ generic = 1
221
208
  "datahold.MutableDictLike" = true
222
209
  "datahold.MutableMapping" = true
223
210
 
224
- [datatypes.MutableListLike]
225
- abstractmethods = [
226
- "__mutate__",
227
- ]
228
-
229
211
  [datatypes.MutableListLike.attributes]
230
212
  __add__ = "datahold.MutableListLike"
231
213
  __frozen__ = "datahold.MutableListLike"
@@ -259,9 +241,6 @@ __hash__ = ""
259
241
  [datatypes.MutableListLike.varia]
260
242
  generic = 1
261
243
 
262
- [datatypes.MutableListSlot]
263
- abstractmethods = []
264
-
265
244
  [datatypes.MutableListSlot.issubclass]
266
245
  "builtins.list" = false
267
246
  "datahold.ListLike" = true
@@ -312,9 +291,6 @@ sort = ""
312
291
  "datahold.SetSlot" = true
313
292
 
314
293
  [datatypes.Sequence]
315
- abstractmethods = [
316
- "__frozen__",
317
- ]
318
294
 
319
295
  [datatypes.Set.issubclass]
320
296
  "collections.abc.Set" = true
@@ -1,41 +0,0 @@
1
- from __future__ import annotations
2
-
3
- __all__: list[str] = ["TestPrefix"]
4
-
5
- import unittest
6
- from collections import abc
7
- from typing import Self
8
-
9
- from Lazy import Lazy
10
-
11
- import datahold
12
-
13
-
14
- class TestPrefix(unittest.TestCase):
15
- def _test_prefix(self: Self, name: str, /) -> None:
16
- datatype = getattr(datahold, name)
17
- self.assertEqual(datatype.__name__, name)
18
- self.assertTrue(hasattr(datatype, "__Frozen__"))
19
- self.assertTrue(hasattr(datatype, "__frozen__"))
20
- if name.startswith("Frozen"):
21
- self.assertIsNot(datatype.__hash__, object.__hash__)
22
- self.assertTrue(issubclass(datatype, abc.Hashable))
23
- self.assertFalse(hasattr(datatype, "__Mutable__"))
24
- self.assertFalse(hasattr(datatype, "__mutate__"))
25
- return
26
- self.assertIn(datatype.__hash__, [None, object.__hash__])
27
- if name.startswith("Mutable"):
28
- self.assertTrue(hasattr(datatype, "__Mutable__"))
29
- self.assertTrue(hasattr(datatype, "__mutate__"))
30
- return
31
- self.assertFalse(hasattr(datatype, "__Mutable__"))
32
- self.assertFalse(hasattr(datatype, "__mutate__"))
33
-
34
- def test_prefix(self: Self, /) -> None:
35
- for name in Lazy.lazy.datatypes.keys():
36
- with self.subTest(datatype=name):
37
- self._test_prefix(name)
38
-
39
-
40
- if __name__ == "__main__":
41
- unittest.main(verbosity=2)
File without changes