bg۪dZddlmZddlZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZmZmZddlmZmZmZmZmZmZddlZerdd lmZmZmZmZddlmZddl Z!dd l m"Z"Gd d Z#dS) al Wrapper class around the ndarray object for the array API standard. The array API standard defines some behaviors differently than ndarray, in particular, type promotion rules are different (the standard has no value-based casting). The standard also specifies a more limited subset of array methods and functionalities than are implemented on ndarray. Since the goal of the array_api namespace is to be a minimal implementation of the array API standard, we need to define a separate wrapper class for the array_api namespace. The standard compliant class is only a wrapper class. It is *not* a subclass of ndarray. ) annotationsN)IntEnum)asarray) _all_dtypes_boolean_dtypes_integer_dtypes_integer_or_boolean_dtypes_floating_dtypes_complex_floating_dtypes_numeric_dtypes _result_type_dtype_categories) TYPE_CHECKINGOptionalTupleUnionAny SupportsIndex)r PyCapsuleDeviceDtype) array_apic eZdZUdZded<efdZdZdud Zdud Z dvdwdZ dxdZ dZ e dydZdZdzdZd{dZd|dZd dd}d"Zd~d$Zdd&Zd d'dd+Zdd-Zdd/Zdd1Zd{d2Zd{d3Zdd6Zd{d7Zdd9Zdd:Zdzd;Z d{d<Z!dd>Z"d{d?Z#dd@Z$d{dAZ%d{dBZ&ddCZ'dzdDZ(d|dEZ)dzdFZ*d{dGZ+ddHZ,ddJZ-d{dKZ.ddMZ/d|dNZ0d{dOZ1d{dPZ2d|dQZ3d|dRZ4d{dSZ5d{dTZ6ddUZ7ddVZ8ddWZ9ddXZ:d{dYZ;d{dZZd|d]Z?d|d^Z@d{d_ZAd{d`ZBddaZCddbZDd{dcZEd{ddZFddeZGddfZHd|dgZId|dhZJdvddkZKeLddmZMeLddnZNeLddoZOeLddpZPeLddrZQeLddsZReLddtZSxZTS)Arraya) n-d array object for the array API namespace. See the docstring of :py:obj:`np.ndarray ` for more information. This is a wrapper around numpy.ndarray that restricts the usage to only those things that are required by the array API namespace. Note, attributes on this object that start with a single underscore are not part of the API specification and should only be used internally. This object should not be constructed directly. Rather, use one of the creation functions, such as asarray(). znp.ndarray[Any, Any]_arrayct|}t|tjrtj|}|jtvrtd|jd||_ |S)a This is a private method for initializing the array API Array object. Functions outside of the array_api submodule should not use this method. Use one of the creation functions instead, such as ``asarray``. z4The array_api namespace does not support the dtype '') super__new__ isinstancenpgenericrdtyper TypeErrorr)clsxobj __class__s p/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib64/python3.11/site-packages/numpy/array_api/_array_object.py_newz Array._new@sxggooc"" a $ $  1 A 7+ % %QqwQQQ   c td)Nz{The array_api Array object should not be instantiated directly. Use an array creation function, such as asarray(), instead.)r%)r&argskwargss r*r z Array.__new__Xs J   r,selfreturnstrc\|jddS)z1 Performs the operation __str__. arrayr)r__str__replacer0s r*r5z Array.__str__`s({""$$,,Wg>>>r,cd|jjd}d|jvrd}t|j}nd}t j|jd||}||z|zS)z2 Performs the operation __repr__. z, dtype=)rzempty(zArray(z, ) separatorprefixsuffix)r$nameshaper2r" array2stringr)r0r<r;mids r*__repr__zArray.__repr__fsf/DJO...  ??Fdj//CCF/$+fU[\\\C|f$$r,Nr$None | np.dtype[Any]npt.NDArray[Any]c8tj|j|S)z Warning: this method is NOT part of the array API spec. Implementers of other libraries need not include it, and users should not assume it will be present in other implementations. )r$)r"rr)r0r$s r* __array__zArray.__array__usz$+U3333r,otherbool | int | float | Arraydtype_categoryopc|jt|vrtd|d|t|tt t tfr||}nFt|tr*|jt|vrtd|d|ntSt|j|j}| dr-||jkr"td|d|jd|j|S)z Helper function for operators to only allow specific input dtypes Use like other = self._check_allowed_dtypes(other, 'numeric', '__add__') if other is NotImplemented: return other zOnly z dtypes are allowed in __izCannot perform z with dtypes  and ) r$rr%r!intcomplexfloatbool_promote_scalarrNotImplementedr startswith)r0rFrHrI res_dtypes r*_check_allowed_dtypeszArray._check_allowed_dtypess( :.~> > >ONOO2OOPP P ec7E48 9 9 "((//EE u % % "{"3N"CCC S S Sr S STTTD" ! !U[99 ==   DJ&&UbUUtzUU UU r,ct|tr|jtvrt dnt|t rm|jtvrt d|jt vrAtj|j}|j |cxkr |j ksntdnut|tr|jtvrt dnBt|tr|jtvrt dnt dt tj||jS)aR Returns a promoted version of a Python scalar appropriate for use with operations on self. This may raise an OverflowError in cases where the scalar is an integer that is too large to fit in a NumPy integer dtype, or TypeError when the scalar type is incompatible with the dtype of self. z9Python bool scalars can only be promoted with bool arraysz6Python int scalars cannot be promoted with bool arrayszLPython int scalars must be within the bounds of the dtype for integer arrayszEPython float scalars can only be promoted with floating-point arrays.zOPython complex scalars can only be promoted with complex floating-point arrays.z 'scalar' must be a Python scalar)r!rPr$rr%rMr r"iinfominmax OverflowErrorrOr rNr rr+r4)r0scalarinfos r*rQzArray._promote_scalars{ fd # # @z00O1 $ $ @z_,,Lz_,,x ++F6666dh6666'f & & @z!111[2 ( ( @z!999e: >?? ?zz"(64:66777r,Tuple[Array, Array]c|jdkr1|jdkr&t|jd}n;|jdkr0|jdkr%t|jd}||fS)a Normalize inputs to two arg functions to fix type promotion rules NumPy deviates from the spec type promotion rules in cases where one argument is 0-dimensional and the other is not. For example: >>> import numpy as np >>> a = np.array([1.0], dtype=np.float32) >>> b = np.array(1.0, dtype=np.float64) >>> np.add(a, b) # The spec says this should be float64 array([2.], dtype=float32) To fix this, we add a dimension to the 0-dimension array before passing it through. This works because a dimension would be added anyway from broadcasting, so the resulting shape is the same, but this prevents NumPy from not promoting the dtype. rN)ndimrr+r)x1x2s r*_normalize_two_argszArray._normalize_two_argssi2 7a< 0`` or ``k`` omitted (``None``), ``-n <= j <= n``. - For ``k < 0``, ``-n - 1 <= j <= max(0, n - 1)``. - Boolean array indices are not allowed as part of a larger tuple index. - Integer array indices are not allowed (with the exception of 0-D arrays, which are treated the same as scalars). Additionally, it should be noted that indices that would return a scalar in NumPy will return a 0-D array. Array scalars are not allowed in the specification, only 0-D arrays. This is done in the ``Array._new`` constructor, not this function. NzSingle-axes index z has type(i)=z, but only integers, slices (:), ellipsis (...), newaxis (None), zero-dimensional integer arrays and boolean arrays are specified in the Array API.rFTrz self.ndim=z*, but the multi-axes index only specifies z dimensions. If this was intentional, add a trailing ellipsis (...) which expands into as many slices (:) as necessary - this is what np.ndarray arrays implicitly do, but such flat indexing behaviour is not specified in the Array API.z 0 (or None)z between -rLz (or None)zSlice z contains start=z, but should be z for an axis of size z: (out-of-bounds starts are not specified in the Array API)z contains stop=z9 (out-of-bounds stops are not specified in the Array API)z! is a boolean array and len(key)=zR, but masking is only specified in the Array API when the array is the sole index.zj is a non-zero-dimensional integer array, but advanced integer indexing is not specified in the Array API.zI is a tuple, but nested tuple indices are not specified in the Array API.)r!tuplerPrsliceEllipsisrr"ndarray IndexErrortypeappendr$rlenr_r> enumeratezipstartoperatorindexr%stopr )r0key_keyinonexpanding_key single_axes n_ellipsis key_has_mask n_single_axes indexed_shapeellipsis_startpos ellipsis_endsidef_rangernrqs r*_validate_indexzArray._validate_indexs^!e,,8ss3&  A!T"" 1m,, a'' ==9a''a,,!666a666    . .A} ''***a'' .:a+D+D .w/11'+ &&q))))H}}"a #**1---K(( >> F 1__  MDI$=$= 2ty22$222 ?? JMM!N#$455  Q"1e,, 1bj0I0IH}}),!---9 (FGL ?N?+dj.GG ; 662 2 GAt!U##1 199+GGI$IITAXIIIG7&  (qw 7 7"& 6 6 6 6$ 6 6 6 6",!1!1!1e!1!1#*!1!1AE!1!1!1##!7%6% '~af55"& 5 5 5 5 5 5 5 5",!1!1!1d!1!1#*!1!1AE!1!1!1##!6%&Au%% 7o--#d))q..%c511111$FQFFs88FFF W//AFaKK$6Q666 Au%%  BBBB ]2 2 s$=K KKL!! L.-L.c|jtvrtd|j}|j|S)z1 Performs the operation __abs__. z*Only numeric dtypes are allowed in __abs__)r$r r%r__abs__r)r+r0ress r*rz Array.__abs__I :_ , ,HII Ik!!##~""3'''r,Union[int, float, Array]c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __add__. numeric__add__)rUrRrbrrr)r+r0rFrs r*rz Array.__add__q**5)YGG N " "L..tU;; ek!!%,//~""3'''r,Union[int, bool, Array]c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __and__. integer or boolean__and__)rUrRrbrrr)r+rs r*rz Array.__and__r**52F RR N " "L..tU;; ek!!%,//~""3'''r,) api_versionr Optional[str]types.ModuleTypecb|'|dstd|tS)Nz2021.z Unrecognized array API version: )rS ValueErrorr)r0rs r*__array_namespace__zArray.__array_namespace__s:  ";+A+A'+J+J "O OOPP Pr,rPcv|jjdkrtd|j}|S)z2 Performs the operation __bool__. rz0bool is only allowed on arrays with 0 dimensions)rr_r%__bool__rs r*rzArray.__bool__s; ; q NOO Ok""$$ r,rNcv|jjdkrtd|j}|S)z5 Performs the operation __complex__. rz3complex is only allowed on arrays with 0 dimensions)rr_r% __complex__rs r*rzArray.__complex__s; ; q QRR Rk%%'' r,streamrNonerc8|j|S)z4 Performs the operation __dlpack__. r)r __dlpack__)r0rs r*rzArray.__dlpack__s{%%V%444r,Tuple[IntEnum, int]c4|jS)z; Performs the operation __dlpack_device__. )r__dlpack_device__r7s r*rzArray.__dlpack_device__s {,,...r,Union[int, float, bool, Array]c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __eq__. all__eq__)rUrRrbrrr)r+rs r*rz Array.__eq__sq **5%BB N " "L..tU;; ek  ..~""3'''r,rOc|jjdkrtd|jtvrtd|j}|S)z3 Performs the operation __float__. rz1float is only allowed on arrays with 0 dimensionsz5float is not allowed on complex floating-point arrays)rr_r%r$r __float__rs r*rzArray.__float__sX ; q OPP P :1 1 1STT Tk##%% r,c||dd}|tur|S|||\}}|j|j}|j|S)z6 Performs the operation __floordiv__. real numeric __floordiv__)rUrRrbrrr)r+rs r*rzArray.__floordiv__ sq**5..QQ N " "L..tU;; ek&&u|44~""3'''r,c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __ge__. r__ge__)rUrRrbrrr)r+rs r*rz Array.__ge__q**5.(KK N " "L..tU;; ek  ..~""3'''r,rrKUnion[int, slice, ellipsis, Tuple[Union[int, slice, ellipsis], ...], Array]c||t|tr|j}|j|}||S)z5 Performs the operation __getitem__. )rr!rr __getitem__r+)r0rrrs r*rzArray.__getitem__sV S!!! c5 ! ! *Ck%%c**yy~~r,c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __gt__. r__gt__)rUrRrbrrr)r+rs r*rz Array.__gt__2rr,rMc|jjdkrtd|jtvrtd|j}|S)z1 Performs the operation __int__. rz/int is only allowed on arrays with 0 dimensionsz3int is not allowed on complex floating-point arrays)rr_r%r$r __int__rs r*rz Array.__int__=sX ; q MNN N :1 1 1QRR Rk!!## r,c8|j}|S)z3 Performs the operation __index__. )r __index__rs r*rzArray.__index__Isk##%% r,c|jtvrtd|j}|j|S)z4 Performs the operation __invert__. z8Only integer or boolean dtypes are allowed in __invert__)r$r r%r __invert__r)r+rs r*rzArray.__invert__PsJ :7 7 7VWW Wk$$&&~""3'''r,c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __le__. r__le__)rUrRrbrrr)r+rs r*rz Array.__le__Yrr,Union[int, Array]c||dd}|tur|S|||\}}|j|j}|j|S)z4 Performs the operation __lshift__. integer __lshift__)rUrRrbrrr)r+rs r*rzArray.__lshift__dq**5)\JJ N " "L..tU;; ek$$U\22~""3'''r,c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __lt__. r__lt__)rUrRrbrrr)r+rs r*rz Array.__lt__orr,c||dd}|tur|S|j|j}|j|S)z4 Performs the operation __matmul__. r __matmul__)rUrRrrr)r+rs r*rzArray.__matmul__zsX **5)\JJ N " "Lk$$U\22~""3'''r,c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __mod__. r__mod__)rUrRrbrrr)r+rs r*rz Array.__mod__sq**5.)LL N " "L..tU;; ek!!%,//~""3'''r,c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __mul__. r__mul__)rUrRrbrrr)r+rs r*rz Array.__mul__rr,c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __ne__. r__ne__)rUrRrbrrr)r+rs r*rz Array.__ne__sq**5%BB N " "L..tU;; ek  ..~""3'''r,c|jtvrtd|j}|j|S)z1 Performs the operation __neg__. z*Only numeric dtypes are allowed in __neg__)r$r r%r__neg__r)r+rs r*rz Array.__neg__rr,c||dd}|tur|S|||\}}|j|j}|j|S)z0 Performs the operation __or__. r__or__)rUrRrbrrr)r+rs r*rz Array.__or__sr**52FQQ N " "L..tU;; ek  ..~""3'''r,c|jtvrtd|j}|j|S)z1 Performs the operation __pos__. z*Only numeric dtypes are allowed in __pos__)r$r r%r__pos__r)r+rs r*rz Array.__pos__rr,cjddlm}||dd}|tur|S|||S)z1 Performs the operation __pow__. rpowr__pow___elementwise_functionsrrUrRr0rFrs r*rz Array.__pow__sQ 0/////**5)YGG N " "Ls4r,c||dd}|tur|S|||\}}|j|j}|j|S)z4 Performs the operation __rshift__. r __rshift__)rUrRrbrrr)r+rs r*rzArray.__rshift__rr,valuec||t|tr|j}|j|t |jdS)z5 Performs the operation __setitem__. N)rr!rr __setitem__r)r0rrrs r*rzArray.__setitem__sX S!!! c5 ! ! *C WU^^%:;;;;;r,c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __sub__. r__sub__)rUrRrbrrr)r+rs r*rz Array.__sub__rr,Union[float, Array]c||dd}|tur|S|||\}}|j|j}|j|S)z5 Performs the operation __truediv__. floating-point __truediv__)rUrRrbrrr)r+rs r*rzArray.__truediv__sr**52BMRR N " "L..tU;; ek%%el33~""3'''r,c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __xor__. r__xor__)rUrRrbrrr)r+rs r*rz Array.__xor__rr,c||dd}|tur|S|j|j|S)z2 Performs the operation __iadd__. r__iadd__)rUrRrrr0rFs r*rzArray.__iadd__H**5)ZHH N " "L U\*** r,c||dd}|tur|S|||\}}|j|j}|j|S)z2 Performs the operation __radd__. r__radd__)rUrRrbrrr)r+rs r*rzArray.__radd__q**5)ZHH N " "L..tU;; ek""5<00~""3'''r,c||dd}|tur|S|j|j|S)z2 Performs the operation __iand__. r__iand__)rUrRrrrs r*rzArray.__iand__'I**52F SS N " "L U\*** r,c||dd}|tur|S|||\}}|j|j}|j|S)z2 Performs the operation __rand__. r__rand__)rUrRrbrrr)r+rs r*rzArray.__rand__1r**52F SS N " "L..tU;; ek""5<00~""3'''r,c||dd}|tur|S|j|j|S)z7 Performs the operation __ifloordiv__. r __ifloordiv__)rUrRrrrs r*rzArray.__ifloordiv__<sH**5./RR N " "L !!%,/// r,c||dd}|tur|S|||\}}|j|j}|j|S)z7 Performs the operation __rfloordiv__. r __rfloordiv__)rUrRrbrrr)r+rs r*rzArray.__rfloordiv__Fsq**5./RR N " "L..tU;; ek'' 55~""3'''r,c||dd}|tur|S|j|j|S)z5 Performs the operation __ilshift__. r __ilshift__)rUrRrrrs r*rzArray.__ilshift__QH**5)]KK N " "L  --- r,c||dd}|tur|S|||\}}|j|j}|j|S)z5 Performs the operation __rlshift__. r __rlshift__)rUrRrbrrr)r+rs r*rzArray.__rlshift__[q**5)]KK N " "L..tU;; ek%%el33~""3'''r,c||dd}|tur|S|j|j}|j|S)z5 Performs the operation __imatmul__. r __imatmul__)rUrRrrr)r+rs r*rzArray.__imatmul__fX **5)]KK N " "Lk%%el33~""3'''r,c||dd}|tur|S|j|j}|j|S)z5 Performs the operation __rmatmul__. r __rmatmul__)rUrRrrr)r+rs r*rzArray.__rmatmul__rrr,c||dd}|tur|S|j|j|S)z2 Performs the operation __imod__. r__imod__)rUrRrrrs r*rzArray.__imod__~sH**5.*MM N " "L U\*** r,c||dd}|tur|S|||\}}|j|j}|j|S)z2 Performs the operation __rmod__. r__rmod__)rUrRrbrrr)r+rs r*rzArray.__rmod__sq**5.*MM N " "L..tU;; ek""5<00~""3'''r,c||dd}|tur|S|j|j|S)z2 Performs the operation __imul__. r__imul__)rUrRrrrs r*rzArray.__imul__rr,c||dd}|tur|S|||\}}|j|j}|j|S)z2 Performs the operation __rmul__. r__rmul__)rUrRrbrrr)r+rs r*rzArray.__rmul__rr,c||dd}|tur|S|j|j|S)z1 Performs the operation __ior__. r__ior__)rUrRrr rs r*r z Array.__ior__sI**52F RR N " "L EL))) r,c||dd}|tur|S|||\}}|j|j}|j|S)z1 Performs the operation __ror__. r__ror__)rUrRrbrr r)r+rs r*r z Array.__ror__rr,c||dd}|tur|S|j|j|S)z2 Performs the operation __ipow__. r__ipow__)rUrRrrrs r*rzArray.__ipow__rr,cjddlm}||dd}|tur|S|||S)z2 Performs the operation __rpow__. rrr__rpow__rrs r*rzArray.__rpow__sQ 0/////**5)ZHH N " "Ls5$r,c||dd}|tur|S|j|j|S)z5 Performs the operation __irshift__. r __irshift__)rUrRrrrs r*rzArray.__irshift__rr,c||dd}|tur|S|||\}}|j|j}|j|S)z5 Performs the operation __rrshift__. r __rrshift__)rUrRrbrrr)r+rs r*rzArray.__rrshift__rr,c||dd}|tur|S|j|j|S)z2 Performs the operation __isub__. r__isub__)rUrRrrrs r*rzArray.__isub__rr,c||dd}|tur|S|||\}}|j|j}|j|S)z2 Performs the operation __rsub__. r__rsub__)rUrRrbrrr)r+rs r*rzArray.__rsub__rr,c||dd}|tur|S|j|j|S)z6 Performs the operation __itruediv__. r __itruediv__)rUrRrrrs r*rzArray.__itruediv__sI**52BNSS N " "L   ... r,c||dd}|tur|S|||\}}|j|j}|j|S)z6 Performs the operation __rtruediv__. r __rtruediv__)rUrRrbrrr)r+rs r*rzArray.__rtruediv__sr**52BNSS N " "L..tU;; ek&&u|44~""3'''r,c||dd}|tur|S|j|j|S)z2 Performs the operation __ixor__. r__ixor__)rUrRrrrs r*rzArray.__ixor__rr,c||dd}|tur|S|||\}}|j|j}|j|S)z2 Performs the operation __rxor__. r__rxor__)rUrRrbrr r)r+rs r*r zArray.__rxor__rr,devicercX|td|dkr|Std|)Nz3The stream argument to to_device() is not supportedcpuzUnsupported device )r)r0r!rs r* to_devicezArray.to_device(s<  RSS S U??K9v99:::r,rc|jjS)z Array API compatible wrapper for :py:meth:`np.ndarray.dtype `. See its docstring for more information. )rr$r7s r*r$z Array.dtype/{  r,cdS)Nr#r7s r*r!z Array.device8sur,c$ddlm}||S)Nr)matrix_transpose)linalgr*)r0r*s r*mTzArray.mT=s%,,,,,,%%%r,c|jjS)z Array API compatible wrapper for :py:meth:`np.ndarray.ndim `. See its docstring for more information. )rr_r7s r*r_z Array.ndimB{r,Tuple[int, ...]c|jjS)z Array API compatible wrapper for :py:meth:`np.ndarray.shape `. See its docstring for more information. )rr>r7s r*r>z Array.shapeKr&r,c|jjS)z Array API compatible wrapper for :py:meth:`np.ndarray.size `. See its docstring for more information. )rsizer7s r*r2z Array.sizeTr.r,c~|jdkrtd|j|jjS)z Array API compatible wrapper for :py:meth:`np.ndarray.T `. See its docstring for more information. zwx.T requires x to have 2 dimensions. Use x.mT to transpose stacks of matrices and permute_dims() to permute dimensions.)r_rr)r+rTr7s r*r5zArray.T]sD 9>>WXX X~""4;=111r,)r0rr1r2)N)r$rBr1rC)rFrGrHr2rIr2r1r)r1r])r0rr1r)r0rrFrr1r)r0rrFrr1r)r0rrrr1r)r0rr1rP)r0rr1rN)r0rrrr1r)r0rr1r)r0rrFrr1r)r0rr1rO)r0rrrrr1r)r0rr1rM)r0rrFrr1r)r0rrFrr1r)rrrrrr1r)r0rrFrr1r)rrr0rr!rr1r)r1r)r1r)r1r)r1rM)r1r/)U__name__ __module__ __qualname____doc____annotations__ classmethodr+r r5rArErUrQ staticmethodrbrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r rrrrrrrrrr r$propertyr$r!r,r_r>r2r5 __classcell__)r)s@r*rr-s  !   [.   ???? % % % %44444''''T080808d   \ HbbbL(((( ( ( ( ( ( ( ( (9=6:555555 //// ( ( ( (     ( ( ( ( ( ( ( (& ( ( ( (    (((( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ((((( ( ( ( (((((      ( ( ( (<<<<& ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (      ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (;;;;;!!!X!X&&&X&   X !!!X!   X  2 2 2X 2 2 2 2 2r,r)$r9 __future__rroenumr_creation_functionsr_dtypesrrr r r r r rrtypingrrrrrrtypes_typingrrr numpy.typingnptnumpyr"rrr(r,r*rIs  #"""""((((((                      MLLLLLLLLLLLLLLL 666666666666|2|2|2|2|2|2|2|2|2|2r,