o
    hF                     @   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	   T/var/www/vscode/kcb/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   )'clusterz
cluster.vqzcluster.hierarchy	constantsdatasetsdifferentiatefftfftpack	integrateinterpolateiozio.arffz	io.matlabz
io.wavfilelinalgzlinalg.blaszlinalg.cython_blaszlinalg.lapackzlinalg.cython_lapackzlinalg.interpolativendimageodroptimizezoptimize.elementwisesignalzsignal.windowssparsezsparse.linalgzsparse.csgraphspatialzspatial.distancezspatial.transform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   r   )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>   
dask.arraycupytorchzarray_api_compat.r   )r   backendsbackendpathr	   r	   r
   ignore_errors   s   
z4test_all_modules_are_expected.<locals>.ignore_errorsrK   .)r   prefixonerrorNzFound unexpected modules: )nptestingsuppress_warningsfilterDeprecationWarningpkgutilwalk_packagesr   __path____name__r   	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
ModuleTyper   SKIP_LIST_2r   )mod_namemembersmoduleobjnamesobjnamefullobjnamer	   r	   r
   find_unexpected_members  s   



z@test_all_modules_are_expected_2.<locals>.find_unexpected_membersrK   r   Nz3Found unexpected object(s) that look like modules: )r   r   r   r   r   r   extendr   )r   r   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: )	r   r   r   warningscatch_warningsfilterwarningsr   ImportWarningr   )r   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)r0   N)r1   N)r2   N)r4   N)r5   N)r?   N)r@   N)r3   arff)r6   matlab)r<   r   )r7   r   )r8   r   )r:   r   )r;   r   )r9   r   )r=   r   )r>   r   )rA   N)rB   N)rC   N)rD   N)rE   N)rF   N)rG   N)rH   N)rI   N)rJ   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\   N)r]   N)r^   N)r_   N)r`   N)ra   N)rb   N)rc   N)rd   N)re   N)rf   N)rg   windows)rh   N)ri   r   )rj   r   )rk   r   )rl   r   )rm   r   )rn   N)ro   N)rp   N)rq   N)rr   N)rs   N)rt   	transform)ru   N)rv   N)rw   N)rx   N)ry   N)rz   N)r{   N)r|   N)r}   N)r~   mstats)r   r   )r   N)r   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...ekki)r   splitr   r   pytestdeprecated_callraisesr   )r   r   r   import_namecorrect_import	attr_namemessager	   r	   r
   $test_private_but_present_deprecation[  s    e
"r   )__doc__r   r   r   r   r   r   numpyr   r   scipy.conftestr   r   r   r   r   r   markthread_unsafer   r   r   r   parametrizer   r	   r	   r	   r
   <module>   s2    0w
%#%`