o
    iF                     @   s   d Z ddlZddlZddlZddlZddlmZ ddlZddlZddl	Z	ddl
mZ dd Zdd d	D Zg d
Zdd Zg dZejjdd Zg dZdd Zdd Zejjejdg ddd ZdS )zo
This test script is adopted from:
    https://github.com/numpy/numpy/blob/main/numpy/tests/test_public_api.py
    N)import_modulexp_available_backendsc                   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)lendirscipyset r	   r	   Z/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/_lib/tests/test_public_api.pytest_dir_testing   s   $r   c                 C   s   g | ]}d | qS )scipy.r	   ).0sr	   r	   r
   
<listcomp>!   s    r   )'Zclusterz
cluster.vqzcluster.hierarchy	constantsZdatasetsZdifferentiateZfftZfftpackZ	integrateZinterpolateiozio.arffz	io.matlabz
io.wavfilelinalgzlinalg.blaszlinalg.cython_blaszlinalg.lapackzlinalg.cython_lapackzlinalg.interpolativeZndimageZodroptimizezoptimize.elementwisesignalzsignal.windowssparsezsparse.linalgzsparse.csgraphZspatialzspatial.distancezspatial.transformZspecialstatszstats.contingencyzstats.distributionszstats.mstatsz	stats.qmczstats.sampling)sscipy.constants.codatascipy.constants.constantsscipy.fftpack.basiczscipy.fftpack.convolvescipy.fftpack.helperscipy.fftpack.pseudo_diffsscipy.fftpack.realtransformsscipy.integrate.dopscipy.integrate.lsodascipy.integrate.odepackscipy.integrate.quadpackscipy.integrate.vodezscipy.interpolate.dfitpackscipy.interpolate.fitpackscipy.interpolate.fitpack2zscipy.interpolate.interpndscipy.interpolate.interpolatescipy.interpolate.ndgriddatascipy.interpolate.polyintscipy.interpolate.rbfscipy.io.arff.arffreadscipy.io.harwell_boeingscipy.io.idlscipy.io.matlab.byteordercodesscipy.io.matlab.mioscipy.io.matlab.mio4scipy.io.matlab.mio5scipy.io.matlab.mio5_paramsscipy.io.matlab.mio5_utilsscipy.io.matlab.mio_utilsscipy.io.matlab.miobasescipy.io.matlab.streamsscipy.io.mmioscipy.io.netcdfscipy.linalg.basicscipy.linalg.decompscipy.linalg.decomp_choleskyscipy.linalg.decomp_luscipy.linalg.decomp_qrscipy.linalg.decomp_schurscipy.linalg.decomp_svdscipy.linalg.matfuncsscipy.linalg.miscscipy.linalg.special_matrices
scipy.misczscipy.misc.commonzscipy.misc.doccerscipy.ndimage.filtersscipy.ndimage.fourierscipy.ndimage.interpolationscipy.ndimage.measurementsscipy.ndimage.morphologyscipy.odr.modelsscipy.odr.odrpackscipy.optimize.cobylazscipy.optimize.cython_optimizescipy.optimize.lbfgsbscipy.optimize.linesearchscipy.optimize.minpackscipy.optimize.minpack2scipy.optimize.moduleTNCscipy.optimize.nonlinscipy.optimize.optimizescipy.optimize.slsqpscipy.optimize.tncscipy.optimize.zerosscipy.signal.bsplinesscipy.signal.filter_designscipy.signal.fir_filter_designscipy.signal.lti_conversionscipy.signal.ltisysscipy.signal.signaltoolsscipy.signal.spectralzscipy.signal.splinescipy.signal.waveformsscipy.signal.waveletsscipy.signal.windows.windowszscipy.sparse.basezscipy.sparse.bsrzscipy.sparse.compressedzscipy.sparse.constructzscipy.sparse.coozscipy.sparse.csczscipy.sparse.csrzscipy.sparse.datazscipy.sparse.diazscipy.sparse.dokzscipy.sparse.extractscipy.sparse.lilscipy.sparse.linalg.dsolvescipy.sparse.linalg.eigenscipy.sparse.linalg.interfacescipy.sparse.linalg.isolvescipy.sparse.linalg.matfuncsscipy.sparse.sparsetoolsscipy.sparse.spfuncsscipy.sparse.sputilsscipy.spatial.ckdtreescipy.spatial.kdtreescipy.spatial.qhull scipy.spatial.transform.rotationscipy.special.add_newdocsscipy.special.basiczscipy.special.cython_specialscipy.special.orthogonalscipy.special.sf_errorscipy.special.specfunscipy.special.spfun_statsscipy.stats.biasedurnscipy.stats.kdescipy.stats.morestatsscipy.stats.mstats_basicscipy.stats.mstats_extrasscipy.stats.mvnscipy.stats.statsc                 C   s8   d| v sd| v sd| v rdS | t v rdS | tv rdS dS )z%Check if this needs to be considered.z._z.testsz.setupFT)PUBLIC_MODULESPRIVATE_BUT_PRESENT_MODULES)namer	   r	   r
   is_unexpected   s   rz   )zscipy.conftestzscipy.versionzscipy.special.libsf_error_statec                  C   s   dd } g }t j -}|td tjtjtj	d | dD ]\}}}t
|r0|tvr0|| qW d   n1 s;w   Y  |rIt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.
    c                 S   s4   h d}|D ]}d| }|| v r|t vr d S q )N>   ZcupyZtorchz
dask.arrayzarray_api_compat.r   )ry   backendsbackendpathr	   r	   r
   ignore_errors   s   
z4test_all_modules_are_expected.<locals>.ignore_errorsr@   .)r}   prefixonerrorNzFound unexpected modules: )nptestingsuppress_warningsfilterDeprecationWarningpkgutilwalk_packagesr   __path____name__rz   	SKIP_LISTappendAssertionError)r~   modnamessup_modnamer	   r	   r
   test_all_modules_are_expected   s    
r   )z
scipy.charz	scipy.reczscipy.emathz
scipy.mathzscipy.randomzscipy.ctypeslibzscipy.mac                  C   st   dd } t j }|td | d}W d   n1 sw   Y  tD ]	}|| | q%|r8td| dS )z
    Method checking all objects. The pkgutil-based method in
    `test_all_modules_are_expected` does not catch imports into a namespace,
    only filenames.
    c                 S   sx   g }t | }t|dr|j}nt|}|D ]#}|ds9| d | }tt||tj	r9t
|r9|tvr9|| q|S )N__all__r   r   )	importlibr   hasattrr   r   
startswith
isinstancegetattrtypes
ModuleTyperz   SKIP_LIST_2r   )mod_namemembersmoduleZobjnamesZobjnameZfullobjnamer	   r	   r
   find_unexpected_members  s   



z@test_all_modules_are_expected_2.<locals>.find_unexpected_membersr@   r   Nz3Found unexpected object(s) that look like modules: )r   r   r   r   r   rw   extendr   )r   r   Zunexpected_membersr   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jdd$ tjdtd tjdtd tD ]}| |s?|| q4W d   n1 sJw   Y  |rXt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 dS  ttfy   Y dS w )NFT)r   r   ImportErrorAttributeError)module_namer	   r	   r
   check_importable=  s   z-test_api_importable.<locals>.check_importablez3Modules in the public API that cannot be imported: T)recordalways)categoryNzNModules that are not really public but looked public and can not be imported: )	rw   r   r   warningscatch_warningsfilterwarningsr   ImportWarningrx   )r   Zmodule_namesr   r	   r	   r
   test_api_importable6  s0   

r   )r   correct_module)_)r   N)r   N)r   N)r   N)r   N)r   N)r   N)r   N)r   N)r    N)r!   N)r"   N)r#   N)r$   N)r%   N)r&   N)r'   N)r)   N)r*   N)r4   N)r5   N)r(   Zarff)r+   matlab)r1   r   )r,   r   )r-   r   )r/   r   )r0   r   )r.   r   )r2   r   )r3   r   )r6   N)r7   N)r8   N)r9   N)r:   N)r;   N)r<   N)r=   N)r>   N)r?   N)rA   N)rB   N)rC   N)rD   N)rE   N)rF   N)rG   N)rH   N)rI   N)rJ   N)rK   N)rL   N)rM   N)rN   N)rO   N)rP   N)rQ   N)rR   N)rS   N)rT   N)rU   N)rV   N)rW   N)rX   N)rY   N)rZ   N)r[   N)r\   windows)r]   N)r^   r   )r_   r   )r`   r   )ra   r   )rb   r   )rc   N)rd   N)re   N)rf   N)rg   N)rh   N)ri   	transform)rj   N)rk   N)rl   N)rm   N)rn   N)ro   N)rp   N)rq   N)rr   N)rs   mstats)rt   r   )ru   N)rv   Nc              	   C   s   t | }|d u rd| dd  }nd| dd  d| }t |}|jD ]0}t||d d us3J d| d| d}tj|d t|| W d    n1 sRw   Y  q'd|  d	}tjt|d t|d
 W d    d S 1 svw   Y  d S )Nr   r      zPlease import `z` from the `z`...)match`z` is deprecated...Zekki)r   splitr   r   pytestZdeprecated_callZraisesr   )r   r   r   import_nameZcorrect_import	attr_namemessager	   r	   r
   $test_private_but_present_deprecation[  s    e
"r   )__doc__r   r   r   r   r   r   numpyr   r   Zscipy.conftestr   r   rw   rx   rz   r   markZthread_unsafer   r   r   r   Zparametrizer   r	   r	   r	   r
   <module>   s2    0w
%#%`