datahold 4.0.0.dev20__tar.gz → 4.0.0.dev21__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.dev20 → datahold-4.0.0.dev21}/PKG-INFO +1 -1
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/pyproject.toml +1 -1
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold/__init__.py +181 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold.egg-info/PKG-INFO +1 -1
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/testdata.toml +48 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/LICENSE.txt +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/MANIFEST.in +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/README.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v1.1.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v1.2.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v2.0.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v2.1.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v2.2.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v2.3.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v3.0.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/docs/v4.0.rst +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/run_tests.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/setup.cfg +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold/py.typed +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold.egg-info/SOURCES.txt +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold.egg-info/dependency_links.txt +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold.egg-info/requires.txt +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/src/datahold.egg-info/top_level.txt +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_FrozenListSlot.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_MutableListHold.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_abstractmethods.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_all.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_attributes.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_docs.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_generic.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_internal_comparison.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_issubclass.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_nested.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_prefix.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_sorted.py +0 -0
- {datahold-4.0.0.dev20 → datahold-4.0.0.dev21}/tests/test_variance.py +0 -0
|
@@ -6,12 +6,20 @@ __all__: list[str] = [
|
|
|
6
6
|
"Collection",
|
|
7
7
|
"FrozenListLike",
|
|
8
8
|
"FrozenListSlot",
|
|
9
|
+
"FrozenSetLike",
|
|
10
|
+
"FrozenSetSlot",
|
|
9
11
|
"ListLike",
|
|
10
12
|
"ListSlot",
|
|
11
13
|
"MutableListLike",
|
|
12
14
|
"MutableListSlot",
|
|
13
15
|
"MutableSequence",
|
|
16
|
+
"MutableSet",
|
|
17
|
+
"MutableSetLike",
|
|
18
|
+
"MutableSetSlot",
|
|
14
19
|
"Sequence",
|
|
20
|
+
"Set",
|
|
21
|
+
"SetLike",
|
|
22
|
+
"SetSlot",
|
|
15
23
|
]
|
|
16
24
|
|
|
17
25
|
from abc import abstractmethod
|
|
@@ -91,6 +99,179 @@ class Collection[Item](
|
|
|
91
99
|
return len(self.__frozen__())
|
|
92
100
|
|
|
93
101
|
|
|
102
|
+
### SET ###
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class Set[Item: abc.Hashable](Collection[Item], abc.Set[Item]):
|
|
106
|
+
"""Provide abc for custom set."""
|
|
107
|
+
|
|
108
|
+
__slots__ = ()
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class MutableSet[Item: abc.Hashable](Set[Item], abc.MutableSet[Item]):
|
|
112
|
+
"""Provide abc for custom mutable set."""
|
|
113
|
+
|
|
114
|
+
__slots__ = ()
|
|
115
|
+
|
|
116
|
+
@setdoc.basic
|
|
117
|
+
class __Mutable__[MutableItem: abc.Hashable](Protocol):
|
|
118
|
+
@setdoc.basic
|
|
119
|
+
def add(self: Self, item: MutableItem, /) -> object: ...
|
|
120
|
+
@setdoc.basic
|
|
121
|
+
def discard(self: Self, item: abc.Hashable, /) -> object: ...
|
|
122
|
+
@abstractmethod
|
|
123
|
+
@setdoc.basic
|
|
124
|
+
def __mutate__(self: Self) -> ContextManager[__Mutable__[Item]]: ...
|
|
125
|
+
@setdoc.basic
|
|
126
|
+
def add(self: Self, item: Item, /) -> None:
|
|
127
|
+
with self.__mutate__() as mutable:
|
|
128
|
+
mutable.add(item)
|
|
129
|
+
|
|
130
|
+
@setdoc.basic
|
|
131
|
+
def discard(self: Self, item: abc.Hashable, /) -> None:
|
|
132
|
+
with self.__mutate__() as mutable:
|
|
133
|
+
mutable.discard(item)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
### SET-LIKE ###
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class SetLike[Item: abc.Hashable](Set[Item]):
|
|
140
|
+
"""Provide abc for custom set-like."""
|
|
141
|
+
|
|
142
|
+
__slots__ = ()
|
|
143
|
+
type __Frozen__[FrozenItem] = frozenset[FrozenItem]
|
|
144
|
+
type Init[FrozenItem] = abc.Iterable[FrozenItem]
|
|
145
|
+
|
|
146
|
+
@abstractmethod
|
|
147
|
+
@setdoc.basic
|
|
148
|
+
def __frozen__(self: Self, /) -> __Frozen__[Item]: ...
|
|
149
|
+
@abstractmethod
|
|
150
|
+
@setdoc.basic
|
|
151
|
+
def __init__(self: Self, data: Init[Item] = (), /) -> None: ...
|
|
152
|
+
@setdoc.basic
|
|
153
|
+
def difference(self: Self, /, *others: abc.Iterable[abc.Hashable]) -> Self:
|
|
154
|
+
return type(self)(self.__frozen__().difference(*others))
|
|
155
|
+
|
|
156
|
+
@setdoc.basic
|
|
157
|
+
def intersection(
|
|
158
|
+
self: Self, /, *others: abc.Iterable[abc.Hashable]
|
|
159
|
+
) -> Self:
|
|
160
|
+
return type(self)(self.__frozen__().intersection(*others))
|
|
161
|
+
|
|
162
|
+
@setdoc.basic
|
|
163
|
+
def issubset(self: Self, other: abc.Iterable[abc.Hashable], /) -> Self:
|
|
164
|
+
return type(self)(self.__frozen__().issubset(other)) # type: ignore
|
|
165
|
+
|
|
166
|
+
@setdoc.basic
|
|
167
|
+
def issuperset(self: Self, other: abc.Iterable[abc.Hashable], /) -> Self:
|
|
168
|
+
return type(self)(self.__frozen__().issuperset(other)) # type: ignore
|
|
169
|
+
|
|
170
|
+
@setdoc.basic
|
|
171
|
+
def symmetric_difference(self: Self, other: abc.Iterable[Item], /) -> Self:
|
|
172
|
+
return type(self)(self.__frozen__().symmetric_difference(other))
|
|
173
|
+
|
|
174
|
+
@setdoc.basic
|
|
175
|
+
def union(self: Self, /, *others: abc.Iterable[Item]) -> Self:
|
|
176
|
+
return type(self)(self.__frozen__().union(others)) # type: ignore
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class FrozenSetLike[Item: abc.Hashable](SetLike[Item], abc.Hashable):
|
|
180
|
+
"""Provide abc for custom frozen set-like."""
|
|
181
|
+
|
|
182
|
+
__slots__ = ()
|
|
183
|
+
|
|
184
|
+
@setdoc.basic
|
|
185
|
+
def __hash__(self: Self) -> int:
|
|
186
|
+
return hash(self.__frozen__())
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
class MutableSetLike[Item: abc.Hashable](SetLike[Item], MutableSet[Item]):
|
|
190
|
+
"""Provide abc for custom mutable set-like."""
|
|
191
|
+
|
|
192
|
+
__slots__ = ()
|
|
193
|
+
|
|
194
|
+
type __Mutable__[MutableItem] = set[MutableItem]
|
|
195
|
+
|
|
196
|
+
@setdoc.basic
|
|
197
|
+
def __frozen__(self: Self, /) -> MutableSetLike.__Frozen__[Item]:
|
|
198
|
+
with self.__mutate__() as mutable:
|
|
199
|
+
return frozenset(mutable)
|
|
200
|
+
|
|
201
|
+
@abstractmethod
|
|
202
|
+
@setdoc.basic
|
|
203
|
+
def __init__(self: Self, data: MutableSetLike.Init[Item] = (), /) -> None:
|
|
204
|
+
with self.__mutate__() as mutable:
|
|
205
|
+
mutable.update(data)
|
|
206
|
+
|
|
207
|
+
@abstractmethod
|
|
208
|
+
@setdoc.basic
|
|
209
|
+
def __mutate__(self: Self) -> ContextManager[__Mutable__[Item]]: ...
|
|
210
|
+
@setdoc.basic
|
|
211
|
+
def difference_update(
|
|
212
|
+
self: Self, /, *others: abc.Iterable[abc.Hashable]
|
|
213
|
+
) -> None:
|
|
214
|
+
with self.__mutate__() as mutable:
|
|
215
|
+
mutable.difference_update(*others)
|
|
216
|
+
|
|
217
|
+
@setdoc.basic
|
|
218
|
+
def intersection_update(
|
|
219
|
+
self: Self, /, *others: abc.Iterable[abc.Hashable]
|
|
220
|
+
) -> None:
|
|
221
|
+
with self.__mutate__() as mutable:
|
|
222
|
+
mutable.intersection_update(*others)
|
|
223
|
+
|
|
224
|
+
@setdoc.basic
|
|
225
|
+
def symmetric_difference_update(
|
|
226
|
+
self: Self, other: abc.Iterable[Item], /
|
|
227
|
+
) -> None:
|
|
228
|
+
with self.__mutate__() as mutable:
|
|
229
|
+
mutable.symmetric_difference_update(other)
|
|
230
|
+
|
|
231
|
+
@setdoc.basic
|
|
232
|
+
def update(self: Self, /, *others: abc.Iterable[Item]) -> None:
|
|
233
|
+
with self.__mutate__() as mutable:
|
|
234
|
+
mutable.update(*others)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
### SET-SLOT ###
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class SetSlot[Item: abc.Hashable](SetLike[Item]):
|
|
241
|
+
"""Provide slotted set-like."""
|
|
242
|
+
|
|
243
|
+
__slots__ = ("_slot",)
|
|
244
|
+
|
|
245
|
+
_slot: SetSlot.__Frozen__[Item]
|
|
246
|
+
|
|
247
|
+
@setdoc.basic
|
|
248
|
+
def __frozen__(self: Self) -> SetSlot.__Frozen__[Item]:
|
|
249
|
+
return self._slot
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
class FrozenSetSlot[Item](SetSlot[Item], FrozenSetLike[Item]):
|
|
253
|
+
"""Provide slotted frozen set-like."""
|
|
254
|
+
|
|
255
|
+
__slots__ = ()
|
|
256
|
+
|
|
257
|
+
@setdoc.basic
|
|
258
|
+
def __init__(self: Self, data: FrozenSetSlot.Init[Item] = (), /) -> None:
|
|
259
|
+
self._slot = frozenset(data)
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class MutableSetSlot[Item](SetSlot[Item], MutableSetLike[Item]):
|
|
263
|
+
"""Provide slotted mutable set-like."""
|
|
264
|
+
|
|
265
|
+
__slots__ = ()
|
|
266
|
+
|
|
267
|
+
@contextmanager
|
|
268
|
+
@setdoc.basic
|
|
269
|
+
def __mutate__(self: Self, /) -> abc.Generator[set[Item], None, None]:
|
|
270
|
+
slot = set(getattr(self, "_slot", ()))
|
|
271
|
+
yield slot
|
|
272
|
+
self._slot = frozenset(slot)
|
|
273
|
+
|
|
274
|
+
|
|
94
275
|
### SEQUENCE ###
|
|
95
276
|
|
|
96
277
|
|
|
@@ -140,6 +140,18 @@ __Mutable__ = ""
|
|
|
140
140
|
[datatypes.FrozenListSlot.varia]
|
|
141
141
|
generic = 1
|
|
142
142
|
|
|
143
|
+
[datatypes.FrozenSetLike.issubclass]
|
|
144
|
+
"collections.abc.Hashable" = true
|
|
145
|
+
"collections.abc.Set" = true
|
|
146
|
+
"datahold.Collection" = true
|
|
147
|
+
"datahold.SetLike" = true
|
|
148
|
+
|
|
149
|
+
[datatypes.FrozenSetSlot.issubclass]
|
|
150
|
+
"collections.abc.Collection" = true
|
|
151
|
+
"collections.abc.MutableSet" = false
|
|
152
|
+
"collections.abc.Set" = true
|
|
153
|
+
"datahold.Collection" = true
|
|
154
|
+
|
|
143
155
|
[datatypes.ListLike]
|
|
144
156
|
abstractmethods = [
|
|
145
157
|
"__frozen__",
|
|
@@ -249,9 +261,45 @@ __setitem__ = "datahold.MutableSequence"
|
|
|
249
261
|
insert = "datahold.MutableSequence"
|
|
250
262
|
sort = ""
|
|
251
263
|
|
|
264
|
+
[datatypes.MutableSet.issubclass]
|
|
265
|
+
"collections.abc.MutableSet" = true
|
|
266
|
+
"collections.abc.Set" = true
|
|
267
|
+
"datahold.Collection" = true
|
|
268
|
+
|
|
269
|
+
[datatypes.MutableSetLike.issubclass]
|
|
270
|
+
"collections.abc.Hashable" = false
|
|
271
|
+
"collections.abc.MutableSet" = true
|
|
272
|
+
"collections.abc.Set" = true
|
|
273
|
+
"datahold.Collection" = true
|
|
274
|
+
"datahold.MutableSet" = true
|
|
275
|
+
"datahold.SetLike" = true
|
|
276
|
+
|
|
277
|
+
[datatypes.MutableSetSlot.issubclass]
|
|
278
|
+
"collections.abc.MutableSet" = true
|
|
279
|
+
"collections.abc.Set" = true
|
|
280
|
+
"datahold.Collection" = true
|
|
281
|
+
"datahold.MutableSet" = true
|
|
282
|
+
"datahold.MutableSetLike" = true
|
|
283
|
+
"datahold.SetSlot" = true
|
|
284
|
+
|
|
252
285
|
[datatypes.Sequence]
|
|
253
286
|
abstractmethods = [
|
|
254
287
|
"__frozen__",
|
|
255
288
|
]
|
|
256
289
|
|
|
290
|
+
[datatypes.Set.issubclass]
|
|
291
|
+
"collections.abc.Set" = true
|
|
292
|
+
"datahold.Collection" = true
|
|
293
|
+
|
|
294
|
+
[datatypes.SetLike.issubclass]
|
|
295
|
+
"collections.abc.Set" = true
|
|
296
|
+
"datahold.Collection" = true
|
|
297
|
+
"datahold.Set" = true
|
|
298
|
+
"datahold.SetLike" = true
|
|
299
|
+
|
|
300
|
+
[datatypes.SetSlot.issubclass]
|
|
301
|
+
"collections.abc.Set" = true
|
|
302
|
+
"datahold.Collection" = true
|
|
303
|
+
"datahold.SetLike" = true
|
|
304
|
+
|
|
257
305
|
[non_datatypes]
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|