o
    Ebd                     @   s   d 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ZG dd dejZ	G dd dejZ
ejdd	d
d Zejjdd Zejjejjdddd ZdS )z
Tests which scan for certain occurrences in the code, they may not find
all of these occurrences but should catch almost all. This file was adapted
from NumPy.
    N)Pathc                   @   s$   e Zd Zdd Zdd Zdd ZdS )	ParseCallc                 C   s
   g | _ d S N)ls)self r   @/usr/lib/python3/dist-packages/scipy/_lib/tests/test_warnings.py__init__   s   
zParseCall.__init__c                 C   s    t j| | | j|j d S r   )astNodeVisitorgeneric_visitr   appendattrr   noder   r   r   visit_Attribute   s   zParseCall.visit_Attributec                 C   s   | j |j d S r   )r   r   idr   r   r   r   
visit_Name   s   zParseCall.visit_NameN)__name__
__module____qualname__r	   r   r   r   r   r   r   r      s    r   c                       s$   e Zd Z fddZdd Z  ZS )	FindFuncsc                    s    t    || _g | _g | _d S r   )superr	   _FindFuncs__filenamebad_filtersbad_stacklevels)r   filename	__class__r   r   r	      s   

zFindFuncs.__init__c                 C   s   t  }||j tj| | |jd dks|jd dkr2|jd jdkr2| j	
d| j|j |jd dkrqt|jdksG|jd	 d
krs| jdkrNd S t|jdkrWd S dd |jD }d|vru| j
d| j|j d S d S d S d S )Nsimplefilterfilterwarningsr   ignorez{}:{}warn   warningsz_lib/tests/test_warnings.py   c                 S   s   h | ]}|j qS r   )arg).0kwr   r   r   	<setcomp>8   s    z'FindFuncs.visit_Call.<locals>.<setcomp>
stacklevel)r   visitfuncr
   r   r   r   argssr   r   formatr   linenolenkeywordsr   )r   r   pr/   r   r   r   
visit_Call$   s0   
zFindFuncs.visit_Call)r   r   r   r	   r6   __classcell__r   r   r   r   r      s    r   Zsession)Zscopec               	   C   s   t tjj} g }g }| dD ]<}tt|+}tj	|
 t|d}t|| }|| ||j ||j W d    n1 sFw   Y  q||fS )Nz*.py)r   )r   scipy__file__parentZrglobtokenizeopenstrr
   parsereadr   Zrelative_tor-   extendr   r   )baser   r   pathfileZtreefinderr   r   r   warning_calls>   s   
rE   c                    sj   | \}}t jddt jddt jddt jddf  fdd	|D }|r3td
d|d S )Noptimizez_optimize.pyZsparsez__init__.pyZstatsz_discrete_distns.pyz_continuous_distns.pyc                    s"   g | ]}| d d  vr|qS ):r   )split)r)   itemZallowed_filtersr   r   
<listcomp>d   s    z.test_warning_calls_filters.<locals>.<listcomp>xwarning ignore filter should not be used, instead, use
numpy.testing.suppress_warnings (in tests only);
found in:
    {}
    )osrB   joinAssertionErrorr1   )rE   r   r   r   rJ   r   test_warning_calls_filtersS   s   
rQ   zstacklevels currently missing)reasonc                 C   sT   | \}}d}|r|d d|7 }|d7 }|r"|d d|7 }|r(t|d S )N rL   rM   z

z6warnings should have an appropriate stacklevel:
    {})r1   rO   rP   )rE   r   r   msgr   r   r   test_warning_calls_stacklevelso   s   rU   )__doc__rN   Zpathlibr   r
   r;   r8   Zpytestr   r   r   ZfixturerE   ZmarkZslowrQ   ZxfailrU   r   r   r   r   <module>   s     
!

