bgddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z ddlmZmZmZddlZgdZdZdZGd d Zd Zd Zd ZdZd!dZdZdadad"dZ d!dZ!e dd#dZ"e dej#fdZ$iZ%ej&dej'Z(e d d$dZ)dZ*dZ+dZ,dZ-dZ.d Z/dS)%N) set_module) issubclass_ issubsctype issubdtype)ndarrayufuncasarray) rrr deprecatedeprecate_with_doc get_includeinfosourcewholookfor byte_bounds safe_eval show_runtimecddlm}m}m}ddlm}t jtjtj dg}gg}}|D]5}||r| | | |6| d|||di ddl m }||n#t$rt!dYnwxYw||d S) a( Print information about various resources in the system including available intrinsic support and BLAS/LAPACK library in use .. versionadded:: 1.24.0 See Also -------- show_config : Show libraries in the system on which NumPy was built. Notes ----- 1. Information is derived with the help of `threadpoolctl `_ library if available. 2. SIMD related information is derived from ``__cpu_features__``, ``__cpu_baseline__`` and ``__cpu_dispatch__`` r__cpu_features____cpu_baseline____cpu_dispatch__)pprint) numpy_versionpythonunamesimd_extensions)baselinefound not_found)threadpool_infozWARNING: `threadpoolctl` not found in system! Install it by `pip install threadpoolctl`. Once installed, try `np.show_runtime` again for more detailed build informationN)numpy.core._multiarray_umathrrrrnp __version__sysversionplatformrappend threadpoolctlr"extend ImportErrorprint) rrrr config_foundfeatures_foundfeatures_not_foundfeaturer"s F/opt/cloudlinux/venv/lib64/python3.11/site-packages/numpy/lib/utils.pyrrs(+!!   L *,R&N#// G $ /  ! !' * * * *  % %g . . . .(#+  6111111OO--.... 666 5 6 6 6 6 66  F<s#B99CCc4ddl}|jDtjtj|jdd}nHddlm}tjtj|jd}|S)a Return the directory that contains the NumPy \*.h header files. Extension modules that need to compile against NumPy should use this function to locate the appropriate include directory. Notes ----- When using ``distutils``, for example in ``setup.py``:: import numpy as np ... Extension('extension_name', ... include_dirs=[np.get_include()]) ... rNcoreinclude) numpy show_configospathjoindirname__file__ numpy.corer4)r6dr4s r2r r Ks}$LLL  GLL88&) L L "!!!!! GLL77 C C Hc eZdZdZddZdZdS) _Deprecatez Decorator class to deprecate old functions. Refer to `deprecate` for details. See Also -------- deprecate Nc0||_||_||_dSN)old_namenew_namemessage)selfrDrErFs r2__init__z_Deprecate.__init__ts     r?c |j}|j}|j}|j}|d|z n d|d|d | d|zz t j fd}||_j}| }n|d} t| dd} | d  r | d z|z}nYt| d dz} | ddD],} t| | krn| t| dzz } -|| d}tj d | z d  |g}||_|S) z: Decorator call. Refer to ``decorate``. Nz`%s` is deprecated!`z` is deprecated, use `z ` instead! cLtjtd|i|S)Nr) stacklevel)warningswarnDeprecationWarning)argskwdsdepdocfuncs r2newfuncz$_Deprecate.__call__..newfuncs0 M&"4 C C C C4&&& &r?r z )rDrErF__name__ functoolswraps__doc__ expandtabssplit _get_indentlstriplentextwrapindentr:)rGrTrQkwargsrDrErFrUdoclinesrbskiplinerSs ` @r2__call__z_Deprecate.__call__ys ==,  }H  *X5FF hh*F   dWn $F    ' ' ' ' '   '$l ;CCNN$$**400E qrr++FQx  !slS(58}}q(!!""I**D4yy6))CIIM)DD$%%j_VS6\::F++vsm,,Cr?)NNN)rX __module__ __qualname__r[rHrhr?r2rArAhsA   00000r?rActj}|D]E}t|}|r t |t||z }F|tjkrd}|S)zU Determines the leading whitespace that could be removed from all the lines. r)r&maxsizer`r_min)rerbrgcontents r2r^r^si[F66dkkmm$$  6TW!455F  Mr?cl|r'|d}|dd}t|i||St|i|S)a Issues a DeprecationWarning, adds warning to `old_name`'s docstring, rebinds ``old_name.__name__`` and returns the new function object. This function may also be used as a decorator. Parameters ---------- func : function The function to be deprecated. old_name : str, optional The name of the function to be deprecated. Default is None, in which case the name of `func` is used. new_name : str, optional The new name for the function. Default is None, in which case the deprecation message is that `old_name` is deprecated. If given, the deprecation message is that `old_name` is deprecated and `new_name` should be used instead. message : str, optional Additional explanation of the deprecation. Displayed in the docstring after the warning. Returns ------- old_func : function The deprecated function. Examples -------- Note that ``olduint`` returns a value after printing Deprecation Warning: >>> olduint = np.deprecate(np.uint) DeprecationWarning: `uint64` is deprecated! # may vary >>> olduint(6) 6 rrVNrA)rQrcfns r2r r sSX + !WABBx*z4*6**2...4*6***r?c"t|S)a Deprecates a function and includes the deprecation in its docstring. This function is used as a decorator. It returns an object that can be used to issue a DeprecationWarning, by passing the to-be decorated function as argument, this adds warning to the to-be decorated function's docstring and returns the new function object. See Also -------- deprecate : Decorate a function such that it issues a `DeprecationWarning` Parameters ---------- msg : str Additional explanation of the deprecation. Displayed in the docstring after the warning. Returns ------- obj : object )rFrq)msgs r2r r s0 c " " ""r?c|j}|dd}|d}|d}t|jj}|x}}|||j|zz }n8t ||D]"\}} | dkr ||dz | zz }||dz | zz }#||z }||fS)a# Returns pointers to the end-points of an array. Parameters ---------- a : ndarray Input array. It must conform to the Python-side of the array interface. Returns ------- (low, high) : tuple of 2 integers The first integer is the first byte of the array, the second integer is just past the last byte of the array. If `a` is not contiguous it will not use every byte between the (`low`, `high`) values. Examples -------- >>> I = np.eye(2, dtype='f'); I.dtype dtype('float32') >>> low, high = np.byte_bounds(I) >>> high - low == I.size*I.itemsize True >>> I = np.eye(2); I.dtype dtype('float64') >>> low, high = np.byte_bounds(I) >>> high - low == I.size*I.itemsize True datarstridesshapeNrV)__array_interface__r dtypeitemsizesizezip) aaia_dataastridesashapebytes_aa_lowa_highrxstrides r2rrs@ B Z]F)}H [Fajj'GEF!&7"" 22 + +ME6zz%'6))57F**' &=r?c|tjj}|j}g}i}|D]}t ||t r||}t|}||vr|d||zz}d}n |||<|}d}dtt|j } t|j } | || | |jj|gd} d} d} d}|D]}| t!|dkrt!|d} | t!|dkrt!|d} | t!|dkrt!|d} |dr|t#|dz }t!|dkrpt%d| }t%d| }t%d| }d |d zd |d zd |d zd }t'|dzdt!|dzzzdz|D]}t'|dd d |t!|dz dzzd |dd d |t!|dz dzzd |dd d |t!|dz dzzd |d t'd|zdS)a% Print the NumPy arrays in the given dictionary. If there is no dictionary passed in or `vardict` is None then returns NumPy arrays in the globals() dictionary (all NumPy arrays in the namespace). Parameters ---------- vardict : dict, optional A dictionary possibly containing ndarrays. Default is globals(). Returns ------- out : None Returns 'None'. Notes ----- Prints out the name, shape, bytes and type of all of the ndarrays present in `vardict`. Examples -------- >>> a = np.arange(10) >>> b = np.ones(20) >>> np.who() Name Shape Bytes Type =========================================================== a 10 80 int64 b 20 160 float64 Upper bound on total bytes = 240 >>> d = {'x': np.arange(2.0), 'y': np.arange(3.0), 'txt': 'Some str', ... 'idx':5} >>> np.who(d) Name Shape Bytes Type =========================================================== x 2 16 float64 y 3 24 float64 Upper bound on total bytes = 40 Nz (%s)rrVz x r zName rWz Shape z Bytes z TyperK=z' Upper bound on total bytes = %d)r& _getframef_back f_globalskeys isinstanceridr:mapstrrxnbytesr)rznamer`intmaxr-)vardictframestacachervaridvnamestroriginalshapestrbytestrmaxnamemaxshapemaxbyte totalbytesvalsp1sp2sp3prvals r2rrGs X &/ C E ## gdmW - - #$-CS''Cejjll""5:!55!c zz#c39"5"566H#*ooG JJ7CIN " # # #GHGJ&& SQ[[ #a&kkG c#a&kk ! !3q6{{H SQ[[ #a&kkG q6 & #c!f++ %J 3xx!||"g"h"g47GGGSWWWc#gggN edlS#e**Q,//$677711 ASSV_Q5F0G0G0G(+ASSV_Q5F0G0G0G(+ASSV_Q5F0G0G0G(+A0 1 1 1 1 4z ABBB Fr?c(t|}|}|}d}||}|D]d}||krd} n|} |t|zt| z}||kr'|dzt|z}|dzd|dzzz|z}\|| z|z}e|S)Nz, rVz, rWr)r`r]) r argumentswidth firstwidthknewstrsepstrarglistargumentaddstrs r2 _split_linersTJA F Foof%%G 0 0 ??FFF H F + u99QX.Ae^c:a<&888CFFf_x/FF Mr?r6ct|ttg}|j|ji}|jg}|jg} t |dkrn|d}|D]o}t||tj rM||j}||vr<||j}| || ||||<p||fS)NTr) __import__globalslocalsrX__dict__r`poprrtypes ModuleTyper))modulethedictdictlist totraversethisdictxmodnamemoddicts r2 _makenamedictrs  688R 8 8Fv/G H/"J / z??a   >>!$$ / /A(1+u'788 /"1+.(**&qk2GOOG,,,%%g...'.GG$ / H r?c d}d}d}t|dt|}t|d|}|j}|jj}| t j}td||td|j|td ||td |j |td ||j j |td ||j j |td |j j |tdt|jjj||tdd||dvr$t|t j||d} nS|dkr't|d||t jdk} n&t|d||t jdk} td|| |td|jz|dS)aOProvide information about ndarray obj. Parameters ---------- obj : ndarray Must be ndarray, not checked. output Where printed output goes. Notes ----- Copied over from the numarray module prior to its removal. Adapted somewhat as only numpy is an option now. Called by info. rc|SrCrk)rs r2z_info..s1r? __class__rXNzclass: filezshape: z strides: z itemsize: z aligned: z contiguous: z fortran: zdata pointer: z byteorder: rW)endr)|rF>biglittlez byteswap: ztype: %s)getattrtyperwrz byteorderr&stdoutr-rxr{flagsaligned contiguousfortranhexctypes_as_parameter_value) objoutputextraticbpclsnmrwendianbyteswaps r2_infors4$ E C B #{DII . .C j# & &BkG Y F ~ )Rf%%%% )SYV,,,, +wV,,,, , 62222 +rr#)+,,6:::: .""SY122@@@@ +sy(v6666 E #CJ$=$C D D DeeL      -Sv....  ##s}}cc2@@@@ 3 333$62222=E) ccc33'f5555=H, ,8 62222 *sy v......r?Lcddl}ddl}t|dst|dr|j}nt|dr|j}| t j}|ttdSt|trt||dSt|trtt|\a ad}g}tD]} t||} t| |vrt!d|z|nY|t| t!d |z|t| t!d |z||d z }#t$$rYwxYw|dkrt!d |z|dSt!d |z|dS||s||r|j} t||} n#t.$rd} YnwxYwt1| | z|krt3| | |} n| | z} t!d| zdz|t!|||dS||r|j} t||} n#t.$rd} YnwxYwt1| | z|krt3| | |} n| | z} t!d| zdz|||} | :t|dr)t!||j|n$t!|||||}d|D}|rmt!d||D][}t=||d}|-|||pd\}}t!d|d||ZdSdSt|dr&t!|||dSdS)a Get help information for an array, function, class, or module. Parameters ---------- object : object or str, optional Input object or name to get information about. If `object` is an `ndarray` instance, information about the array is printed. If `object` is a numpy object, its docstring is given. If it is a string, available modules are searched for matching objects. If None, information about `info` itself is returned. maxwidth : int, optional Printing width. output : file like object, optional File like object that the output is written to, default is ``None``, in which case ``sys.stdout`` will be used. The object has to be opened in 'w' or 'a' mode. toplevel : str, optional Start search at this level. See Also -------- source, lookfor Notes ----- When used interactively with an object, ``np.info(obj)`` is equivalent to ``help(obj)`` on the Python prompt or ``obj?`` on the IPython prompt. Examples -------- >>> np.info(np.polyval) # doctest: +SKIP polyval(p, x) Evaluate the polynomial p at x. ... When using a string for `object` it is possible to get multiple results. >>> np.info('fft') # doctest: +SKIP *** Found in numpy *** Core FFT routines ... *** Found in numpy.fft *** fft(a, n=None, axis=-1) ... *** Repeat reference found in numpy.fft.fftpack *** *** Total of 3 references found. *** When the argument is an array, information about the array is printed. >>> a = np.array([[1 + 2j, 3, -4], [-5j, 6, 0]], dtype=np.complex64) >>> np.info(a) class: ndarray shape: (2, 3) strides: (24, 8) itemsize: 8 aligned: True contiguous: True fortran: False data pointer: 0x562b6e0d2860 # may vary byteorder: little byteswap: False type: complex64 rN_ppimport_importer_ppimport_module_ppimport_attr)rz+ *** Repeat reference found in %s *** rz *** Found in %s ***-rVzHelp for %s not found.z+ *** Total of %d references found. ***z()rWrKrHc*g|]}|ddk|S)r_rk).0meths r2 zinfo..s!EEE4d1gnn$nnnr?z Methods: Nonez z -- r[) pydocinspecthasattrrrr&rrrrrr _namedictr _dictlistrr-r)KeyError isfunctionismethodrX signature Exceptionr`rgetdocisclassrH allmethodsrsplitdoc)objectmaxwidthrtoplevelrrnumfoundobjlistrrrrargstrdoc1methodspublic_methodsrthisobjmethstrothers r2rrsCLLLLNNN,--' 6- . .'( ) * *'& ~ ~ T FG $ $P3 fV$$$$$$ FC N3  #0#:#: Iy   G (0c77g%%BDKL% NN2c77+++4w>VLLLLIII#h,V4444A      q== *V3& A A A A A A :>> np.source(np.interp) #doctest: +SKIP In file: /usr/lib/python2.6/dist-packages/numpy/lib/function_base.py def interp(x, xp, fp, left=None, right=None): """.... (full docstring printed)""" if isinstance(x, (float, int, number)): return compiled_interp([x], xp, fp, left, right).item() else: return compiled_interp(x, xp, fp, left, right) The source code is only returned for objects written in Python. >>> np.source(np.array) #doctest: +SKIP Not available for this object. rNz In file: %s rzNot available for this object.)rr- getsourcefile getsourcer)rrrs r2rrsRNNN= o 5 5f = ==FKKKK g''f555555 === .V<<<<<<<=sA AA21A2z[a-z0-9_]+\(.*[,=].*\)TFc ddl}t|||g}t|sdSD]R\}\}} } | dvr|t fdDr||Sdddddfdfd } || d d z} | d t| zg} |dddD]}|\} }d dD} |d }t |r|d }n#t$rd}YnwxYw| |d||s| d|*|d | dSt| dkr4|}|d | dSt#d | dS)a Do a keyword search on docstrings. A list of objects that matched the search is displayed, sorted by relevance. All given keywords need to be found in the docstring for it to be returned as a result, but the order does not matter. Parameters ---------- what : str String containing words to look for. module : str or list, optional Name of module(s) whose docstrings to go through. import_modules : bool, optional Whether to import sub-modules in packages. Default is True. regenerate : bool, optional Whether to re-generate the docstring cache. Default is False. output : file-like, optional File-like object to write the output to. If omitted, use a pager. See Also -------- source, info Notes ----- Relevance is determined only roughly, by checking if the keywords occur in the function name, at the start of a docstring, etc. Examples -------- >>> np.lookfor('binary representation') # doctest: +SKIP Search results for 'binary representation' ------------------------------------------ numpy.binary_repr Return the binary representation of the input number as a string. numpy.core.setup_common.long_double_representation Given a binary dump as given by GNU od -b, look for long double numpy.base_repr Return a string representation of a number in the given base system. ... rN)rrc3 K|]}|vV dSrCrk)rwrds r2 zlookfor..2s'''AqCx''''''r?i)rTclassrrcd}d|ddd|t fdDz }|t fdDz }|t  dzz }||dz }|d d zz }|t| d z d z }|S) NrrKrcg|]}|vd S)rk)rr first_docs r2rz.lookfor..relevance..@s777!Y#r?cg|]}|vd S)rk)rrrs r2rz.lookfor..relevance..Bs111qDyy"yyyr?rr.rdi) r:lowerstripr]sumr`getcountr)rdocstrkindindexrrkind_relevancewhatss` @r2 relevancezlookfor..relevance<s IIfllnn2244::4@@!DEE  S7777u777 8 88 S1111e111 2 22 c$iiZ!^ ^  e , ,, djjoo  "" S%#t $ $$r?c"|g|RSrCrk)r~rr,s r2relevance_valuez lookfor..relevance_valueLsy&U1X&&&&r?)keyzSearch results for '%s'rWrc^g|]*}||+Srk)r")rrgs r2rzlookfor..Vs<%%%Tzz||%DJJLL%%%r?rKrVrz zNothing found.r)r_lookfor_generate_cacherr!r]itemsallr)sortr:r`r"_function_signature_research IndexErrorwritegetpagerr-)whatrimport_modules regeneraterrr r docstringr'r(r.s help_textixdoclinesrpagerrrdr*r,r+s @@@@@r2rrs^LLL $FNJ G GE E IIOO   # # % %E */++--&&y$ ' ' ' oo ''''''' ' '  LL    #T %88N '''''' JJ?J### "SXXe__5ACAJIddd ; ;d T2%%SYY[[->->t-D-D%%%   ))++I%,,Y77 0$QK--//    III yy9:::: +)*** TYYy))***** Y"     dii ""##### dii ""#####sAF** F98F9cddl}ddlm}|d}t|tr6 t |n#t $ricYSwxYwtj|}nWt|tst|tr-i}|D]&}| t|||'|St|tvr|stt|Si}|tt|<i}d}|j|fg} | r]| d\} } t| |vr-d|t| <|dz }d} || rsd} | j} n#t&$rd} YnwxYw|rt)| d rv| jD]m}t-j|D]T}t,j||}t,j||d }t,j|r |d r |dd }n#t,j|r|}n|d kr tj}tj} |t_|t_t | d||t_|t_n#|t_|t_wxYw;#t<$rt>$rYRwxYwotA| D]\}} tC|d| d|}tC|dd}n#tD$r | d|}d}YnwxYwd|vr |r|d|}|#| dzst|tHrn||s| || vs| %| d||fn[|&| r4d} tA| D]!\}}| %| d||f"nt)| drd} |'| }n#tD$rd}YnwxYw||| |f|| <| ]|S)a Generate docstring cache for given module. Parameters ---------- module : str, None, module Module for which to generate docstring cache import_modules : bool Whether to import sub-modules in packages. regenerate : bool Re-generate the docstring cache Returns ------- cache : dict {obj_full_name: (docstring, kind, index), ...} Docstring cache for the module, either cached one (regenerate=False) or newly generated. rN)StringIOr6TrVrr__path__z __init__.pyz.pyrHrrXrirrhrT)(riorErrrr,r&moduleslisttupleupdater2r_lookfor_cachesrXrismodule__all__AttributeErrorrrFr8listdirr9r:isfileendswithrstderrKeyboardInterrupt BaseException _getmembersr NameError startswithr r)rr)rr<r=rrErmodseenr(stackritemr'_allpthmod_paththis_pyinit_py to_import old_stdout old_stderrnv item_namemod_namerds r2r2r2nsv*NNN ~&#   v       III V$ FD ! !Z%>%> > >C LL0n1;== > > > >  &zz_$$Z$r&zz** E"'OBvJJ D Eov & 'E U-YYq\\ d d88t   RXX     D ! !D D |!     %'$ ";"; %=%%C$&JsOO%%"$',,sH"="="$',,sHm"L"LGNN733% ( 1 1% 8 8%(0" IIW^^G44%(0II$$ 22$%),J),J8-5XZZ -5XZZ *dddII+F G G G-7 -7 .8 -7 7 7 7 7 0"""!,%%%%H%5%>$D)) 7 71$ ':$$$7J K KI&q,==HH $$$,044 3I#HHH $ i''H'+388YY ?I ++D3J77!!U++! !**1--d qq1156666+ 7,__T " " D#D)) 7 71 qq1156666 7 T: & & D ..&&CC   CCC  ?e,E$Kk U-n Lso5 AA)E11 F?F#K0<.sF(((QdA&&(AwtQ''((((r?)r getmembersrdir)r]rmemberss` r2rWrWsyNNN($$T** (((((((#d))(((( Ns%AAc4ddl}||S)au Protected string evaluation. Evaluate a string containing a Python literal expression without allowing the execution of arbitrary non-literal code. .. warning:: This function is identical to :py:meth:`ast.literal_eval` and has the same security implications. It may not always be safe to evaluate large input strings. Parameters ---------- source : str The string to evaluate. Returns ------- obj : object The result of evaluating `source`. Raises ------ SyntaxError If the code has invalid Python syntax, or if it contains non-literal code. Examples -------- >>> np.safe_eval('1') 1 >>> np.safe_eval('[1, 2, 3]') [1, 2, 3] >>> np.safe_eval('{"foo": ("bar", 10.0)}') {'foo': ('bar', 10.0)} >>> np.safe_eval('import os') Traceback (most recent call last): ... SyntaxError: invalid syntax >>> np.safe_eval('open("/home/user/.ssh/id_dsa").read()') Traceback (most recent call last): ... ValueError: malformed node or string: <_ast.Call object at 0x...> rN)ast literal_eval)rrps r2rrs"dJJJ   F # ##r?cp|jdkr|S|d|}tj|}tj|r|d}|s|St|tj r|Stj ||||S)a{ Utility function to check median result from data for NaN values at the end and return NaN in that case. Input result can also be a MaskedArray. Parameters ---------- data : array Sorted input data to median function result : Array or MaskedArray Result of median function. axis : int Axis along which the median was computed. Returns ------- result : scalar or ndarray Median or NaN in axes which contained NaN in the input. If the input was an array, NaN will be inserted in-place. If a scalar, either the input itself or a scalar NaN. rr0)axisF)where) r|taker$isnanma isMaskedArrayfilledanyrgenericcopyto)rvresultrspotential_nansrfs r2_median_nancheckr9s* yA~~ YYrY--N   A u1 HHUOO 5577 &"*%%IfnA.... Mr?cddlm}m}m}t |dkrt |dkrdSd|}|D]}||r |d|dz }|d|dz }|S)a Returns a string contains the supported CPU features by the current build. The string format can be explained as follows: - dispatched features that are supported by the running machine end with `*`. - dispatched features that are "not" supported by the running machine end with `?`. - remained features are representing the baseline. rrrrW*?)r#rrrr`r:)rrrenabled_featuresr1s r2 _opt_inforcs !!c*:&;&;q&@&@rxx 011#// G $ / G .   G .   r?c|j|jdu}g}g}g}g}|jD]\}}t|d}||durd}||||||d|t |dkrdn|d|s|St |||||j} tj | |j S|j <|j \} } t| } |j| | ur|Stj | | fS|j|Stj |j S) a Returns the dtype unchanged if it contained no metadata or a copy of the dtype if it (or any of its structure dtypes) contained metadata. This utility is used by `np.save` and `np.savez` to drop metadata before saving. .. note:: Due to its limitation this function may move to a more appropriate home or change in the future and is considered semi-public API only. .. warning:: This function does not preserve more strange things like record dtypes and user dtypes may simply return the wrong thing. If you need to be sure about the latter, check the result with: ``np.can_cast(new_dtype, dtype, casting="no")``. NrTrVrr)namesformatsoffsetstitlesr{)align) fieldsmetadatar3 drop_metadatar)r`dictr{r$rzisalignedstructsubdtyper) rzfound_metadatarrrrrfieldfield_dt structurerrx new_subdtypes r2rrs* |t3 <--// @ @KD%$U1X..HuQx''!% LL    NN8 $ $ $ NN58 $ $ $ MM#e**q..$$eAh ? ? ? ? L'&^%%% x )>????  #.%$X.. > !lh&>&>Lxu-... > !Lx """r?rC)r6)NrNr6)NTFN)0r8r&rarrerNrYr(_utilsrnumpy.core.numerictypesrrrr=rr r r6r$rOrr rAr^r r rrrrrrrrrrrMcompileIr6rr2rWrrrrrkr?r2rs  HHHHHHHHHH..........   222j   :AAAAAAAAH   2+2+2+j###>111r\ \ \ \ N&   (3/3/3/3/l Gc3c3c3c3L G*-=-=-=-=f$$=rtDD G?Dy$y$y$y$vIIIV3$3$3$l(((T8<#<#<#<#<#r?