$64 GRAYBYTE WORDPRESS FILE MANAGER $26

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/cloudlinux/venv/lib/python3.11/site-packages/astroid/brain/

HOME
Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/astroid/brain//brain_type.py
# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
# For details: https://github.com/PyCQA/astroid/blob/main/LICENSE
# Copyright (c) https://github.com/PyCQA/astroid/blob/main/CONTRIBUTORS.txt

"""
Astroid hooks for type support.

Starting from python3.9, type object behaves as it had __class_getitem__ method.
However it was not possible to simply add this method inside type's body, otherwise
all types would also have this method. In this case it would have been possible
to write str[int].
Guido Van Rossum proposed a hack to handle this in the interpreter:
https://github.com/python/cpython/blob/67e394562d67cbcd0ac8114e5439494e7645b8f5/Objects/abstract.c#L181-L184

This brain follows the same logic. It is no wise to add permanently the __class_getitem__ method
to the type object. Instead we choose to add it only in the case of a subscript node
which inside name node is type.
Doing this type[int] is allowed whereas str[int] is not.

Thanks to Lukasz Langa for fruitful discussion.
"""

from __future__ import annotations

from astroid import extract_node, inference_tip, nodes
from astroid.const import PY39_PLUS
from astroid.context import InferenceContext
from astroid.exceptions import UseInferenceDefault
from astroid.manager import AstroidManager


def _looks_like_type_subscript(node) -> bool:
    """
    Try to figure out if a Name node is used inside a type related subscript.

    :param node: node to check
    :type node: astroid.nodes.node_classes.NodeNG
    :return: whether the node is a Name node inside a type related subscript
    """
    if isinstance(node, nodes.Name) and isinstance(node.parent, nodes.Subscript):
        return node.name == "type"
    return False


def infer_type_sub(node, context: InferenceContext | None = None):
    """
    Infer a type[...] subscript.

    :param node: node to infer
    :type node: astroid.nodes.node_classes.NodeNG
    :return: the inferred node
    :rtype: nodes.NodeNG
    """
    node_scope, _ = node.scope().lookup("type")
    if not isinstance(node_scope, nodes.Module) or node_scope.qname() != "builtins":
        raise UseInferenceDefault()
    class_src = """
    class type:
        def __class_getitem__(cls, key):
            return cls
     """
    node = extract_node(class_src)
    return node.infer(context=context)


if PY39_PLUS:
    AstroidManager().register_transform(
        nodes.Name, inference_tip(infer_type_sub), _looks_like_type_subscript
    )

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
14 Aug 2025 9.24 PM
root / root
0755
__pycache__
--
14 Aug 2025 9.24 PM
root / root
0755
__init__.py
0 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_argparse.py
1.521 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_attrs.py
2.967 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_boto3.py
0.988 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_builtin_inference.py
33.451 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_collections.py
4.313 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_crypt.py
0.843 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_ctypes.py
2.598 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_curses.py
3.396 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_dataclasses.py
21.571 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_dateutil.py
0.749 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_fstrings.py
2.413 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_functools.py
5.846 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_gi.py
7.366 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_hashlib.py
2.755 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_http.py
10.391 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_hypothesis.py
1.691 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_io.py
1.49 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_mechanize.py
2.584 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_multiprocessing.py
3.136 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_namedtuple_enum.py
22.192 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_nose.py
2.266 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_einsumfunc.py
0.806 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_fromnumeric.py
0.715 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_function_base.py
1.268 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_multiarray.py
4.139 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_numeric.py
1.591 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_numerictypes.py
8.346 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_core_umath.py
4.778 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_ma.py
0.875 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_ndarray.py
8.787 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_random_mtrand.py
3.355 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_numpy_utils.py
2.575 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_pathlib.py
1.506 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_pkg_resources.py
2.148 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_pytest.py
2.171 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_qt.py
2.742 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_random.py
2.822 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_re.py
2.803 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_regex.py
3.283 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_responses.py
1.824 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_scipy_signal.py
2.223 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_signal.py
3.789 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_six.py
7.416 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_sqlalchemy.py
0.985 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_ssl.py
6.4 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_subprocess.py
2.926 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_threading.py
0.85 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_type.py
2.425 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_typing.py
13.979 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_unittest.py
1.12 KB
17 Apr 2025 8.10 PM
root / root
0644
brain_uuid.py
0.651 KB
17 Apr 2025 8.10 PM
root / root
0644
helpers.py
0.887 KB
17 Apr 2025 8.10 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF