Третий коммит, добавление share, share_kb, а также ADMIN_ID
This commit is contained in:
86
myenv/Lib/site-packages/frozenlist/__init__.py
Normal file
86
myenv/Lib/site-packages/frozenlist/__init__.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import os
|
||||
import types
|
||||
from collections.abc import MutableSequence
|
||||
from functools import total_ordering
|
||||
|
||||
__version__ = "1.7.0"
|
||||
|
||||
__all__ = ("FrozenList", "PyFrozenList") # type: Tuple[str, ...]
|
||||
|
||||
|
||||
NO_EXTENSIONS = bool(os.environ.get("FROZENLIST_NO_EXTENSIONS")) # type: bool
|
||||
|
||||
|
||||
@total_ordering
|
||||
class FrozenList(MutableSequence):
|
||||
__slots__ = ("_frozen", "_items")
|
||||
__class_getitem__ = classmethod(types.GenericAlias)
|
||||
|
||||
def __init__(self, items=None):
|
||||
self._frozen = False
|
||||
if items is not None:
|
||||
items = list(items)
|
||||
else:
|
||||
items = []
|
||||
self._items = items
|
||||
|
||||
@property
|
||||
def frozen(self):
|
||||
return self._frozen
|
||||
|
||||
def freeze(self):
|
||||
self._frozen = True
|
||||
|
||||
def __getitem__(self, index):
|
||||
return self._items[index]
|
||||
|
||||
def __setitem__(self, index, value):
|
||||
if self._frozen:
|
||||
raise RuntimeError("Cannot modify frozen list.")
|
||||
self._items[index] = value
|
||||
|
||||
def __delitem__(self, index):
|
||||
if self._frozen:
|
||||
raise RuntimeError("Cannot modify frozen list.")
|
||||
del self._items[index]
|
||||
|
||||
def __len__(self):
|
||||
return self._items.__len__()
|
||||
|
||||
def __iter__(self):
|
||||
return self._items.__iter__()
|
||||
|
||||
def __reversed__(self):
|
||||
return self._items.__reversed__()
|
||||
|
||||
def __eq__(self, other):
|
||||
return list(self) == other
|
||||
|
||||
def __le__(self, other):
|
||||
return list(self) <= other
|
||||
|
||||
def insert(self, pos, item):
|
||||
if self._frozen:
|
||||
raise RuntimeError("Cannot modify frozen list.")
|
||||
self._items.insert(pos, item)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<FrozenList(frozen={self._frozen}, {self._items!r})>"
|
||||
|
||||
def __hash__(self):
|
||||
if self._frozen:
|
||||
return hash(tuple(self))
|
||||
else:
|
||||
raise RuntimeError("Cannot hash unfrozen list.")
|
||||
|
||||
|
||||
PyFrozenList = FrozenList
|
||||
|
||||
|
||||
if not NO_EXTENSIONS:
|
||||
try:
|
||||
from ._frozenlist import FrozenList as CFrozenList # type: ignore
|
||||
except ImportError: # pragma: no cover
|
||||
pass
|
||||
else:
|
||||
FrozenList = CFrozenList # type: ignore
|
47
myenv/Lib/site-packages/frozenlist/__init__.pyi
Normal file
47
myenv/Lib/site-packages/frozenlist/__init__.pyi
Normal file
@@ -0,0 +1,47 @@
|
||||
from typing import (
|
||||
Generic,
|
||||
Iterable,
|
||||
Iterator,
|
||||
List,
|
||||
MutableSequence,
|
||||
Optional,
|
||||
TypeVar,
|
||||
Union,
|
||||
overload,
|
||||
)
|
||||
|
||||
_T = TypeVar("_T")
|
||||
_Arg = Union[List[_T], Iterable[_T]]
|
||||
|
||||
class FrozenList(MutableSequence[_T], Generic[_T]):
|
||||
def __init__(self, items: Optional[_Arg[_T]] = None) -> None: ...
|
||||
@property
|
||||
def frozen(self) -> bool: ...
|
||||
def freeze(self) -> None: ...
|
||||
@overload
|
||||
def __getitem__(self, i: int) -> _T: ...
|
||||
@overload
|
||||
def __getitem__(self, s: slice) -> FrozenList[_T]: ...
|
||||
@overload
|
||||
def __setitem__(self, i: int, o: _T) -> None: ...
|
||||
@overload
|
||||
def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ...
|
||||
@overload
|
||||
def __delitem__(self, i: int) -> None: ...
|
||||
@overload
|
||||
def __delitem__(self, i: slice) -> None: ...
|
||||
def __len__(self) -> int: ...
|
||||
def __iter__(self) -> Iterator[_T]: ...
|
||||
def __reversed__(self) -> Iterator[_T]: ...
|
||||
def __eq__(self, other: object) -> bool: ...
|
||||
def __le__(self, other: FrozenList[_T]) -> bool: ...
|
||||
def __ne__(self, other: object) -> bool: ...
|
||||
def __lt__(self, other: FrozenList[_T]) -> bool: ...
|
||||
def __ge__(self, other: FrozenList[_T]) -> bool: ...
|
||||
def __gt__(self, other: FrozenList[_T]) -> bool: ...
|
||||
def insert(self, pos: int, item: _T) -> None: ...
|
||||
def __repr__(self) -> str: ...
|
||||
def __hash__(self) -> int: ...
|
||||
|
||||
# types for C accelerators are the same
|
||||
CFrozenList = PyFrozenList = FrozenList
|
Binary file not shown.
148
myenv/Lib/site-packages/frozenlist/_frozenlist.pyx
Normal file
148
myenv/Lib/site-packages/frozenlist/_frozenlist.pyx
Normal file
@@ -0,0 +1,148 @@
|
||||
# cython: freethreading_compatible = True
|
||||
# distutils: language = c++
|
||||
|
||||
from cpython.bool cimport PyBool_FromLong
|
||||
from libcpp.atomic cimport atomic
|
||||
|
||||
import copy
|
||||
import types
|
||||
from collections.abc import MutableSequence
|
||||
|
||||
|
||||
cdef class FrozenList:
|
||||
__class_getitem__ = classmethod(types.GenericAlias)
|
||||
|
||||
cdef atomic[bint] _frozen
|
||||
cdef list _items
|
||||
|
||||
def __init__(self, items=None):
|
||||
self._frozen.store(False)
|
||||
if items is not None:
|
||||
items = list(items)
|
||||
else:
|
||||
items = []
|
||||
self._items = items
|
||||
|
||||
@property
|
||||
def frozen(self):
|
||||
return PyBool_FromLong(self._frozen.load())
|
||||
|
||||
cdef object _check_frozen(self):
|
||||
if self._frozen.load():
|
||||
raise RuntimeError("Cannot modify frozen list.")
|
||||
|
||||
cdef inline object _fast_len(self):
|
||||
return len(self._items)
|
||||
|
||||
def freeze(self):
|
||||
self._frozen.store(True)
|
||||
|
||||
def __getitem__(self, index):
|
||||
return self._items[index]
|
||||
|
||||
def __setitem__(self, index, value):
|
||||
self._check_frozen()
|
||||
self._items[index] = value
|
||||
|
||||
def __delitem__(self, index):
|
||||
self._check_frozen()
|
||||
del self._items[index]
|
||||
|
||||
def __len__(self):
|
||||
return self._fast_len()
|
||||
|
||||
def __iter__(self):
|
||||
return self._items.__iter__()
|
||||
|
||||
def __reversed__(self):
|
||||
return self._items.__reversed__()
|
||||
|
||||
def __richcmp__(self, other, op):
|
||||
if op == 0: # <
|
||||
return list(self) < other
|
||||
if op == 1: # <=
|
||||
return list(self) <= other
|
||||
if op == 2: # ==
|
||||
return list(self) == other
|
||||
if op == 3: # !=
|
||||
return list(self) != other
|
||||
if op == 4: # >
|
||||
return list(self) > other
|
||||
if op == 5: # =>
|
||||
return list(self) >= other
|
||||
|
||||
def insert(self, pos, item):
|
||||
self._check_frozen()
|
||||
self._items.insert(pos, item)
|
||||
|
||||
def __contains__(self, item):
|
||||
return item in self._items
|
||||
|
||||
def __iadd__(self, items):
|
||||
self._check_frozen()
|
||||
self._items += list(items)
|
||||
return self
|
||||
|
||||
def index(self, item):
|
||||
return self._items.index(item)
|
||||
|
||||
def remove(self, item):
|
||||
self._check_frozen()
|
||||
self._items.remove(item)
|
||||
|
||||
def clear(self):
|
||||
self._check_frozen()
|
||||
self._items.clear()
|
||||
|
||||
def extend(self, items):
|
||||
self._check_frozen()
|
||||
self._items += list(items)
|
||||
|
||||
def reverse(self):
|
||||
self._check_frozen()
|
||||
self._items.reverse()
|
||||
|
||||
def pop(self, index=-1):
|
||||
self._check_frozen()
|
||||
return self._items.pop(index)
|
||||
|
||||
def append(self, item):
|
||||
self._check_frozen()
|
||||
return self._items.append(item)
|
||||
|
||||
def count(self, item):
|
||||
return self._items.count(item)
|
||||
|
||||
def __repr__(self):
|
||||
return '<FrozenList(frozen={}, {!r})>'.format(self._frozen.load(),
|
||||
self._items)
|
||||
|
||||
def __hash__(self):
|
||||
if self._frozen.load():
|
||||
return hash(tuple(self._items))
|
||||
else:
|
||||
raise RuntimeError("Cannot hash unfrozen list.")
|
||||
|
||||
def __deepcopy__(self, memo):
|
||||
cdef FrozenList new_list
|
||||
obj_id = id(self)
|
||||
|
||||
# Return existing copy if already processed (circular reference)
|
||||
if obj_id in memo:
|
||||
return memo[obj_id]
|
||||
|
||||
# Create new instance and register immediately
|
||||
new_list = self.__class__([])
|
||||
memo[obj_id] = new_list
|
||||
|
||||
# Deep copy items
|
||||
new_list._items[:] = [copy.deepcopy(item, memo) for item in self._items]
|
||||
|
||||
# Preserve frozen state
|
||||
if self._frozen.load():
|
||||
new_list.freeze()
|
||||
|
||||
return new_list
|
||||
|
||||
|
||||
MutableSequence.register(FrozenList)
|
1
myenv/Lib/site-packages/frozenlist/py.typed
Normal file
1
myenv/Lib/site-packages/frozenlist/py.typed
Normal file
@@ -0,0 +1 @@
|
||||
Marker
|
Reference in New Issue
Block a user