/
opt
/
imh-python
/
lib
/
python3.9
/
site-packages
/
astroid
/
brain
/
/opt/imh-python/lib/python3.9/site-packages/astroid/brain
mkdir
upload
Name
Size
Mode
Actions
__pycache__/
-
0755
rm
brain_argparse.py
1813
0644
edit
dl
rm
brain_attrs.py
3352
0644
edit
dl
rm
brain_boto3.py
1072
0644
edit
dl
rm
brain_builtin_inference.py
37433
0644
edit
dl
rm
brain_collections.py
4787
0644
edit
dl
rm
brain_crypt.py
915
0644
edit
dl
rm
brain_ctypes.py
2720
0644
edit
dl
rm
brain_curses.py
3529
0644
edit
dl
rm
brain_dataclasses.py
22363
0644
edit
dl
rm
brain_datetime.py
771
0644
edit
dl
rm
brain_dateutil.py
819
0644
edit
dl
rm
brain_functools.py
6390
0644
edit
dl
rm
brain_gi.py
7598
0644
edit
dl
rm
brain_hashlib.py
2757
0644
edit
dl
rm
brain_http.py
10687
0644
edit
dl
rm
brain_hypothesis.py
1800
0644
edit
dl
rm
brain_io.py
1589
0644
edit
dl
rm
brain_mechanize.py
2698
0644
edit
dl
rm
brain_multiprocessing.py
3260
0644
edit
dl
rm
brain_namedtuple_enum.py
23912
0644
edit
dl
rm
brain_nose.py
2402
0644
edit
dl
rm
brain_numpy_core_einsumfunc.py
885
0644
edit
dl
rm
brain_numpy_core_fromnumeric.py
792
0644
edit
dl
rm
brain_numpy_core_function_base.py
1408
0644
edit
dl
rm
brain_numpy_core_multiarray.py
4400
0644
edit
dl
rm
brain_numpy_core_numeric.py
1740
0644
edit
dl
rm
brain_numpy_core_numerictypes.py
8606
0644
edit
dl
rm
brain_numpy_core_umath.py
4939
0644
edit
dl
rm
brain_numpy_ma.py
948
0644
edit
dl
rm
brain_numpy_ndarray.py
9066
0644
edit
dl
rm
brain_numpy_random_mtrand.py
3496
0644
edit
dl
rm
brain_numpy_utils.py
2553
0644
edit
dl
rm
brain_pathlib.py
1705
0644
edit
dl
rm
brain_pkg_resources.py
2252
0644
edit
dl
rm
brain_pytest.py
2270
0644
edit
dl
rm
brain_qt.py
2874
0644
edit
dl
rm
brain_random.py
3170
0644
edit
dl
rm
brain_re.py
2966
0644
edit
dl
rm
brain_regex.py
3433
0644
edit
dl
rm
brain_responses.py
1920
0644
edit
dl
rm
brain_scipy_signal.py
2328
0644
edit
dl
rm
brain_signal.py
3932
0644
edit
dl
rm
brain_six.py
7666
0644
edit
dl
rm
brain_sqlalchemy.py
1061
0644
edit
dl
rm
brain_ssl.py
6716
0644
edit
dl
rm
brain_subprocess.py
2971
0644
edit
dl
rm
brain_threading.py
922
0644
edit
dl
rm
brain_type.py
2481
0644
edit
dl
rm
brain_typing.py
16717
0644
edit
dl
rm
brain_unittest.py
1136
0644
edit
dl
rm
brain_uuid.py
727
0644
edit
dl
rm
helpers.py
4303
0644
edit
dl
rm
__init__.py
0
0644
edit
dl
rm
Edit:
/opt/imh-python/lib/python3.9/site-packages/astroid/brain/brain_collections.py
(4787B)
# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html # For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE # Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt from __future__ import annotations from typing import TYPE_CHECKING from astroid.brain.helpers import register_module_extender from astroid.builder import AstroidBuilder, extract_node, parse from astroid.const import PY313_PLUS from astroid.context import InferenceContext from astroid.exceptions import AttributeInferenceError from astroid.manager import AstroidManager from astroid.nodes.scoped_nodes import ClassDef if TYPE_CHECKING: from astroid import nodes def _collections_transform(): return parse( """ class defaultdict(dict): default_factory = None def __missing__(self, key): pass def __getitem__(self, key): return default_factory """ + _deque_mock() + _ordered_dict_mock() ) def _collections_abc_313_transform() -> nodes.Module: """See https://github.com/python/cpython/pull/124735""" return AstroidBuilder(AstroidManager()).string_build( "from _collections_abc import *" ) def _deque_mock(): base_deque_class = """ class deque(object): maxlen = 0 def __init__(self, iterable=None, maxlen=None): self.iterable = iterable or [] def append(self, x): pass def appendleft(self, x): pass def clear(self): pass def count(self, x): return 0 def extend(self, iterable): pass def extendleft(self, iterable): pass def pop(self): return self.iterable[0] def popleft(self): return self.iterable[0] def remove(self, value): pass def reverse(self): return reversed(self.iterable) def rotate(self, n=1): return self def __iter__(self): return self def __reversed__(self): return self.iterable[::-1] def __getitem__(self, index): return self.iterable[index] def __setitem__(self, index, value): pass def __delitem__(self, index): pass def __bool__(self): return bool(self.iterable) def __nonzero__(self): return bool(self.iterable) def __contains__(self, o): return o in self.iterable def __len__(self): return len(self.iterable) def __copy__(self): return deque(self.iterable) def copy(self): return deque(self.iterable) def index(self, x, start=0, end=0): return 0 def insert(self, i, x): pass def __add__(self, other): pass def __iadd__(self, other): pass def __mul__(self, other): pass def __imul__(self, other): pass def __rmul__(self, other): pass @classmethod def __class_getitem__(self, item): return cls""" return base_deque_class def _ordered_dict_mock(): base_ordered_dict_class = """ class OrderedDict(dict): def __reversed__(self): return self[::-1] def move_to_end(self, key, last=False): pass @classmethod def __class_getitem__(cls, item): return cls""" return base_ordered_dict_class def _looks_like_subscriptable(node: ClassDef) -> bool: """ Returns True if the node corresponds to a ClassDef of the Collections.abc module that supports subscripting. :param node: ClassDef node """ if node.qname().startswith("_collections") or node.qname().startswith( "collections" ): try: node.getattr("__class_getitem__") return True except AttributeInferenceError: pass return False CLASS_GET_ITEM_TEMPLATE = """ @classmethod def __class_getitem__(cls, item): return cls """ def easy_class_getitem_inference(node, context: InferenceContext | None = None): # Here __class_getitem__ exists but is quite a mess to infer thus # put an easy inference tip func_to_add = extract_node(CLASS_GET_ITEM_TEMPLATE) node.locals["__class_getitem__"] = [func_to_add] def register(manager: AstroidManager) -> None: register_module_extender(manager, "collections", _collections_transform) # Starting with Python39 some objects of the collection module are subscriptable # thanks to the __class_getitem__ method but the way it is implemented in # _collection_abc makes it difficult to infer. (We would have to handle AssignName inference in the # getitem method of the ClassDef class) Instead we put here a mock of the __class_getitem__ method manager.register_transform( ClassDef, easy_class_getitem_inference, _looks_like_subscriptable ) if PY313_PLUS: register_module_extender( manager, "collections.abc", _collections_abc_313_transform )
Save
cmd:
run