U
    »mœdÇ  ã                   @   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   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-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rd|jd jdkrd| j	 
d | j|j¡¡ |jd dkrÞt|jƒdksŽ|jd	 d
krÞ| jdkrœd S t|jƒdkr®d S dd„ |jD ƒ}d|krÞ| j 
d | 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>Ú
stacklevel)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	   r6   Ú__classcell__r   r   r   r   r      s   r   Úsession)Úscopec               
   C   sŒ   t tjƒj} g }g }|  d¡D ]d}t t|ƒ¡�L}tj	| 
¡ t|ƒd�}t| | ¡ƒ}| |¡ | |j¡ | |j¡ W 5 Q R X q||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    
rJ   c              	      s‚   | \}}t j dd¡t j dd¡t j dd¡t j dd¡t j dd¡t j dd	¡f‰ ‡ fd
d„|D ƒ}|r~td d |¡¡ƒ‚d S )NZdatasetsz_fetchers.pyz__init__.pyÚoptimizez_optimize.pyÚsparseÚstatsz_discrete_distns.pyz_continuous_distns.pyc                    s"   g | ]}|  d ¡d ˆ kr|‘qS )ú:r   )Úsplit)r)   Úitem©Zallowed_filtersr   r   Ú
<listcomp>f   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:
    {}ú
    )ÚosrF   ÚjoinÚAssertionErrorr1   )rJ   r   r   r   rQ   r   Útest_warning_calls_filtersS   s    
úýÿrX   zstacklevels currently missing)Úreasonc                 C   sT   | \}}d}|r,|d  d |¡¡7 }|d7 }|rD|d  d |¡¡7 }|rPt|ƒ‚d S )NÚ rS   rT   z

z6warnings should have an appropriate stacklevel:
    {})r1   rV   rW   )rJ   r   r   Úmsgr   r   r   Útest_warning_calls_stacklevelsq   s    þÿr\   )Ú__doc__rU   Úpathlibr   r
   r>   r:   Zpytestr   r   r   ZfixturerJ   ÚmarkZslowrX   Zxfailr\   r   r   r   r   Ú<module>   s   !


