$24 GRAYBYTE WORDPRESS FILE MANAGER $93

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 104.21.15.130 | ADMIN IP 216.73.216.6
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
..
--
11 Feb 2026 9.30 AM
root / root
0755
__pycache__
--
11 Feb 2026 9.30 AM
root / root
0755
__init__.py
0 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_argparse.py
1.521 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_attrs.py
2.967 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_boto3.py
0.988 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_builtin_inference.py
33.451 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_collections.py
4.313 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_crypt.py
0.843 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_ctypes.py
2.598 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_curses.py
3.396 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_dataclasses.py
21.571 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_dateutil.py
0.749 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_fstrings.py
2.413 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_functools.py
5.846 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_gi.py
7.366 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_hashlib.py
2.755 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_http.py
10.391 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_hypothesis.py
1.691 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_io.py
1.49 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_mechanize.py
2.584 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_multiprocessing.py
3.136 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_namedtuple_enum.py
22.192 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_nose.py
2.266 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_einsumfunc.py
0.806 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_fromnumeric.py
0.715 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_function_base.py
1.268 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_multiarray.py
4.139 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_numeric.py
1.591 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_numerictypes.py
8.346 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_core_umath.py
4.778 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_ma.py
0.875 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_ndarray.py
8.787 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_random_mtrand.py
3.355 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_numpy_utils.py
2.575 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_pathlib.py
1.506 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_pkg_resources.py
2.148 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_pytest.py
2.171 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_qt.py
2.742 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_random.py
2.822 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_re.py
2.803 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_regex.py
3.283 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_responses.py
1.824 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_scipy_signal.py
2.223 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_signal.py
3.789 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_six.py
7.416 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_sqlalchemy.py
0.985 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_ssl.py
6.4 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_subprocess.py
2.926 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_threading.py
0.85 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_type.py
2.425 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_typing.py
13.979 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_unittest.py
1.12 KB
20 Jan 2026 1.01 PM
root / root
0644
brain_uuid.py
0.651 KB
20 Jan 2026 1.01 PM
root / root
0644
helpers.py
0.887 KB
20 Jan 2026 1.01 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF