U
    O8c O                     @   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
 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 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G dd dZ dd Z!dS )    N)assert_assert_equalassert_array_equalassert_almost_equalassert_array_almost_equalassert_raisesassert_raises_regex)mgridogridndenumeratefill_diagonaldiag_indicesdiag_indices_from	index_expndindexr_s_ix_c                   @   sh   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	e
jddddgdd Zdd ZdS )TestRavelUnravelIndexc              	   C   s  t tddd t tjdddd tt tjddd W 5 Q R X tt tjddd W 5 Q R X tt tjddd	 W 5 Q R X tt tjddd
 W 5 Q R X t tddd t tddd t tddd tttjdd tttjdd tttjdd tttjdd tttjdd tttjdd tttjdd tttjdd t tdddddg t tdddgdd tdddgdddgg}t t|ddddg t tj|dddd dd!g t tj|d"d#d$dd%d&g t tj|d'd(d$d)d!d!g t td*d+d, t ttdddgddddgdddgg t tjtd dd!gddddddgdddgg t td,d+ddddg d S )-N   )r   r      r   )indicesshape)r   hape)r      )   ^   )Zims)Zdims)r   B   g      ?   )r   )r   r   )r   r!   )r   r   )皙?g        .   )r          r   r$   r%      )   r%      )   %   Forder      )r    r%   clipmode      r    r    )r0   wrap   )r$   r   r    r   )r%   r'      	   iU  )r   npunravel_indexr   	TypeErrorravel_multi_index
ValueErrorarray)selfarr rB   E/tmp/pip-unpacked-wheel-fd_gsd75/numpy/lib/tests/test_index_tricks.py
test_basic   sh    



   z TestRavelUnravelIndex.test_basicc                 C   s  d}d}t t|tjg d t t|tjdd t t|tjtg d tttjg tddg g g g t t|tjg g fd t t|tjg dgfd t t|tjtg tg fd tttjg tdtjg tdfdg  tttjg g gtddg  d S )	Nz9indices must be integral: the provided empty sequence waszonly int indices permitted)
   r$   r&   rB   dtyperE   r$   abc)r&   r$   )r   r<   r:   r;   r?   r   intr=   )r@   Zmsg1Zmsg2rB   rB   rC   test_empty_indicesF   s>    
  z(TestRavelUnravelIndex.test_empty_indicesc                 C   s   t jt jkrPddgddgddgddgdd	gddgd
dgf}tt |dddg ttt jdd d
gd
gf}t t jj	d }tt ||dfd
g ttt j||d df tt j||dfddd
g ttt j||d dfdd d S )Nr      r$   r&   u   r4   r   iK	  i  r   )r)   r'   x   $   i
  r8   r%   l   z l   nm )l    l       r+   r,   )
r:   intpint64r   r=   r   r>   r;   Ziinfomax)r@   rA   Z	dummy_arrZhalf_maxrB   rB   rC   test_big_indicesZ   s@      
   
   
 z&TestRavelUnravelIndex.test_big_indicesc              
   C   s  t jt jt jt jt jt jfD ]v}t jddddddgddddddgg|d}d}d	|d  |d  }tt 	||| t|t 
|| |d d
|d   }tt j	||dd| t|t j
||dd t jddddddgddddddgdddddd
gg|d}d}dd	|d  |d   |d  }tt 	||| t|t 
|| |d d
|d d	|d     }tt j	||dd| t|t j
||dd qd S )Nr   r   r   r$   r    r%   rF   )r&   r8   r8   r&   r+   r,   r9   )r&   r8   rE   rE   )r:   Zint16Zuint16Zint32Zuint32rQ   Zuint64r?   r   r=   r;   )r@   rG   Zcoordsr   ZuncoordsrB   rB   rC   test_dtypesr   sB      
  ,   z!TestRavelUnravelIndex.test_dtypesc                 C   sx   t tjddddgdddtddddgd t tjddddgdd	dtddd
dgd tttjddddgd d S )Nr&   r   r   r   )r    r$   r'   r7   r6   r1   r%   )r6   raiser0   rU   r   )r   r:   r=   r   r>   r@   rB   rB   rC   test_clipmodes   s      
 z$TestRavelUnravelIndex.test_clipmodesc                 C   s2   t dddgd\}}t|jj t|jj d S )Nr   r   r$   )r    r&   )r:   r;   r   flagsZ	writeable)r@   xyrB   rB   rC   test_writeability   s    z'TestRavelUnravelIndex.test_writeabilityc                 C   sB   t dd}t|d ttdt jdgd ttdt jdgd d S )Nr   rB   z0d arrayzout of boundsr   )r:   r;   r   r   r>   r@   rY   rB   rB   rC   test_0d   s    
    zTestRavelUnravelIndex.test_0dr2   r0   r6   rU   c              	   C   s^   t jt jdt jdd|d}|jdks*ttt" t jt jdt jdd|d W 5 Q R X d S )N)r$   r   rF   r   r   r   r1   r   )r$   r   )r:   r=   zerosrP   r   AssertionErrorr   r>   )r@   r2   resrB   rB   rC   test_empty_array_ravel   s      
  z,TestRavelUnravelIndex.test_empty_array_ravelc              	   C   sd   t t jdt jdd}t|dks(ttdd |D s>ttt t dgd W 5 Q R X d S )Nr   rF   r^   r$   c                 s   s   | ]}|j d kV  qdS )r_   N)r   ).0arB   rB   rC   	<genexpr>   s     zATestRavelUnravelIndex.test_empty_array_unravel.<locals>.<genexpr>r   )	r:   r;   r`   rP   lenra   allr   r>   )r@   rb   rB   rB   rC   test_empty_array_unravel   s
    
z.TestRavelUnravelIndex.test_empty_array_unravelN)__name__
__module____qualname__rD   rK   rS   rT   rW   r[   r]   pytestmarkparametrizerc   ri   rB   rB   rB   rC   r      s   7	
	r   c                   @   s^   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dgdd Z
dd Zdd Zdd ZdS )TestGridc                 C   s   t ddd }t ddd }t|jdk t|jdk t|d dk t|d d t|d dk t|d |d  dd t|d |d d	 d t|d |d  d
d d S )Nr   r                 $@r"   )rE   )   r      ggfffff?gqq?)r	   r   r   r   )r@   re   brB   rB   rC   rD      s    zTestGrid.test_basicc                 C   s8   t jdddd\}}t|d t|tddd d d S )Nr   rE   T)Zretstepg9/?y              I@r/   )r:   Zlinspacer   r   r	   )r@   rZ   strB   rB   rC   test_linspace_equivalence   s    
z"TestGrid.test_linspace_equivalencec                 C   sV  t ddddddf }t ddddddf }t|jdk t|jd	k t|d
 d
d d f tdd  t|d d d d
f dtdd  t|d
 dd d f tddd t|d d d df dtdd d t|d
dd d f |d
d
d d f  dtdd d t|dd d df |dd d d
f  dtdd d d S )Nr   r   rq   r   r"   g?)r   rE   rE   )r   rr   rr   r   rE   drs   rr   )r	   r   r   r   r:   onesr   )r@   crx   rB   rB   rC   test_nd   s     $&$($ $ zTestGrid.test_ndc                 C   s\   t ddddddf }tddddddf }tj| }t||D ]\}}t|| qDd S )Nr   r   rq   rw   r   )r	   r
   r:   Zbroadcast_arrayszipr   )r@   Z	grid_fullZgrid_sparseZgrid_broadcastfrt   rB   rB   rC   test_sparse   s
    
zTestGrid.test_sparsezstart, stop, step, expected)NrE   rq   )   rE   )irr   N)i     c                 C   sJ   t ||||||f }t ||| }t|j|d  t|j|d  d S )Nr   r   )r	   r   size)r@   startstopstepexpectedZgridZ
grid_smallrB   rB   rC   test_mgrid_size_none_handling   s    	z&TestGrid.test_mgrid_size_none_handlingc                 C   s   t dddf }t tdtdtdf }t|jtjk t|| t ddd }t tdtdtd }t|jtjk t|| d S )Nr"   Q?)r	   r:   float32r   rG   float64r   )r@   grid64Zgrid32rB   rB   rC   test_accepts_npfloating   s    "
 z TestGrid.test_accepts_npfloatingc                 C   s   t dddf }t tdtdtdf }t|jtjk t|| t dtdd }t dtddf }t|j|j  kotjkn   t||d  t ddd }t tdtdtd }t|jtjk t|| d S )Nr"   r   r   r   y        333333@)r	   r:   
longdoubler   rG   r   r   )r@   r   Zgrid128Z
grid128c_aZ
grid128c_brB   rB   rC   test_accepts_longdouble  s(      
"  z TestGrid.test_accepts_longdoublec                 C   s   t tdddf tddtdf  t tddd tddtd  tddd }tdddf d }t|j|j  kotjkn   t|| tddtd }tddtdf d }t|j|j  kotj	kn   t|| d S )Nr"   g333333?y              @y        ffffff
@r   )
r   r	   r:   	complex64r   rG   r   r   Zclongdoubler   )r@   Zgrid64_aZgrid64_bZ	grid128_aZ	grid128_brB   rB   rC   test_accepts_npcomplexfloating  s       "
"z'TestGrid.test_accepts_npcomplexfloatingN)rj   rk   rl   rD   rv   r{   r~   rm   rn   ro   r   r   r   r   rB   rB   rB   rC   rp      s   	
rp   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 )TestConcatenatorc                 C   s`   t td tddddddg td}t|dd|f }t |ddddddddddddg d S )	N)r   r   r$   r    r&   r%   r   r   r$   r    r&   r%   r   )r   r   r:   r?   ry   )r@   rt   rz   rB   rB   rC   test_1d/  s     
zTestConcatenator.test_1dc                 C   s"   t dddf }t|jdk d S )Ng333333$@r   rE   f8)r   r   rG   r@   grB   rB   rC   test_mixed_type5  s    z TestConcatenator.test_mixed_typec                 C   s6   t dtdgtdddgdf }t|jdk d S )Ng333333$r   r   r$   r    g      $@r   )r   r:   r?   r   rG   r   rB   rB   rC   test_more_mixed_type9  s    $z%TestConcatenator.test_more_mixed_typec                 C   sB   t ddd }t|jdk t ddtd }t|jdk d S )Nr   rO   y              Y@)d   )r   r   r   r:   r   r   rB   rB   rC   test_complex_step=  s    z"TestConcatenator.test_complex_stepc                 C   s   t jdd}t jdd}td||f }t|jdk t|d d d df | t|d d dd f | t||f }t|jdk t|d dd d f | t|dd d d f | d S )Nr&   1)r&   rE   )rE   r&   )r:   randomrandr   r   r   r   )r@   rt   rz   rx   rB   rB   rC   test_2dF  s    zTestConcatenator.test_2dc                 C   sp   t tdtddf dddg t tdddgtdf ddddg t ttddddgf ddddg d S )Nr   r   r   r$   )r   r   r:   r?   rV   rB   rB   rC   r]   R  s     &zTestConcatenator.test_0dN)	rj   rk   rl   r   r   r   r   r   r]   rB   rB   rB   rC   r   .  s   	r   c                   @   s   e Zd Zdd ZdS )TestNdenumeratec                 C   s4   t ddgddgg}ttt|ddddg d S )	Nr   r   r$   r    ))r   r   r   ))r   r   r   )r   r$   ))r   r   r    )r:   r?   r   listr   r@   re   rB   rB   rC   rD   Y  s    
zTestNdenumerate.test_basicN)rj   rk   rl   rD   rB   rB   rB   rC   r   X  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestIndexExpressionc                 C   sJ   t d}t|d d |td d   t|d d |td d   d S )Nr   r   )r:   aranger   r   r   r   rB   rB   rC   test_regression_1`  s    
z%TestIndexExpression.test_regression_1c                 C   s   t jddd}t|d d d dddgf |td d d dddgf   t|d d d dddgf |td d d dddgf   d S )Nr    r&   r%   r$   r   r   )r:   r   r   r   r   r   r   rB   rB   rC   test_simple_1f  s    :z!TestIndexExpression.test_simple_1N)rj   rk   rl   r   r   rB   rB   rB   rC   r   _  s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestIx_c                 C   sb   t td\}t|jt j t g \}t|jt j t t jg t jd\}t|jt j d S )Nr   rF   )r:   r   ranger   rG   rP   r?   r   r   rB   rB   rC   r   n  s    zTestIx_.test_regression_1c                    s   d}t tjfD ]| tj fdd|D  }tt||D ]P\\}}t|j | tt	fddt|jD  tt
|jtj q8qd S )N)r    r&   r$   r   c                    s   g | ]} |qS rB   rB   )rd   sz)funcrB   rC   
<listcomp>~  s     z0TestIx_.test_shape_and_dtype.<locals>.<listcomp>c                 3   s"   | ]\}}| kr|d kV  qdS )r   NrB   )rd   jsh)krB   rC   rf     s      z/TestIx_.test_shape_and_dtype.<locals>.<genexpr>)r   r:   r   r   	enumerater|   r   r   r   rh   Z
issubdtyperG   integer)r@   ZsizesZarraysre   r   rB   )r   r   rC   test_shape_and_dtypez  s     zTestIx_.test_shape_and_dtypec                 C   s0   ddddg}t |\}tt |d | d S )NTFr   )r:   Znonzeror   r   )r@   Zbool_aZint_arB   rB   rC   	test_bool  s    zTestIx_.test_boolc                 C   s&   dddgdddgg}t ttj| d S )Nr   r   r$   r    r&   r%   )r   r>   r:   r   )r@   Zidx2drB   rB   rC   test_1d_only  s    zTestIx_.test_1d_onlyc                 C   sR   d}t |}t||}t|d j|df t|d jd|f t|j|f d S )Nr&   r   r   )r:   r   r   r   r   )r@   Zlength_of_vectorrY   outrB   rB   rC   test_repeated_input  s    

zTestIx_.test_repeated_inputN)rj   rk   rl   r   r   r   r   r   rB   rB   rB   rC   r   m  s
   
r   c               
   C   sN   t jt dddggddt dddggf } t| ddddddddgg d S )Nr   r   r$   r   r    r&   r%   )r:   Zc_r?   r   )re   rB   rB   rC   test_c_  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 )TestFillDiagonalc              	   C   sB   t dt}t|d t|t dddgdddgdddgg d S )N)r$   r$   r&   r   r:   r`   rJ   r   r   r?   r   rB   rB   rC   rD     s    
 zTestFillDiagonal.test_basicc                 C   sz   t dt}t|d t|t dddgdddgdddgdddgdddgdddgdddgdddgdddgdddgg
 d S )NrH   r&   r   r   r   rB   rB   rC   test_tall_matrix  s     
 z!TestFillDiagonal.test_tall_matrixc                 C   s|   t dt}t|dd t|t dddgdddgdddgdddgdddgdddgdddgdddgdddgdddgg
 d S )NrH   r&   Tr   r   r   rB   rB   rC   test_tall_matrix_wrap  s      z&TestFillDiagonal.test_tall_matrix_wrapc                 C   sl   t dt}t|d t|t ddddddddddg
ddddddddddg
ddddddddddg
g d S )N)r$   rE   r&   r   r   r   rB   rB   rC   test_wide_matrix  s    
 z!TestFillDiagonal.test_wide_matrixc                 C   sF   t dt}t|d t dddg}tt |dk||||f d S )N)r$   r$   r$   r$   r    r   r   r   )r:   r`   rJ   r   r?   r   where)r@   re   irB   rB   rC   test_operate_4d_array  s    
z&TestFillDiagonal.test_operate_4d_arrayc              	   C   s0   t dt}ttd t|d W 5 Q R X d S )Nr$   at least 2-dr&   r:   r`   rJ   r   r>   r   r   rB   rB   rC   test_low_dim_handling  s    z&TestFillDiagonal.test_low_dim_handlingc              	   C   s0   t dt}ttd t|d W 5 Q R X d S )N)r$   r$   r'   r$   equal lengthr   r   r   rB   rB   rC   test_hetero_shape_handling  s    z+TestFillDiagonal.test_hetero_shape_handlingN)
rj   rk   rl   rD   r   r   r   r   r   r   rB   rB   rB   rC   r     s   		r   c                  C   s   t d} tddddgddddgd	d
ddgddddgg}d|| < t|tddddgddddgd	d
ddgddddgg t dd}tdt}d||< t|tddgddggddgddggg d S )Nr    r   r   r$   r&   r%   r'   r8   r9   rE   rs   r7   r/            r   )r   r   r   r   )r   r:   r?   r   r`   rJ   )Zdire   Zd3rB   rB   rC   test_diag_indices  s8    


 



 
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestDiagIndicesFromc                 C   s<   t jd}t|\}}t|t d t|t d d S )Nr5   r    )r:   r   r   r   r   )r@   rY   rrz   rB   rB   rC   test_diag_indices_from  s    z*TestDiagIndicesFrom.test_diag_indices_fromc              	   C   s,   t d}ttd t| W 5 Q R X d S )Nr'   r   )r:   ry   r   r>   r   r\   rB   rB   rC   test_error_small_input  s    
z*TestDiagIndicesFrom.test_error_small_inputc              	   C   s.   t dt}ttd t| W 5 Q R X d S )N)r$   r$   r   r$   r   )r:   r`   rJ   r   r>   r   r\   rB   rB   rC   test_error_shape_mismatch  s    z-TestDiagIndicesFrom.test_error_shape_mismatchN)rj   rk   rl   r   r   r   rB   rB   rB   rC   r     s   r   c                  C   s   t tddd} dd ttdD }t| | t td} t| | t td} t| t td t t } t| dg t td} t| dg t td	g } t| g  d S )
Nr   r   r$   c                 S   s   g | ]\}}|qS rB   rB   )rd   ixerB   rB   rC   r     s     z test_ndindex.<locals>.<listcomp>)r   r   r$   )r$   rB   r   )r   r   r   r:   r`   r   r   )rY   r   rB   rB   rC   test_ndindex  s    


r   )"rm   Znumpyr:   Znumpy.testingr   r   r   r   r   r   r   Znumpy.lib.index_tricksr	   r
   r   r   r   r   r   r   r   r   r   r   rp   r   r   r   r   r   r   r   r   r   rB   rB   rB   rC   <module>   s   $4 .s**G