o
    1ήcpj                     @   s   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 d dlmZmZmZmZ d dlmZmZmZmZmZmZm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Z G dd dZ!dd Z"G dd dZ#dd Z$dS )    N)arrayarange
atleast_1d
atleast_2d
atleast_3dblockvstackhstacknewaxisconcatenatestack)_block_dispatcher_block_setup_block_concatenate_block_slicing)assert_assert_raisesassert_array_equalassert_equalassert_raises_regexassert_warnsIS_PYPYc                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestAtleast1dc                 C   sB   t d}t d}t|t|g}t dgt dgg}t|| d S N      r   r   r   selfabresdesired r$   G/tmp/pip-target-vg8gfxp4/lib/python/numpy/core/tests/test_shape_base.pytest_0D_array   s
   zTestAtleast1d.test_0D_arrayc                 C   sN   t ddg}t ddg}t|t|g}t ddgt ddgg}t|| d S Nr   r      r   r   r$   r$   r%   test_1D_array   s
   zTestAtleast1d.test_1D_arrayc                 C   N   t ddgddgg}t ddgddgg}t|t|g}||g}t|| d S r'   r   r   r$   r$   r%   test_2D_array   
   zTestAtleast1d.test_2D_arrayc                 C   f   t ddgddgg}t ddgddgg}t ||g}t ||g}t|t|g}||g}t|| d S r'   r   r   r$   r$   r%   test_3D_array%      zTestAtleast1d.test_3D_arrayc                 C   sX   t tdjdk t tdjdk t tdjdk t tddgddggjdk d	S )
zB Test to make sure equivalent Travis O's r1array function
        r(   r                 @      @r         r   r   N)r   r   shaper   r$   r$   r%   test_r1array.   s   "zTestAtleast1d.test_r1arrayN)__name__
__module____qualname__r&   r)   r+   r.   r8   r$   r$   r$   r%   r          	r   c                   @   r   )TestAtleast2dc                 C   sF   t d}t d}t|t|g}t dggt dggg}t|| d S r   r   r   r   r   r$   r$   r%   r&   8   s
   zTestAtleast2d.test_0D_arrayc                 C   sR   t ddg}t ddg}t|t|g}t ddggt ddggg}t|| d S r'   r>   r   r$   r$   r%   r)   ?   s
   zTestAtleast2d.test_1D_arrayc                 C   r*   r'   r>   r   r$   r$   r%   r+   F   r,   zTestAtleast2d.test_2D_arrayc                 C   r-   r'   r>   r   r$   r$   r%   r.   M   r/   zTestAtleast2d.test_3D_arrayc                 C   sZ   t tdjdk t tddgjdk t tddgddggddgddgggjd	k d
S )zB Test to make sure equivalent Travis O's r2array function
        r(   r   r   r1   r   r   r   r3   r4   r   r   r   r   N)r   r   r6   r7   r$   r$   r%   test_r2arrayV   s   2zTestAtleast2d.test_r2arrayN)r9   r:   r;   r&   r)   r+   r.   rB   r$   r$   r$   r%   r=   7   r<   r=   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestAtleast3dc                 C   sJ   t d}t d}t|t|g}t dgggt dgggg}t|| d S r   r   r   r   r   r$   r$   r%   r&   _   s
   zTestAtleast3d.test_0D_arrayc                 C   sZ   t ddg}t ddg}t|t|g}t dgdgggt dgdgggg}t|| d S r'   rD   r   r$   r$   r%   r)   f   s
   $zTestAtleast3d.test_1D_arrayc                 C   sr   t ddgddgg}t ddgddgg}t|t|g}|d d d d tf |d d d d tf g}t|| d S r'   )r   r   r
   r   r   r$   r$   r%   r+   m   s
   ,zTestAtleast3d.test_2D_arrayc                 C   r-   r'   rD   r   r$   r$   r%   r.   t   r/   zTestAtleast3d.test_3D_arrayN)r9   r:   r;   r&   r)   r+   r.   r$   r$   r$   r%   rC   ^   s
    rC   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 )
TestHstackc                 C      t ttd d S Nr   )r   	TypeErrorr	   r7   r$   r$   r%   test_non_iterable      zTestHstack.test_non_iterablec                 C   rF   Nr$   )r   
ValueErrorr	   r7   r$   r$   r%   test_empty_input   rJ   zTestHstack.test_empty_inputc                 C   s6   t d}t d}t||g}t ddg}t|| d S r   r   r	   r   r   r$   r$   r%   r&      s
   zTestHstack.test_0D_arrayc                 C   s:   t dg}t dg}t||g}t ddg}t|| d S r   rN   r   r$   r$   r%   r)      s
   

zTestHstack.test_1D_arrayc                 C   sN   t dgdgg}t dgdgg}t||g}t ddgddgg}t|| d S r   rN   r   r$   r$   r%   r+      s
   zTestHstack.test_2D_arrayc                 C   s   t t tdd tdD  W d    n1 sw   Y  t t ttdd td W d    d S 1 s;w   Y  d S )Nc                 s       | ]}t d V  qdS r(   Nnpr   .0_r$   r$   r%   	<genexpr>       z,TestHstack.test_generator.<locals>.<genexpr>r   c                 S   s   | S Nr$   )xr$   r$   r%   <lambda>   s    z+TestHstack.test_generator.<locals>.<lambda>)r(   r   )r   FutureWarningr	   rangemaprR   onesr7   r$   r$   r%   test_generator   s   

"zTestHstack.test_generatorN)	r9   r:   r;   rI   rM   r&   r)   r+   r_   r$   r$   r$   r%   rE   ~   s    rE   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 )
TestVstackc                 C   rF   rG   )r   rH   r   r7   r$   r$   r%   rI      rJ   zTestVstack.test_non_iterablec                 C   rF   rK   )r   rL   r   r7   r$   r$   r%   rM      rJ   zTestVstack.test_empty_inputc                 C   s:   t d}t d}t||g}t dgdgg}t|| d S r   r   r   r   r   r$   r$   r%   r&      s
   zTestVstack.test_0D_arrayc                 C   s>   t dg}t dg}t||g}t dgdgg}t|| d S r   ra   r   r$   r$   r%   r)      s
   

zTestVstack.test_1D_arrayc                 C   sR   t dgdgg}t dgdgg}t||g}t dgdgdgdgg}t|| d S r   ra   r   r$   r$   r%   r+      s
   zTestVstack.test_2D_arrayc                 C   sF   t ddg}t ddg}t||g}t ddgddgg}t|| d S r   ra   r   r$   r$   r%   test_2D_array2   s
   zTestVstack.test_2D_array2c                 C   sD   t t tdd tdD  W d    d S 1 sw   Y  d S )Nc                 s   rO   rP   rQ   rS   r$   r$   r%   rV      rW   z,TestVstack.test_generator.<locals>.<genexpr>r   )r   r[   r   r\   r7   r$   r$   r%   r_      s   
"zTestVstack.test_generatorN)
r9   r:   r;   rI   rM   r&   r)   r+   rb   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ej	j
edddd Zdd Zej	dddgej	dg dej	dg ddd Zej	dddgej	dg dej	ddgfdgdgfdgdgd gfgd!d" Zej	dddgd#d$ Zej	dddgd%d& ZdS )'TestConcatenatec                 C   s6   t d}t |g}d|d< |d |d ksJ d S Nr(   r   )r   r   )rR   eyer   r   r    r!   r$   r$   r%   test_returns_copy   s   
z!TestConcatenate.test_returns_copyc                 C   s\  dD ]-}t d| }t j||fdd tt jt j||f|d tt jt j||f|d  d qtttd tttt df ttdt jt dt df t d}t d	}t	t
d
}t
d
D ]A}t j||f|d d ttd|t j||f|d d ttt j||f|d d t |dd}t |dd}||d qdtttd d S )Nr   r   r(   r0   r   axisr   )r   zall the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension\(s\) and the array at index 1 has 2 dimension\(s\)r?   r   r   r(   r(   zall the input array dimensions for the concatenation axis must match exactly, but along dimension {}, the array at index 0 has size 1 and the array at index 1 has size 2r   r$   )rR   r^   r   r   	AxisErrorrL   r   r   zeroslistr\   formatmoveaxisappendpop)r   ndimr    r!   rj   ir$   r$   r%   test_exceptions   s8    

zTestConcatenate.test_exceptionsc                 C   s
  t jdt jdd}ttd}dg}t j||fd d}t|j|j t|j	d t j||fd d}t|j
|j
t|  t|j|j t j|||fd dd	}tg d
}t|| t |j
t| }t j||fd d}t j||fd |d}t||u  t|| d S )Nr3   dtyper5   r(   rY   ri   r   U)rj   rx   )z0.0z1.0z2.0z3.0012rY   )rj   out)rR   r   float64reshapero   r\   r   r   rx   rt   sizelenr   r   rn   r   )r   r    r!   crdr}   routr$   r$   r%   test_concatenate_axis_None   s"   
z*TestConcatenate.test_concatenate_axis_Nonec                 C   s<   t dd}t |d }t|| t |d}t|| d S )Nr   d   )rR   r   r   r   )r   rY   r   r$   r$   r%    test_large_concatenate_axis_None  s
   
z0TestConcatenate.test_large_concatenate_axis_Nonec                 C   s4  t td}tt|f| ttt|f| ttt|f| t td}tt||f||  ttt||f||  ttt||f||  tt||fd||  tt||fd||  tg dg dg}tg dg}tg dg dg dg}tt||f| tt||fd| tt|j|jfd|j tt|j|jfd|j ttt|j|jfd t	d	
d
}|dd df }|dddf }|ddd f }tt|||fd| tt|||fd| tt|j|j|jfd|j | }	t|||fd|	d}
t|	|
u  t||
 d S )Nr3   r(   r   rl   )
         )         r   r   r   r   *   )r   r(      .   r   r}   )ro   r\   r   r   tupler   Tr   rL   r   r   copyr   r   )r   r4r3a23a13r"   a0a1a2r}   r   r$   r$   r%   test_concatenate  s:   z TestConcatenate.test_concatenatez7PYPY handles sq_concat, nb_add differently than cpython)reasonc                 C   s   dd l }tddg}tddg}ddg}tg d}tt|j|| tt|j|| tt|j|| tt|j|d tt|jd| d S )Nr   r   r   r(   r3   )r   r   r(   r3   )operatorr   r   rH   concat)r   r   r    r!   nr"   r$   r$   r%   test_operator_concatC  s   z$TestConcatenate.test_operator_concatc                 C   s   t ddg}t ddg}ttt||ftdd ttt||ftdd ttt||ftdd t||ftdd d S )	Nr   r   r(   r3   r4   r   )r3   r   )r   r3   )r   r   rL   r   rR   emptyrf   r$   r$   r%   test_bad_out_shapeP  s   z"TestConcatenate.test_bad_out_shaperj   Nr   	out_dtype)c8f4f8z>f8i8S4casting)noequivsafe	same_kindunsafec                 C   s2  t jd|d}tddgtddgf}t j|d ||dsWtt t||||d	 W d    n1 s4w   Y  tt t||j||d
 W d    n1 sQw   Y  n#t||||d	}t||j||d
}||u snJ t|| |j|kszJ tt t||||d W d    d S 1 sw   Y  d S )Nr3   rw   g?g@gffffff
@g@r   )r   )r}   rj   r   )rx   rj   r   )r}   rx   rj   )	rR   r   r   can_castr   rH   r   rx   r   )r   rj   r   r   r}   	to_concatres_out	res_dtyper$   r$   r%   test_out_and_dtypeY  s0   



"z"TestConcatenate.test_out_and_dtype	string_dt)Sry   S0U0arrsg        r   string      ?c                 C   s2   t j|||dd}|jt d|jksJ d S )Nr   )rj   rx   r   r   )rR   r   rx   r   astype)r   r   r   rj   r"   r$   r$   r%   test_dtype_with_promotiont  s    z)TestConcatenate.test_dtype_with_promotionc                 C   s   t t tjd gdgfd|d W d    n1 sw   Y  t t tjd gdgfd|d W d    d S 1 s>w   Y  d S )Nr   r   rx   rj   ry   pytestraisesrH   rR   r   r   rj   r$   r$   r%   "test_string_dtype_does_not_inspect  s   "z2TestConcatenate.test_string_dtype_does_not_inspectc                 C   sL   t jtdd tjdgdgfd|d W d    d S 1 sw   Y  d S )Nz.*subarray dtype)matchr   z(2,)ir   r   r   r$   r$   r%   test_subarray_error  s   "z#TestConcatenate.test_subarray_error)r9   r:   r;   rg   rv   r   r   r   r   markskipifr   r   r   parametrizer   r   r   r   r$   r$   r$   r%   rc      s2    )*
	 
rc   c                  C   s  t ttd dtdtdtdgtdtdtdgfD ]} tt| g d q#tg d}tg d}tg dg dg}tt||f| ttj||fdd|j ttt||g| ttt||g| dd t	d	D }g d
}g d}t
||D ]\}}tt||j| qttjdt|dd ttjdt|dd dd t	d	D }g d}g d}t
||D ]\}}tt||j| qttg g g gjdk ttg g g gddjdk t|}	tj||f|	d t|	| ttdtg  ttdtdtdg ttdttddg ttdttddgdd ttdttdtdgdd ttdttdtdg tt tdd t	dD }
W d    n	1 siw   Y  t|
tg d d S )Nr   rh   r   r(   )r3   r4   r   ri   c                 S   s   g | ]}t jd qS )r(   rR   randomrandnrS   r$   r$   r%   
<listcomp>  s    ztest_stack.<locals>.<listcomp>r   )r   r   rl   )r   r(   r(   r   r   r   zout of boundsc                 S   s   g | ]	}t jd dqS r(   r3   r   rS   r$   r$   r%   r     s    )r   r   r   rl   r   r   )r   r(   r3   r(   r   r3   r(   r3   r   r   r   r   )r(   r   )r   r(   r   zneed at least one arrayzmust have the same shaper(   r(   c                 s   s    | ]}|V  qd S rX   r$   )rT   rY   r$   r$   r%   rV     s    ztest_stack.<locals>.<genexpr>r   )r   rH   r   rR   int32r   r   r   ro   r\   zipr   r6   r   rm   r   
zeros_likerL   r   rn   r   r[   )input_r    r!   r1arraysaxesexpected_shapesrj   expected_shaper}   resultr$   r$   r%   
test_stack  sd   


r   c                   @   s   e Zd Zejg d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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 ),	TestBlock)r   force_concatenateforce_slicing)paramsc                 C   sB   dd }dd }|j dkr|S |j dkr|S |j dkrtS td)	Nc                 S      t | \} }}}t| ||S rX   )r   r   r   	list_ndimresult_ndimrU   r$   r$   r%   _block_force_concatenate     z1TestBlock.block.<locals>._block_force_concatenatec                 S   r   rX   )r   r   r   r$   r$   r%   _block_force_slicing  r   z-TestBlock.block.<locals>._block_force_slicingr   r   r   z7Unknown blocking request. There is a typo in the tests.)paramr   rL   )r   requestr   r   r$   r$   r%   r     s   	


zTestBlock.blockc                 C   s2   t d}||}d|d< |d |d ksJ d S rd   )rR   re   )r   r   r    r!   r$   r$   r%   rg     s   
zTestBlock.test_returns_copyc                 C   s   t dg\}}}}|dksJ t dgg\}}}}|dksJ t ddgg\}}}}|dks0J t dgdgg\}}}}|dksBJ t ddgddgg\}}}}|dksVJ d S )Nr   r   r(   r3   )r   )r   r   rU   
total_sizer$   r$   r%   test_block_total_size_estimate  s   z(TestBlock.test_block_total_size_estimatec                 C   sB   t d}d| }t g dg dg}|||g}t|| d S )Nr5   r   )r   r   r   r   rR   r^   r   r   )r   r   a_2db_2dr#   r   r$   r$   r%   test_block_simple_row_wise  s   

z$TestBlock.test_block_simple_row_wisec                 C   sR   t d}d| }t ddgddgddgddgg}||g|gg}t|| d S Nr5   r   r   r   )r   r   r   r   expectedr   r$   r$   r%   test_block_simple_column_wise  s   

z'TestBlock.test_block_simple_column_wisec                 C   sD   t g d}t g d}t g d}|||g}t|| d S Nrh   r   r(   r3   )r   r   r(   r   r(   r3   rR   r   r   r   r   r    r!   r   r   r$   r$   r%   "test_block_with_1d_arrays_row_wise	  s
   z,TestBlock.test_block_with_1d_arrays_row_wisec                 C   sT   t g d}t g d}t g dg dg}|||g||gg}t|| d S r   r   r   r$   r$   r%   'test_block_with_1d_arrays_multiple_rows  s   
z1TestBlock.test_block_with_1d_arrays_multiple_rowsc                 C   sP   t g d}t g d}t g dg dg}||g|gg}t|| d S )Nrh   r   r   )r   r   a_1db_1dr   r   r$   r$   r%   %test_block_with_1d_arrays_column_wise  s   
z/TestBlock.test_block_with_1d_arrays_column_wisec                 C   sR   t d}t ddg}||g|gg}t ddgddgddgg}t|| d S r   r   )r   r   r   r   r   r   r$   r$   r%   test_block_mixed_1d_and_2d"  s   

z$TestBlock.test_block_mixed_1d_and_2dc              	   C   s   t g dg}t g dg}t g dg}t g d}t d}t g d}t d}t g dg dg dg d	g d
g d
g}	|||g|g|g||g|gg}
t|
|	 d S )Nr   r   r   rA   )r(   r(   r(   r(   r(   r(   )r3   r3   r3   r3   r3   r3   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   rR   r   rn   r   )r   r   one_2dtwo_2dthree_2dfour_1dfive_0dsix_1dzero_2dr   r   r$   r$   r%   test_block_complicated+  s*   


z TestBlock.test_block_complicatedc              	   C   s   t g d}t g dg dg dg}t g d}t g d}t d}t g d}t d}|||g|g|gg|g||g|gg}	t g dg d	g d
g dg dg dg}
t|	|
 d S )Nr  rA   r(   r(   r(   )r3   r3   r3   r4   r  r  r  )r(   r(   r(   r   r   r   )r3   r3   r3   r   r   r   r  r  r	  )r   r   onetwothreefourfivesixzeror   r   r$   r$   r%   test_nestedC  s4   


zTestBlock.test_nestedc                 C   sZ  t dtd }t dtd }t dtd }t dtd }t d	td
 }t dtd }t dtd }t dtd }	|||g||gg||g||	ggg}
tg dg dg dg dg dgg dg dg dg dg dgg dg dg dg dg dgg dg dg dg dg dgg dg dg dg dg dgg}t|
| d S )NrA   r   )r(   r   r   r   )r   r(   r   r(   rk   r3   )r   r(   r(   r4   )r(   r   r(   r   )r(   r(   r   r   r     )r   r   r3   r3   r3   )r(   r(   r4   r4   r4   )r   r   r   r   r   )r   r   r  r  r  )rR   r^   intr   r   )r   r   a000a100a010a001a011a101a110a111r   r   r$   r$   r%   test_3da  s`   
zTestBlock.test_3dc                 C   sp   t ddg}t d}tt|||g tt|||g t dt dgt dt dgg}tt|| d S )Nr   r   )r   r(   r5   )rR   r   re   r   rL   r^   )r   r   r    r!   to_blockr$   r$   r%    test_block_with_mismatched_shape  s   
z*TestBlock.test_block_with_mismatched_shapec                 C   s2   t |dtd t |tdtd d S )Nr   r(   )r   rR   r   re   r   r   r$   r$   r%   test_no_lists  s   zTestBlock.test_no_listsc                 C   sx   d}t t||ddgg t t||dg g t t||dgdg t t||g dg t t||dgdggddggdgg d S )Nzdepths are mismatchedr   r   r(   r3   r4   r   rL   )r   r   msgr$   r$   r%   test_invalid_nesting  s   

zTestBlock.test_invalid_nestingc                 C   s6   t td|g  t td|g g t td|dgg g d S )Nr   r   r*  r(  r$   r$   r%   test_empty_lists  s   zTestBlock.test_empty_listsc                 C   s0   t td|ddgddgf t td|ddg d S )Nr   r   r   r(   r3   r@   r   )r   rH   r(  r$   r$   r%   
test_tuple  s   zTestBlock.test_tuplec                 C   sN   d}dt d }dt d }||||g}t g dgg}t|| d S )Nr   r   r@   r(   )r   r   r(   )r          @r/  r2   r2   r2   r   r   r   r    r!   r   r   r   r$   r$   r%   test_different_ndims  s   zTestBlock.test_different_ndimsc                 C   s^   d}dt d }dt d }|||g|gg}t g dg dg dgg}t|| d S )Nr   r   r@   r(   rh   )r   r/  r/  )r2   r2   r2   r   r0  r$   r$   r%   test_different_ndims_depths  s   
z%TestBlock.test_different_ndims_depthsc                 C   s   t jddd}t jddd}||g||gg||g||ggg}||g||gg||g||ggg}||jd s7J ||jd s@J t jddd}t jddd}||g||gg}||g||gg}||jd sgJ ||jd spJ d S )Nr  C)orderFC_CONTIGUOUSF_CONTIGUOUSr   )rR   rn   flags)r   r   arr_carr_fb_cb_fr$   r$   r%   test_block_memory_order  s8   z!TestBlock.test_block_memory_orderN)r9   r:   r;   r   fixturer   rg   r   r   r   r   r   r  r  r  r  r%  r'  r)  r,  r-  r.  r1  r2  r=  r$   r$   r$   r%   r     s,    

		7	
r   c                  C   s   G dd d} |  }|  }|  }t tt||g t tt|g|g t tt||g||g t tt|g||ggg|||g t tt||f||fg d S )Nc                   @   s   e Zd ZdS )z(test_block_dispatcher.<locals>.ArrayLikeN)r9   r:   r;   r$   r$   r$   r%   	ArrayLike  s    r?  )r   ro   r   )r?  r    r!   r   r$   r$   r%   test_block_dispatcher  s   $ r@  )%r   numpyrR   
numpy.corer   r   r   r   r   r   r   r	   r
   r   r   numpy.core.shape_baser   r   r   r   numpy.testingr   r   r   r   r   r   r   r   r=   rC   rE   r`   rc   r   r   r@  r$   r$   r$   r%   <module>   s"    4$(' #( D:  +