a
    ;eF                     @   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y~   dZY n0 d6ddZdd Ze	jjedde	jd	d
gdd Zdd Zdd Zdd Ze	jjedu dddd Zdd dD Ze jdk redd dD 7 Zg dZdd dD Ze jdk rNedd d D 7 Zd!d" Zg d#Ze jdk rted$g7 Ze	jd%d&d' Zg d(Z e jdk re g d)7 Z d*d+ Z!d,d- Z"e	jj#e$d.d/vd0dd1d2 Z%e	jd	g d3d4d5 Z&dS )7    N)IS_WASMc                 C   s`   |du 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   O/var/www/sunrise/env/lib/python3.9/site-packages/numpy/tests/test_public_api.py	check_dir   s    
r   c                  C   sH   dddddddddd	d
ddddddddd} | }t t}||ksDJ d S )Nz.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)Z_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)ZundocumentedZ	allowlistbad_resultsr   r   r   test_numpy_namespace!   s.    r   zcan't start subprocess)reasonr   testingc                 C   s6   t jdd|  f}t|}|r"J | ttv s2J 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   Zexeresultr   r   r   test_import_lazy_importA   s    
r   c                   C   s$   t ttt tttks J dS )zWAssert that output of dir has only one "testing/tester"
    attribute without duplicateN)lenr   r   setr   r   r   r   test_dir_testingX   s    r   c                  C   s   t tj} | i ksJ d S N)r   r   linalgr   r   r   r   test_numpy_linalg^   s    
r"   c                  C   s   t tj} | i ksJ d S r   )r   r   fftr!   r   r   r   test_numpy_fftc   s    
r$   z#ctypes not available in this pythonc                  C   s0   t tjjj} t| dd }|d u s,J 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   )cdllfr   r   r   test_NPY_NO_EXPORTh   s    r+   c                 C   s   g | ]}d | qS znumpy.r   .0sr   r   r   
<listcomp>~       r0   )"	array_apizarray_api.linalgZ	ctypeslibdoczdoc.constantsz
doc.ufuncsZdtypes
exceptionsZ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   ztesting.overridestypingztyping.mypy_pluginversion)      c                 C   s   g | ]}d | qS r,   r   r-   r   r   r   r0      s   )	distutilszdistutils.cpuinfozdistutils.exec_commandzdistutils.misc_utilzdistutils.logzdistutils.system_info)z
numpy.charznumpy.emathz	numpy.recc                 C   s   g | ]}d | qS r,   r   r-   r   r   r   r0      r1   ):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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.corezma.testutilszma.timer_comparisonZ	matrixlibzmatrixlib.defmatrixzpolynomial.polyutilszrandom.mtrandzrandom.bit_generatorztesting.print_coercion_tablesc                 C   s   g | ]}d | qS r,   r   r-   r   r   r   r0      s   )7zdistutils.armccompilerzdistutils.fujitsuccompilerz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.unixccompilerc                 C   sD   d| v sd| v sd| v rdS | t v r(dS | tv r4dS | tv 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_unexpected1  s    rB   )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.code_generators.verify_c_api_versionznumpy.core.cversionsznumpy.core.generate_numpy_apiznumpy.core.umath_testsznumpy.distutils.msvc9compilerz'ignore:.*np.compat.*:DeprecationWarningc                  C   sX   g } t jtjtjd ddD ]$\}}}t|r|tv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   rB   	SKIP_LISTappendAssertionError)modnames_modnameispkgr   r   r   test_all_modules_are_expectedW  s    rP   )z
numpy.mathz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.exceptionsznumpy.matlib.mathznumpy.matlib.linalgznumpy.matlib.fftznumpy.matlib.randomznumpy.matlib.ctypeslibznumpy.matlib.ma)znumpy.distutils.log.sysznumpy.distutils.log.loggingznumpy.distutils.log.warningsc                  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vr,|| q,|S )N__all__rM   r   )	importlibimport_moduler   rQ   r   
startswith
isinstancer   types
ModuleTyperB   SKIP_LIST_2rJ   )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>   extendrK   format)r[   Zunexpected_membersrN   r   r   r   test_all_modules_are_expected_2  s    r_   c               	   C   s   dd } g }t D ]}| |s|| q|r:td|tD ].}zt| W q> tyj   || Y q>0 q>|rtd|tjddH}tj	dt
d tj	dtd tD ]}| |s|| qW d	   n1 s0    Y  |rt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y&   Y dS 0 dS )NFT)rR   rS   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)categoryNzPModules that are not really public but looked public and can not be imported: {})r>   rJ   rK   r^   r?   evalra   warningscatch_warningsfilterwarningsDeprecationWarningImportWarningr@   )rb   Zmodule_namesr
   wr   r   r   test_api_importable  s8    *rm   Py_DEBUG)Nr   0zNumPy 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 dtjv } tj }z|jdd}W n tyH   |	dg }Y n0 t
|dkrl| rhd}t|ddS ztdd |D }W n& ty   | rd	}t|dY dS 0 | }d
|j d}|tju sJ |dS )z}
    Entry point for Array API implementation can be found with importlib and
    returns the numpy.array_api namespace.
    platlibr2   )groupr   z%No entry points for 'array_api' foundNc                 s   s   | ]}|j d kr|V  qdS )r\   NrA   )r.   epr   r   r   	<genexpr>  r1   z-test_array_api_entry_point.<locals>.<genexpr>z%'numpy' not in array_api entry pointsznumpy entry point value 'z0' does not point to our Array API implementation)	sysconfigget_pathr   r(   rR   metadataZentry_pointsselectra   getr   rK   nextStopIterationloadvaluer\   r2   )Znumpy_in_sitepackagesZepsZxp_epsmsgrr   Zxpr   r   r   test_array_api_entry_point  s,    


r~   )ZModuleDeprecationWarningZVisibleDeprecationWarningZComplexWarningZTooHardErrorZ	AxisErrorc                 C   sR   | t jv sJ | t  vsJ tt | jdks2J | t jjv sBJ tt j|  d S )Nznumpy.exceptions)r   rQ   __dir__r   r   r4   rA   r   r   r   test_moved_exceptions  s
    r   )N)'r   rt   r   rF   rV   rR   rg   r\   r   ZpytestZnumpy.testingr   r%   r`   r   r   markZskipifZparametrizer   r   r"   r$   r+   r>   version_infor?   r@   rB   rI   ri   rP   rX   r_   rm   Zxfailget_config_varr~   r   r   r   r   r   <module>   sn   

 
$<=


40
)