U
    X	a]                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  G dd dZ!G dd de!Z"G dd	 d	Z#G d
d de"Z$G dd de!Z%G dd de!Z&G dd dZ'G dd dZ(ej)j*ddG dd dZ+G dd dZ,G dd dZ-G dd dZ.G dd dZ/G d d! d!Z0d?d"d#Z1d$d% Z2d&d' Z3d(d) Z4d*d+ Z5d,d- Z6d.d/ Z7d0d1 Z8d2d3 Z9d4d5 Z:d6d7 Z;G d8d9 d9eZ<d:d; Z=ej)j>e d<dG d=d> d>Z?dS )@    N)assert_equalassert_array_equalassert_almost_equalassert_array_almost_equalassert_array_lessbuild_err_msgraisesassert_raisesassert_warnsassert_no_warningsassert_allcloseassert_approx_equalassert_array_almost_equal_nulpassert_array_max_ulpclear_and_catch_warningssuppress_warningsassert_string_equalassert_tempdirtemppathassert_no_gc_cyclesHAS_REFCOUNT)ARRAY_FUNCTION_ENABLEDc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )_GenericTestc                 C   s   |  || d S N_assert_funcselfab r!   B/tmp/pip-unpacked-wheel-zbzmve17/numpy/testing/tests/test_utils.py_test_equal   s    z_GenericTest._test_equalc              	   C   s$   t t | || W 5 Q R X d S r   )r	   AssertionErrorr   r   r!   r!   r"   _test_not_equal   s    
z_GenericTest._test_not_equalc                 C   s,   t ddg}t ddg}| || dS )z/Test two equal array of rank 1 are found equal.      Nnparrayr#   r   r!   r!   r"   test_array_rank1_eq   s    z _GenericTest.test_array_rank1_eqc                 C   s,   t ddg}t ddg}| || dS )z7Test two different array of rank 1 are found not equal.r&   r'   Nr)   r*   r%   r   r!   r!   r"   test_array_rank1_noteq$   s    z#_GenericTest.test_array_rank1_noteqc                 C   s<   t ddgddgg}t ddgddgg}| || dS )z/Test two equal array of rank 2 are found equal.r&   r'         Nr(   r   r!   r!   r"   test_array_rank2_eq+   s    z _GenericTest.test_array_rank2_eqc                 C   s4   t ddg}t ddgddgg}| || dS ):Test two arrays with different shapes are found not equal.r&   r'   Nr,   r   r!   r!   r"   test_array_diffshape2   s    z!_GenericTest.test_array_diffshapec                 C   s"   t jddgtd}| |d dS )zTest object arrays.r&   dtypeN)r)   r*   objectr#   r   r   r!   r!   r"   test_objarray9   s    z_GenericTest.test_objarrayc                 C   s   |  dddgd d S )Nr&   r'   r.   )r&   r'   r.   )r#   r   r!   r!   r"   test_array_likes>   s    z_GenericTest.test_array_likesN)__name__
__module____qualname__r#   r%   r+   r-   r0   r2   r7   r9   r!   r!   r!   r"   r      s   r   c                   @   sn   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zejje dddd ZdS )TestArrayEqualc                 C   s
   t | _d S r   )r   r   r8   r!   r!   r"   setupD   s    zTestArrayEqual.setupc                    s4    fdd}dD ]}|| qdD ]}|| q"dS )z!Test rank 1 array for all dtypes.c                    sL   t d| }|d | }| }|d  ||  || d S )Nr'   r&   r   r)   emptyfillcopyr#   r%   tr   r    cr8   r!   r"   fooI   s    

z.TestArrayEqual.test_generic_rank1.<locals>.foo?bhilqpBHILQPfdgFDGZS1ZU1Nr!   r   rF   rD   r!   r8   r"   test_generic_rank1G   s
    

z!TestArrayEqual.test_generic_rank1c                 C   sl   t d}t d}tt| j|| |}| || t d}t d}tt| j|| |}| || d S )Nl   Cj<T"3w-l   (M$c7uv+   
   )r)   r*   r	   r$   r   r   xyr!   r!   r"   test_0_ndim_arrayZ   s    



z TestArrayEqual.test_0_ndim_arrayc                    s4    fdd}dD ]}|| qdD ]}|| q"dS )z!Test rank 3 array for all dtypes.c                    sL   t d| }|d | }| }|d  ||  || d S )N)r/   r'   r.   r&   r   r?   rC   r8   r!   r"   rF   k   s    

z.TestArrayEqual.test_generic_rank3.<locals>.foorG   rH   Nr!   rI   r!   r8   r"   test_generic_rank3i   s
    

z!TestArrayEqual.test_generic_rank3c                 C   sP   t ddt jg}t ddt jg}| || t dddg}| || dS )z$Test arrays with nan values in them.r&   r'   r.   N)r)   r*   nanr#   r%   r   r   r    rE   r!   r!   r"   test_nan_array|   s
    zTestArrayEqual.test_nan_arrayc                 C   sF   t ddg}t ddg}| || t ddg}| || dS )r1   floupifloupafloupipiN)r)   r*   r#   r%   rS   r!   r!   r"   test_string_arrays   s
    z!TestArrayEqual.test_string_arraysc              	   C   s   t ddtfdtfg}ddg|d< ddg|d< | }| || t ddtfdtfg}|d  |d< |d  |d< t .}|jtdd}| || t	t
|d W 5 Q R X dS )	zTest record arrays.r'   rU   rV   r&   rW   zelementwise == messageN)r)   r@   floatrB   r#   r   recordFutureWarningr%   r   len)r   r   r    rE   suplr!   r!   r"   test_recarrays   s    zTestArrayEqual.test_recarraysc                 C   s   t jjdddgdddgd}t dt jdg}| || | || t jjdddgdddgd}t t jddg}| || | || d S )N      @      @      @FTmask)r)   maMaskedArrayr*   rR   r#   infr   r!   r!   r"   test_masked_nan_inf   s    z"TestArrayEqual.test_masked_nan_infc                 C   s   G dd dt j}t ddg|}t ddg|}tt||kt t||k t||k | || | || | || d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z?TestArrayEqual.test_subclass_that_overrides_eq.<locals>.MyArrayc                 S   s   t t| | S r   )boolr)   equalallr   otherr!   r!   r"   __eq__   s    zFTestArrayEqual.test_subclass_that_overrides_eq.<locals>.MyArray.__eq__c                 S   s
   | |k S r   r!   rn   r!   r!   r"   __ne__   s    zFTestArrayEqual.test_subclass_that_overrides_eq.<locals>.MyArray.__ne__N)r:   r;   r<   rp   rq   r!   r!   r!   r"   MyArray   s   rr         ?       @rb   )	r)   ndarrayr*   viewr   typerk   r#   r%   r   rr   r   r    r!   r!   r"   test_subclass_that_overrides_eq   s    z.TestArrayEqual.test_subclass_that_overrides_eqzrequires __array_function__reasonc              	   C   s   G dd dt j}t ddg|}t ddg|}tt t | W 5 Q R X | || | || | || d S )Nc                   @   s   e Zd Zdd ZdS )zKTestArrayEqual.test_subclass_that_does_not_implement_npall.<locals>.MyArrayc                 _   s   t S r   )NotImplementedr   argskwargsr!   r!   r"   __array_function__   s    z^TestArrayEqual.test_subclass_that_does_not_implement_npall.<locals>.MyArray.__array_function__N)r:   r;   r<   r   r!   r!   r!   r"   rr      s   rr   rs   rt   rb   )	r)   ru   r*   rv   r	   	TypeErrorrm   r#   r%   rx   r!   r!   r"   +test_subclass_that_does_not_implement_npall   s    
z:TestArrayEqual.test_subclass_that_does_not_implement_npallN)r:   r;   r<   r>   rJ   rP   rQ   rT   rX   ra   rj   ry   pytestmarkskipifr   r   r!   r!   r!   r"   r=   B   s   
 r=   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestBuildErrorMessagec                 C   sD   t dddg}t dddg}d}t||g|}d}t|| d S )	NrZ|
 ?rZ|
  @& @㈵ ?&  @㈵ @There is a mismatchz
Items are not equal: There is a mismatch
 ACTUAL: array([1.00001, 2.00002, 3.00003])
 DESIRED: array([1.00002, 2.00003, 3.00004])r)   r*   r   r   r   rN   rO   err_msgr   r    r!   r!   r"   test_build_err_msg_defaults   s    z1TestBuildErrorMessage.test_build_err_msg_defaultsc                 C   sH   t dddg}t dddg}d}t||g|dd	}d
}t|| d S )Nr   r   r   r   r   r   r   F)verbosez)
Items are not equal: There is a mismatchr   r   r!   r!   r"   test_build_err_msg_no_verbose   s    z3TestBuildErrorMessage.test_build_err_msg_no_verbosec                 C   sH   t dddg}t dddg}d}t||g|dd	}d
}t|| d S )Nr   r   r   r   r   r   r   )ZFOOZBAR)namesz{
Items are not equal: There is a mismatch
 FOO: array([1.00001, 2.00002, 3.00003])
 BAR: array([1.00002, 2.00003, 3.00004])r   r   r!   r!   r"   test_build_err_msg_custom_names   s    z5TestBuildErrorMessage.test_build_err_msg_custom_namesc                 C   sH   t dddg}t dddg}d}t||g|dd	}d
}t|| d S )Ng0D   ?r   r   g_p   ?r   r   r   rL   )Z	precisionz
Items are not equal: There is a mismatch
 ACTUAL: array([1.000000001, 2.00002    , 3.00003    ])
 DESIRED: array([1.000000002, 2.00003    , 3.00004    ])r   r   r!   r!   r"   #test_build_err_msg_custom_precision   s    z9TestBuildErrorMessage.test_build_err_msg_custom_precisionN)r:   r;   r<   r   r   r   r   r!   r!   r!   r"   r      s   	r   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )	TestEqualc                 C   s
   t | _d S r   )r   r   r8   r!   r!   r"   r>     s    zTestEqual.setupc                 C   sH   |  tjtj |  tjgtjg | tjtjg | tjd d S Nr&   )r   r)   rR   r%   r8   r!   r!   r"   test_nan_items  s    zTestEqual.test_nan_itemsc                 C   s:   |  tjtj |  tjgtjg | tjtjg d S r   )r   r)   ri   r%   r8   r!   r!   r"   test_inf_items  s    zTestEqual.test_inf_itemsc                 C   st   |  tddtdd |  tddtdd | tddtdd | tddtdd d S )N
2017-01-01smz
2017-01-02)r#   r)   
datetime64r%   r8   r!   r!   r"   test_datetime  s     







zTestEqual.test_datetimec                 C   st  t d}t dd}t dd}t d}t dd}t dd}|||g}|||g}t||D ]2\}	}
| |	|
 | |	g|
g | |	g|
 qdt||D ]2\}	}
| |	|
 | |	g|
g | |	g|
 qt||D ]\}	}
| |	|
 | |	|
g | |	g|
g | |	gt dd | |
gt dd | |	gt dd | |
gt dd qd S )NNaTr   nsr   {   )r)   r   Ztimedelta64	itertoolsproductr   r%   )r   Znadt_no_unitZnadt_sZnadt_dZnatd_no_unitZnatd_sZnatd_dZdtsZtdsr   r    r!   r!   r"   test_nat_items$  s0    



zTestEqual.test_nat_itemsc                 C   s   |  dd | dd d S )NabZabb)r   r%   r8   r!   r!   r"   test_non_numericC  s    zTestEqual.test_non_numericc                 C   s   |  tddtdd |  tdtjtdtj | tdtjtdd | ttjdtdtj | ttjtjttjd d S Nr&   r'   )r   complexr)   rR   r%   ri   r8   r!   r!   r"   test_complex_itemG  s
    zTestEqual.test_complex_itemc                 C   s   |  tjtj d S r   )r%   r)   PZERONZEROr8   r!   r!   r"   test_negative_zeroN  s    zTestEqual.test_negative_zeroc                 C   sR   t tddtdt jg}t tddtddg}| || | || d S r   r)   r*   r   rR   r   r%   rM   r!   r!   r"   test_complexQ  s    zTestEqual.test_complexc                 C   sD   dd l }t| ddd| dddg}| ||d d d  d S )Nr   i  r&   r'   )datetimer)   r*   r%   )r   r   r   r!   r!   r"   test_objectW  s
    zTestEqual.test_objectN)r:   r;   r<   r>   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r      s   r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestArrayAlmostEqualc                 C   s
   t | _d S r   )r   r   r8   r!   r!   r"   r>   a  s    zTestArrayAlmostEqual.setupc                    sL    j dddd tt fdd  j dgdgdd tt fdd d S )N?        r   decimalc                      s    j ddddS Ng      ?r   r   r   r   r!   r8   r!   r"   <lambda>n      z5TestArrayAlmostEqual.test_closeness.<locals>.<lambda>c                      s    j dgdgddS r   r   r!   r8   r!   r"   r   s  r   r   r	   r$   r8   r!   r8   r"   test_closenessd  s    

z#TestArrayAlmostEqual.test_closenessc                    sR   t dgt dg jdd  jdd tt fdd d S )NgeH@gwH@r.   r   r/   c                      s    j ddS )N   r   r   r!   rM   r!   r"   r   |  r   z2TestArrayAlmostEqual.test_simple.<locals>.<lambda>r)   r*   r   r	   r$   r8   r!   rM   r"   test_simpleu  s    z TestArrayAlmostEqual.test_simplec                    sz   t t jgt dgt t jg  ttfdd tt fdd tt fdd d S )Nr&   c                      s     S r   r   r!   ananaoner   r!   r"   r     r   z/TestArrayAlmostEqual.test_nan.<locals>.<lambda>c                      s     S r   r   r!   ainfr   r   r!   r"   r     r   c                      s     S r   r   r!   r   r!   r"   r     r   r)   r*   rR   ri   r   r	   r$   r8   r!   r   r   r   r   r"   test_nan~  s    zTestArrayAlmostEqual.test_nanc                    sd   t ddgddgg   t j d< tt fdd t j d< tt fdd d S )	Nrs   rt   rb   rc   )r   r   c                      s     S r   r   r!   r   r    r   r!   r"   r     r   z/TestArrayAlmostEqual.test_inf.<locals>.<lambda>c                      s     S r   r   r!   r   r!   r"   r     r   )r)   r*   rB   ri   r	   r$   r8   r!   r   r"   test_inf  s    
zTestArrayAlmostEqual.test_infc                 C   sN  t ddgddgg}t jddgddggddgddgg}| || | || | || t jjddd	}t ddd
g}| || | || t jj}t ddd
g}| || | || t jjddd
gdddgd	}t dddg}| || | || t jjddd
gdddgd	}t d}| || | || d S )Nrs   rt   rb   rc   r   FTg      @re   rd   )r)   r*   rg   Zmasked_arrayr   rh   r#   Zmaskedr   r!   r!   r"   test_subclass  s.    
z"TestArrayAlmostEqual.test_subclassc                 C   s6   G dd dt j}t ddg|}| || d S )Nc                       s0   e Zd Z fddZ fddZdd Z  ZS )zGTestArrayAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArrayc                    s   t  |tjS r   superrp   rv   r)   ru   rn   	__class__r!   r"   rp     s    zNTestArrayAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArray.__eq__c                    s   t  |tjS r   r   __lt__rv   r)   ru   rn   r   r!   r"   r     s    zNTestArrayAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArray.__lt__c                 _   s   t d S r   NotImplementedErrorr}   r!   r!   r"   rm     s    zKTestArrayAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArray.allr:   r;   r<   rp   r   rm   __classcell__r!   r!   r   r"   rr     s   rr   rs   rt   r)   ru   r*   rv   r   r   rr   r   r!   r!   r"   !test_subclass_that_cannot_be_bool  s    
z6TestArrayAlmostEqual.test_subclass_that_cannot_be_boolN)
r:   r;   r<   r>   r   r   r   r   r   r   r!   r!   r!   r"   r   _  s   	
r   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )TestAlmostEqualc                 C   s
   t | _d S r   )r   r   r8   r!   r!   r"   r>     s    zTestAlmostEqual.setupc                    sL    j dddd tt fdd  j dgdgdd tt fdd d S )Nr   r   r   r   c                      s    j ddddS r   r   r!   r8   r!   r"   r     r   z0TestAlmostEqual.test_closeness.<locals>.<lambda>c                      s    j dgdgddS r   r   r!   r8   r!   r"   r     r   r   r8   r!   r8   r"   r     s    

zTestAlmostEqual.test_closenessc                    sJ     tjtj tt fdd tt fdd tt fdd d S )Nc                      s     tjdS r   )r   r)   rR   r!   r8   r!   r"   r     r   z/TestAlmostEqual.test_nan_item.<locals>.<lambda>c                      s     tjtjS r   )r   r)   rR   ri   r!   r8   r!   r"   r     r   c                      s     tjtjS r   )r   r)   ri   rR   r!   r8   r!   r"   r     r   )r   r)   rR   r	   r$   r8   r!   r8   r"   test_nan_item  s    


zTestAlmostEqual.test_nan_itemc                    sL     tjtj   tj tj  tt fdd tt fdd d S )Nc                      s     tjdS r   r   r)   ri   r!   r8   r!   r"   r     r   z/TestAlmostEqual.test_inf_item.<locals>.<lambda>c                      s     tj tjS r   r   r!   r8   r!   r"   r     r   )r   r)   ri   r	   r$   r8   r!   r8   r"   test_inf_item  s    

zTestAlmostEqual.test_inf_itemc                 C   s   |  dd d S r   )r%   r8   r!   r!   r"   test_simple_item  s    z TestAlmostEqual.test_simple_itemc                 C   s   |  tddtdd |  tdtjtdtj |  ttjtjttjtj | tdtjtdd | ttjdtdtj | ttjtjttjd d S r   )r   r   r)   rR   ri   r%   r8   r!   r!   r"   r     s     z!TestAlmostEqual.test_complex_itemc                 C   sz   t tddtdt jg}t tddtt jdg}t tddtddg}| || | || | || d S r   r   )r   rN   zrO   r!   r!   r"   r     s    zTestAlmostEqual.test_complexc              	   C   s(  t dddg}t dddg}tt}| j||dd W 5 Q R X t|jd	}t	|d
 d t	|d d t	|d d t	|d d t	|d d tt}| || W 5 Q R X t|jd	}t	|d
 d t	|d d t	|d d t	|d d t	|d d t t j
dg}t t j
dg}tt}| || W 5 Q R X t|jd	}t	|d
 d t	|d d t	|d d t	|d d t	|d d t ddg}t ddg}tt}| || W 5 Q R X t|jd	}t	|d
 d t	|d d  t	|d d! d"S )#zCheck the message is formatted correctly for the decimal value.
           Also check the message when input includes inf or nan (gh12200)g    ?g     @r   g_   ?g    @r      r   
r.   z!Mismatched elements: 3 / 3 (100%)r/   zMax absolute difference: 1.e-05r   z'Max relative difference: 3.33328889e-06   z8 x: array([1.00000000001, 2.00000000002, 3.00003      ])   z8 y: array([1.00000000002, 2.00000000003, 3.00004      ])z"Mismatched elements: 1 / 3 (33.3%)z& x: array([1.     , 2.     , 3.00003])z& y: array([1.     , 2.     , 3.00004])r   r&   z Mismatched elements: 1 / 2 (50%)Max absolute difference: 1.Max relative difference: 1.z x: array([inf,  0.])z y: array([inf,  1.])r'   z!Mismatched elements: 2 / 2 (100%)zMax absolute difference: 2zMax relative difference: infN)r)   r*   r   r   r$   r   strvaluesplitr   ri   r   rN   rO   exc_infoZmsgsr!   r!   r"   test_error_message  sT    z"TestAlmostEqual.test_error_messagec              	   C   s   d}t d}tt}| || W 5 Q R X t|jd}t	|d d t	|d d t	|d d	 d}t d}tt}| || W 5 Q R X t|jd}t	|d d t	|d d t	|d d
 dS )zHCheck the message is formatted correctly when either x or y is a scalar.r'      r   r.   z#Mismatched elements: 20 / 20 (100%)r/   r   r   r   Max relative difference: 0.5N)
r)   onesr   r   r$   r   r   r   r   r   r   r!   r!   r"   test_error_message_21  s     

z$TestAlmostEqual.test_error_message_2c                 C   s6   G dd dt j}t ddg|}| || d S )Nc                       s0   e Zd Z fddZ fddZdd Z  ZS )zBTestAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArrayc                    s   t  |tjS r   r   rn   r   r!   r"   rp   K  s    zITestAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArray.__eq__c                    s   t  |tjS r   r   rn   r   r!   r"   r   N  s    zITestAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArray.__lt__c                 _   s   t d S r   r   r}   r!   r!   r"   rm   Q  s    zFTestAlmostEqual.test_subclass_that_cannot_be_bool.<locals>.MyArray.allr   r!   r!   r   r"   rr   J  s   rr   rs   rt   r   r   r!   r!   r"   r   E  s    
z1TestAlmostEqual.test_subclass_that_cannot_be_boolN)r:   r;   r<   r>   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   r     s   	6r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestApproxEqualc                 C   s
   t | _d S r   )r   r   r8   r!   r!   r"   r>   Z  s    zTestApproxEqual.setupc                    sN   t dt d jdd  jdd tt fdd d S )N{GH@RH@r   Zsignificantr   c                      s    j ddS Nr   r   r   r!   rM   r!   r"   r   d  r   z7TestApproxEqual.test_simple_0d_arrays.<locals>.<lambda>r   r8   r!   rM   r"   test_simple_0d_arrays]  s    

z%TestApproxEqual.test_simple_0d_arraysc                    sR   dd j dd  j dd  j dd tt fdd d S )	Nr   r   r/   r   r   r   c                      s    j ddS r   r   r!   rM   r!   r"   r   n  r   z3TestApproxEqual.test_simple_items.<locals>.<lambda>r   r8   r!   rM   r"   test_simple_itemsf  s    z!TestApproxEqual.test_simple_itemsc                    st   t t jt dt t j  ttfdd tt fdd tt fdd d S )Nr&   c                      s     S r   r   r!   r   r!   r"   r   u  r   z0TestApproxEqual.test_nan_array.<locals>.<lambda>c                      s     S r   r   r!   r   r!   r"   r   v  r   c                      s     S r   r   r!   r   r!   r"   r   w  r   r   r8   r!   r   r"   rT   p  s    
zTestApproxEqual.test_nan_arrayc                    st   t t jt dt t j  ttfdd tt fdd tt fdd d S )Nr&   c                      s     S r   r   r!   r   r!   r"   r   ~  r   z0TestApproxEqual.test_nan_items.<locals>.<lambda>c                      s     S r   r   r!   r   r!   r"   r     r   c                      s     S r   r   r!   r   r!   r"   r     r   r   r8   r!   r   r"   r   y  s    
zTestApproxEqual.test_nan_itemsN)r:   r;   r<   r>   r   r   rT   r   r!   r!   r!   r"   r   X  s
   	
	r   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestArrayAssertLessc                 C   s
   t | _d S r   )r   r   r8   r!   r!   r"   r>     s    zTestArrayAssertLess.setupc                    s|   t ddgt ddg  tt fdd t ddgtt fdd tt fd	d d S )
N皙?皙@333333?ffffff@c                      s     S r   r   r!   rM   r!   r"   r     r   z8TestArrayAssertLess.test_simple_arrays.<locals>.<lambda>rs   c                      s     S r   r   r!   rM   r!   r"   r     r   c                      s     S r   r   r!   rM   r!   r"   r     r   r   r8   r!   rM   r"   test_simple_arrays  s    z&TestArrayAssertLess.test_simple_arraysc                    s   t ddgddggt ddgddgg  tt fd	d
 t ddgddggtt fdd
 tt fdd
 d S )Nr   r   ffffff
@g@r   r   g333333@g      @c                      s     S r   r   r!   rM   r!   r"   r     r   z0TestArrayAssertLess.test_rank2.<locals>.<lambda>rs   c                      s     S r   r   r!   rM   r!   r"   r     r   c                      s     S r   r   r!   rM   r!   r"   r     r   r   r8   r!   rM   r"   
test_rank2  s    zTestArrayAssertLess.test_rank2c                    sv   t jddt jddd   tt fdd dd< tt fdd tt fd	d d S )
N)r'   r'   r'   )shaper&   c                      s     S r   r   r!   rM   r!   r"   r     r   z0TestArrayAssertLess.test_rank3.<locals>.<lambda>r   )r   r   r   c                      s     S r   r   r!   rM   r!   r"   r     r   c                      s     S r   r   r!   rM   r!   r"   r     r   )r)   r   r   r	   r$   r8   r!   rM   r"   
test_rank3  s    zTestArrayAssertLess.test_rank3c                    s   dd   tt fdd tddg   tt fdd tddgtt fdd d S )	Nr   r   c                      s     S r   r   r!   rM   r!   r"   r     r   z7TestArrayAssertLess.test_simple_items.<locals>.<lambda>r   c                      s     S r   r   r!   rM   r!   r"   r     r   rs   c                      s     S r   r   r!   rM   r!   r"   r     r   )r   r	   r$   r)   r*   r8   r!   rM   r"   r     s    z%TestArrayAssertLess.test_simple_itemsc                    s   t t jt dt t j  ttfdd ttfdd tt fdd tt fdd d S )Nr&   c                      s     S r   r   r!   r   r!   r"   r     r   z9TestArrayAssertLess.test_nan_noncompare.<locals>.<lambda>c                      s     S r   r   r!   r   r!   r"   r     r   c                      s     S r   r   r!   r   r!   r"   r     r   c                      s     S r   r   r!   r   r!   r"   r     r   r   r8   r!   r   r"   test_nan_noncompare  s    
z'TestArrayAssertLess.test_nan_noncomparec                    s   t dddgt t j tt fdd tt fdd t ddt jgtt fdd tt fdd t d	d
t jg ttfdd d S )Nr   r   r   c                      s     S r   r   r!   r   r   rN   r!   r"   r     r   z?TestArrayAssertLess.test_nan_noncompare_array.<locals>.<lambda>c                      s     S r   r   r!   r   r!   r"   r     r   c                      s     S r   r   r!   r   r!   r"   r     r   c                      s     S r   r   r!   r   r!   r"   r     r   rs   rt   c                      s     S r   r   r!   rM   r!   r"   r     r   )r)   r*   rR   r	   r$   r   r8   r!   )r   r   rN   rO   r"   test_nan_noncompare_array  s    z-TestArrayAssertLess.test_nan_noncompare_arrayc                    s   t dt t j          tt fdd tt fdd tt fdd tt fdd tt fdd d S )Nr&   c                      s     S r   r   r!   r   r   r   r!   r"   r     r   z6TestArrayAssertLess.test_inf_compare.<locals>.<lambda>c                      s      S r   r   r!   r  r!   r"   r     r   c                      s      S r   r   r!   r   r   r!   r"   r     r   c                      s       S r   r   r!   r  r!   r"   r     r   c                      s        S r   r   r!   r  r!   r"   r     r   )r)   r*   ri   r   r	   r$   r8   r!   r  r"   test_inf_compare  s    
z$TestArrayAssertLess.test_inf_comparec                    s   t ddt jgt t j tt fdd tt fdd tt fdd tt fdd tt fdd    d S )	Nr   r   c                      s     S r   r   r!   r   r   rN   r!   r"   r     r   z<TestArrayAssertLess.test_inf_compare_array.<locals>.<lambda>c                      s     S r   r   r!   r  r!   r"   r     r   c                      s      S r   r   r!   r  r!   r"   r     r   c                      s       S r   r   r!   r  r!   r"   r     r   c                      s       S r   r   r!   r  r!   r"   r     r   )r)   r*   ri   r	   r$   r   r8   r!   r  r"   test_inf_compare_array  s    z*TestArrayAssertLess.test_inf_compare_arrayN)r:   r;   r<   r>   r   r   r   r   r   r  r  r  r!   r!   r!   r"   r     s   
r   z$The raises decorator depends on Noserz   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
TestRaisesc                 C   s   G dd dt }|| _d S )Nc                   @   s   e Zd ZdS )z%TestRaises.setup.<locals>.MyExceptionNr:   r;   r<   r!   r!   r!   r"   MyException  s   r	  )	Exceptione)r   r	  r!   r!   r"   r>     s    zTestRaises.setupc                 C   s   |d S r   r!   )r   r  r!   r!   r"   raises_exception  s    zTestRaises.raises_exceptionc                 C   s   d S r   r!   r8   r!   r!   r"   does_not_raise_exception  s    z#TestRaises.does_not_raise_exceptionc                 C   s   t | j| j| j d S r   )r   r  r  r8   r!   r!   r"   test_correct_catch  s    zTestRaises.test_correct_catchc                 C   s<   zt | j| jt W n tk
r.   Y d S X tdd S )Nzshould have caught RuntimeError)r   r  r  RuntimeErrorr$   r8   r!   r!   r"   test_wrong_exception  s
    zTestRaises.test_wrong_exceptionc                 C   s:   zt | j| j  W n tk
r,   Y d S X tdd S )Nz$should have raised an AssertionError)r   r  r  r$   r8   r!   r!   r"   test_catch_no_raise
  s
    zTestRaises.test_catch_no_raiseN)	r:   r;   r<   r>   r  r  r  r  r  r!   r!   r!   r"   r    s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestWarnsc                 C   sh   dd }t jd jd d  }ttt|d t jd j}ttt| ttdd dd t||d d S )	Nc                   S   s   t d dS )Nyor.   warningswarnr!   r!   r!   r"   f  s    
zTestWarns.test_warn.<locals>.fr  r.   c                 S   s   | S r   r!   )rN   r!   r!   r"   r     r   z%TestWarns.test_warn.<locals>.<lambda>r&   .assert_warns does not preserver warnings state)	sysmodulesfiltersr   r
   UserWarningr	   r$   r   )r   r  before_filtersafter_filtersr!   r!   r"   	test_warn  s    zTestWarns.test_warnc              	   C   s`   t jd jd d  }tt td W 5 Q R X t jd j}dd }tt| t	||d d S )Nr  r  c                	   S   s    t   td W 5 Q R X d S Nr  )r   r  r  r!   r!   r!   r"   no_warnings,  s    z3TestWarns.test_context_manager.<locals>.no_warningsr  )
r  r  r  r
   r  r  r  r	   r$   r   )r   r  r  r!  r!   r!   r"   test_context_manager%  s    

zTestWarns.test_context_managerc              	   C   sd   dd }d}t  : t dt ztt| d}W n tk
rH   Y nX W 5 Q R X |r`tdd S )Nc                   S   s   t dt d S r   )r  r  DeprecationWarningr!   r!   r!   r"   r  5  s    z,TestWarns.test_warn_wrong_warning.<locals>.fFerrorTz#wrong warning caught by assert_warn)r  catch_warningssimplefilterr#  r
   r  r$   )r   r  failedr!   r!   r"   test_warn_wrong_warning4  s    

z!TestWarns.test_warn_wrong_warningN)r:   r;   r<   r  r"  r(  r!   r!   r!   r"   r    s   r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestAssertAllclosec                 C   s   d}d}t ||dd ttt || t||||g}t||||g}t ||dd ttt || |d |d< t || ttt ||dd t dd	d
d ttt d	dd
d d S )NgMbP?g&.>r&   )Zatolg1  ?r   )Zrtolr   rL   g      ?)r   r	   r$   r)   r*   )r   rN   rO   r   r    r!   r!   r"   r   H  s    
zTestAssertAllclose.test_simplec                 C   s*   t jt t jjgt jd}t|| d S )Nr3   )r)   r*   Ziinfoint_minr   r6   r!   r!   r"   test_min_int\  s    zTestAssertAllclose.test_min_intc              	   C   s^   t ddddg}t ddddg}tt}t|| W 5 Q R X t|j}td|k d S )Nr&   r'   zXMismatched elements: 1 / 4 (25%)
Max absolute difference: 1
Max relative difference: 0.5	r)   r*   r   r   r$   r   r   r   r   r   r   r    r   msgr!   r!   r"   test_report_fail_percentagea  s    
z.TestAssertAllclose.test_report_fail_percentagec                 C   s.   t t jg}t t jg}t||dd d S )NTZ	equal_nan)r)   r*   rR   r   r   r!   r!   r"   test_equal_nanl  s    z!TestAssertAllclose.test_equal_nanc                 C   s2   t t jg}t t jg}ttt||dd d S )NFr1  )r)   r*   rR   r	   r$   r   r   r!   r!   r"   test_not_equal_nanr  s    z%TestAssertAllclose.test_not_equal_nanc                 C   sH   t t jg}t t jg}t|| t|| t|| t|| d S r   )r)   r*   rR   r   r   r   r   r   r!   r!   r"   test_equal_nan_defaultw  s    


z)TestAssertAllclose.test_equal_nan_defaultc              	   C   sV   t ddg}t ddg}tt}t|| W 5 Q R X t|j}td|k d S )Nr   r&   r'   r   r-  r.  r!   r!   r"   test_report_max_relative_error  s    
z1TestAssertAllclose.test_report_max_relative_errorc                 C   s&   t jddddggdd}t|| d S )Nr&   r'   r.   r   zm8[ns]r3   )r)   r*   r   r6   r!   r!   r"   test_timedelta  s    z!TestAssertAllclose.test_timedeltaN)r:   r;   r<   r   r,  r0  r2  r3  r4  r5  r6  r!   r!   r!   r"   r)  F  s   	r)  c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestArrayAlmostEqualNulpc                 C   s   d}t jdddt jd}d| }t j| |f }t |jj}||| | d  }t||| t |jj}||| | d  }t||| d S Nr   r   2   r3   rL   rt   	r)   linspacefloat64r_finfor4   epsr   epsnegr   nulprN   r@  rO   rA  r!   r!   r"   test_float64_pass  s    z*TestArrayAlmostEqualNulp.test_float64_passc                 C   s   d}t jdddt jd}d| }t j| |f }t |jj}||| | d  }ttt	||| t |jj
}||| | d  }ttt	||| d S r8  r)   r<  r=  r>  r?  r4   r@  r	   r$   r   rA  rB  r!   r!   r"   test_float64_fail  s$        z*TestArrayAlmostEqualNulp.test_float64_failc                 C   sT   t d}t jt jt jdt j}||A }|t j}|t j}t||d d S )Nl    r3   r   )r)   Zuint64r*   rR   r=  rv   r   )r   offsetZnan1_i64Znan2_i64Znan1_f64Znan2_f64r!   r!   r"   test_float64_ignore_nan  s    
z0TestArrayAlmostEqualNulp.test_float64_ignore_nanc                 C   s   d}t jdddt jd}d| }t j| |f }t |jj}||| | d  }t||| t |jj}||| | d  }t||| d S r8  	r)   r<  float32r>  r?  r4   r@  r   rA  rB  r!   r!   r"   test_float32_pass  s    z*TestArrayAlmostEqualNulp.test_float32_passc                 C   s   d}t jdddt jd}d| }t j| |f }t |jj}||| | d  }ttt	||| t |jj
}||| | d  }ttt	||| d S r8  r)   r<  rJ  r>  r?  r4   r@  r	   r$   r   rA  rB  r!   r!   r"   test_float32_fail  s$        z*TestArrayAlmostEqualNulp.test_float32_failc                 C   sT   t d}t jt jt jdt j}||A }|t j}|t j}t||d d S )Ni  r3   r   )r)   Zuint32r*   rR   rJ  rv   r   )r   rG  Znan1_i32Znan2_i32Znan1_f32Znan2_f32r!   r!   r"   test_float32_ignore_nan  s    
z0TestArrayAlmostEqualNulp.test_float32_ignore_nanc                 C   s   d}t jdddt jd}d| }t j| |f }t |jj}||| | d  }t||| t |jj}||| | d  }t||| d S Nr   r/   rL   r3   rt   )	r)   r<  float16r>  r?  r4   r@  r   rA  rB  r!   r!   r"   test_float16_pass  s    z*TestArrayAlmostEqualNulp.test_float16_passc                 C   s   d}t jdddt jd}d| }t j| |f }t |jj}||| | d  }ttt	||| t |jj
}||| | d  }ttt	||| d S rO  )r)   r<  rQ  r>  r?  r4   r@  r	   r$   r   rA  rB  r!   r!   r"   test_float16_fail  s$        z*TestArrayAlmostEqualNulp.test_float16_failc                 C   sT   t d}t jt jt jdt j}||A }|t j}|t j}t||d d S )N   r3   r   )r)   Zuint16r*   rR   rQ  rv   r   )r   rG  Znan1_i16Znan2_i16Znan1_f16Znan2_f16r!   r!   r"   test_float16_ignore_nan  s    
z0TestArrayAlmostEqualNulp.test_float16_ignore_nanc                 C   s$  d}t jdddt jd}d| }t j| |f }||d  }t |jj}||| | d  }t|||d  | t|||d  | ||| | d	  }t|||d  | t |jj}||| | d  }t|||d  | t|||d  | ||| | d	  }t|||d  | d S 
Nr   r9  r   r:  r3   rL                 ?rt   rc   r;  r   rC  rN   xir@  rO   rA  r!   r!   r"   test_complex128_pass  s"    z-TestArrayAlmostEqualNulp.test_complex128_passc                 C   s4  d}t jdddt jd}d| }t j| |f }||d  }t |jj}||| | d  }ttt	|||d  | ttt	|||d  | ||| |  }ttt	|||d  | t |jj
}||| | d  }ttt	|||d  | ttt	|||d  | ||| |  }ttt	|||d  | d S 	Nr   r9  r   r:  r3   rL   rW  rt   rE  rX  r!   r!   r"   test_complex128_fail)  sR     
  
  
  
  
  
 z-TestArrayAlmostEqualNulp.test_complex128_failc                 C   s$  d}t jdddt jd}d| }t j| |f }||d  }t |jj}||| | d  }t|||d  | t|||d  | ||| | d	  }t|||d  | t |jj}||| | d  }t|||d  | t|||d  | ||| | d	  }t|||d  | d S rV  rI  rX  r!   r!   r"   test_complex64_passF  s"    z,TestArrayAlmostEqualNulp.test_complex64_passc                 C   s4  d}t jdddt jd}d| }t j| |f }||d  }t |jj}||| | d  }ttt	|||d  | ttt	|||d  | ||| |  }ttt	|||d  | t |jj
}||| | d  }ttt	|||d  | ttt	|||d  | ||| |  }ttt	|||d  | d S r[  rL  rX  r!   r!   r"   test_complex64_fail[  sR     
  
  
  
  
  
 z,TestArrayAlmostEqualNulp.test_complex64_failN)r:   r;   r<   rD  rF  rH  rK  rM  rN  rR  rS  rU  rZ  r\  r]  r^  r!   r!   r!   r"   r7    s   r7  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestULPc                 C   s   t jd}t||dd d S )NrL   r   maxulp)r)   randomrandnr   )r   rN   r!   r!   r"   
test_equaly  s    zTestULP.test_equalc                 C   sR   t dt j}|dt jdt j 7 }t t jj}t||| dd d S )NrL   {Gz?r   r`  )	r)   r   astyperJ  rb  rc  r?  r@  r   r   rN   r@  r!   r!   r"   test_single}  s    zTestULP.test_singlec                 C   sR   t dt j}|dt jdt j 7 }t t jj}t||| dd d S )NrL   re     r`  )	r)   r   rf  r=  rb  rc  r?  r@  r   rg  r!   r!   r"   test_double  s    zTestULP.test_doublec                 C   sL   t jt jfD ]:}t t jg|}t t |jg}t||dd qd S )Nri  r`  )	r)   rJ  r=  r*   ri   rf  r?  maxr   )r   dtri   bigr!   r!   r"   r     s    zTestULP.test_infc                    s  t jt jfD ]}|t jkr dndt t jg|t t jg|t t |jg t t |j	gt t j
g|t t jg|ttfdd tt fdd ttfdd ttfdd ttfdd qd S )	Ng    .Ag   mBc                      s   t  dS Nr`  r   r!   )ri   ra  rR   r!   r"   r     s   z"TestULP.test_nan.<locals>.<lambda>c                      s   t  dS rn  ro  r!   )rm  ra  rR   r!   r"   r     s   c                      s   t  dS rn  ro  r!   )ra  rR   tinyr!   r"   r     s   c                      s   t  dS rn  ro  r!   )ra  rR   zeror!   r"   r     s   c                      s   t  dS rn  ro  r!   )ra  rR   nzeror!   r"   r     s   )r)   rJ  r=  r*   ri   rf  rR   r?  rk  rp  r   r   r	   r$   )r   rl  r!   )rm  ri   ra  rR   rr  rp  rq  r"   r     s2    
zTestULP.test_nanN)r:   r;   r<   rd  rh  rj  r   r   r!   r!   r!   r"   r_  w  s
   r_  c                   @   s   e Zd Zdd Zdd ZdS )TestStringEqualc              	   C   sZ   t dd t dd tt}t dd W 5 Q R X t|j}t|d ttdd  d S )Nhellozhello
multilinezfoo
barz	hello
barz%Differences in strings:
- foo
+ helloc                   S   s
   t ddS )NrF   rt  r   r!   r!   r!   r"   r     r   z-TestStringEqual.test_simple.<locals>.<lambda>)r   r   r   r$   r   r   r   r	   )r   r   r/  r!   r!   r"   r     s    



zTestStringEqual.test_simplec                 C   s   t dd ttdd  d S )Nza+*bc                   S   s
   t ddS )NZaaaza+bru  r!   r!   r!   r"   r     r   z,TestStringEqual.test_regex.<locals>.<lambda>)r   r	   r$   r8   r!   r!   r"   
test_regex  s    
zTestStringEqual.test_regexN)r:   r;   r<   r   rv  r!   r!   r!   r"   rs    s   rs  c                 C   sv   z
| j }W n tk
r"   i }Y nX t|}d|krh|d8 }tjd d dkr\|d k	rh|}n|d k	rh|}t|| d S )Nversionr&   r'   )r.   r   )__warningregistry__AttributeErrorr^   r  version_infor   )modn_in_contextpy34py37Z	mod_warnsZ	num_warnsr!   r!   r"   assert_warn_len_equal  s    

r  c                  C   sD   G dd d} |  }t |dd G dd d} |  }t |dd d S )Nc                   @   s   e Zd ZdS )/test_warn_len_equal_call_scenarios.<locals>.modNr  r!   r!   r!   r"   r{    s   r{  r   )r{  r|  c                   @   s   e Zd Zdd ZdS )r  c                 S   s   ddd| _ d S )Nr&   r'   )Zwarning1Zwarning2)rx  r8   r!   r!   r"   __init__  s    z8test_warn_len_equal_call_scenarios.<locals>.mod.__init__N)r:   r;   r<   r  r!   r!   r!   r"   r{    s   r'   )r  )r{  Zmod_instr!   r!   r"   "test_warn_len_equal_call_scenarios  s    r  c                  C   s2   t jt } z| j  W n tk
r,   Y nX | S r   )r  r  r:   rx  clearry  my_modr!   r!   r"   _get_fresh_mod  s    
r  c               	   C   s   t  } tt| di i  t| gd td td W 5 Q R X t| ji  t  td td W 5 Q R X t| ddd t| gd td td W 5 Q R X t| ddd t  td td W 5 Q R X t| d	ddd
 d S )Nrx  )r  ignoreSome warningr&   r   r~  zAnother warningr'   )r}  r~  )	r  r   getattrr   r  r&  r  rx  r  r  r!   r!   r"   test_clear_and_catch_warnings  s$    



r  c               	   C   s:  t  } tt| di i  dd }t| d t 0}|t |jtj	j
d td |  W 5 Q R X tt|jd t|jd jjd d t| ddd t }|j| d | td W 5 Q R X t| d |j| d | td W 5 Q R X t| d t  td	 td W 5 Q R X t| ddd d S )
Nrx  c                  S   s   dd } t | ddg d S )Nc                 S   s   t jddd | S )NzSome warning 2r'   
stacklevelr  Zarrr!   r!   r"   r  1  s    zFtest_suppress_warnings_module.<locals>.warn_other_module.<locals>.warnr   r)   Zapply_along_axisr  r!   r!   r"   warn_other_module.  s    z8test_suppress_warnings_module.<locals>.warn_other_moduler   moduler  r&   r  r  )r  r   r  r  r   r\   r  filterr)   libZ
shape_baser  r  r^   logrZ   r~   r&  )r  r  r_   r!   r!   r"   test_suppress_warnings_module)  s2    	





r  c               	   C   s   t  } tt| di i  t }|t td W 5 Q R X t| d t }|t | td W 5 Q R X t| d |j| d | td W 5 Q R X t| d t  t	d td W 5 Q R X t| ddd d S )Nrx  r  r   r  r  r&   r  )
r  r   r  r   r  r  r  r  r  r&  )r  r_   r!   r!   r"   test_suppress_warnings_typeW  s&    





r  c               	   C   s`   t  } | t | dd }tjdd.}td |t |t tt|d W 5 Q R X d S )Nc                 S   s   t d|  d S )Nr  r  )categoryr!   r!   r"   r  x  s    z7test_suppress_warnings_decorate_no_record.<locals>.warnT)r\   alwaysr&   )	r   r  r  r  r%  r&  RuntimeWarningr   r^   )r_   r  wr!   r!   r"   )test_suppress_warnings_decorate_no_recordt  s    


r  c               
   C   s  t  } |  }| ~ | jdd}| jdd td td td tt| jd tt|d tt|d t|d jj	d d W 5 Q R X | ~ | jdd}| jdd td td td tt| jd tt|d tt|d t|d jj	d d W 5 Q R X t  `} |   t  6}|jdd td td tt|jd W 5 Q R X tt| jd W 5 Q R X d S )NzSome other warning 2rY   r  Some other warningr'   r&   r   )
r   r\   r  r  r  r   r^   r  rZ   r~   )r_   Zlog1log2sup2r!   r!   r"   test_suppress_warnings_record  s<    


 


 

r  c               
   C   s  dd } t  J}|  t d tdD ]}td q*W 5 Q R X tt|jd W 5 Q R X t  T}|  t d( tdD ]}td td qW 5 Q R X tt|jd W 5 Q R X t  Z}|  t d. tdD ]}td td |   qW 5 Q R X tt|jd W 5 Q R X t  \}|  t d0 tdD ] }td td	 |   qFW 5 Q R X tt|jd W 5 Q R X d S )
Nc                  S   s   dd } t | ddg d S )Nc                 S   s   t jddd | S )Nr  r'   r  r  r  r!   r!   r"   r    s    zJtest_suppress_warnings_forwarding.<locals>.warn_other_module.<locals>.warnr   r  r  r!   r!   r"   r    s    z<test_suppress_warnings_forwarding.<locals>.warn_other_moduler  r'   r  locationr  oncer  )r   r\   ranger  r  r   r^   r  )r  r_   ir!   r!   r"   !test_suppress_warnings_forwarding  s<    








r  c               
   C   s   t  *} tj| d}t|d W 5 Q R X W 5 Q R X ttj|   d}zt  } t W 5 Q R X W n tk
r   d}Y nX t| ttj|   d S )Ntmpr  FT)r   ospathjoinopenr   isdir
ValueError)Ztdirfpathraisedr!   r!   r"   test_tempdir  s    
r  c               
   C   s   t  } t| d W 5 Q R X W 5 Q R X ttj|   d}zt  } t W 5 Q R X W n tk
rr   d}Y nX t| ttj|   d S )Nr  FT)r   r  r   r  r  isfiler  )r  r  r!   r!   r"   test_temppath  s    
r  c                   @   s   e Zd Zeje  fZdS )my_cacwN)r:   r;   r<   r  r  Zclass_modulesr!   r!   r!   r"   r    s   r  c               	   C   s<   t  } t  td td W 5 Q R X t| ji  d S )Nr  r  )r  r  r  r&  r  r   rx  r  r!   r!   r"   %test_clear_and_catch_warnings_inherit   s
    
r  zPython lacks refcountsc                   @   s0   e Zd ZdZdd Zdd Zejjdd Z	dS )	TestAssertNoGcCyclesz Test assert_no_gc_cycles c              	   C   s,   dd }t   |  W 5 Q R X t | d S )Nc                  S   s   g } |  g  | S r   append)r    r!   r!   r"   no_cycle  s    
z2TestAssertNoGcCycles.test_passes.<locals>.no_cycle)r   )r   r  r!   r!   r"   test_passes  s    z TestAssertNoGcCycles.test_passesc              
   C   sT   dd }t t t  |  W 5 Q R X W 5 Q R X t t t| W 5 Q R X d S )Nc                  S   s   g } |  |  |  |  | S r   r  )r   r!   r!   r"   
make_cycle  s    

z5TestAssertNoGcCycles.test_asserts.<locals>.make_cycle)r	   r$   r   )r   r  r!   r!   r"   test_asserts  s    

z!TestAssertNoGcCycles.test_assertsc              	      s   G  fddd z`t  }z$tt tdd  W 5 Q R X W n* tk
rn   | dk	rjtd  Y nX W 5 d _ X dS )z
        Test that in cases where the garbage cannot be collected, we raise an
        error, instead of hanging forever trying to clear it.
        c                       s(   e Zd ZdZdZdd Z fddZdS )z<TestAssertNoGcCycles.test_fails.<locals>.ReferenceCycleInDelz
            An object that not only contains a reference cycle, but creates new
            cycles whenever it's garbage-collected and its __del__ runs
            Tc                 S   s
   | | _ d S r   )cycler8   r!   r!   r"   r  3  s    zETestAssertNoGcCycles.test_fails.<locals>.ReferenceCycleInDel.__init__c                    s   d | _  jr   d S r   )r  r  r8   ReferenceCycleInDelr!   r"   __del__6  s    zDTestAssertNoGcCycles.test_fails.<locals>.ReferenceCycleInDel.__del__N)r:   r;   r<   __doc__r  r  r  r!   r  r!   r"   r  ,  s   r  Fc                   S   s   d S r   r!   r!   r!   r!   r"   r   D  r   z1TestAssertNoGcCycles.test_fails.<locals>.<lambda>Nz*GC does not call __del__ on cyclic objects)	r  weakrefrefr	   r  r   r$   r   skip)r   r  r!   r  r"   
test_fails%  s    


zTestAssertNoGcCycles.test_failsN)
r:   r;   r<   r  r  r  r   r   Zslowr  r!   r!   r!   r"   r  	  s
   r  )NN)@r  r  r  r   r   r  Znumpyr)   Znumpy.testingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Znumpy.core.overridesr   r   r=   r   r   r   r   r   r   r   r  r  r  r)  r7  r_  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r!   r!   r!   r"   <module>   sR   `. -_b +m"3K g8
".(/	