U
    iâËd†Ö  ã                   @   sP  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	 d dl
mZ d dlmZmZmZ d dlmZmZmZmZ d dlZed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G dd„ deƒZG dd„ deƒZ G dd„ de eƒZ!G dd„ de ƒZ"G d d!„ d!e"eƒZ#G d"d#„ d#e#ƒZ$G d$d%„ d%e"eƒZ%G d&d'„ d'e&ƒZ'G d(d)„ d)e'eƒZ(G d*d+„ d+e(ƒZ)G d,d-„ d-e)ƒZ*G d.d/„ d/e'eƒZ+G d0d1„ d1eƒZ,G d2d3„ d3eƒZ-G d4d5„ d5eƒZ.G d6d7„ d7eƒZ/G d8d9„ d9eƒZ0G d:d;„ d;eeƒZ1G d<d=„ d=eeƒZ2e 3e4ed>ƒd?¡G d@dA„ dAeeƒƒZ5dBdC„ Z6e7dDk�rLe 8¡  dS )Eé    N)ÚTypingError)Únjit)ÚtypesÚutilsÚconfig)ÚMemoryLeakMixinÚTestCaseÚtagÚskip_if_32bitT)Z_nrtZnogilc                 C   s   t  | ||f¡S ©N©ÚnpZconcatenate©ÚaÚbÚc© r   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_dyn_array.pyÚnp_concatenate1   s    r   c                 C   s   t j| ||f|d�S ©N©Úaxisr   ©r   r   r   r   r   r   r   Únp_concatenate2   s    r   c                 C   s   t  | ||f¡S r   ©r   Ústackr   r   r   r   Ú	np_stack1   s    r   c                 C   s   t j| ||f|d�S r   r   r   r   r   r   Ú	np_stack2   s    r   c                 C   s   t  | ||f¡S r   )r   Zhstackr   r   r   r   Ú	np_hstack   s    r   c                 C   s   t  | ||f¡S r   )r   Zvstackr   r   r   r   Ú	np_vstack"   s    r   c                 C   s   t  | ||f¡S r   )r   Zdstackr   r   r   r   Ú	np_dstack%   s    r    c                 C   s   t  | ||f¡S r   )r   Zcolumn_stackr   r   r   r   Únp_column_stack(   s    r!   c                   @   s   e Zd Zddd„ZdS )ÚBaseTestTc                 C   st   t |ƒ}|D ]b}||Ž }||Ž }|  |j|j¡ |  |j|j¡ |  ||¡ |r`tj ||¡ qtj ||¡ qd S r   )	ÚnrtjitÚassertEqualÚsizeÚdtypeÚassertStridesEqualr   ÚtestingÚassert_equalZassert_allclose)ÚselfÚpyfuncZargslistÚexactÚcfuncÚargsÚexpectedÚretr   r   r   Úcheck_outputs.   s    zBaseTest.check_outputsN)T)Ú__name__Ú
__module__Ú__qualname__r1   r   r   r   r   r"   ,   s   r"   c                   @   s   e Zd Zdd„ ZdS )ÚNrtRefCtTestc                 C   s   |   |jj|¡ d S r   )r$   ÚbaseÚrefcount)r*   ÚarrÚexpectr   r   r   Úassert_array_nrt_refct=   s    z#NrtRefCtTest.assert_array_nrt_refctN)r2   r3   r4   r:   r   r   r   r   r5   <   s   r5   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d„ Zdd„ Zedd„ ƒZdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚTestDynArrayc                 C   sŠ   t dd„ ƒ}|ƒ }|  |d¡ tj d|¡ |  |jd¡ |  |jd¡ |  |jt tj	¡¡ |  |j
d¡ | d¡ tj d|¡ ~d S )Nc                  S   s   t  d¡} d| d< | S )Nr   é*   ©r   Úempty©r8   r   r   r   ÚfooD   s    
z'TestDynArray.test_empty_0d.<locals>.fooé   r<   r   é{   )r#   r:   r   r(   r)   r$   r%   Úshaper&   Úfloat64ÚstridesÚfill)r*   r@   r8   r   r   r   Útest_empty_0dC   s    

zTestDynArray.test_empty_0dc                 C   s¤   t dd„ ƒ}d}||ƒ}|  |d¡ tj t |¡|¡ |  |j|¡ |  |j|f¡ |  |j	t 	tj
¡¡ |  |jt 	tj
¡jf¡ | d¡ tj d|¡ ~d S )Nc                 S   s$   t  | ¡}t| ƒD ]}|||< q|S r   )r   r>   Úrange)Únr8   Úir   r   r   r@   V   s    

z'TestDynArray.test_empty_1d.<locals>.fooé   rA   rB   )r#   r:   r   r(   r)   Úaranger$   r%   rC   r&   rD   rE   ÚitemsizerF   )r*   r@   rI   r8   r   r   r   Útest_empty_1dU   s    

zTestDynArray.test_empty_1dc                 C   s|   dd„ }t |ƒ}d}d}|||ƒ}|||ƒ}|  |d¡ tj ||¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ ~d S )Nc                 S   sB   t  | |ft j¡}t| ƒD ]"}t|ƒD ]}|| |||f< q&q|S r   ©r   r>   Úint32rH   )ÚmrI   r8   rJ   Újr   r   r   r+   k   s
    z*TestDynArray.test_empty_2d.<locals>.pyfuncé   rK   rA   ©	r#   r:   r   r(   r)   r$   r%   rC   rE   )r*   r+   r-   rQ   rI   Úexpected_arrÚgot_arrr   r   r   Útest_empty_2dj   s    

zTestDynArray.test_empty_2dc                 C   s„   dd„ }t |ƒ}d}d}d}||||ƒ}||||ƒ}|  |d¡ tj ||¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ ~d S )Nc                 S   sX   t  | ||ft j¡}t| ƒD ]6}t|ƒD ](}t|ƒD ]}|| | ||||f< q4q(q|S r   rO   )rQ   rI   Úpr8   rJ   rR   Úkr   r   r   r+   ‚   s    z*TestDynArray.test_empty_3d.<locals>.pyfuncrS   rK   é   rA   rT   ©r*   r+   r-   rQ   rI   rX   rU   rV   r   r   r   Útest_empty_3d�   s    	zTestDynArray.test_empty_3dc                 C   s„   dd„ }t |ƒ}d}d}d}||||ƒ}||||ƒ}|  |d¡ tj ||¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ ~d S )Nc                 S   sF   t  | |ft j¡}t| ƒD ]"}t|ƒD ]}|| |||f< q&q|| S r   rO   )rQ   rI   rX   r8   rJ   rR   r   r   r   r+   ›   s
    z1TestDynArray.test_empty_2d_sliced.<locals>.pyfuncrS   rK   rZ   rA   rT   r[   r   r   r   Útest_empty_2d_slicedš   s    z!TestDynArray.test_empty_2d_slicedc                    sÌ   t jdt jd�‰ t ˆ ¡}‡ fdd„}t|ƒ}|ƒ }|  |d t ˆ ¡¡ t j ˆ |¡ t j ˆ t jdt jd�¡ t j |t jdt jd�¡ ~t	 
¡  |  |d t ˆ ¡¡ ~t	 
¡  |  |t ˆ ¡¡ d S )NrS   ©r&   c                      s   ˆ S r   r   r   ©Úyr   r   Úreturn_external_array¶   s    zDTestDynArray.test_return_global_array.<locals>.return_external_arrayrA   )r   ÚonesÚfloat32ÚsysÚgetrefcountr#   r$   r(   r)   ÚgcZcollect)r*   Ú	initrefctra   r-   Úoutr   r_   r   Útest_return_global_array²   s    
z%TestDynArray.test_return_global_arrayc                    sˆ   t jdt jd�‰ ‡ fdd„}t|ƒ}|ƒ }|  |j¡ ˆ dd … }t j ||¡ t j |t jdt jd�¡ t j |t jdt jd�¡ d S )NrS   r^   c                      s   ˆ dd … S ©NrZ   r   r   r_   r   r   ra   Ð   s    zKTestDynArray.test_return_global_array_sliced.<locals>.return_external_arrayrZ   )r   rb   rc   r#   ÚassertIsNoner6   r(   r)   )r*   ra   r-   rh   Úyyr   r_   r   Útest_return_global_array_slicedÍ   s    z,TestDynArray.test_return_global_array_slicedc                 C   sh   dd„ }t jdt jd�}t|ƒ}||ƒ}||ƒ}t j ||¡ t j ||¡ |  ||¡ |  ||¡ d S )Nc                 S   s   | S r   r   r_   r   r   r   r+   Ý   s    z4TestDynArray.test_array_pass_through.<locals>.pyfuncrS   r^   )r   rb   rc   r#   r(   r)   ÚassertIs)r*   r+   r8   r-   r/   Úgotr   r   r   Útest_array_pass_throughÜ   s    z$TestDynArray.test_array_pass_throughc                 C   s¼   dd„ }t jdt jd�}t |¡}t|ƒ}||ƒ}|  |d t |¡¡ ||ƒ}|  |d t |¡¡ t j |||j	d  ¡ t j ||¡ ~|  |d t |¡¡ ~|  |t |¡¡ d S )Nc                 S   s   | | j d d … S rj   )r%   r_   r   r   r   r+   ì   s    z;TestDynArray.test_array_pass_through_sliced.<locals>.pyfuncrS   r^   rA   rZ   )
r   rb   rc   rd   re   r#   r$   r(   r)   r%   )r*   r+   r8   rg   r-   ro   r/   r   r   r   Útest_array_pass_through_slicedë   s    
z+TestDynArray.test_array_pass_through_slicedc                 C   s  dd„ }t |ƒ}tj d¡}tj d¡}tj |||ƒ|||ƒ¡ |  |||ƒd¡ tj d¡ dd¡}tj d¡ dd¡}tj |||ƒ|||ƒ¡ |  |||ƒd¡ tj d¡ ddd¡}tj d¡ ddd¡}tj |||ƒ|||ƒ¡ |  |||ƒd¡ d S )	Nc                 S   s   t  | j¡}t  | ||¡ |S r   )r   r>   rC   Úadd)r   r   rh   r   r   r   r+     s    z=TestDynArray.test_ufunc_with_allocated_output.<locals>.pyfuncé
   rA   rZ   é   éF   é   )r#   r   Úrandomr(   r)   r:   Úreshape)r*   r+   r-   Zarr_aZarr_br   r   r   Ú test_ufunc_with_allocated_output  s(    ÿÿÿz-TestDynArray.test_ufunc_with_allocated_outputc                    s  dd„ }t |ƒ‰ d}tj dd|¡}| ¡ }tj ||ƒˆ |ƒ¡ tj ||¡ g }g }g }‡ fdd„}tdƒD ]V}	tj dd|¡}t |¡}
t	j
|||
fd |	¡d	�}| |¡ | |¡ | |
¡ qp|D ]}| ¡  qÌ|D ]}| ¡  qÞt||ƒD ]\}}
tj ||ƒ|
¡ qöd
S )z�
        This test exercises the array allocation in multithreaded usecase.
        This stress the freelist inside NRT.
        c                 S   sŠ   t  | j¡}t|jƒD ]}d||< qt| d ƒD ]T}t  | j¡}t|jƒD ]}| | ||< qJt|jƒD ]}||  || | 7  < qfq0|S )Nr   ©r   r>   r%   rH   )Úinprh   rJ   ÚtmprR   r   r   r   r+   +  s    
z/TestDynArray.test_allocation_mt.<locals>.pyfuncrs   rA   c                    s   ˆ | ƒ|d d …< d S r   r   )r{   rh   ©r-   r   r   ÚwrappedL  s    z0TestDynArray.test_allocation_mt.<locals>.wrappedéd   ú	worker{0}©Útargetr.   ÚnameN)r#   r   rw   ÚrandintÚcopyr(   r)   rH   Ú
empty_likeÚ	threadingÚThreadÚformatÚappendÚstartÚjoinÚzip)r*   r+   r%   r8   Z
frozen_arrÚworkersÚinputsÚoutputsr~   rJ   rh   Úthreadr{   r   r}   r   Útest_allocation_mt%  s6    
þ



zTestDynArray.test_allocation_mtc                    sD  dd„ }t |ƒ‰ d}tj|td�}t |¡}t d¡}|||ƒ}tj 	|ˆ ||ƒ¡ ~|  
|t |¡¡ g }g }g }	‡ fdd„}
tdƒD ]R}t |¡}t d¡}tj|
|||fd	 |¡d
�}| |¡ | |¡ |	 |¡ qˆ|D ]}| ¡  qà|D ]}| ¡  qòt|	|ƒD ]\}}tj 	|||ƒ|¡ �q
~~|  
|t |¡¡ dS )zE
        This test exercises the refct in multithreaded code
        c                 S   sH   t  |j¡}t|jƒD ]}|| d ||< qt| ƒD ]}|| }}q4|S ©NrA   rz   )rI   r{   rh   rJ   r   r   r   r+   k  s    z*TestDynArray.test_refct_mt.<locals>.pyfuncrs   r^   iè  c                    s   ˆ | |ƒ|d d …< d S r   r   )rI   Úinputrh   r}   r   r   r~   „  s    z+TestDynArray.test_refct_mt.<locals>.wrappedr   r€   r�   N)r#   r   rL   Úfloatrd   re   rw   Ú	randranger(   r)   r$   rH   r>   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   )r*   r+   r%   r”   Zexpected_refctZswapctr/   rŽ   r�   Zswapctsr~   rJ   rh   r‘   r   r}   r   Útest_refct_mtf  s@    	




þ



zTestDynArray.test_refct_mtc              	   C   sT   t dd„ ƒ}|  ¡  |  t¡�}|tjjd d ƒ W 5 Q R X |  dt|j	ƒ¡ d S )Nc                 S   s   t  | ¡ d S r   r=   ©Úxr   r   r   r@   ¦  s    z1TestDynArray.test_invalid_size_array.<locals>.fooé   rZ   zAllocation failed)
r   Údisable_leak_checkÚassertRaisesÚMemoryErrorr   Zsize_tÚmaxvalÚassertInÚstrÚ	exception)r*   r@   Úraisesr   r   r   Útest_invalid_size_array£  s    
z$TestDynArray.test_invalid_size_arrayc           	      C   s¬   dd„ }t |ƒ}tj d¡}tj d¡}d}t |¡t |¡f}||||ƒ||||ƒ }}|  |d j¡ |  |d j¡ tj ||¡ ~~|  	|t |¡t |¡f¡ d S )Nc                 S   s    t |ƒD ]}||  } }q| |fS )z5Swap array x and y for t number of times
            ©rH   ©r™   r`   ÚtrJ   r   r   r   r+   ´  s    z&TestDynArray.test_swap.<locals>.pyfuncr   r   rA   )
r#   r   rw   rd   re   rk   r6   r(   r)   r$   )	r*   r+   r-   r™   r`   r¦   rg   r9   ro   r   r   r   Ú	test_swap²  s    	zTestDynArray.test_swapc           	      C   s¤   dd„ }t |ƒ}tj d¡}t |¡}||ƒ\}}||ƒ\}}|  ||¡ |  ||¡ tj ||¡ tj ||¡ ~~|  |t |¡¡ |  t |¡t |¡¡ d S )Nc                 S   s4   t  | j¡}t|jƒD ]}| | d ||< q| |fS r“   rz   )r™   r`   rJ   r   r   r   r+   Î  s    z7TestDynArray.test_return_tuple_of_array.<locals>.pyfuncrt   )	r#   r   rw   rd   re   rn   r(   r)   r$   )	r*   r+   r-   r™   rg   Ú
expected_xÚ
expected_yÚgot_xÚgot_yr   r   r   Útest_return_tuple_of_arrayÌ  s    
z'TestDynArray.test_return_tuple_of_arrayc                 C   sx   dd„ }t |ƒ}tj d¡}||ƒ\}}||ƒ\}}tj ||¡ tj ||¡ |  dt |¡¡ |  dt |¡¡ d S )Nc                 S   s8   t  | j¡}t|jƒD ]}| | d ||< q||f}|S r“   rz   )r™   r`   rJ   rh   r   r   r   r+   å  s
    z?TestDynArray.test_return_tuple_of_array_created.<locals>.pyfuncrt   rZ   )r#   r   rw   r(   r)   r$   rd   re   )r*   r+   r-   r™   r¨   r©   rª   r«   r   r   r   Ú"test_return_tuple_of_array_createdã  s    z/TestDynArray.test_return_tuple_of_array_createdc                    sv   t dd„ ƒ‰ ‡ fdd„}t |ƒ}t d¡}t |¡}|  |t ||ƒ¡¡ |  |t ||ƒ¡¡ |  |t |¡¡ dS )z_
        Dispatcher returns a new reference.
        It need to workaround it for now.
        c                 S   s   | S r   r   )rh   r   r   r   Úinnerý  s    z7TestDynArray.test_issue_with_return_leak.<locals>.innerc                    s   ˆ | ƒS r   r   r˜   ©r®   r   r   r+     s    z8TestDynArray.test_issue_with_return_leak.<locals>.pyfuncrs   N)r#   r   rL   rd   re   r$   )r*   r+   r-   r8   Z	old_refctr   r¯   r   Útest_issue_with_return_leakø  s    


z(TestDynArray.test_issue_with_return_leakN)r2   r3   r4   rG   rN   rW   r\   r]   ri   rm   rp   rq   ry   r’   r—   r
   r£   r§   r¬   r­   r°   r   r   r   r   r;   A   s$   $A=
r;   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚConstructorBaseTestc                 C   sœ   t |ƒ}|ƒ }|ƒ }|  |d¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  ||¡ t 	|¡}| 
d¡ | 
d¡ tj ||¡ d S )NrA   rB   )r#   r:   r$   r%   rC   r&   rE   Úcheck_result_valuer   r†   rF   r(   r)   )r*   r+   r-   r/   r0   r   r   r   Úcheck_0d  s    


zConstructorBaseTest.check_0dc              	   C   sÔ   t |ƒ}d}||ƒ}||ƒ}|  |d¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  ||¡ t 	|¡}| 
d¡ | 
d¡ tj ||¡ |  t¡�}|dƒ W 5 Q R X |  t|jƒd¡ d S )NrK   rA   rB   éÿÿÿÿúnegative dimensions not allowed©r#   r:   r$   r%   rC   r&   rE   r²   r   r†   rF   r(   r)   rœ   Ú
ValueErrorr    r¡   )r*   r+   r-   rI   r/   r0   Úcmr   r   r   Úcheck_1d   s"    


zConstructorBaseTest.check_1dc              	   C   sÞ   t |ƒ}d\}}|||ƒ}|||ƒ}|  |d¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  |j|j¡ |  ||¡ t 	|¡}| 
d¡ | 
d¡ tj ||¡ |  t¡�}|ddƒ W 5 Q R X |  t|jƒd¡ d S )N©rZ   rK   rA   rB   rZ   r´   rµ   r¶   )r*   r+   r-   rQ   rI   r/   r0   r¸   r   r   r   Úcheck_2d5  s"    




zConstructorBaseTest.check_2dc              	   C   s:   t |ƒ}|  t¡�}|ƒ  W 5 Q R X |  dt|jƒ¡ dS )zAChecks that pyfunc will error, not segfaulting due to array size.zarray is too bigN)r#   rœ   r·   rŸ   r    r¡   )r*   r+   r-   Úer   r   r   Úcheck_alloc_sizeJ  s    þz$ConstructorBaseTest.check_alloc_sizeN)r2   r3   r4   r³   r¹   r»   r½   r   r   r   r   r±     s   r±   c                       sœ   e Zd Z‡ f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d„ Zdd„ Zdd „ Zd!d"„ Z‡  ZS )#ÚTestNdZerosc                    s   t t| ƒ ¡  tj| _d S r   )Úsuperr¾   ÚsetUpr   Úzerosr+   ©r*   ©Ú	__class__r   r   rÀ   W  s    zTestNdZeros.setUpc                 C   s   t j ||¡ d S r   ©r   r(   r)   ©r*   r0   r/   r   r   r   r²   [  s    zTestNdZeros.check_result_valuec                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                      s   ˆ dƒS ©Nr   r   r   ©r+   r   r   Úfunc`  s    z!TestNdZeros.test_0d.<locals>.func)r+   r³   ©r*   rÉ   r   rÈ   r   Útest_0d^  s    zTestNdZeros.test_0dc                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                    s   ˆ | ƒS r   r   ©rI   rÈ   r   r   rÉ   f  s    z!TestNdZeros.test_1d.<locals>.func©r+   r¹   rÊ   r   rÈ   r   Útest_1dd  s    zTestNdZeros.test_1dc                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                    s   ˆ | t jƒS r   ©r   rP   rÌ   rÈ   r   r   rÉ   l  s    z'TestNdZeros.test_1d_dtype.<locals>.funcrÍ   rÊ   r   rÈ   r   Útest_1d_dtypej  s    zTestNdZeros.test_1d_dtypec                    s,   | j ‰t d¡‰ ‡ ‡fdd„}|  |¡ d S )NrP   c                    s
   ˆ| ˆ ƒS r   r   rÌ   ©Z_dtyper+   r   r   rÉ   t  s    z0TestNdZeros.test_1d_dtype_instance.<locals>.func)r+   r   r&   r¹   rÊ   r   rÑ   r   Útest_1d_dtype_instancep  s    
z"TestNdZeros.test_1d_dtype_instancec                    s<   | j ‰d‰ ‡ ‡fdd„}|  |¡ ‡fdd„}|  |¡ d S )NrP   c                    s
   ˆ| ˆ ƒS r   r   rÌ   rÑ   r   r   rÉ   {  s    z+TestNdZeros.test_1d_dtype_str.<locals>.funcc                    s
   ˆ | dƒS )NÚ
complex128r   rÌ   rÈ   r   r   rÉ     s    rÍ   rÊ   r   rÑ   r   Útest_1d_dtype_strx  s    
zTestNdZeros.test_1d_dtype_strc                    s<   | j ‰d‰ ‡ ‡fdd„}|  |¡ ‡fdd„}|  |¡ d S )NÚi4c                    s
   ˆ| ˆ ƒS r   r   rÌ   rÑ   r   r   rÉ   ‡  s    z@TestNdZeros.test_1d_dtype_str_alternative_spelling.<locals>.funcc                    s
   ˆ | dƒS )NÚc8r   rÌ   rÈ   r   r   rÉ   ‹  s    rÍ   rÊ   r   rÑ   r   Ú&test_1d_dtype_str_alternative_spellingƒ  s    
z2TestNdZeros.test_1d_dtype_str_alternative_spellingc                    s&   | j ‰d‰ ‡ ‡fdd„}|  |¡ d S )Nzi4, (2,3)f8c                    s
   ˆ| ˆ ƒS r   r   rÌ   rÑ   r   r   rÉ   “  s    z<TestNdZeros.test_1d_dtype_str_structured_dtype.<locals>.funcrÍ   rÊ   r   rÑ   r   Ú"test_1d_dtype_str_structured_dtype�  s    z.TestNdZeros.test_1d_dtype_str_structured_dtypec              	      s`   | j ‰ t‡ fdd„ƒ}|  t¡�}|ddƒ W 5 Q R X t|jƒ}d| j j› d�}|  ||¡ d S )Nc                    s
   ˆ | |ƒS r   r   ©rI   ÚdtrÈ   r   r   rÉ   š  s    z5TestNdZeros.test_1d_dtype_non_const_str.<locals>.funcrt   rP   úIf np.ú0 dtype is a string it must be a string constant.)r+   r   rœ   r   r    r¡   r2   rŸ   ©r*   rÉ   r¢   ÚexcstrÚmsgr   rÈ   r   Útest_1d_dtype_non_const_str—  s    
z'TestNdZeros.test_1d_dtype_non_const_strc              	      sN   | j ‰ t‡ fdd„ƒ}|  t¡�}|dƒ W 5 Q R X t|jƒ}|  d|¡ d S )Nc                    s
   ˆ | dƒS ©NZABCDEFr   rÌ   rÈ   r   r   rÉ   ©  s    z3TestNdZeros.test_1d_dtype_invalid_str.<locals>.funcrt   ú'Invalid NumPy dtype specified: 'ABCDEF')r+   r   rœ   r   r    r¡   rŸ   ©r*   rÉ   r¢   rÞ   r   rÈ   r   Útest_1d_dtype_invalid_str¦  s    
z%TestNdZeros.test_1d_dtype_invalid_strc                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                    s   ˆ | |fƒS r   r   ©rQ   rI   rÈ   r   r   rÉ   µ  s    z!TestNdZeros.test_2d.<locals>.func©r+   r»   rÊ   r   rÈ   r   Útest_2d³  s    zTestNdZeros.test_2dc              	      sr   | j ‰ ‡ fdd„}|  |¡ ‡ fdd„}|  |¡ tjrnt‡ fdd„ƒ}|  t¡� |t d¡dƒ W 5 Q R X d S )	Nc                    s   ˆ t  | ¡t  |¡fƒS r   )r   Úint16rP   rå   rÈ   r   r   Úfunc1¼  s    z/TestNdZeros.test_2d_shape_dtypes.<locals>.func1c                    s   ˆ t  | ¡t  |¡fƒS r   )r   Úint64Úint8rå   rÈ   r   r   Úfunc2À  s    z/TestNdZeros.test_2d_shape_dtypes.<locals>.func2c                    s   ˆ | |fƒS r   r   rå   rÈ   r   r   Ú<lambda>Å  ó    z2TestNdZeros.test_2d_shape_dtypes.<locals>.<lambda>ì        rA   )	r+   r»   r   Ú	IS_32BITSr#   rœ   r·   r   rê   ©r*   ré   rì   r-   r   rÈ   r   Útest_2d_shape_dtypes¹  s    

z TestNdZeros.test_2d_shape_dtypesc                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                    s   ˆ | |ft jd�S ©Nr^   )r   Ú	complex64rå   rÈ   r   r   rÉ   Ë  s    z-TestNdZeros.test_2d_dtype_kwarg.<locals>.funcræ   rÊ   r   rÈ   r   Útest_2d_dtype_kwargÉ  s    zTestNdZeros.test_2d_dtype_kwargc                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                    s   ˆ | |fdd�S )Nrô   r^   r   rå   rÈ   r   r   rÉ   Ñ  s    z1TestNdZeros.test_2d_dtype_str_kwarg.<locals>.funcræ   rÊ   r   rÈ   r   Útest_2d_dtype_str_kwargÏ  s    z#TestNdZeros.test_2d_dtype_str_kwargc                    s    | j ‰ ‡ fdd„}|  |¡ d S )Nc                    s   ˆ | |fdd�S )NrÖ   r^   r   rå   rÈ   r   r   rÉ   Ø  s    zFTestNdZeros.test_2d_dtype_str_kwarg_alternative_spelling.<locals>.funcræ   rÊ   r   rÈ   r   Ú,test_2d_dtype_str_kwarg_alternative_spellingÕ  s    z8TestNdZeros.test_2d_dtype_str_kwarg_alternative_spellingc                    sV   | j ‰ tjj}‡ fdd„}|  |d|d > tjƒ¡ |  |d|d > dftjƒ¡ d S )Nc                    s   ‡ ‡‡fdd„S )Nc                      s
   ˆˆˆ ƒS r   r   r   )r&   r+   rC   r   r   rí   à  rî   z?TestNdZeros.test_alloc_size.<locals>.gen_func.<locals>.<lambda>r   ©rC   r&   rÈ   )r&   rC   r   Úgen_funcß  s    z-TestNdZeros.test_alloc_size.<locals>.gen_funcrA   rZ   rš   é@   )r+   r   ÚintpÚbitwidthr½   r   ©r*   Úwidthrù   r   rÈ   r   Útest_alloc_sizeÜ  s
    zTestNdZeros.test_alloc_size)r2   r3   r4   rÀ   r²   rË   rÎ   rÐ   rÒ   rÔ   r×   rØ   rà   rä   rç   rò   rõ   rö   r÷   rÿ   Ú__classcell__r   r   rÃ   r   r¾   U  s"   r¾   c                       s.   e Zd Z‡ fdd„Zej‡ fdd„ƒZ‡  ZS )Ú
TestNdOnesc                    s   t t| ƒ ¡  tj| _d S r   )r¿   r  rÀ   r   rb   r+   rÂ   rÃ   r   r   rÀ   è  s    zTestNdOnes.setUpc                    s   t ƒ  ¡  d S r   )r¿   rØ   rÂ   rÃ   r   r   rØ   ì  s    z-TestNdOnes.test_1d_dtype_str_structured_dtype)r2   r3   r4   rÀ   ÚunittestÚexpectedFailurerØ   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d„ Zdd„ Zdd„ Zdd„ ZdS )Ú
TestNdFullc                 C   s   t j ||¡ d S r   rÅ   rÆ   r   r   r   r²   ó  s    zTestNdFull.check_result_valuec                 C   s   dd„ }|   |¡ d S )Nc                   S   s   t  dd¡S )Nr   ç      @©r   Úfullr   r   r   r   rÉ   ÷  s    z TestNdFull.test_0d.<locals>.func)r³   rÊ   r   r   r   rË   ö  s    zTestNdFull.test_0dc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t  | d¡S ©Nr  r  rÌ   r   r   r   rÉ   ü  s    z TestNdFull.test_1d.<locals>.func©r¹   rÊ   r   r   r   rÎ   û  s    zTestNdFull.test_1dc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t  | dt j¡S r  )r   r  Úbool_rÌ   r   r   r   rÉ     s    z&TestNdFull.test_1d_dtype.<locals>.funcr	  rÊ   r   r   r   rÐ      s    zTestNdFull.test_1d_dtypec                    s$   t  d¡‰ ‡ fdd„}|  |¡ d S )NÚboolc                    s   t  | dˆ ¡S r  r  rÌ   r^   r   r   rÉ     s    z/TestNdFull.test_1d_dtype_instance.<locals>.func)r   r&   r¹   rÊ   r   r^   r   rÒ     s    
z!TestNdFull.test_1d_dtype_instancec                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t  | dd¡S ©Nr  r
  r  rÌ   r   r   r   rÉ     s    z*TestNdFull.test_1d_dtype_str.<locals>.funcr	  rÊ   r   r   r   rÔ     s    zTestNdFull.test_1d_dtype_strc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t  | dd¡S )Nr  ú?r  rÌ   r   r   r   rÉ     s    z?TestNdFull.test_1d_dtype_str_alternative_spelling.<locals>.funcr	  rÊ   r   r   r   r×     s    z1TestNdFull.test_1d_dtype_str_alternative_spellingc              	   C   sL   t dd„ ƒ}|  t¡�}|dddƒ W 5 Q R X t|jƒ}d}|  ||¡ d S )Nc                 S   s   t  | ||¡S r   r  )rI   ÚfvrÚ   r   r   r   rÉ     s    z4TestNdFull.test_1d_dtype_non_const_str.<locals>.func©rt   r  rP   z:If np.full dtype is a string it must be a string constant.©r   rœ   r   r    r¡   rŸ   rÝ   r   r   r   rà     s    

z&TestNdFull.test_1d_dtype_non_const_strc              	   C   sF   t dd„ ƒ}|  t¡�}|ddƒ W 5 Q R X t|jƒ}|  d|¡ d S )Nc                 S   s   t  | |d¡S rá   r  )rI   r  r   r   r   rÉ   &  s    z2TestNdFull.test_1d_dtype_invalid_str.<locals>.funcr  r  râ   r  rã   r   r   r   rä   $  s    

z$TestNdFull.test_1d_dtype_invalid_strc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t  | |fd¡S r  r  rå   r   r   r   rÉ   1  s    z TestNdFull.test_2d.<locals>.func©r»   rÊ   r   r   r   rç   0  s    zTestNdFull.test_2dc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t j| |fdt jd�S )Ny      ð?      @r^   )r   r  rô   rå   r   r   r   rÉ   6  s    z,TestNdFull.test_2d_dtype_kwarg.<locals>.funcr  rÊ   r   r   r   rõ   5  s    zTestNdFull.test_2d_dtype_kwargc                 C   s:   dd„ }|   |¡ dd„ }|   |¡ dd„ }|   |¡ d S )Nc                 S   s   t  | |ft  d¡¡S r“   )r   r  rP   rå   r   r   r   rÉ   <  s    z0TestNdFull.test_2d_dtype_from_type.<locals>.funcc                 S   s   t  | |ft  d¡¡S r“   )r   r  rÓ   rå   r   r   r   rÉ   A  s    c                 S   s   t j| |fdt jd�S )NrA   r^   )r   r  rë   rå   r   r   r   rÉ   F  s    r  rÊ   r   r   r   Útest_2d_dtype_from_type:  s    

z"TestNdFull.test_2d_dtype_from_typec              	   C   s`   dd„ }|   |¡ dd„ }|   |¡ tjr\tdd„ ƒ}|  t¡� |t d¡dƒ W 5 Q R X d S )	Nc                 S   s   t  t  | ¡t  |¡fd¡S r  )r   r  rè   rP   rå   r   r   r   ré   L  s    z.TestNdFull.test_2d_shape_dtypes.<locals>.func1c                 S   s   t  t  | ¡t  |¡fd¡S r  )r   r  rê   rë   rå   r   r   r   rì   P  s    z.TestNdFull.test_2d_shape_dtypes.<locals>.func2c                 S   s   t  | |fd¡S r  r  rå   r   r   r   rí   U  rî   z1TestNdFull.test_2d_shape_dtypes.<locals>.<lambda>rï   rA   )r»   r   rð   r#   rœ   r·   r   rê   rñ   r   r   r   rò   J  s    

zTestNdFull.test_2d_shape_dtypesc                 C   sH   t jj}dd„ }|  |d|d > dƒ¡ |  |d|d > dfdƒ¡ d S )Nc                    s   ‡ ‡fdd„S )Nc                      s   t  ˆ ˆ¡S r   r  r   ©rC   Úvaluer   r   rí   \  rî   z>TestNdFull.test_alloc_size.<locals>.gen_func.<locals>.<lambda>r   r  r   r  r   rù   [  s    z,TestNdFull.test_alloc_size.<locals>.gen_funcrA   rZ   rš   rú   )r   rû   rü   r½   rý   r   r   r   rÿ   Y  s    zTestNdFull.test_alloc_sizeN)r2   r3   r4   r²   rË   rÎ   rÐ   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S )ÚConstructorLikeBaseTestc              	   C   sB   z|  d¡ W n. ttfk
r<   d|jj }|  |¡ Y nX d S )Nr<   ó   x)rF   Ú	TypeErrorr·   r&   rM   )r*   r8   Z
fill_valuer   r   r   Úmutate_arrayd  s
    z$ConstructorLikeBaseTest.mutate_arrayc              
      sÀ   ‡ ‡‡fdd„}t  ddd¡ |¡}tˆƒ‰ dD ]~}|dkrP|dd …  d¡}n
| |¡}||ƒ |jdkr~||d d d	… ƒ d
|jd< ˆ t¡� d|d< W 5 Q R X ||ƒ q0||d ƒ d S )Nc                    sn   ˆ| ƒ}ˆ | ƒ}ˆ  |j|j¡ ˆ  |j|j¡ ˆ ||¡ ˆ ||¡ ˆ |¡ ˆ |¡ tj ||¡ d S r   )	r$   r%   r&   r'   r²   r  r   r(   r)   )r8   r/   r0   ©r-   r+   r*   r   r   Ú	check_arrm  s    

z5ConstructorLikeBaseTest.check_like.<locals>.check_arrr   rt   é   )r  rº   )rA   rZ   rK   )rK   rA   rZ   r   r   r´   rZ   FZ	WRITEABLErA   )	r   ÚlinspaceÚastyper#   rx   ÚndimÚflagsrœ   r·   )r*   r+   r&   r  ÚorigrC   r8   r   r  r   Ú
check_likel  s    



z"ConstructorLikeBaseTest.check_likeN)r2   r3   r4   r  r!  r   r   r   r   r  b  s   r  c                       st   e Zd Z‡ f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‡  ZS )ÚTestNdEmptyLikec                    s   t t| ƒ ¡  tj| _d S r   )r¿   r"  rÀ   r   r†   r+   rÂ   rÃ   r   r   rÀ   ’  s    zTestNdEmptyLike.setUpc                 C   s   d S r   r   rÆ   r   r   r   r²   –  s    z"TestNdEmptyLike.check_result_valuec                    s$   | j ‰ ‡ fdd„}|  |tj¡ d S )Nc                    s   ˆ | ƒS r   r   r?   rÈ   r   r   rÉ   ›  s    z'TestNdEmptyLike.test_like.<locals>.func©r+   r!  r   rD   rÊ   r   rÈ   r   Ú	test_like™  s    zTestNdEmptyLike.test_likec                    s<   t  dt jfdt jfg¡}| j‰ ‡ fdd„}|  ||¡ d S )Nr   r   c                    s   ˆ | ƒS r   r   r?   rÈ   r   r   rÉ   ¢  s    z2TestNdEmptyLike.test_like_structured.<locals>.func)r   r&   rè   rc   r+   r!  ©r*   r&   rÉ   r   rÈ   r   Útest_like_structuredŸ  s    z$TestNdEmptyLike.test_like_structuredc                    s$   | j ‰ ‡ fdd„}|  |tj¡ d S )Nc                    s   ˆ | t jƒS r   rÏ   r?   rÈ   r   r   rÉ   ¨  s    z-TestNdEmptyLike.test_like_dtype.<locals>.funcr#  rÊ   r   rÈ   r   Útest_like_dtype¦  s    zTestNdEmptyLike.test_like_dtypec                    s0   t  d¡‰ | j‰‡ ‡fdd„}|  |t j¡ d S )NrP   c                    s
   ˆ| ˆ ƒS r   r   r?   ©r&   r+   r   r   rÉ   ¯  s    z6TestNdEmptyLike.test_like_dtype_instance.<locals>.func)r   r&   r+   r!  rD   rÊ   r   r(  r   Útest_like_dtype_instance¬  s    
z(TestNdEmptyLike.test_like_dtype_instancec                    s@   t  dt jfdt jfg¡‰ | j‰‡ ‡fdd„}|  |t j¡ d S )Nr   r   c                    s
   ˆ| ˆ ƒS r   r   r?   r(  r   r   rÉ   ¶  s    z8TestNdEmptyLike.test_like_dtype_structured.<locals>.func)r   r&   rè   rc   r+   r!  rD   rÊ   r   r(  r   Útest_like_dtype_structured³  s    z*TestNdEmptyLike.test_like_dtype_structuredc                    s$   | j ‰ ‡ fdd„}|  |tj¡ d S )Nc                    s   ˆ | t jd�S ró   rÏ   r?   rÈ   r   r   rÉ   ¼  s    z3TestNdEmptyLike.test_like_dtype_kwarg.<locals>.funcr#  rÊ   r   rÈ   r   Útest_like_dtype_kwargº  s    z%TestNdEmptyLike.test_like_dtype_kwargc                    s$   | j ‰ ‡ fdd„}|  |tj¡ d S )Nc                    s   ˆ | dd�S )NrP   r^   r   r?   rÈ   r   r   rÉ   Â  s    z7TestNdEmptyLike.test_like_dtype_str_kwarg.<locals>.funcr#  rÊ   r   rÈ   r   Útest_like_dtype_str_kwargÀ  s    z)TestNdEmptyLike.test_like_dtype_str_kwargc                    s$   | j ‰ ‡ fdd„}|  |tj¡ d S )Nc                    s   ˆ | dd�S )NrÕ   r^   r   r?   rÈ   r   r   rÉ   È  s    zLTestNdEmptyLike.test_like_dtype_str_kwarg_alternative_spelling.<locals>.funcr#  rÊ   r   rÈ   r   Ú.test_like_dtype_str_kwarg_alternative_spellingÆ  s    z>TestNdEmptyLike.test_like_dtype_str_kwarg_alternative_spellingc              	      sz   | j ‰ t‡ fdd„ƒ}|  t¡�}|t d¡dƒ W 5 Q R X t|jƒ}d| j j› d�}|  	||¡ |  	d 
ˆ j¡|¡ d S )Nc                    s
   ˆ | |ƒS r   r   rÙ   rÈ   r   r   rÉ   Ï  s    z;TestNdEmptyLike.test_like_dtype_non_const_str.<locals>.funcrS   rP   rÛ   rÜ   z'{}(array(float64, 1d, C), unicode_type))r+   r   rœ   r   r   rb   r    r¡   r2   rŸ   r‰   rÝ   r   rÈ   r   Útest_like_dtype_non_const_strÌ  s    

þz-TestNdEmptyLike.test_like_dtype_non_const_strc              	      sT   | j ‰ t‡ fdd„ƒ}|  t¡�}|t d¡ƒ W 5 Q R X t|jƒ}|  d|¡ d S )Nc                    s
   ˆ | dƒS rá   r   rÌ   rÈ   r   r   rÉ   á  s    z9TestNdEmptyLike.test_like_dtype_invalid_str.<locals>.funcrS   râ   )	r+   r   rœ   r   r   rb   r    r¡   rŸ   rã   r   rÈ   r   Útest_like_dtype_invalid_strÞ  s    
z+TestNdEmptyLike.test_like_dtype_invalid_str)r2   r3   r4   rÀ   r²   r$  r&  r'  r)  r*  r+  r,  r-  r.  r/  r   r   r   rÃ   r   r"  �  s   r"  c                       s<   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Z‡ fdd„Z‡  ZS )	ÚTestNdZerosLikec                    s   t t| ƒ ¡  tj| _d S r   )r¿   r0  rÀ   r   Z
zeros_liker+   rÂ   rÃ   r   r   rÀ   î  s    zTestNdZerosLike.setUpc                 C   s   t j ||¡ d S r   rÅ   rÆ   r   r   r   r²   ò  s    z"TestNdZerosLike.check_result_valuec                    s   t t| ƒ ¡  d S r   )r¿   r0  r&  rÂ   rÃ   r   r   r&  õ  s    z$TestNdZerosLike.test_like_structuredc                    s   t t| ƒ ¡  d S r   )r¿   r0  r*  rÂ   rÃ   r   r   r*  ø  s    z*TestNdZerosLike.test_like_dtype_structured)r2   r3   r4   rÀ   r²   r&  r*  r   r   r   rÃ   r   r0  ì  s   r0  c                       s@   e Zd Z‡ fdd„Zej‡ fdd„ƒZej‡ fdd„ƒZ‡  ZS )ÚTestNdOnesLikec                    s    t t| ƒ ¡  tj| _d| _d S r“   )r¿   r1  rÀ   r   Z	ones_liker+   Zexpected_valuerÂ   rÃ   r   r   rÀ   þ  s    zTestNdOnesLike.setUpc                    s   t t| ƒ ¡  d S r   )r¿   r1  r&  rÂ   rÃ   r   r   r&    s    z#TestNdOnesLike.test_like_structuredc                    s   t t| ƒ ¡  d S r   )r¿   r1  r*  rÂ   rÃ   r   r   r*  	  s    z)TestNdOnesLike.test_like_dtype_structured)	r2   r3   r4   rÀ   r  r  r&  r*  r   r   r   rÃ   r   r1  ü  s
   r1  c                   @   sb   e Zd Zdd„ Zdd„ Zej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 )ÚTestNdFullLikec                 C   s   t j ||¡ d S r   rÅ   rÆ   r   r   r   r²     s    z!TestNdFullLike.check_result_valuec                 C   s   dd„ }|   |tj¡ d S )Nc                 S   s   t  | d¡S )Nç      @©r   Ú	full_liker?   r   r   r   rÉ     s    z&TestNdFullLike.test_like.<locals>.func©r!  r   rD   rÊ   r   r   r   r$    s    zTestNdFullLike.test_likec                 C   s2   t  dt jfdt jfg¡}dd„ }|  ||¡ d S )Nr   r   c                 S   s   t  | d¡S r  r4  r?   r   r   r   rÉ     s    z1TestNdFullLike.test_like_structured.<locals>.func)r   r&   rè   rc   r!  r%  r   r   r   r&    s    z#TestNdFullLike.test_like_structuredc                 C   s   dd„ }|   |tj¡ d S )Nc                 S   s   t  | dt j¡S r  ©r   r5  r
  r?   r   r   r   rÉ   !  s    z,TestNdFullLike.test_like_dtype.<locals>.funcr6  rÊ   r   r   r   r'     s    zTestNdFullLike.test_like_dtypec                    s(   t  d¡‰ ‡ fdd„}|  |t j¡ d S )Nr  c                    s   t  | dˆ ¡S r  r4  r?   r^   r   r   rÉ   '  s    z5TestNdFullLike.test_like_dtype_instance.<locals>.func)r   r&   r!  rD   rÊ   r   r^   r   r)  %  s    
z'TestNdFullLike.test_like_dtype_instancec                 C   s   dd„ }|   |tj¡ d S )Nc                 S   s   t j| dt jd�S )Nr  r^   r7  r?   r   r   r   rÉ   ,  s    z2TestNdFullLike.test_like_dtype_kwarg.<locals>.funcr6  rÊ   r   r   r   r+  +  s    z$TestNdFullLike.test_like_dtype_kwargc                 C   s   dd„ }|   |tj¡ d S )Nc                 S   s   t  | dd¡S r  r4  r?   r   r   r   rÉ   1  s    z6TestNdFullLike.test_like_dtype_str_kwarg.<locals>.funcr6  rÊ   r   r   r   r,  0  s    z(TestNdFullLike.test_like_dtype_str_kwargc                 C   s   dd„ }|   |tj¡ d S )Nc                 S   s   t j| ddd�S )Nr  r  r^   r4  r?   r   r   r   rÉ   6  s    zKTestNdFullLike.test_like_dtype_str_kwarg_alternative_spelling.<locals>.funcr6  rÊ   r   r   r   r-  5  s    z=TestNdFullLike.test_like_dtype_str_kwarg_alternative_spellingc              	   C   sR   t dd„ ƒ}|  t¡�}|t d¡ddƒ W 5 Q R X t|jƒ}d}|  ||¡ d S )Nc                 S   s   t  | ||¡S r   r4  )r8   r  rÚ   r   r   r   rÉ   <  s    z@TestNdFullLike.test_like_dtype_non_const_str_kwarg.<locals>.funcrK   r  rP   z?If np.full_like dtype is a string it must be a string constant.©r   rœ   r   r   rb   r    r¡   rŸ   rÝ   r   r   r   Ú#test_like_dtype_non_const_str_kwarg:  s    

z2TestNdFullLike.test_like_dtype_non_const_str_kwargc              	   C   sL   t dd„ ƒ}|  t¡�}|t d¡dƒ W 5 Q R X t|jƒ}|  d|¡ d S )Nc                 S   s   t  | |d¡S rá   r4  )r8   r  r   r   r   rÉ   J  s    z8TestNdFullLike.test_like_dtype_invalid_str.<locals>.funcrS   g333333@râ   r8  rã   r   r   r   r/  H  s    

z*TestNdFullLike.test_like_dtype_invalid_strN)r2   r3   r4   r²   r$  r  r  r&  r'  r)  r+  r,  r-  r9  r/  r   r   r   r   r2    s   
r2  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestNdIdentityc                 C   s   |   |dg¡ d S )N©rK   ©r1   ©r*   r+   r   r   r   Úcheck_identityW  s    zTestNdIdentity.check_identityc                 C   s   dd„ }|   |¡ d S )Nc                 S   s
   t  | ¡S r   ©r   ÚidentityrÌ   r   r   r   rÉ   [  s    z*TestNdIdentity.test_identity.<locals>.func)r>  rÊ   r   r   r   Útest_identityZ  s    zTestNdIdentity.test_identityc                    s:   t jt jt jt  d¡dfD ]‰ ‡ fdd„}|  |¡ qd S )Nr  r
  c                    s   t  | ˆ ¡S r   r?  rÌ   r^   r   r   rÉ   b  s    z0TestNdIdentity.test_identity_dtype.<locals>.func)r   rô   rè   r
  r&   r>  rÊ   r   r^   r   Útest_identity_dtype_  s
    ÿz"TestNdIdentity.test_identity_dtypec              	   C   sJ   t dd„ ƒ}|  t¡�}|ddƒ W 5 Q R X t|jƒ}d}|  ||¡ d S )Nc                 S   s   t  | |¡S r   r?  rÙ   r   r   r   rÉ   h  s    z@TestNdIdentity.test_like_dtype_non_const_str_kwarg.<locals>.funcrS   rP   z>If np.identity dtype is a string it must be a string constant.r  rÝ   r   r   r   r9  f  s    

z2TestNdIdentity.test_like_dtype_non_const_str_kwargN)r2   r3   r4   r>  rA  rB  r9  r   r   r   r   r:  U  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 )Ú	TestNdEyec                 C   s   dd„ }|   |ddg¡ d S )Nc                 S   s
   t  | ¡S r   ©r   ÚeyerÌ   r   r   r   rÉ   y  s    z"TestNdEye.test_eye_n.<locals>.func©rA   r;  r<  rÊ   r   r   r   Ú
test_eye_nx  s    zTestNdEye.test_eye_nc                 C   s8   d t jt  d¡fD ] }|fdd„}|  |ddg¡ qd S )NrA   c                 S   s   t j| |d�S ró   rD  )rI   r&   r   r   r   rÉ   €  s    z(TestNdEye.test_eye_n_dtype.<locals>.funcrF  r;  )r   rÓ   rô   r1   )r*   rÚ   rÉ   r   r   r   Útest_eye_n_dtype}  s    zTestNdEye.test_eye_n_dtypec                 C   s   dd„ }|   |dddg¡ d S )Nc                 S   s   t  | |¡S r   rD  ©rI   rQ   r   r   r   rÉ   …  s    z$TestNdEye.test_eye_n_m.<locals>.func©rA   rZ   ©rK   rZ   )r   rK   r<  rÊ   r   r   r   Útest_eye_n_m„  s    zTestNdEye.test_eye_n_mc              	   C   s   |   |ddddddg¡ d S )N)rA   rZ   r   )rK   rS   rA   )rK   rS   r´   )rS   rK   éþÿÿÿ)rS   rK   éûÿÿÿ)rS   rK   rt   r<  rÊ   r   r   r   Úcheck_eye_n_m_k‰  s    ûzTestNdEye.check_eye_n_m_kc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t  | ||¡S r   rD  ©rI   rQ   rY   r   r   r   rÉ   ’  s    z&TestNdEye.test_eye_n_m_k.<locals>.func©rO  rÊ   r   r   r   Útest_eye_n_m_k‘  s    zTestNdEye.test_eye_n_m_kc                 C   s   dd„ }|   |¡ d S )Nc                 S   s   t j| ||t jd�S ©N)ÚNÚMrY   r&   )r   rE  rè   rP  r   r   r   rÉ   —  s    z,TestNdEye.test_eye_n_m_k_dtype.<locals>.funcrQ  rÊ   r   r   r   Útest_eye_n_m_k_dtype–  s    zTestNdEye.test_eye_n_m_k_dtypec                    s$   t  d¡‰ ‡ fdd„}|  |¡ d S )Nrè   c                    s   t j| ||ˆ d�S rS  rD  rP  r^   r   r   rÉ   �  s    z5TestNdEye.test_eye_n_m_k_dtype_instance.<locals>.func)r   r&   rO  rÊ   r   r^   r   Útest_eye_n_m_k_dtype_instance›  s    
z'TestNdEye.test_eye_n_m_k_dtype_instanceN)
r2   r3   r4   rG  rH  rL  rO  rR  rV  rW  r   r   r   r   rC  v  s   rC  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 )Ú
TestNdDiagc                 C   sœ   t  dddg¡}t  dddgg¡}t  |¡}|||g| _t  d¡ dd¡}t  d¡ dd¡}||g| _dd„ }|| _t|ƒ| _	dd	d
„}|| _
t|ƒ| _d S )NrA   rZ   rK   é   rS   c                 S   s
   t  | ¡S r   ©r   Zdiag)Úqr   r   r   rÉ   ¬  s    zTestNdDiag.setUp.<locals>.funcr   c                 S   s   t j| |d�S )N©rY   rZ  )r[  rY   r   r   r   Ú
func_kwarg±  s    z$TestNdDiag.setUp.<locals>.func_kwarg)r   )r   ÚarrayZ	transposeÚvectorsrL   rx   Ú	matriciesÚpyr#   ÚjitÚpy_kwÚjit_kw)r*   ÚvZhvÚvvZa3x4Za4x3rÉ   r]  r   r   r   rÀ   ¤  s    



zTestNdDiag.setUpc                 O   sF   |||Ž}|||Ž}|   |j|j¡ |   |j|j¡ tj ||¡ d S r   )r$   r%   r&   r   r(   r)   )r*   r+   Znrtfuncr.   Úkwargsr/   Zcomputedr   r   r   Ú
check_diag¶  s
    

zTestNdDiag.check_diagc                 C   s"   | j D ]}|  | j| j|¡ qd S r   )r_  rh  ra  rb  ©r*   Údr   r   r   Útest_diag_vect_create¿  s    
z TestNdDiag.test_diag_vect_createc                 C   s6   t ddƒD ]&}| jD ]}| j| j| j||d� qq
d S )Niöÿÿÿrs   r\  )rH   r_  rh  rc  rd  ©r*   rY   rj  r   r   r   Útest_diag_vect_create_kwargÄ  s    
z&TestNdDiag.test_diag_vect_create_kwargc                 C   s"   | j D ]}|  | j| j|¡ qd S r   )r`  rh  ra  rb  ri  r   r   r   Útest_diag_extractÊ  s    
zTestNdDiag.test_diag_extractc                 C   s6   t ddƒD ]&}| jD ]}| j| j| j||d� qq
d S )NéüÿÿÿrS   r\  )rH   r`  rh  rc  rd  rl  r   r   r   Útest_diag_extract_kwargÏ  s    
z"TestNdDiag.test_diag_extract_kwargc              	   C   s„   t  dggg¡}t| jƒ}|  t¡� |ƒ  W 5 Q R X |  t¡� ||ƒ W 5 Q R X |  t¡� t| jƒ}||dd� W 5 Q R X d S )Nç      ð?rK   r\  )r   r^  r#   ra  rœ   r  r   rc  )r*   rj  r-   Zdfuncr   r   r   Útest_error_handlingÕ  s    

zTestNdDiag.test_error_handlingc              	   C   s2   t | jƒ}d}|  t|¡�}|d ƒ W 5 Q R X d S )Nz'.*The argument "v" must be array-like.*)r#   ra  ÚassertRaisesRegexr   )r*   r-   rß   r¢   r   r   r   Útest_bad_shapeä  s    
zTestNdDiag.test_bad_shapeN)r2   r3   r4   rÀ   rh  rk  rm  rn  rp  rr  rt  r   r   r   r   rX  ¢  s   	rX  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLinspacec              	   C   s$   dd„ }|   |ddddddg¡ d S )	Nc                 S   s   t  | |¡S r   ©r   r  rI  r   r   r   r+   í  s    z,TestLinspace.test_linspace_2.<locals>.pyfunc)r   rS   )rA   r   )ç      Àç      @)ù       €      Àù       @      @)rZ   rA   )ù      ð?      à?ù              ø?r<  r=  r   r   r   Útest_linspace_2ì  s     ÿÿzTestLinspace.test_linspace_2c              
   C   s&   dd„ }|   |ddddddd	g¡ d S )
Nc                 S   s   t  | ||¡S r   rv  ©rI   rQ   rX   r   r   r   r+   ô  s    z,TestLinspace.test_linspace_3.<locals>.pyfunc)r   rS   é	   )rA   rS   rK   )rw  rx  rš   )ry  rz  rv   )rZ   rA   r   )r{  r|  rt   )rA   g}Ã”%­I²TrA   r<  r=  r   r   r   Útest_linspace_3ó  s      þÿzTestLinspace.test_linspace_3c                 C   s8   t dd„ ƒ}d\}}}|  ||||ƒ| |||¡¡ d S )Nc                 S   s   t  | ||¡S r   rv  r~  r   r   r   r@   þ  s    z0TestLinspace.test_linspace_accuracy.<locals>.foo)g        rq  r   )r#   ÚassertPreciseEqualZpy_func)r*   r@   rI   rQ   rX   r   r   r   Útest_linspace_accuracyû  s    

z#TestLinspace.test_linspace_accuracyN)r2   r3   r4   r}  r€  r‚  r   r   r   r   ru  ê  s   ru  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestNpyEmptyKeywordc                    s\   ‡ fdd„}dddg}t |ƒ}|D ]4}||ƒ}||ƒ}|  |j|j¡ |  |j|j¡ q"d S )Nc                    s   t j| ˆ d�S ró   r=   ©rC   r^   r   r   r+     s    z7TestNpyEmptyKeyword._test_with_dtype_kw.<locals>.pyfuncrA   rt   r  ©r#   r$   r&   rC   ©r*   r&   r+   Zshapesr-   Úsr/   ro   r   r^   r   Ú_test_with_dtype_kw  s    
z'TestNpyEmptyKeyword._test_with_dtype_kwc                 C   s,   t jt jt jt  d¡fD ]}|  |¡ qd S ©Nrô   )r   rP   rc   rô   r&   rˆ  ©r*   r&   r   r   r   Útest_with_dtype_kws  s    z'TestNpyEmptyKeyword.test_with_dtype_kwsc                    s\   ‡ fdd„}dddg}t |ƒ}|D ]4}||ƒ}||ƒ}|  |j|j¡ |  |j|j¡ q"d S )Nc                    s   t j| ˆ d�S )Nrø   r=   r„  r^   r   r   r+     s    zATestNpyEmptyKeyword._test_with_shape_and_dtype_kw.<locals>.pyfuncrA   rt   r  r…  r†  r   r^   r   Ú_test_with_shape_and_dtype_kw  s    
z1TestNpyEmptyKeyword._test_with_shape_and_dtype_kwc                 C   s,   t jt jt jt  d¡fD ]}|  |¡ qd S r‰  )r   rP   rc   rô   r&   rŒ  rŠ  r   r   r   Útest_with_shape_and_dtype_kws%  s    z1TestNpyEmptyKeyword.test_with_shape_and_dtype_kwsc              	   C   s0   dd„ }t |ƒ}|  t¡� |ƒ  W 5 Q R X d S )Nc                   S   s   t  ¡ S r   r=   r   r   r   r   r+   +  s    z6TestNpyEmptyKeyword.test_empty_no_args.<locals>.pyfunc)r#   rœ   r   )r*   r+   r-   r   r   r   Útest_empty_no_args)  s    z&TestNpyEmptyKeyword.test_empty_no_argsN)r2   r3   r4   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d„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTestNpArrayc                 C   sN   dd„ }t |ƒ}|dƒ}|  |tjdtjd�¡ |dƒ}|  |t d¡¡ d S )Nc                 S   s
   t  | ¡S r   ©r   r^  ©Úargr   r   r   r+   9  s    z#TestNpArray.test_0d.<locals>.pyfuncr<   r^   rx  )r#   r�  r   r^  rû   ©r*   r+   r-   ro   r   r   r   rË   8  s    zTestNpArray.test_0dc                 C   s   dd„ }|   |ddg¡ d S )Nc                 S   s   t j| t jd�S ró   )r   r^  rè   r‘  r   r   r   r+   C  s    z.TestNpArray.test_0d_with_dtype.<locals>.pyfunc)r<   )r3  r<  r=  r   r   r   Útest_0d_with_dtypeB  s    zTestNpArray.test_0d_with_dtypec                 C   st   dd„ }t |ƒ}|dddgƒ}|  |t dddg¡¡ |dƒ}|  |t dddg¡¡ |d	ƒ}|  |t d	¡¡ d S )
Nc                 S   s
   t  | ¡S r   r�  r‘  r   r   r   r+   I  s    z#TestNpArray.test_1d.<locals>.pyfuncrZ   rK   r<   )rq  ù              @r<   rq  r•  r   )r#   r�  r   rû   r^  rD   r“  r   r   r   rÎ   H  s    zTestNpArray.test_1dc                 C   s,   dd„ }|   |ddgfddgfddg¡ d S )	Nc                 S   s   t j| t jd�S ró   )r   r^  rc   r‘  r   r   r   r+   X  s    z.TestNpArray.test_1d_with_dtype.<locals>.pyfuncrZ   r<   r3  rq  ©)rA   r3  r<   ©r   r<  r=  r   r   r   Útest_1d_with_dtypeW  s    ýÿzTestNpArray.test_1d_with_dtypec                 C   s,   dd„ }|   |ddgfddgfddg¡ d S )	Nc                 S   s   t j| dd�S )Nrc   r^   r�  r‘  r   r   r   r+   c  s    z2TestNpArray.test_1d_with_str_dtype.<locals>.pyfuncrZ   r<   r3  rq  r–  r—  r<  r=  r   r   r   Útest_1d_with_str_dtypeb  s    ýÿz"TestNpArray.test_1d_with_str_dtypec              	   C   sJ   t dd„ ƒ}|  t¡�}|ddƒ W 5 Q R X t|jƒ}d}|  ||¡ d S )Nc                 S   s   t j| |d�S ró   r�  )r’  rÚ   r   r   r   rÉ   o  s    z:TestNpArray.test_1d_with_non_const_str_dtype.<locals>.func)rt   rK   rP   z;If np.array dtype is a string it must be a string constant.r  rÝ   r   r   r   Ú test_1d_with_non_const_str_dtypem  s    

z,TestNpArray.test_1d_with_non_const_str_dtypec                 C   s  dd„ }t |ƒ}|ddgƒ}|  |t ddgddgg¡¡ |d	d
gƒ}|  |t ddgddgg¡¡ |ddgddgfƒ}|  |t ddgddgg¡¡ |ddgddgfƒ}|  |t ddgddgg¡¡ |dƒ}|  |t ddgddgg¡¡ |dƒ}|  |t d¡¡ d S )Nc                 S   s
   t  | ¡S r   r�  r‘  r   r   r   r+   |  s    z#TestNpArray.test_2d.<locals>.pyfuncrJ  ©rK   rS   rA   rZ   rK   rS   ©rA   rx  ©rK   r  rx  r  r3  ))ç      ø?rZ   )r3  r  rž  )r   r   )r#   r�  r   rû   rD   r“  r   r   r   rç   {  s    zTestNpArray.test_2dc                 C   s>   dd„ }t |ƒ}|ddgƒ}|  |t ddgddgg¡¡ d S )	Nc                 S   s   t j| t jd�S ró   )r   r^  rP   r‘  r   r   r   r+   ‘  s    z.TestNpArray.test_2d_with_dtype.<locals>.pyfuncrœ  r�  rA   rZ   rK   rS   )r#   r�  r   rP   r“  r   r   r   Útest_2d_with_dtype�  s    zTestNpArray.test_2d_with_dtypec              	      sÂ   dd„ }t |ƒ}tj‡ fdd„ƒ}|dƒ� |t dg¡ƒ W 5 Q R X |dƒ�  |t d¡t d	¡gfƒ W 5 Q R X |d
ƒ�< t ddg¡}tjd|d�d }|dt d¡|ffƒ W 5 Q R X d S )Nc                 S   s
   t  | ¡S r   r�  r‘  r   r   r   r+   š  s    z'TestNpArray.test_raises.<locals>.pyfuncc              	   3   s2   ˆ   t¡�}d V  W 5 Q R X ˆ  | t|jƒ¡ d S r   )rœ   r   rŸ   r    r¡   )rß   r¢   rÂ   r   r   Úcheck_raisesŸ  s    z-TestNpArray.test_raises.<locals>.check_raisesz;array(float64, 1d, C) not allowed in a homogeneous sequencerq  zOtype Tuple(int64, reflected list(int64)<iv=None>) does not have a regular shaperA   rZ   zrcannot convert Tuple(int64, Record(a[type=int32;offset=0],b[type=float32;offset=4];8;False)) to a homogeneous type)r   rÕ   )r   Zf4r^   r   rJ  )r#   Ú
contextlibÚcontextmanagerr   r^  rê   r&   rÁ   )r*   r+   r-   r   ÚstÚvalr   rÂ   r   Útest_raises˜  s    

$ÿzTestNpArray.test_raisesc              	   C   s4   t dd„ ƒ}d}|  t|¡�}|d ƒ W 5 Q R X d S )Nc                 S   s
   t  | ¡S r   r�  )Úobjr   r   r   rÉ   ¶  s    z(TestNpArray.test_bad_array.<locals>.funcz,.*The argument "object" must be array-like.*©r   rs  r   ©r*   rÉ   rß   r¢   r   r   r   Útest_bad_arrayµ  s
    
zTestNpArray.test_bad_arrayc              	   C   s6   t dd„ ƒ}d}|  t|¡�}|ddƒ W 5 Q R X d S )Nc                 S   s   t  | |¡S r   r�  )r¦  rÚ   r   r   r   rÉ   ¿  s    z(TestNpArray.test_bad_dtype.<locals>.funcz>.*The argument "dtype" must be a data-type if it is provided.*rt   rS   r§  r¨  r   r   r   Útest_bad_dtype¾  s
    
zTestNpArray.test_bad_dtypeN)r2   r3   r4   rË   r”  rÎ   r˜  r™  rš  rç   rŸ  r¥  r©  rª  r   r   r   r   r�  6  s   
	r�  c                   @   s>   e Zd ZdZdd„ Zejdd„ ƒZdd„ Zdd	„ Z	d
d„ Z
dS )ÚTestNpConcatenatez%
    Tests for np.concatenate().
    c                 C   s^   t  d¡ d¡}|d }|d jdd�}|d d d d… }|d dd d d…f }|||||fS ©Né   )rS   rK   rZ   rs   ÚF)Úorderr´   .©r   rL   rx   r…   ©r*   r   r   r   rj  r¼   r   r   r   Ú
_3d_arraysÍ  s    zTestNpConcatenate._3d_arraysc              	   c   s6   |   t¡�}d V  W 5 Q R X |  d| t|jƒ¡ d S )Nz*input sizes over dimension %d do not match©rœ   r·   rŸ   r    r¡   )r*   r   r¢   r   r   r   Úassert_invalid_sizes_over_dimÕ  s
    
ÿz/TestNpConcatenate.assert_invalid_sizes_over_dimc              
      sš  t ‰tˆƒ‰ ‡ ‡‡fdd„‰‡fdd„}ˆ ¡ \}}}}}||||ƒ ||||ƒ ||j|j|jƒ ||j|j|jƒ ||j|j|jƒ ||j|j|jƒ ˆ|dd … ||d d d… dd� ˆ||d d …dd …f |dd� ˆ|||d d …d d …dd …f d	d� ||| tj¡|ƒ ˆ ¡  d
D ]2}ˆ d¡� ˆ |dd … |||ƒ W 5 Q R X �q"dD ]:}ˆ d¡�$ ˆ ||d d …dd …f ||ƒ W 5 Q R X �qZd S )Nc                    sB   |d| fD ]0}ˆ| |||d�}ˆ | |||d�}ˆ  ||¡ qd S )Néýÿÿÿr   ©r�  )r   r   r   r   Zaxr/   ro   r  r   r   Úcheckà  s    z(TestNpConcatenate.test_3d.<locals>.checkc                    s    t dƒD ]}ˆ | |||ƒ qd S )NrK   r¤   r   )r·  r   r   Úcheck_all_axesæ  s    z1TestNpConcatenate.test_3d.<locals>.check_all_axesrA   r´   r   r   rZ   )rA   rZ   rM  r´   )r   rZ   rµ  r´   )	r   r#   r²  ÚTr  r   rD   r›   r´  )r*   r¸  r   r   r   rj  r¼   r   r   )r-   r·  r+   r*   r   Útest_3dÜ  s,    " &$zTestNpConcatenate.test_3dc              	      sê   t ‰tˆƒ‰ ‡ ‡‡fdd„}ˆ ¡ \}}}}}||||ƒ ||||ƒ ||j|j|jƒ ||j|j|jƒ ||j|j|jƒ ||j|j|jƒ ||dd … ||d d d… ƒ ˆ ¡  ˆ d¡�" ˆ ||d d …dd …f |ƒ W 5 Q R X d S )Nc                    s(   ˆ| ||ƒ}ˆ | ||ƒ}ˆ  ||¡ d S r   r¶  )r   r   r   r/   ro   r  r   r   r·    s    z0TestNpConcatenate.test_3d_no_axis.<locals>.checkrA   r´   )r   r#   r²  r¹  r›   r´  )r*   r·  r   r   r   rj  r¼   r   r  r   Útest_3d_no_axis  s    z!TestNpConcatenate.test_3d_no_axisc              	   C   s  t }t|ƒ}t d¡}| d¡}| t dtjfg¡¡}t d¡}|  	¡ �}||||ƒ W 5 Q R X |  
dt|jƒ¡ |  	¡ �}||||ƒ W 5 Q R X |  
dt|jƒ¡ |  	¡ �}||||ƒ W 5 Q R X |  
dt|jƒ¡ |  	¡ �}||d|ƒ W 5 Q R X |  
d	t|jƒ¡ d S )
Né   )rK   rt   r™   r<   z8all the input arrays must have same number of dimensionsz(input arrays must have compatible dtypesz.zero-dimensional arrays cannot be concatenatedrA   ú%expecting a non-empty tuple of arrays)r   r#   r   rL   rx   r  r&   rë   r^  ÚassertTypingErrorrŸ   r    r¡   )r*   r+   r-   r   r   r   rj  r¢   r   r   r   Útest_typing_errors2  s0    



ÿ
ÿ
ÿ
z$TestNpConcatenate.test_typing_errorsN)r2   r3   r4   Ú__doc__r²  r¡  r¢  r´  rº  r»  r¿  r   r   r   r   r«  È  s   
2$r«  r   z"this Numpy doesn't have np.stack()c                   @   s†   e Zd ZdZdd„ Zej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 )ÚTestNpStackz
    Tests for np.stack().
    c                 C   s^   t  d¡ d¡}|d }|d jdd�}|d d d d… }|d dd d d…f }|||||fS r¬  r°  r±  r   r   r   r²  Y  s    zTestNpStack._3d_arraysc              	   c   s2   |   t¡�}d V  W 5 Q R X |  dt|jƒ¡ d S )Nz)all input arrays must have the same shaper³  )r*   r¢   r   r   r   Úassert_invalid_sizesa  s
    ÿz TestNpStack.assert_invalid_sizesc                 C   s8   ||Ž }||Ž }|   |j|j¡ |  | ¡ | ¡ ¡ d S r   )r$   rC   r�  Úflatten)r*   r+   r-   r.   r/   ro   r   r   r   Úcheck_stackh  s    zTestNpStack.check_stackc           
         s¨   ‡ ‡‡fdd„‰‡‡fdd„}ˆ  ¡ \}}}}}	||||ƒ ||||ƒ ||j|j|jƒ ||j|j|jƒ ||j|j|jƒ ||j|	j|jƒ ||| tj¡|ƒ d S )Nc                    s   ˆ  ˆˆ | ||f| ¡ d S r   )rÄ  ©r   r   r   r.   r  r   r   r·  s  s    z#TestNpStack.check_3d.<locals>.checkc                    s   ˆƒ D ]}ˆ | |||ƒ qd S r   r   rÅ  )r·  Úgenerate_starargsr   r   r¸  v  s    
z,TestNpStack.check_3d.<locals>.check_all_axes)r²  r¹  r  r   rD   )
r*   r+   r-   rÆ  r¸  r   r   r   rj  r¼   r   )r-   r·  rÆ  r+   r*   r   Úcheck_3dr  s    zTestNpStack.check_3dc           	   	   C   s^   |   ¡  |  ¡  |  ¡ \}}}}}|  ¡ �* t|ƒ ƒ}||d d… ||f|žŽ  W 5 Q R X d S )Nr´   )Úassert_no_memory_leakr›   r²  rÂ  Únext)	r*   r-   rÆ  r   r   r   rj  r¼   r.   r   r   r   Úcheck_runtime_errorsŒ  s    

z TestNpStack.check_runtime_errorsc                 C   s2   t }t|ƒ}dd„ }|  |||¡ |  ||¡ dS )z(
        stack(3d arrays, axis)
        c                  s   s&   t dƒD ]} | fV  d|  fV  qd S )NrK   rµ  r¤   r   r   r   r   rÆ  ž  s    z.TestNpStack.test_3d.<locals>.generate_starargsN)r   r#   rÇ  rÊ  ©r*   r+   r-   rÆ  r   r   r   rº  —  s
    zTestNpStack.test_3dc                 C   s2   t }t|ƒ}dd„ }|  |||¡ |  ||¡ dS )z"
        stack(3d arrays)
        c                   s   s
   dV  d S rÇ   r   r   r   r   r   rÆ  ­  s    z6TestNpStack.test_3d_no_axis.<locals>.generate_starargsN)r   r#   rÇ  rÊ  rË  r   r   r   r»  ¦  s
    zTestNpStack.test_3d_no_axisc                 C   sB   t }t|ƒ}t d¡}t d¡}t d¡}|  |||||f¡ dS )z"
        stack(0d arrays)
        r<   ù       €      ÀTN)r   r#   r   r^  rÄ  ©r*   r+   r-   r   r   r   r   r   r   rË   ³  s    


zTestNpStack.test_0dc                 C   sL   dd„ }|   |||¡ t d¡}t d¡}t d¡}|  |||||f¡ dS )zC
        3d and 0d tests for hstack(), vstack(), dstack().
        c                   s   s
   dV  d S rÇ   r   r   r   r   r   rÆ  Ä  s    z4TestNpStack.check_xxstack.<locals>.generate_starargsr<   rÌ  TN)rÇ  r   r^  rÄ  )r*   r+   r-   rÆ  r   r   r   r   r   r   Úcheck_xxstackÀ  s    


zTestNpStack.check_xxstackc                 C   s€   t }t|ƒ}|  ||¡ t d¡}t d¡d }|  |||||f¡ t d¡ d¡}t d¡ d¡d }|  |||||f¡ d S )Nrt   r  rs   rº   rš   )rZ   rS   r   )r   r#   rÎ  r   rL   rÄ  rx   ©r*   r+   r-   r   r   r   r   r   Útest_hstackÎ  s    
zTestNpStack.test_hstackc                 C   sz   t }t|ƒ}|  ||¡ t d¡}|d }|  |||||f¡ t d¡ d¡}t d¡ d¡d }|  |||||f¡ d S )Nrt   rs   r  rK  rš   )rS   rZ   r   )r   r#   rÎ  r   rL   rÄ  rx   rÏ  r   r   r   Útest_vstackÜ  s    
zTestNpStack.test_vstackc                 C   sn   t }t|ƒ}|  ||¡ t d¡}|d }|  |||||f¡ t d¡ d¡}|d }|  |||||f¡ d S )Nrt   rs   rY  r›  r   )r    r#   rÎ  r   rL   rÄ  rx   rÏ  r   r   r   Útest_dstackê  s    
zTestNpStack.test_dstackc              	   C   s®   t }t|ƒ}t d¡}|d }t d¡ d¡}|  |||||f¡ |  ¡  |  ¡  t d¡}|  	¡ � ||||fƒ W 5 Q R X | d¡}|  	¡ � ||||fƒ W 5 Q R X d S )NrS   rs   rY  ©rS   rK   r<   )rA   rA   rA   )
r!   r#   r   rL   rx   rÄ  rÈ  r›   r^  r¾  rÍ  r   r   r   Útest_column_stackø  s    




zTestNpStack.test_column_stackc              
   C   sb   t ttttfD ]N}t|ƒ}t d¡ d¡}|  	¡ �}||d|ƒ W 5 Q R X |  
dt|jƒ¡ qd S )NrY  rÓ  rA   r½  )r   r   r   r    r!   r#   r   rL   rx   r¾  rŸ   r    r¡   )r*   r+   r-   r   r¢   r   r   r   Útest_bad_arrays  s    
zTestNpStack.test_bad_arraysN)r2   r3   r4   rÀ  r²  r¡  r¢  rÂ  rÄ  rÇ  rÊ  rº  r»  rË   rÎ  rÐ  rÑ  rÒ  rÔ  rÕ  r   r   r   r   rÁ  S  s    

rÁ  c                     sx   dd„ ‰t ˆƒ‰ tj d¡‰tj d¡‰d‰‡‡‡‡fdd„} ‡ ‡‡‡fdd„}t | ¡}t |¡}t|ƒ t|ƒ d S )	Nc                 S   s    t |ƒD ]}||  } }q| |fS )z1Swap array x and y for t number of times
        r¤   r¥   r   r   r   r+     s    z%benchmark_refct_speed.<locals>.pyfuncr   i'  c                      s   ˆ ˆˆˆƒ d S r   r   r   )r+   r¦   r™   r`   r   r   Úbench_pyfunc&  s    z+benchmark_refct_speed.<locals>.bench_pyfuncc                      s   ˆ ˆˆˆƒ d S r   r   r   )r-   r¦   r™   r`   r   r   Úbench_cfunc)  s    z*benchmark_refct_speed.<locals>.bench_cfunc)r#   r   rw   r   Z	benchmarkÚprint)rÖ  r×  Zpython_timeZ
numba_timer   )r-   r+   r¦   r™   r`   r   Úbenchmark_refct_speed  s    

rÙ  Ú__main__)9r¡  rd   Únumpyr   rw   Úrer‡   rf   Znumba.core.errorsr   Znumbar   Z
numba.corer   r   r   Znumba.tests.supportr   r   r	   r
   r  r#   r   r   r   r   r   r   r    r!   r"   r5   r;   r±   r¾   r  r  Úobjectr  r"  r0  r1  r2  r:  rC  rX  ru  rƒ  r�  r«  Z
skipUnlessÚhasattrrÁ  rÙ  r2   Úmainr   r   r   r   Ú<module>   sf      PG q.\G!,H0   E
