3
Oda                 @   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   R/var/www/html/virt/lib64/python3.6/site-packages/scipy/_lib/tests/test_warnings.py__init__   s    zParseCall.__init__c             C   s    t jj| | | jj|j d S )N)astNodeVisitorgeneric_visitr   appendattr)r   noder   r   r   visit_Attribute   s    zParseCall.visit_Attributec             C   s   | j j|j d S )N)r   r   id)r   r   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  j  || _g | _g | _d S )N)superr   _FindFuncs__filenamebad_filtersbad_stacklevels)r   filename)	__class__r   r   r      s    
zFindFuncs.__init__c             C   s   t  }|j|j tjj| | |jd dks<|jd dkrd|jd jdkrd| j	j
dj| j|j |jd dkrt|jdks|jd d	kr| jd
krd S t|jdkrd S dd |jD }d|kr| jj
dj| j|j 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>
stacklevelr)   r)   )r   visitfuncr	   r
   r   r   argssr   r   formatr   linenolenkeywordsr   )r   r   pr-   r   r   r   
visit_Call$   s"    
zFindFuncs.visit_Call)r   r   r   r   r4   __classcell__r   r   )r   r   r      s   r   session)Zscopec              C   s   t tjj} g }g }xr| jdD ]d}tjt|L}tj	|j
 t|d}t|j| }|j| |j|j |j|j W d Q R X q W ||fS )Nz*.py)r   )r   scipy__file__parentrglobtokenizeopenstrr	   parsereadr   relative_tor+   extendr   r   )baser   r   pathfiletreefinderr   r   r   warning_calls>   s    
rG   c             C   sN   | \}}dd |D }dd |D }dd |D }|rJt djdj|d S )Nc             S   s   g | ]}d |kr|qS )zoptimize.pyr   )r%   itemr   r   r   
<listcomp>X   s    z.test_warning_calls_filters.<locals>.<listcomp>c             S   s4   g | ],}t jjd d|krt jjd d|kr|qS )sparsez__init__.pyz
sputils.py)osrC   join)r%   rH   r   r   r   rI   [   s    c             S   s   g | ]}|j d s|qS )z__init__.py)
startswith)r%   rH   r   r   r   rI   `   s    zxwarning ignore filter should not be used, instead, use
numpy.testing.suppress_warnings (in tests only);
found in:
    {}z
    )AssertionErrorr/   rL   )rG   r   r   r   r   r   test_warning_calls_filtersS   s    rO   zstacklevels currently missing)reasonc             C   sT   | \}}d}|r,|dj dj|7 }|d7 }|rD|dj dj|7 }|rPt|d S )N zxwarning ignore filter should not be used, instead, use
numpy.testing.suppress_warnings (in tests only);
found in:
    {}z
    z

z6warnings should have an appropriate stacklevel:
    {})r/   rL   rN   )rG   r   r   msgr   r   r   test_warning_calls_stacklevelsk   s    rS   )__doc__rK   pathlibr   r	   r;   r7   Zpytestr
   r   r   ZfixturerG   markZslowrO   ZxfailrS   r   r   r   r   <module>   s   !