K i FdZdgZdZdZdZdZdZdZGddZy ) zG Mixin classes for custom array types that don't inherit from ndarray. NDArrayOperatorsMixinc> |jduS#t$rYywxYw)z)True when __array_ufunc__ is set to None.NF)__array_ufunc__AttributeError)objs V/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/numpy/lib/mixins.py_disables_array_ufuncrs*""d** s  c(fd}d|d|_|S)z>Implement a forward binary method with a ufunc, e.g., __add__.c8t|rtS||SNrNotImplementedselfotherufuncs rfuncz_binary_method..funcs  '! !T5!!____name__rnamers` r_binary_methodrs"bMDM Krc(fd}d|d|_|S)zAImplement a reflected binary method with a ufunc, e.g., __radd__.c8t|rtS||Sr r rs rrz&_reflected_binary_method..funcs  '! !UD!!r__rrrrs` r_reflected_binary_methodrs"$rNDM Krc(fd}d|d|_|S)zAImplement an in-place binary method with a ufunc, e.g., __iadd__.c|||fS)N)outrs rrz$_inplace_binary_method..func&sT5tg..r__irrrs` r_inplace_binary_methodr#$s/$rNDM KrcHt||t||t||fS)zEImplement forward, reflected and inplace binary methods with a ufunc.)rrr#)rrs r_numeric_methodsr%,s* 5$ ' $UD 1 "5$ / 11rc(fd}d|d|_|S)z.Implement a unary special method with a ufunc.c|Sr r!)rrs rrz_unary_method..func5s T{rrrrs` r _unary_methodr(3sbMDM Krc>eZdZdZddlmZdZeejdZ eejdZ eejdZeejdZeej"d Zeej&d Zeej,d \ZZZeej4d \ZZZeej<d \ZZ Z!eejDd\Z#Z$Z%eejLd\Z'Z(Z)eejTd\Z+Z,Z-eej\d\Z/Z0Z1eejddZ3e4ejddZ5eejld\Z7Z8Z9eejtd\Z;Z``, etc.) and arithmetic (``+``, ``*``, ``-``, etc.), by deferring to the ``__array_ufunc__`` method, which subclasses must implement. It is useful for writing classes that do not inherit from `numpy.ndarray`, but that should support arithmetic and numpy universal functions like arrays as described in :external+neps:doc:`nep-0013-ufunc-overrides`. As an trivial example, consider this implementation of an ``ArrayLike`` class that simply wraps a NumPy array and ensures that the result of any arithmetic operation is also an ``ArrayLike`` object: >>> import numbers >>> class ArrayLike(np.lib.mixins.NDArrayOperatorsMixin): ... def __init__(self, value): ... self.value = np.asarray(value) ... ... # One might also consider adding the built-in list type to this ... # list, to support operations like np.add(array_like, list) ... _HANDLED_TYPES = (np.ndarray, numbers.Number) ... ... def __array_ufunc__(self, ufunc, method, *inputs, **kwargs): ... out = kwargs.get('out', ()) ... for x in inputs + out: ... # Only support operations with instances of ... # _HANDLED_TYPES. Use ArrayLike instead of type(self) ... # for isinstance to allow subclasses that don't ... # override __array_ufunc__ to handle ArrayLike objects. ... if not isinstance( ... x, self._HANDLED_TYPES + (ArrayLike,) ... ): ... return NotImplemented ... ... # Defer to the implementation of the ufunc ... # on unwrapped values. ... inputs = tuple(x.value if isinstance(x, ArrayLike) else x ... for x in inputs) ... if out: ... kwargs['out'] = tuple( ... x.value if isinstance(x, ArrayLike) else x ... for x in out) ... result = getattr(ufunc, method)(*inputs, **kwargs) ... ... if type(result) is tuple: ... # multiple return values ... return tuple(type(self)(x) for x in result) ... elif method == 'at': ... # no return value ... return None ... else: ... # one return value ... return type(self)(result) ... ... def __repr__(self): ... return '%s(%r)' % (type(self).__name__, self.value) In interactions between ``ArrayLike`` objects and numbers or numpy arrays, the result is always another ``ArrayLike``: >>> x = ArrayLike([1, 2, 3]) >>> x - 1 ArrayLike(array([0, 1, 2])) >>> 1 - x ArrayLike(array([ 0, -1, -2])) >>> np.arange(3) - x ArrayLike(array([-1, -1, -1])) >>> x - np.arange(3) ArrayLike(array([1, 1, 1])) Note that unlike ``numpy.ndarray``, ``ArrayLike`` does not allow operations with arbitrary, unrecognized types. This ensures that interactions with ArrayLike preserve a well-defined casting hierarchy. )umathr!ltleeqnegtgeaddsubmulmatmultruedivfloordivmoddivmodpowlshiftrshiftandxorornegposabsinvertN)Wr __module__ __qualname____doc__ numpy._corer+um __slots__rless__lt__ less_equal__le__equal__eq__ not_equal__ne__greater__gt__ greater_equal__ge__r%r2__add____radd____iadd__subtract__sub____rsub____isub__multiply__mul____rmul____imul__r5 __matmul__ __rmatmul__ __imatmul__ true_divide __truediv__ __rtruediv__ __itruediv__ floor_divide __floordiv__ __rfloordiv__ __ifloordiv__ remainder__mod____rmod____imod__r9 __divmod__r __rdivmod__power__pow____rpow____ipow__ left_shift __lshift__ __rlshift__ __ilshift__ right_shift __rshift__ __rrshift__ __irshift__ bitwise_and__and____rand____iand__ bitwise_xor__xor____rxor____ixor__ bitwise_or__or____ror____ior__r(negative__neg__positive__pos__absolute__abs__rC __invert__r!rrrr;sM\(I BGGT *F BMM4 0F BHHd +F BLL$ /F BJJ -F B,,d 3F#32665"AGXx"22;;"FGXx"22;;"FGXx+; 8,(J [.>  /#+K|1A 2%.L-"22<<"GGXx 84J*299h?K#3288U"CGXx+; x,!(J [+; ,"(J ["22>>5"IGXx"22>>5"IGXx/ tDFGWBKK/GBKK/GBKK/Gryy(3JrN) rF__all__rrrr#r%r(rr!rrrs> # #1y4y4r