U
    ¸mœd
?  ã                   @   sž  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Zd dlZd dl	Z	d dl
mZ zd dlZW n ek
r€   dZY nX dGdd„Zdd„ Ze	jjedd�e	j d	d
dg¡dd„ ƒƒZdd„ Zdd„ Zdd„ Ze	jjedkdd�dd„ ƒZdd„ dD ƒZdddgZdd„ dD ƒZdd „ Zd!d"d#d$d%d&d'd(d)d*d+gZd,d-„ Zd.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>gZd?d@„ ZdAdB„ Z e	jj!e "dC¡dk	dDd�dEdF„ ƒZ#dS )Hé    N)ÚIS_WASMc                 C   s`   |dkr| j }i }t| ƒD ]@}t| |ƒ}t|dƒrt|dƒr|j|kr|jd |j  ||< q|S )zEReturns a mapping of all objects with the wrong __module__ attribute.NÚ
__module__Ú__name__Ú.)r   ÚdirÚgetattrÚhasattrr   )ÚmoduleÚmodule_nameÚresultsÚnameÚitem© r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numpy/tests/test_public_api.pyÚ	check_dir   s    
ÿr   c                  C   sJ   dddddddddd	d
ddddddddddœ} | }t tƒ}||ksFt‚d S )Nz,numpy.testing._private.nosetester.NoseTesterz.numpy.core._multiarray_umath._add_newdoc_ufuncz*numpy.core._multiarray_umath.add_docstringz#numpy.core.function_base.add_newdocznumpy.lib.utils.byte_boundsz/numpy.core._multiarray_umath.compare_chararraysznumpy.lib.utils.deprecatez"numpy.lib.utils.deprecate_with_docznumpy.lib.function_base.dispz1numpy.core._multiarray_umath.fastCopyAndTransposez#numpy.lib.shape_base.get_array_wrapznumpy.lib.utils.get_includeznumpy.lib.npyio.recfromcsvznumpy.lib.npyio.recfromtxtznumpy.lib.utils.safe_evalz)numpy.core.arrayprint.set_string_functionznumpy.__config__.showznumpy.lib.utils.show_runtimeznumpy.lib.utils.who)ÚTesterZ_add_newdoc_ufuncZadd_docstringZ
add_newdocZadd_newdoc_ufuncZbyte_boundsZcompare_chararraysZ	deprecateZdeprecate_with_docZdispZfastCopyAndTransposeZget_array_wrapZget_includeZ
recfromcsvZ
recfromtxtZ	safe_evalZset_string_functionZshow_configZshow_runtimeZwho)r   ÚnpÚAssertionError)ZundocumentedZ	allowlistÚbad_resultsr   r   r   Útest_numpy_namespace!   s0    ìr   zcan't start subprocess)Úreasonr   Útestingr   c                 C   s6   t jdd|  f}t |¡}|r"t‚| ttƒks2t‚dS )a¶  Make sure we can actually use the modules we lazy load.

    While not exported as part of the public API, it was accessible.  With the
    use of __getattr__ and __dir__, this isn't always true It can happen that
    an infinite recursion may happen.

    This is the only way I found that would force the failure to appear on the
    badly implemented code.

    We also test for the presence of the lazily imported modules in dir

    z-czimport numpy; numpy.N)ÚsysÚ
executableÚ
subprocessÚcheck_outputr   r   r   )r   ÚexeÚresultr   r   r   Útest_import_lazy_importB   s    
r   c                   C   s$   t ttƒƒt tttƒƒƒks t‚dS )zWAssert that output of dir has only one "testing/tester"
    attribute without duplicateN)Úlenr   r   Úsetr   r   r   r   r   Útest_dir_testingY   s    r!   c                  C   s   t tjƒ} | i kst‚d S ©N)r   r   Úlinalgr   ©r   r   r   r   Útest_numpy_linalg_   s    
r%   c                  C   s   t tjƒ} | i kst‚d S r"   )r   r   Úfftr   r$   r   r   r   Útest_numpy_fftd   s    
r'   z#ctypes not available in this pythonc                  C   s0   t  tjjj¡} t| dd ƒ}|d ks,tdƒ‚d S )NZtest_not_exportedzG'test_not_exported' is mistakenly exported, NPY_NO_EXPORT does not work)ÚctypesÚCDLLr   ÚcoreZ_multiarray_testsÚ__file__r   r   )ZcdllÚfr   r   r   Útest_NPY_NO_EXPORTi   s    r-   c                 C   s   g | ]}d | ‘qS ©znumpy.r   ©Ú.0Úsr   r   r   Ú
<listcomp>   s     r2   )%Ú	array_apizarray_api.linalgZ	ctypeslibÚ	distutilszdistutils.cpuinfozdistutils.exec_commandzdistutils.misc_utilzdistutils.logzdistutils.system_infoÚdoczdoc.constantsz
doc.ufuncsZf2pyr&   Úlibz
lib.formatz
lib.mixinszlib.recfunctionszlib.scimathzlib.stride_tricksr#   Úmaz	ma.extraszma.mrecordsZmatlibZ
polynomialzpolynomial.chebyshevzpolynomial.hermitezpolynomial.hermite_ezpolynomial.laguerrezpolynomial.legendrezpolynomial.polynomialÚrandomr   Útypingztyping.mypy_pluginÚversionz
numpy.charznumpy.emathz	numpy.recc                 C   s   g | ]}d | ‘qS r.   r   r/   r   r   r   r2   ¯   s     )tÚcompatzcompat.py3kZconftestr*   zcore.arrayprintzcore.defchararrayzcore.einsumfunczcore.fromnumericzcore.function_basezcore.getlimitszcore.memmapzcore.multiarrayzcore.numericzcore.numerictypeszcore.overrideszcore.recordszcore.shape_basez
core.umathzcore.umath_testszdistutils.armccompilerzdistutils.ccompilerzdistutils.ccompiler_optzdistutils.commandzdistutils.command.autodistzdistutils.command.bdist_rpmzdistutils.command.buildzdistutils.command.build_clibzdistutils.command.build_extzdistutils.command.build_pyzdistutils.command.build_scriptszdistutils.command.build_srczdistutils.command.configz!distutils.command.config_compilerzdistutils.command.developzdistutils.command.egg_infozdistutils.command.installzdistutils.command.install_clibzdistutils.command.install_dataz!distutils.command.install_headerszdistutils.command.sdistzdistutils.conv_templatezdistutils.corezdistutils.extensionzdistutils.fcompilerzdistutils.fcompiler.absoftzdistutils.fcompiler.armzdistutils.fcompiler.compaqzdistutils.fcompiler.environmentzdistutils.fcompiler.g95zdistutils.fcompiler.gnuzdistutils.fcompiler.hpuxzdistutils.fcompiler.ibmzdistutils.fcompiler.intelzdistutils.fcompiler.laheyzdistutils.fcompiler.mipszdistutils.fcompiler.nagzdistutils.fcompiler.nonezdistutils.fcompiler.pathf95zdistutils.fcompiler.pgzdistutils.fcompiler.nvzdistutils.fcompiler.sunzdistutils.fcompiler.vastzdistutils.fcompiler.fujitsuzdistutils.from_templatezdistutils.intelccompilerzdistutils.lib2defzdistutils.line_endingszdistutils.mingw32ccompilerzdistutils.msvccompilerzdistutils.npy_pkg_configzdistutils.numpy_distributionzdistutils.pathccompilerzdistutils.unixccompilerZdualzf2py.auxfuncszf2py.capi_mapszf2py.cb_ruleszf2py.cfuncszf2py.common_ruleszf2py.crackfortranzf2py.diagnosezf2py.f2py2ezf2py.f90mod_ruleszf2py.func2subrz
f2py.ruleszf2py.symboliczf2py.use_rulesz
fft.helperzlib.arraypadzlib.arraysetopszlib.arrayteratorzlib.function_basezlib.histogramszlib.index_trickszlib.nanfunctionsz	lib.npyiozlib.polynomialzlib.shape_basezlib.twodim_basezlib.type_checkzlib.ufunclikezlib.user_arrayz	lib.utilszlinalg.lapack_litezlinalg.linalgzma.benchzma.corezma.testutilszma.timer_comparisonZ	matrixlibzmatrixlib.defmatrixzpolynomial.polyutilszrandom.mtrandzrandom.bit_generatorztesting.print_coercion_tablesztesting.utilsc                 C   sD   d| ksd| ksd| krdS | t kr(dS | tkr4dS | tkr@dS dS )z%Check if this needs to be considered.z._z.testsz.setupFT)ÚPUBLIC_MODULESÚPUBLIC_ALIASED_MODULESÚPRIVATE_BUT_PRESENT_MODULES©r   r   r   r   Úis_unexpected'  s    r@   znumpy.core.code_generatorsz!numpy.core.code_generators.genapiz)numpy.core.code_generators.generate_umathz+numpy.core.code_generators.ufunc_docstringsz-numpy.core.code_generators.generate_numpy_apiz-numpy.core.code_generators.generate_ufunc_apiz$numpy.core.code_generators.numpy_apiz-numpy.core.code_generators.generate_umath_docznumpy.core.cversionsznumpy.core.generate_numpy_apiznumpy.distutils.msvc9compilerc                  C   sX   g } t jtjtjd dd�D ]$\}}}t|ƒr|tkr|  |¡ q| rTtd| › �ƒ‚dS )z|
    Test that we don't add anything that looks like a new public module by
    accident.  Check is based on filenames.
    r   N)ÚpathÚprefixÚonerrorzFound unexpected modules: )	ÚpkgutilÚwalk_packagesr   Ú__path__r   r@   Ú	SKIP_LISTÚappendr   )ÚmodnamesÚ_ÚmodnameÚispkgr   r   r   Útest_all_modules_are_expectedI  s    þrM   z
numpy.mathznumpy.distutils.log.sysznumpy.distutils.log.loggingznumpy.distutils.log.warningsznumpy.doc.constants.reznumpy.doc.constants.textwrapznumpy.lib.emathznumpy.lib.mathznumpy.matlib.charznumpy.matlib.recznumpy.matlib.emathznumpy.matlib.mathznumpy.matlib.linalgznumpy.matlib.fftznumpy.matlib.randomznumpy.matlib.ctypeslibznumpy.matlib.mac                  C   s>   dd„ } | dƒ}t D ]}| | |ƒ¡ q|r:td |¡ƒ‚dS )aâ  
    Method checking all objects. The pkgutil-based method in
    `test_all_modules_are_expected` does not catch imports into a namespace,
    only filenames.  So this test is more thorough, and checks this like:

        import .lib.scimath as emath

    To check if something in a module is (effectively) public, one can check if
    there's anything in that namespace that's a public function/object but is
    not exposed in a higher-level namespace.  For example for a `numpy.lib`
    submodule::

        mod = np.lib.mixins
        for obj in mod.__all__:
            if obj in np.__all__:
                continue
            elif obj in np.lib.__all__:
                continue

            else:
                print(obj)

    c                 S   sx   g }t  | ¡}t|dƒr |j}nt|ƒ}|D ]F}| d¡s,| d | }tt||ƒtj	ƒr,t
|ƒr,|tkr,| |¡ q,|S )NÚ__all__rJ   r   )Ú	importlibÚimport_moduler   rN   r   Ú
startswithÚ
isinstancer   ÚtypesÚ
ModuleTyper@   ÚSKIP_LIST_2rH   )Úmod_nameÚmembersr	   ZobjnamesZobjnameZfullobjnamer   r   r   Úfind_unexpected_members�  s    


z@test_all_modules_are_expected_2.<locals>.find_unexpected_membersÚnumpyz5Found unexpected object(s) that look like modules: {}N)r<   Úextendr   Úformat)rX   Zunexpected_membersrK   r   r   r   Útest_all_modules_are_expected_2t  s    ÿr\   c               	   C   sè   dd„ } g }t D ]}| |ƒs| |¡ q|r:td |¡ƒ‚tD ]0}zt|ƒ W q> tk
rl   | |¡ Y q>X q>|r‚td |¡ƒ‚tjdd��>}tj	dt
d� tj	dtd� tD ]}| |ƒs°| |¡ q°W 5 Q R X |rätd	 |¡ƒ‚d
S )a	  
    Check that all submodules listed higher up in this file can be imported

    Note that if a PRIVATE_BUT_PRESENT_MODULES entry goes missing, it may
    simply need to be removed from the list (deprecation may or may not be
    needed - apply common sense).
    c              	   S   s.   zt  | ¡ W n ttfk
r(   Y dS X dS )NFT)rO   rP   ÚImportErrorÚAttributeError)r
   r   r   r   Úcheck_importable°  s
    z-test_api_importable.<locals>.check_importablez5Modules in the public API that cannot be imported: {}z1Modules in the public API that were not found: {}T)ÚrecordÚalways)ÚcategoryzPModules that are not really public but looked public and can not be imported: {}N)r<   rH   r   r[   r=   Úevalr^   ÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarningÚImportWarningr>   )r_   Zmodule_namesr
   Úwr   r   r   Útest_api_importable¨  s8    ÿÿþrj   ÚPy_DEBUGz£NumPy possibly built with `USE_DEBUG=True ./tools/travis-test.sh`, which does not expose the `array_api` entry point. See https://github.com/numpy/numpy/pull/19800c                  C   s²   t j ¡ } z| jdd�}W n  tk
r:   |  dg ¡}Y nX t|ƒdksPtdƒ‚ztdd„ |D ƒƒ}W n t	k
r„   tdƒd‚Y nX | 
¡ }d	|j› d
�}|tjks®t|ƒ‚dS )z}
    Entry point for Array API implementation can be found with importlib and
    returns the numpy.array_api namespace.
    r3   )Úgroupr   z%No entry points for 'array_api' foundc                 s   s   | ]}|j d kr|V  qdS )rY   Nr?   )r0   Úepr   r   r   Ú	<genexpr>ñ  s     
 z-test_array_api_entry_point.<locals>.<genexpr>z%'numpy' not in array_api entry pointsNznumpy entry point value 'z0' does not point to our Array API implementation)rO   ÚmetadataÚentry_pointsÚselectr^   Úgetr   r   ÚnextÚStopIterationÚloadÚvaluerY   r3   )ZepsZxp_epsrm   ZxpÚmsgr   r   r   Útest_array_api_entry_pointØ  s    
ÿrx   )N)$r   Ú	sysconfigr   rD   rS   rO   rd   rY   r   ZpytestZnumpy.testingr   r(   r]   r   r   ÚmarkZskipifZparametrizer   r!   r%   r'   r-   r<   r=   r>   r@   rG   rM   rU   r\   rj   ZxfailÚget_config_varrx   r   r   r   r   Ú<module>   sŽ   

!ÿ
*ýxõï40ý