§
    Ëãßc3�  ã                   óÂ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZ d dlZg d¢Zd„ Zd„ Z G d„ d	¦  «        Zd
„ Zd„ Zd„ Zd„ Zdd„Zd„ Zdadad d„Zdd„Z  ed¦  «        d!d„¦   «         Z! ed¦  «        ej"        fd„¦   «         Z#i Z$ ej%        dej&        ¦  «        Z' ed¦  «        	 	 d"d„¦   «         Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-dS )#é    N)Úissubclass_ÚissubsctypeÚ
issubdtype)Ú
set_module)ÚndarrayÚufuncÚasarray)r   r   r   Ú	deprecateÚdeprecate_with_docÚget_includeÚinfoÚsourceÚwhoÚlookforÚbyte_boundsÚ	safe_evalÚshow_runtimec                  óv  — ddl m} m}m} ddlm} g }g g }}|D ]5}| |         r|                     |¦  «         Œ |                     |¦  «         Œ6|                     d|||dœi¦  «         	 ddlm} |                      |¦   «         ¦  «         n# t          $ r t          d¦  «         Y nw xY w ||¦  «         dS )	aÈ  
    Print information about various resources in the system
    including available intrinsic support and BLAS/LAPACK library
    in use

    See Also
    --------
    show_config : Show libraries in the system on which NumPy was built.

    Notes
    -----
    1. Information is derived with the help of `threadpoolctl <https://pypi.org/project/threadpoolctl/>`_
       library.
    2. SIMD related information is derived from ``__cpu_features__``,
       ``__cpu_baseline__`` and ``__cpu_dispatch__``

    Examples
    --------
    >>> import numpy as np
    >>> np.show_runtime()
    [{'simd_extensions': {'baseline': ['SSE', 'SSE2', 'SSE3'],
                          'found': ['SSSE3',
                                    'SSE41',
                                    'POPCNT',
                                    'SSE42',
                                    'AVX',
                                    'F16C',
                                    'FMA3',
                                    'AVX2'],
                          'not_found': ['AVX512F',
                                        'AVX512CD',
                                        'AVX512_KNL',
                                        'AVX512_KNM',
                                        'AVX512_SKX',
                                        'AVX512_CLX',
                                        'AVX512_CNL',
                                        'AVX512_ICL']}},
     {'architecture': 'Zen',
      'filepath': '/usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so',
      'internal_api': 'openblas',
      'num_threads': 12,
      'prefix': 'libopenblas',
      'threading_layer': 'pthreads',
      'user_api': 'blas',
      'version': '0.3.20'}]
    r   ©Ú__cpu_features__Ú__cpu_baseline__Ú__cpu_dispatch__)ÚpprintÚsimd_extensions)ÚbaselineÚfoundÚ	not_found)Úthreadpool_infoz¨WARNING: `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_umathr   r   r   r   ÚappendÚthreadpoolctlr   ÚextendÚImportErrorÚprint)	r   r   r   r   Úconfig_foundÚfeatures_foundÚfeatures_not_foundÚfeaturer   s	            ú1/usr/lib/python3/dist-packages/numpy/lib/utils.pyr   r      s_  € ð^ð ð ð ð ð ð ð ð ð ð ÐÐÐÐÐØ€LØ)+¨RÐ&€NØ#ð /ð /ˆØ˜GÔ$ð 	/Ø×!Ò! 'Ñ*Ô*Ð*Ð*à×%Ò% gÑ.Ô.Ð.Ð.Ø×ÒØØ(Ø#Ø+ð
ð 
ðñ ô ð ð6Ø1Ð1Ð1Ð1Ð1Ð1Ø×Ò˜O˜OÑ-Ô-Ñ.Ô.Ð.Ð.øÝð 6ð 6ð 6Ýð 5ñ 	6ô 	6ð 	6ð 	6ð 	6ð6øøøð
 €Fˆ<ÑÔÐÐÐs   Á+#B ÂB+Â*B+c                  ó4  — ddl } | j        €Dt          j                             t          j                             | j        ¦  «        dd¦  «        }nHddlm} t          j                             t          j                             |j        ¦  «        d¦  «        }|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()])
        ...

    r   NÚcoreÚinclude)	ÚnumpyÚshow_configÚosÚpathÚjoinÚdirnameÚ__file__Ú
numpy.corer+   )r-   Údr+   s      r)   r   r   a   s}   € ð$ €L€L€LØÔÐ åŒG�LŠL�œŸš¨¬Ñ8Ô8¸&À)ÑLÔLˆˆð 	"Ð!Ð!Ð!Ð!Ð!ÝŒG�LŠL�œŸš¨¬Ñ7Ô7¸ÑCÔCˆØ€Hó    c                   ó    — e Zd ZdZdd„Zd„ ZdS )Ú
_Deprecatez†
    Decorator class to deprecate old functions.

    Refer to `deprecate` for details.

    See Also
    --------
    deprecate

    Nc                 ó0   — || _         || _        || _        d S ©N)Úold_nameÚnew_nameÚmessage)Úselfr;   r<   r=   s       r)   Ú__init__z_Deprecate.__init__Š   s   € Ø ˆŒØ ˆŒØˆŒˆˆr6   c                 óÂ  ‡‡— | j         }| j        }| j        }|€‰j        }|€d|z  Šn	d|›d|›d�Š|�‰d|z   z  Št	          j        ‰¦  «        ˆˆfd„¦   «         }||_        ‰j        }|€‰}né|                     ¦   «                              d¦  «        }	t          |	dd…         ¦  «        }
|	d	          
                    ¦   «         r	|
d
z  |z   }nYt          |	d	         ¦  «        dz   }|	dd…         D ],}t          |¦  «        |
k    r n|t          |¦  «        dz   z  }Œ-||d…         }t          j        ‰d
|
z  ¦  «        Šd                     ‰|g¦  «        }||_        |S )z:
        Decorator call.  Refer to ``decorate``.

        Nz`%s` is deprecated!ú`z` is deprecated, use `z
` instead!ú
c                  óL   •— t          j        ‰t          d¬¦  «          ‰| i |¤ŽS )Né   )Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarning)ÚargsÚkwdsÚdepdocÚfuncs     €€r)   Únewfuncz$_Deprecate.__call__.<locals>.newfunc£   s0   ø€ åŒM˜&Õ"4ÀÐCÑCÔCÐCØ�4˜Ð& Ð&Ð&Ð&r6   é   r   ú z

)r;   r<   r=   Ú__name__Ú	functoolsÚwrapsÚ__doc__Ú
expandtabsÚsplitÚ_get_indentÚlstripÚlenÚtextwrapÚindentr1   )r>   rL   rI   Úkwargsr;   r<   r=   rM   ÚdocÚlinesrZ   ÚskipÚlinerK   s    `           @r)   Ú__call__z_Deprecate.__call__�   s±  øø€ ð
 ”=ˆØ”=ˆØ”,ˆàÐØ”}ˆHØÐØ*¨XÑ5ˆFˆFð ð �h�h   ð*ˆFð ÐØ�d˜W‘nÑ$ˆFå	Œ˜Ñ	Ô	ð	'ð 	'ð 	'ð 	'ð 	'ñ 
Ô	ð	'ð $ˆÔØŒlˆØˆ;ØˆCˆCà—N’NÑ$Ô$×*Ò*¨4Ñ0Ô0ˆEÝ   q r r¤Ñ+Ô+ˆFØ�QŒx�ŠÑ Ô ð !ð ˜s‘l SÑ(��õ ˜5 œ8‘}”} qÑ(�Ø! ! " "œIð *ð *�DÝ˜4‘y”y 6Ò)Ð)Ø˜Ø�C ™IœI¨™MÑ)�D�DØ˜$˜%˜%”j�Ý”_ V¨S°6©\Ñ:Ô:ˆFØ—+’+˜v s˜mÑ,Ô,ˆCØˆŒàˆr6   )NNN)rP   Ú
__module__Ú__qualname__rS   r?   r`   © r6   r)   r8   r8   ~   sA   € € € € € ð	ð 	ðð ð ð ð
0ð 0ð 0ð 0ð 0r6   r8   c                 óÒ   — t           j        }| D ]E}t          |                     ¦   «         ¦  «        }|r t	          |t          |¦  «        |z
  ¦  «        }ŒF|t           j        k    rd}|S )zU
    Determines the leading whitespace that could be removed from all the lines.
    r   )ÚsysÚmaxsizerX   rW   Úmin)r]   rZ   r_   Úcontents       r)   rV   rV   Â   si   € õ Œ[€FØð 6ð 6ˆÝ�d—k’k‘m”mÑ$Ô$ˆØð 	6Ý˜¥ T¡¤¨WÑ!4Ñ5Ô5ˆFøØ•”ÒÐØˆØ€Mr6   c                  ól   — | r'| d         }| dd…         }  t          | i |¤Ž|¦  «        S t          | 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

    r   rN   N©r8   )rI   r[   Úfns      r)   r
   r
   Ð   sS   € ðX ð +Ø�!ŒWˆØ�A�B�BŒxˆà*�z˜4Ð* 6Ð*Ð*¨2Ñ.Ô.Ð.å˜4Ð* 6Ð*Ð*Ð*r6   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

    )r=   rj   )Úmsgs    r)   r   r     s   € õ0 ˜cÐ"Ñ"Ô"Ð"r6   c                 ó  — | j         }|d         d         }|d         }|d         }t          | ¦  «        j        j        }|x}}|€|| j        |z  z  }n8t          ||¦  «        D ]"\  }}	|	dk     r||dz
  |	z  z  }Œ||dz
  |	z  z  }Œ#||z  }||fS )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

    Údatar   ÚstridesÚshapeNrN   )Ú__array_interface__r	   ÚdtypeÚitemsizeÚsizeÚzip)
ÚaÚaiÚa_dataÚastridesÚashapeÚbytes_aÚa_lowÚa_highrq   Ústrides
             r)   r   r   $  sÄ   € ð@ 
Ô	€BØ�ŒZ˜Œ]€FØ�)Œ}€HØ�Œ[€FÝ�a‰jŒjÔÔ'€GàÐ€EˆFØÐà�!”&˜7Ñ"Ñ"ˆˆå  ¨Ñ2Ô2ð 	+ð 	+‰MˆE�6Ø˜ŠzˆzØ˜% ™' 6Ñ)Ñ)��à˜5 ™7 FÑ*Ñ*��Ø�'ÑˆØ�&ˆ=Ðr6   c                 óÌ  — | €t          j        ¦   «         j        }|j        } g }i }|                      ¦   «         D ]É}t          | |         t          ¦  «        r¬| |         }t          |¦  «        }||                     ¦   «         v r|d||         z  z   }d}n	|||<   |}d}d                     t          t          |j        ¦  «        ¦  «        }	t          |j        ¦  «        }
|                     ||	|
|j        j        |g¦  «         ŒÊd}d}d}d}|D ]¬}|t!          |d         ¦  «        k     rt!          |d         ¦  «        }|t!          |d         ¦  «        k     rt!          |d         ¦  «        }|t!          |d         ¦  «        k     rt!          |d         ¦  «        }|d         r|t#          |d         ¦  «        z  }Œ­t!          |¦  «        dk    rpt%          d|¦  «        }t%          d|¦  «        }t%          d|¦  «        }d	|d
z  ›d|d
z  ›d|d
z  ›d�}t'          |dz   dt!          |¦  «        dz   z  z   dz   ¦  «         |D ]‘}t'          |d         ›d
d
|t!          |d         ¦  «        z
  dz   z  ›d
|d         ›d
d
|t!          |d         ¦  «        z
  dz   z  ›d
|d         ›d
d
|t!          |d         ¦  «        z
  dz   z  ›d
|d         ›�¦  «         Œ’t'          d|z  ¦  «         dS )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)r   rN   z x rD   é   é
   zName rO   z Shape z Bytes z TyperB   ú=é   é   z'
Upper bound on total bytes  =       %d)re   Ú	_getframeÚf_backÚ	f_globalsÚkeysÚ
isinstancer   Úidr1   ÚmapÚstrrq   Únbytesr    rs   ÚnamerX   ÚintÚmaxr$   )ÚvardictÚframeÚstaÚcacher�   ÚvarÚidvÚnamestrÚoriginalÚshapestrÚbytestrÚmaxnameÚmaxshapeÚmaxbyteÚ
totalbytesÚvalÚsp1Úsp2Úsp3Úprvals                       r)   r   r   ]  s  € ðX €Ý”‘”Ô&ˆØ”/ˆØ
€CØ€EØ—’‘”ð #ð #ˆÝ�g˜d”m¥WÑ-Ô-ð 	#Ø˜$”-ˆCÝ�S‘'”'ˆCØ�e—j’j‘l”lÐ"Ð"Ø ¨5°¬:Ñ!5Ñ5�Ø��à!��c‘
Ø�Ø�Ø—z’z¥#¥c¨3¬9Ñ"5Ô"5Ñ6Ô6ˆHÝ˜#œ*‘o”oˆGØ�JŠJ˜ ¨7°C´I´NØ ð"ñ #ô #ð #øð €GØ€HØ€GØ€JØð &ð &ˆØ•S˜˜Qœ‘[”[Ò Ð Ý˜#˜aœ&‘k”kˆGØ•c˜#˜aœ&‘k”kÒ!Ð!Ý˜3˜qœ6‘{”{ˆHØ•S˜˜Qœ‘[”[Ò Ð Ý˜#˜aœ&‘k”kˆGØˆqŒ6ð 	&Ø�#˜c !œf™+œ+Ñ%ˆJøå
ˆ3�x„x�!‚|€|Ý�"�gÑÔˆÝ�"�hÑÔˆÝ�"�gÑÔˆˆØ47¸±G°G°G¸SÀ¹W¸W¸WÀcÈ#ÁgÀgÀgÐNˆÝˆe�d‰l˜S¥# e¡*¤*¨Q¡,Ñ/Ñ/°$Ñ6Ñ7Ô7Ð7àð 1ð 1ˆÝ¨¨A¬¨¨°°S½¸SÀ¼V¹¼±_ÀQÑ5FÑ0GÐ0GÐ0GØ(+¨A¬¨¨°°S½¸SÀ¼V¹¼±_ÀQÑ5FÑ0GÐ0GÐ0GØ(+¨A¬¨¨°°S½¸SÀ¼V¹¼±_ÀQÑ5FÑ0GÐ0GÐ0GØ(+¨A¬¨ð0ñ 	1ô 	1ð 	1ð 	1õ 
Ð
4°zÑ
AÑBÔBÐBØ
€Fr6   c                 ó(  — t          | ¦  «        }|}| }d}|                     |¦  «        }|D ]d}||k    rd}	n|}	|t          |¦  «        z   t          |	¦  «        z   }||k    r'|dz   t          |¦  «        z   }|dz   d|dz   z  z   |z   }Œ\||	z   |z   }Œe|S )Nz, Ú rN   z,
rO   rD   )rX   rU   )
r�   Ú	argumentsÚwidthÚ
firstwidthÚkÚnewstrÚsepstrÚarglistÚargumentÚaddstrs
             r)   Ú_split_liner°   Ä  s¼   € Ý�T‘”€JØ€AØ€FØ€FØ�oŠo˜fÑ%Ô%€GØð 
0ð 
0ˆØ�
Š?ˆ?ØˆFˆFàˆFØ•�H‘”Ñ¥ F¡¤Ñ+ˆØˆuŠ9ˆ9Ø˜Q‘¥ X¡¤Ñ.ˆAØ˜e‘^ c¨:°a©<Ñ&8Ñ8¸8ÑCˆFˆFà˜f‘_ xÑ/ˆFˆFØ€Mr6   r-   c                 óø  — t          | t          ¦   «         t          ¦   «         g ¦  «        } | j        | j        i}| j        g}| j        g}	 t          |¦  «        dk    rnš|                     d¦  «        }|                     ¦   «         D ]o}t          ||         t          j
        ¦  «        rM||         j        }||vr<||         j        }|                     |¦  «         |                     |¦  «         |||<   ŒpŒ®||fS )NTr   )Ú
__import__ÚglobalsÚlocalsrP   Ú__dict__rX   Úpopr‰   rŠ   ÚtypesÚ
ModuleTyper    )ÚmoduleÚthedictÚdictlistÚ
totraverseÚthisdictÚxÚmodnameÚmoddicts           r)   Ú_makenamedictrÁ   Ü  sÿ   € Ý˜¥¡	¤	­6©8¬8°RÑ8Ô8€FØŒ˜vœÐ/€GØ”Ð €HØ”/Ð"€Jð/Ýˆz‰?Œ?˜aÒÐØØ—>’> !Ñ$Ô$ˆØ—’‘”ð 	/ð 	/ˆAÝ˜( 1œ+¥uÔ'7Ñ8Ô8ð /Ø" 1œ+Ô.�Ø (Ð*Ð*Ø& qœkÔ2�GØ—O’O GÑ,Ô,Ð,Ø×%Ò% gÑ.Ô.Ð.Ø'.�G˜GÑ$øð/ð �HÐÐr6   c                 ó
  — d}d}d„ }t          | dt          | ¦  «        ¦  «        }t          |d|¦  «        }| j        }| j        j        }|€t
          j        }t          d||¬¦  «         t          d| j        |¬¦  «         t          d	||¬¦  «         t          d
| j	        |¬¦  «         t          d || j
        j        ¦  «        |¬¦  «         t          d || j
        j        ¦  «        |¬¦  «         t          d| j
        j        |¬¦  «         t          dt          | j        j        j        ¦  «        ›|›�|¬¦  «         t          dd|¬¦  «         |dv r$t          |›t
          j        ›|›�|¬¦  «         d}	nS|dk    r't          |›d|›�|¬¦  «         t
          j        dk    }	n&t          |›d|›�|¬¦  «         t
          j        dk    }	t          d ||	¦  «        |¬¦  «         t          d| j        z  |¬¦  «         dS )aO  Provide 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.

    r¦   c                 ó   — | S r:   rc   )r¾   s    r)   ú<lambda>z_info.<locals>.<lambda>  s   € �1€ r6   Ú	__class__rP   Nzclass: ©Úfilezshape: z	strides: z
itemsize: z	aligned: zcontiguous: z	fortran: zdata pointer: zbyteorder: rO   )ÚendrÇ   )ú|rƒ   Fú>ÚbigÚlittlez
byteswap: ztype: %s)ÚgetattrÚtyperp   rs   Ú	byteorderre   Ústdoutr$   rq   rt   ÚflagsÚalignedÚ
contiguousÚfortranÚhexÚctypesÚ_as_parameter_Úvalue)
ÚobjÚoutputÚextraÚticÚbpÚclsÚnmrp   ÚendianÚbyteswaps
             r)   Ú_inforâ   ð  s4  € ð$ €EØ
€CØ	ˆ€BÝ
�#�{¥D¨¡I¤IÑ
.Ô
.€CÝ	��j #Ñ	&Ô	&€BØŒk€GØŒYÔ €Fà€~Ý”ˆå	ˆ)�R˜fÐ%Ñ%Ô%Ð%Ý	ˆ)�S”Y VÐ,Ñ,Ô,Ð,Ý	ˆ+�w VÐ,Ñ,Ô,Ð,Ý	ˆ,˜œ¨6Ð2Ñ2Ô2Ð2Ý	ˆ+�r�r˜#œ)Ô+Ñ,Ô,°6Ð:Ñ:Ô:Ð:Ý	ˆ.˜"˜"˜SœYÔ1Ñ2Ô2¸Ð@Ñ@Ô@Ð@Ý	ˆ+�s”yÔ(¨vÐ6Ñ6Ô6Ð6Ý	€EÝ # C¤JÔ$=Ô$CÑ DÔ DÐ DÀeÀeÐLØð
ñ 
ô 
ð 
õ 
ˆ-˜S vÐ.Ñ.Ô.Ð.Ø�ÐÐÝ˜#˜#�sœ}˜}¨c¨cÐ2¸Ð@Ñ@Ô@Ð@ØˆˆØ	�3ŠˆÝ˜3˜3˜3  Ð$¨6Ð2Ñ2Ô2Ð2Ý”= EÒ)ˆˆå˜c˜c˜c 3 3Ð'¨fÐ5Ñ5Ô5Ð5Ý”= HÒ,ˆÝ	ˆ,˜˜˜8™œ¨6Ð2Ñ2Ô2Ð2Ý	ˆ*�s”yÑ
  vÐ.Ñ.Ô.Ð.Ð.Ð.r6   éL   c                 ó¬  — ddl }ddl}t          | d¦  «        st          | d¦  «        r| j        } nt          | d¦  «        r| j        } |€t
          j        }| €t          t          ¦  «         dS t          | t          ¦  «        rt          | |¬¦  «         dS t          | t          ¦  «        �rt          €t          |¦  «        \  aad}g }t          D ]ª}	 t          |         |          }	t          |	¦  «        |v rt!          d|z  |¬¦  «         nY|                     t          |	¦  «        ¦  «         t!          d	|z  |¬¦  «         t          |	¦  «         t!          d
|z  |¬¦  «         |dz  }Œ›# t$          $ r Y Œ§w xY w|dk    rt!          d| z  |¬¦  «         dS t!          d|z  |¬¦  «         dS |                     | ¦  «        s|                     | ¦  «        r§| j        }
	 t          |                     | ¦  «        ¦  «        }n# t.          $ r d}Y nw xY wt1          |
|z   ¦  «        |k    rt3          |
||¦  «        }n|
|z   }t!          d|z   dz   |¬¦  «         t!          |                     | ¦  «        |¬¦  «         dS |                     | ¦  «        �rŠ| j        }
	 t          |                     | ¦  «        ¦  «        }n# t.          $ r d}Y nw xY wt1          |
|z   ¦  «        |k    rt3          |
||¦  «        }n|
|z   }t!          d|z   dz   |¬¦  «         |                     | ¦  «        }|€:t          | d¦  «        r)t!          |                     | j        ¦  «        |¬¦  «         n$t!          |                     | ¦  «        |¬¦  «         |                     | ¦  «        }d„ |D ¦   «         }|rmt!          d|¬¦  «         |D ][}t=          | |d¦  «        }|�-|                     |                     |¦  «        pd¦  «        \  }}t!          d|›d|›�|¬¦  «         ŒZdS dS t          | d¦  «        r&t!          |                     | ¦  «        |¬¦  «         dS dS )a¼  
    Get help information for a function, class, or module.

    Parameters
    ----------
    object : object or str, optional
        Input object or name to get information about. 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. ***

    r   NÚ_ppimport_importerÚ_ppimport_moduleÚ_ppimport_attr)rÚ   z+
     *** Repeat reference found in %s *** rÆ   z     *** Found in %s ***ú-rN   zHelp for %s not found.z+
     *** Total of %d references found. ***z()rO   rB   r?   c                 ó*   — g | ]}|d          dk    ¯|‘ŒS )r   Ú_rc   )Ú.0Úmeths     r)   ú
<listcomp>zinfo.<locals>.<listcomp>­  s!   € ÐEÐEÐE 4°d¸1´gÀ²n°n˜$°n°n°nr6   z

Methods:
ÚNonez  z  --  rS   ) ÚpydocÚinspectÚhasattrræ   rç   re   rÐ   r   rŠ   r   râ   r�   Ú	_namedictrÁ   Ú	_dictlistr‹   r$   r    ÚKeyErrorÚ
isfunctionÚismethodrP   Ú	signatureÚ	ExceptionrX   r°   ÚgetdocÚisclassr?   Ú
allmethodsrÍ   Úsplitdoc)ÚobjectÚmaxwidthrÚ   Útoplevelrï   rð   ÚnumfoundÚobjlistr˜   rÙ   r�   r§   ÚargstrÚdoc1ÚmethodsÚpublic_methodsrì   ÚthisobjÚmethstrÚothers                       r)   r   r   &  sC  € ðj €L€L€LØ€N€N€Nå�Ð,Ñ-Ô-ð 'Ý�6Ð-Ñ.Ô.ð'àÔ(ˆˆÝ	�Ð)Ñ	*Ô	*ð 'ØÔ&ˆà€~Ý”ˆà€~Ý�T‰
Œ
ˆ
ˆ
ˆ
Ý	�F�GÑ	$Ô	$ð P3Ýˆf˜VÐ$Ñ$Ô$Ð$Ð$Ð$Ý	�F�CÑ	 Ô	 ñ N3ÝÐÝ#0°Ñ#:Ô#:Ñ ˆI�yØˆØˆÝ ð 	ð 	ˆGðÝ Ô(¨Ô0�Ý�c‘7”7˜gÐ%Ð%Ýð BØDKñLà%ðñ ô ð ð ð
 —N’N¥2 c¡7¤7Ñ+Ô+Ð+ÝÐ4°wÑ>ÀVÐLÑLÔLÐLÝ˜‘I”I�IÝ˜#˜h™,¨VÐ4Ñ4Ô4Ð4Ø˜A‘��øÝð ð ð Ø�ðøøøà�qŠ=ˆ=ÝÐ*¨VÑ3¸&ÐAÑAÔAÐAÐAÐAåð :Ø<DñEàðñ ô ð ð ð ð
 
×	Ò	˜FÑ	#Ô	#ð 13 w×'7Ò'7¸Ñ'?Ô'?ð 13ØŒˆð	Ý˜G×-Ò-¨fÑ5Ô5Ñ6Ô6ˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøõ ˆt�I‰~ÑÔ Ò)Ð)Ý   y°(Ñ;Ô;ˆFˆFà˜IÑ%ˆFåˆc�F‰l˜TÑ!¨Ð/Ñ/Ô/Ð/Ýˆg�nŠn˜VÑ$Ô$¨6Ð2Ñ2Ô2Ð2Ð2Ð2à	�Š˜Ñ	 Ô	 ñ "3ØŒˆð	Ý˜G×-Ò-¨fÑ5Ô5Ñ6Ô6ˆIˆIøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøõ ˆt�I‰~ÑÔ Ò)Ð)Ý   y°(Ñ;Ô;ˆFˆFà˜IÑ%ˆFåˆc�F‰l˜TÑ!¨Ð/Ñ/Ô/Ð/Ø�~Š~˜fÑ%Ô%ˆØˆ<Ý�v˜zÑ*Ô*ð DÝ�g—n’n V¤_Ñ5Ô5¸FÐCÑCÔCÐCøå�'—.’. Ñ(Ô(¨vÐ6Ñ6Ô6Ð6à×"Ò" 6Ñ*Ô*ˆàEÐE¨7ÐEÑEÔEˆØð 	EÝÐ"¨Ð0Ñ0Ô0Ð0Ø&ð Eð E�Ý! &¨$°Ñ5Ô5�ØÐ&Ø%*§^¢^Ø#ŸNšN¨7Ñ3Ô3Ð=°vñ&ô &‘N�G˜Uõ �¨¨¨¨g¨gÐ6¸VÐDÑDÔDÐDÐDð	Eð 	EðEð Eõ 
�˜Ñ	#Ô	#ð 3Ýˆg�nŠn˜VÑ$Ô$¨6Ð2Ñ2Ô2Ð2Ð2Ð2ð3ð 3s7   ÃBE+Å+
E8Å7E8Ç"H ÈHÈHÊ"J? Ê?KËKc                 óê   — ddl }	 t          d|                     | ¦  «        z  |¬¦  «         t          |                     | ¦  «        |¬¦  «         dS # t          $ r t          d|¬¦  «         Y dS w xY w)aí  
    Print or write to a file the source code for a NumPy object.

    The source code is only returned for objects written in Python. Many
    functions and classes are defined in C and will therefore not return
    useful information.

    Parameters
    ----------
    object : numpy object
        Input object. This can be any object (function, class, module,
        ...).
    output : file object, optional
        If `output` not supplied then source code is printed to screen
        (sys.stdout).  File object must be created with either write 'w' or
        append 'a' modes.

    See Also
    --------
    lookfor, info

    Examples
    --------
    >>> 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.

    r   NzIn file: %s
rÆ   zNot available for this object.)rð   r$   ÚgetsourcefileÚ	getsourcerø   )rý   rÚ   rð   s      r)   r   r   ¼  s˜   € ðR €N€N€Nð=Ýˆo × 5Ò 5°fÑ =Ô =Ñ=ÀFÐKÑKÔKÐKÝˆg×Ò Ñ'Ô'¨fÐ5Ñ5Ô5Ð5Ð5Ð5øÝð =ð =ð =ÝÐ.°VÐ<Ñ<Ô<Ð<Ð<Ð<Ð<ð=øøøs   †AA ÁA2Á1A2z[a-z0-9_]+\(.*[,=].*\)TFc                 ó
  ‡‡‡‡‡— ddl }t          |||¦  «        Šg }t          | ¦  «                             ¦   «                              ¦   «         Š‰sdS ‰                     ¦   «         D ]R\  }\  }}	}
|	dv rŒ|                     ¦   «         Št          ˆfd„‰D ¦   «         ¦  «        r|                     |¦  «         ŒSdddddœŠˆˆfd„Šˆˆfd	„}|                     |¬
¦  «         dd 	                    ‰¦  «        z  }|dt          |¦  «        z  g}|ddd…         D ]»}‰|         \  Š}	}d„ ‰                     ¦   «                              d¦  «        D ¦   «         }	 |d                              ¦   «         }t                               |¦  «        r|d                              ¦   «         }n# t          $ r d}Y nw xY w|                     |›d|›�¦  «         Œ¼|s|                     d¦  «         |�*|                     d 	                    |¦  «        ¦  «         dS t          |¦  «        dk    r4|                     ¦   «         } |d 	                    |¦  «        ¦  «         dS t#          d 	                    |¦  «        ¦  «         dS )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.
    ...

    r   N)r¹   rý   c              3   ó    •K  — | ]}|‰v V — Œ	d S r:   rc   )rë   Úwr\   s     €r)   ú	<genexpr>zlookfor.<locals>.<genexpr>7  s'   øè è € Ð'Ð'˜Aˆq�CˆxÐ'Ð'Ð'Ð'Ð'Ð'r6   iè  éüÿÿ)rL   Úclassr¹   rý   c                 óô  •‡ ‡— d}d                      |                     ¦   «                              ¦   «                              d¦  «        d d…         ¦  «        Š|t	          ˆfd„‰D ¦   «         ¦  «        z  }|t	          ˆ fd„‰D ¦   «         ¦  «        z  }|t          ‰ ¦  «         dz  z  }|‰                     |d¦  «        z  }|‰                      d¦  «         d	z  z  }|t          | d
z  d¦  «        z  }|S )Nr   rB   r…   c                 ó   •— g | ]}|‰v ¯d ‘Œ	S )éÈ   rc   )rë   r  Ú	first_docs     €r)   rí   z.lookfor.<locals>.relevance.<locals>.<listcomp>E  s   ø€ Ð7Ð7Ð7˜!¨¨Y¨¨�#¨¨¨r6   c                 ó   •— g | ]}|‰v ¯d ‘Œ	S )é   rc   )rë   r  r�   s     €r)   rí   z.lookfor.<locals>.relevance.<locals>.<listcomp>G  s   ø€ Ð1Ð1Ð1˜ q¨D y y�" y y yr6   r„   r  ú.r‚   éd   iœÿÿÿ)	r1   ÚlowerÚstriprU   ÚsumrX   ÚgetÚcountr‘   )r�   ÚdocstrÚkindÚindexÚrr  Úkind_relevanceÚwhatss   `    @€€r)   Ú	relevancezlookfor.<locals>.relevanceA  sÿ   øøø€ Øˆà—I’I˜fŸlšl™nœn×2Ò2Ñ4Ô4×:Ò:¸4Ñ@Ô@ÀÀ!ÀÔDÑEÔEˆ	Ø	�SÐ7Ð7Ð7Ð7˜uÐ7Ñ7Ô7Ñ8Ô8Ñ8ˆà	�SÐ1Ð1Ð1Ð1˜eÐ1Ñ1Ô1Ñ2Ô2Ñ2ˆà	�c�$‰iŒiˆZ˜!‰^Ñˆà	ˆ^×Ò  eÑ,Ô,Ñ,ˆà	ˆd�jŠj˜‰oŒoÐ Ñ"Ñ"ˆØ	�S�%�˜#‘˜tÑ$Ô$Ñ$ˆØˆr6   c                 ó"   •—  ‰| g‰|          ¢R Ž S r:   rc   )rw   r•   r%  s    €€r)   Úrelevance_valuez lookfor.<locals>.relevance_valueQ  s   ø€ Øˆy˜Ð&˜U 1œXÐ&Ð&Ð&Ð&r6   )ÚkeyzSearch results for '%s'rO   rè   éÿÿÿÿc                 ó^   — g | ]*}|                      ¦   «         ¯|                      ¦   «         ‘Œ+S rc   )r  )rë   r_   s     r)   rí   zlookfor.<locals>.<listcomp>[  s<   € ð %ð %ð % TØ—z’z‘|”|ð%�D—J’J‘L”Lð %ð %ð %r6   rB   rN   r¦   z
    zNothing found.r‚   )rï   Ú_lookfor_generate_cacher�   r  rU   ÚitemsÚallr    Úsortr1   rX   r  Ú_function_signature_reÚsearchÚ
IndexErrorÚwriteÚgetpagerr$   )Úwhatr¹   Úimport_modulesÚ
regeneraterÚ   rï   r   r�   Ú	docstringr   r!  r'  ÚsÚ	help_textÚixÚdoclinesr  Úpagerr•   r\   r#  r%  r$  s                     @@@@@r)   r   r   ÷  s÷  øøøøø€ ð^ €L€L€Lõ $ F¨N¸JÑGÔG€Eð €EÝ�‰IŒI�OŠOÑÔ×#Ò#Ñ%Ô%€EØð Øˆà*/¯+ª+©-¬-ð ð Ñ&ˆÑ&ˆy˜$ ØÐ'Ð'Ð'àØ�oŠoÑÔˆÝÐ'Ð'Ð'Ð' Ð'Ñ'Ô'Ñ'Ô'ð 	Ø�LŠL˜ÑÔÐøð #¨TØ %°ð8ð 8€Nðð ð ð ð ð ð 'ð 'ð 'ð 'ð 'ð 'à	‡J‚J�?€JÑ#Ô#Ð#ð 	" S§X¢X¨e¡_¤_Ñ5€AØ�C�˜A™œ‘J�€IØ�d�d˜�d”ð ;ð ;ˆØ˜dœ‰ˆˆT�2ð%ð %¨S¯YªY©[¬[×->Ò->¸tÑ-DÔ-Dð %ñ %ô %ˆð	Ø  œ×)Ò)Ñ+Ô+ˆIÝ%×,Ò,¨YÑ7Ô7ð 0Ø$ QœK×-Ò-Ñ/Ô/�	øøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøà×Ò¨¨¨¨y¨yÐ9Ñ:Ô:Ð:Ð:àð +Ø×ÒÐ)Ñ*Ô*Ð*ð ÐØ�Š�T—Y’Y˜yÑ)Ô)Ñ*Ô*Ð*Ð*Ð*Ý	ˆY‰Œ˜"Ò	Ð	Ø—’Ñ Ô ˆØˆˆd�iŠi˜	Ñ"Ô"Ñ#Ô#Ð#Ð#Ð#åˆd�iŠi˜	Ñ"Ô"Ñ#Ô#Ð#Ð#Ð#s   ÅAF*Æ*F9Æ8F9c                 óØ  — ddl }ddlm} | €d} t          | t          ¦  «        r6	 t          | ¦  «         n# t          $ r i cY S w xY wt          j        |          } nWt          | t          ¦  «        st          | t          ¦  «        r-i }| D ]&}|                     t          |||¦  «        ¦  «         Œ'|S t          | ¦  «        t          v r|st          t          | ¦  «                 S i }|t          t          | ¦  «        <   i }d}| j        | fg}	|	�r]|	                     d¦  «        \  }
}t          |¦  «        |v rŒ-d|t          |¦  «        <   |dz  }d}|                     |¦  «        �rsd}	 |j        }n# t&          $ r d}Y nw xY w|�r‡t)          |d	¦  «        �rv|j        D �]m}t-          j        |¦  «        D �]T}t,          j                             ||¦  «        }t,          j                             ||d
¦  «        }t,          j                             |¦  «        r |                     d¦  «        r|dd…         }n#t,          j                             |¦  «        r|}nŒ¦|dk    rŒ­	 t          j        }t          j        }	  |¦   «         t          _         |¦   «         t          _        t          |
›d|›�¦  «         |t          _        |t          _        n# |t          _        |t          _        w xY w�Œ;# t<          $ r ‚ t>          $ r Y �ŒRw xY w�ŒotA          |¦  «        D ]»\  }}	 tC          |d|
›d|›�¦  «        }tC          |dd¦  «        }n# tD          $ r |
›d|›�}d}Y nw xY wd|vr	|r|›d|›�}| #                    |
dz   ¦  «        st          |tH          ¦  «        rnŒƒ|                     |¦  «        s|�||v sŒŸ|	 %                    |
›d|›�|f¦  «         Œ¼n[| &                    |¦  «        r4d}tA          |¦  «        D ]!\  }}|	 %                    |
›d|›�|f¦  «         Œ"nt)          |d¦  «        rd}	 | '                    |¦  «        }n# tD          $ r d}Y nw xY w|�|||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.

    r   N)ÚStringIOr-   TrN   rý   r¹   Ú__path__z__init__.pyz.pyéýÿÿÿr?   r  rP   ra   r  r`   rL   )(rð   Úior>  rŠ   r�   r²   r#   re   ÚmodulesÚlistÚtupleÚupdater+  r‹   Ú_lookfor_cachesrP   r¶   ÚismoduleÚ__all__ÚAttributeErrorrñ   r?  r/   Úlistdirr0   r1   ÚisfileÚendswithrÐ   ÚstderrÚKeyboardInterruptÚBaseExceptionÚ_getmembersrÍ   Ú	NameErrorÚ
startswithr   r    rú   rù   )r¹   r5  r6  rð   r>  r•   ÚmodÚseenr!  Ústackr�   Úitemr   Ú_allÚpthÚmod_pathÚthis_pyÚinit_pyÚ	to_importÚ
old_stdoutÚ
old_stderrÚnÚvÚ	item_nameÚmod_namer\   s                             r)   r+  r+  s  sv  € ð* €N€N€NàÐÐÐÐÐà€~Øˆå�&�#ÑÔð ð	Ý�vÑÔÐÐøÝð 	ð 	ð 	ØˆIˆIˆIð	øøøå”˜VÔ$ˆˆÝ	�F�DÑ	!Ô	!ð ¥Z°½Ñ%>Ô%>ð ØˆØð 	>ð 	>ˆCØ�LŠLÕ0°°nØ1;ñ=ô =ñ >ô >ð >ð >àˆå	ˆ&�z„z•_Ð$Ð$¨ZÐ$Ý�r &™zœzÔ*Ð*ð €EØ"'…O•B�v‘J”JÑØ€DØ€EØŒo˜vÐ&Ð'€EØ
ñ U-Ø—Y’Y˜q‘\”\‰
ˆˆdÝˆd‰8Œ8�tÐÐØØˆ�R�‰XŒX‰à�‰
ˆØˆà×Ò˜DÑ!Ô!ñ D	ØˆDðØ”|��øÝ!ð ð ð Ø���ðøøøð ñ %¥'¨$°
Ñ";Ô";ñ %Øœ=ð %ñ %�CÝ$&¤J¨s¡O¤Oð %ñ %˜Ý"$¤'§,¢,¨s°HÑ"=Ô"=˜Ý"$¤'§,¢,¨s°H¸mÑ"LÔ"L˜ÝœGŸNšN¨7Ñ3Ô3ð %Ø (× 1Ò 1°%Ñ 8Ô 8ð%à(0°°"°¬˜I˜IÝœWŸ^š^¨GÑ4Ô4ð %Ø(0˜I˜Ià$Ø$¨
Ò2Ð2Ø$ð%Ý),¬˜JÝ),¬˜Jð8Ø-5¨X©Z¬Z¥¤
Ø-5¨X©Z¬Z¥¤
Ý *°d°d°d¸I¸IÐ+FÑ GÔ GÐ Gà-7¥¤
Ø-7¥¤
 
øð .8¥¤
Ø-7¥¤
Ð 7Ð 7Ð 7Ð 7¡
øÝ0ð "ð "ð "à!Ý,ð %ð %ð %ð %™Hð%øøøñ5%õ> $ DÑ)Ô)ð 7ð 7‘��1ð$Ý '¨¨:À$À$À$ÈÈÐ7JÑ KÔ K�IÝ& q¨,¸Ñ=Ô=�H�HøÝ ð $ð $ð $ð ,0¨4¨4°°Ð 3�IØ#�H�H�Hð	$øøøð
 ˜iÐ'Ð'¨HÐ'Ø+3¨8¨8°Y°YÐ ?�Ià ×+Ò+¨D°3©JÑ7Ô7ð å! !¥UÑ+Ô+ð !àà Ø!×*Ò*¨1Ñ-Ô-ð °°ÀÀdÀÀØØ—’¨¨¨¨q¨qÐ1°1Ð5Ñ6Ô6Ð6Ð6ð+7ð, �_Š_˜TÑ"Ô"ð 	ØˆDÝ# DÑ)Ô)ð 7ð 7‘��1Ø—’¨¨¨¨q¨qÐ1°1Ð5Ñ6Ô6Ð6Ð6ð7å�T˜:Ñ&Ô&ð 	ØˆDð	Ø—.’. Ñ&Ô&ˆCˆCøÝð 	ð 	ð 	àˆCˆCˆCð	øøøð ˆ?Ø  eÐ,ˆE�$‰Kðk ñ U-ðn €Lso   ¥5 µAÁAÅ)E1 Å1F Å?F É#K0É<<KÊ8K0ËK+Ë+K0Ë0LÌLÌ"'M
Í
M ÍM Ð5Q ÑQÑQc                 ó”   ‡ — dd l }	 |                     ‰ ¦  «        }n+# t          $ r ˆ fd„t          ‰ ¦  «        D ¦   «         }Y nw xY w|S )Nr   c                 óT   •— g | ]$}t          ‰|¦  «        ¯|t          ‰|¦  «        f‘Œ%S rc   )rñ   rÍ   )rë   r¾   rV  s     €r)   rí   z_getmembers.<locals>.<listcomp>  sF   ø€ ð (ð (ð (¨QÝ˜d AÑ&Ô&ð(�A•w˜t QÑ'Ô'Ð(ð (ð (ð (r6   )rð   Ú
getmembersrø   Údir)rV  rð   Úmemberss   `  r)   rP  rP  þ  sy   ø€ Ø€N€N€Nð(Ø×$Ò$ TÑ*Ô*ˆˆøÝð (ð (ð (ð(ð (ð (ð (µ#°d±)´)ð (ñ (ô (ˆˆˆð(øøøð €Ns   ‡ �%AÁAc                 ó4   — ddl }|                     | ¦  «        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...>

    r   N)ÚastÚliteral_eval)r   ri  s     r)   r   r     s"   € ðd €J€J€JØ×Ò˜FÑ#Ô#Ð#r6   c                 óÈ  — | j         dk    r|S t          j        |                      d|¬¦  «        ¦  «        }t          j                             |¦  «        r|                     d¦  «        }t          j        |                     ¦   «         ¦  «        dk    rMt          |t          j
        ¦  «        r$| j                             t          j        ¦  «        S t          j        ||<   |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.
    r   r)  )ÚaxisF)ru   ÚnpÚisnanÚtakeÚmaÚisMaskedArrayÚfilledÚcount_nonzeroÚravelrŠ   Úgenericrs   rÎ   Únan)ro   Úresultrl  r_  s       r)   Ú_median_nancheckrx  >  s´   € ð* „y�A‚~€~ØˆÝ
Œ�—’˜2 D�Ñ)Ô)Ñ*Ô*€Aå	„u×Ò˜1ÑÔð Ø�HŠH�U‰OŒOˆÝ	Ô˜Ÿš™	œ	Ñ"Ô" QÒ&Ð&õ �f�bœjÑ)Ô)ð 	+Ø”:—?’?¥2¤6Ñ*Ô*Ð*å”Fˆˆq‰	Ø€Mr6   c                  óÔ   — ddl m} m}m} t	          |¦  «        dk    rt	          |¦  «        dk    rdS d                     |¦  «        }|D ]}| |         r
|d|› d�z  }Œ|d|› d�z  }Œ|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.
    r   r   r¦   rO   Ú*ú?)r   r   r   r   rX   r1   )r   r   r   Úenabled_featuresr(   s        r)   Ú	_opt_infor}  b  sÃ   € ðð ð ð ð ð ð ð ð ð õ ÐÑÔ Ò!Ð!¥cÐ*:Ñ&;Ô&;¸qÒ&@Ð&@Øˆrà—x’xÐ 0Ñ1Ô1ÐØ#ð /ð /ˆØ˜GÔ$ð 	/Ø  G   Ñ.ÐÐà  G   Ñ.ÐÐàÐr6   r:   )r-   )Nrã   Nr-   )NTFN).r/   re   rY   r·   ÚrerF   rQ   Únumpy.core.numerictypesr   r   r   Únumpy.core.overridesr   r4   r   r   r	   r-   rm  rH  r   r   r8   rV   r
   r   r   r   r°   rò   ró   rÁ   râ   r   rÐ   r   rF  ÚcompileÚIr/  r   r+  rP  r   rx  r}  rc   r6   r)   ú<module>rƒ     s²  ðØ 	€	€	€	Ø 
€
€
€
Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð à HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ +Ð +Ð +Ð +Ð +Ð +Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð ðð ð €ðIð Ið IðXð ð ð:Að Að Að Að Añ Aô Að AðHð ð ð2+ð 2+ð 2+ðj#ð #ð #ð>1ð 1ð 1ðr\ð \ð \ð \ðNð ð ð& €	Ø€	ðð ð ð ð(3/ð 3/ð 3/ð 3/ðl €ˆGÑÔðR3ð R3ð R3ñ ÔðR3ðj €ˆGÑÔØœ*ð -=ð -=ð -=ñ Ôð-=ðf €ð $˜œÐ$=¸r¼tÑDÔDÐ ð €ˆGÑÔØ?DØðy$ð y$ð y$ñ Ôðy$ðvIð Ið IðVð ð ð3$ð 3$ð 3$ðl"ð "ð "ðHð ð ð ð r6   