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.
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/PKG-INFO +1 -1
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/pyproject.toml +1 -1
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold/__init__.py +106 -102
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/PKG-INFO +1 -1
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/SOURCES.txt +2 -2
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_abstractmethods.py +5 -9
- datahold-4.0.0.dev24/tests/test_name.py +81 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/testdata.toml +7 -31
- datahold-4.0.0.dev22/tests/test_prefix.py +0 -41
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/LICENSE.txt +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/MANIFEST.in +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/README.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v1.1.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v1.2.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.0.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.1.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.2.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v2.3.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v3.0.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/docs/v4.0.rst +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/run_tests.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/setup.cfg +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold/py.typed +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/dependency_links.txt +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/requires.txt +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/src/datahold.egg-info/top_level.txt +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_FrozenListSlot.py +0 -0
- /datahold-4.0.0.dev22/tests/test_MutableListHold.py → /datahold-4.0.0.dev24/tests/test_MutableListSlot.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_all.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_attributes.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_docs.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_generic.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_internal_comparison.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_issubclass.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_nested.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_sorted.py +0 -0
- {datahold-4.0.0.dev22 → datahold-4.0.0.dev24}/tests/test_variance.py +0 -0
|
@@ -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
|
-
|
|
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, /) ->
|
|
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[
|
|
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__(
|
|
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
|
-
|
|
308
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
@@ -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/
|
|
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.
|
|
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
|
|
24
|
+
for name in Lazy.lazy.datatypes.keys():
|
|
29
25
|
with self.subTest(datatype=name):
|
|
30
|
-
self._test(name,
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|