# 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 """Astroid hooks for numpy ndarray class.""" from __future__ import annotations from astroid.brain.brain_numpy_utils import numpy_supports_type_hints from astroid.builder import extract_node from astroid.context import InferenceContext from astroid.inference_tip import inference_tip from astroid.manager import AstroidManager from astroid.nodes.node_classes import Attribute def infer_numpy_ndarray(node, context: InferenceContext | None = None): ndarray = """ class ndarray(object): def __init__(self, shape, dtype=float, buffer=None, offset=0, strides=None, order=None): self.T = numpy.ndarray([0, 0]) self.base = None self.ctypes = None self.data = None self.dtype = None self.flags = None # Should be a numpy.flatiter instance but not available for now # Putting an array instead so that iteration and indexing are authorized self.flat = np.ndarray([0, 0]) self.imag = np.ndarray([0, 0]) self.itemsize = None self.nbytes = None self.ndim = None self.real = np.ndarray([0, 0]) self.shape = numpy.ndarray([0, 0]) self.size = None self.strides = None def __abs__(self): return numpy.ndarray([0, 0]) def __add__(self, value): return numpy.ndarray([0, 0]) def __and__(self, value): return numpy.ndarray([0, 0]) def __array__(self, dtype=None): return numpy.ndarray([0, 0]) def __array_wrap__(self, obj): return numpy.ndarray([0, 0]) def __contains__(self, key): return True def __copy__(self): return numpy.ndarray([0, 0]) def __deepcopy__(self, memo): return numpy.ndarray([0, 0]) def __divmod__(self, value): return (numpy.ndarray([0, 0]), numpy.ndarray([0, 0])) def __eq__(self, value): return numpy.ndarray([0, 0]) def __float__(self): return 0. def __floordiv__(self): return numpy.ndarray([0, 0]) def __ge__(self, value): return numpy.ndarray([0, 0]) def __getitem__(self, key): return uninferable def __gt__(self, value): return numpy.ndarray([0, 0]) def __iadd__(self, value): return numpy.ndarray([0, 0]) def __iand__(self, value): return numpy.ndarray([0, 0]) def __ifloordiv__(self, value): return numpy.ndarray([0, 0]) def __ilshift__(self, value): return numpy.ndarray([0, 0]) def __imod__(self, value): return numpy.ndarray([0, 0]) def __imul__(self, value): return numpy.ndarray([0, 0]) def __int__(self): return 0 def __invert__(self): return numpy.ndarray([0, 0]) def __ior__(self, value): return numpy.ndarray([0, 0]) def __ipow__(self, value): return numpy.ndarray([0, 0]) def __irshift__(self, value): return numpy.ndarray([0, 0]) def __isub__(self, value): return numpy.ndarray([0, 0]) def __itruediv__(self, value): return numpy.ndarray([0, 0]) def __ixor__(self, value): return numpy.ndarray([0, 0]) def __le__(self, value): return numpy.ndarray([0, 0]) def __len__(self): return 1 def __lshift__(self, value): return numpy.ndarray([0, 0]) def __lt__(self, value): return numpy.ndarray([0, 0]) def __matmul__(self, value): return numpy.ndarray([0, 0]) def __mod__(self, value): return numpy.ndarray([0, 0]) def __mul__(self, value): return numpy.ndarray([0, 0]) def __ne__(self, value): return numpy.ndarray([0, 0]) def __neg__(self): return numpy.ndarray([0, 0]) def __or__(self, value): return numpy.ndarray([0, 0]) def __pos__(self): return numpy.ndarray([0, 0]) def __pow__(self): return numpy.ndarray([0, 0]) def __repr__(self): return str() def __rshift__(self): return numpy.ndarray([0, 0]) def __setitem__(self, key, value): return uninferable def __str__(self): return str() def __sub__(self, value): return numpy.ndarray([0, 0]) def __truediv__(self, value): return numpy.ndarray([0, 0]) def __xor__(self, value): return numpy.ndarray([0, 0]) def all(self, axis=None, out=None, keepdims=False): return np.ndarray([0, 0]) def any(self, axis=None, out=None, keepdims=False): return np.ndarray([0, 0]) def argmax(self, axis=None, out=None): return np.ndarray([0, 0]) def argmin(self, axis=None, out=None): return np.ndarray([0, 0]) def argpartition(self, kth, axis=-1, kind='introselect', order=None): return np.ndarray([0, 0]) def argsort(self, axis=-1, kind='quicksort', order=None): return np.ndarray([0, 0]) def astype(self, dtype, order='K', casting='unsafe', subok=True, copy=True): return np.ndarray([0, 0]) def byteswap(self, inplace=False): return np.ndarray([0, 0]) def choose(self, choices, out=None, mode='raise'): return np.ndarray([0, 0]) def clip(self, min=None, max=None, out=None): return np.ndarray([0, 0]) def compress(self, condition, axis=None, out=None): return np.ndarray([0, 0]) def conj(self): return np.ndarray([0, 0]) def conjugate(self): return np.ndarray([0, 0]) def copy(self, order='C'): return np.ndarray([0, 0]) def cumprod(self, axis=None, dtype=None, out=None): return np.ndarray([0, 0]) def cumsum(self, axis=None, dtype=None, out=None): return np.ndarray([0, 0]) def diagonal(self, offset=0, axis1=0, axis2=1): return np.ndarray([0, 0]) def dot(self, b, out=None): return np.ndarray([0, 0]) def dump(self, file): return None def dumps(self): return str() def fill(self, value): return None def flatten(self, order='C'): return np.ndarray([0, 0]) def getfield(self, dtype, offset=0): return np.ndarray([0, 0]) def item(self, *args): return uninferable def itemset(self, *args): return None def max(self, axis=None, out=None): return np.ndarray([0, 0]) def mean(self, axis=None, dtype=None, out=None, keepdims=False): return np.ndarray([0, 0]) def min(self, axis=None, out=None, keepdims=False): return np.ndarray([0, 0]) def newbyteorder(self, new_order='S'): return np.ndarray([0, 0]) def nonzero(self): return (1,) def partition(self, kth, axis=-1, kind='introselect', order=None): return None def prod(self, axis=None, dtype=None, out=None, keepdims=False): return np.ndarray([0, 0]) def ptp(self, axis=None, out=None): return np.ndarray([0, 0]) def put(self, indices, values, mode='raise'): return None def ravel(self, order='C'): return np.ndarray([0, 0]) def repeat(self, repeats, axis=None): return np.ndarray([0, 0]) def reshape(self, shape, order='C'): return np.ndarray([0, 0]) def resize(self, new_shape, refcheck=True): return None def round(self, decimals=0, out=None): return np.ndarray([0, 0]) def searchsorted(self, v, side='left', sorter=None): return np.ndarray([0, 0]) def setfield(self, val, dtype, offset=0): return None def setflags(self, write=None, align=None, uic=None): return None def sort(self, axis=-1, kind='quicksort', order=None): return None def squeeze(self, axis=None): return np.ndarray([0, 0]) def std(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False): return np.ndarray([0, 0]) def sum(self, axis=None, dtype=None, out=None, keepdims=False): return np.ndarray([0, 0]) def swapaxes(self, axis1, axis2): return np.ndarray([0, 0]) def take(self, indices, axis=None, out=None, mode='raise'): return np.ndarray([0, 0]) def tobytes(self, order='C'): return b'' def tofile(self, fid, sep="", format="%s"): return None def tolist(self, ): return [] def tostring(self, order='C'): return b'' def trace(self, offset=0, axis1=0, axis2=1, dtype=None, out=None): return np.ndarray([0, 0]) def transpose(self, *axes): return np.ndarray([0, 0]) def var(self, axis=None, dtype=None, out=None, ddof=0, keepdims=False): return np.ndarray([0, 0]) def view(self, dtype=None, type=None): return np.ndarray([0, 0]) """ if numpy_supports_type_hints(): ndarray += """ @classmethod def __class_getitem__(cls, value): return cls """ node = extract_node(ndarray) return node.infer(context=context) def _looks_like_numpy_ndarray(node) -> bool: return isinstance(node, Attribute) and node.attrname == "ndarray" def register(manager: AstroidManager) -> None: manager.register_transform( Attribute, inference_tip(infer_numpy_ndarray), _looks_like_numpy_ndarray, )