U
    #c-                     @   s*  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dl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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G dd dZ dS )    N)array_indexing)product)assert_assert_equalassert_raisesassert_raises_regexassert_array_equalassert_warnsHAS_REFCOUNTIS_WASMc                   @   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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(e)j*+dMdNdOe,-dPgge)j*+dQdRdSge)j*+dTdUdRgdVdW Z.e)j*j/e0dXdYdZd[ Z1d\d] Z2d^S )_TestIndexingc                    s  t dggg tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fd	d tt fd
d tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd d S )N   c                      s    d S N         r   ar   B/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_indexing.py<lambda>       z3TestIndexing.test_index_no_floats.<locals>.<lambda>c                      s    d S )N)r   r   r   r   r   r   r   r      r   c                      s    d S )N)r   r   r   r   r   r   r   r      r   c                      s    dd d f S r   r   r   r   r   r   r      r   c                      s    d d df S r   r   r   r   r   r   r      r   c                      s    d d dd d f S r   r   r   r   r   r   r      r   c                      s    dd d d d f S r   r   r   r   r   r   r      r   c                      s    d S )N)r   r   r   r   r   r   r   r   r      r   c                      s    d S )N)r   r   r   r   r   r   r   r   r      r   c                      s    d S )N)r   r   r   r   r   r   r   r   r      r   c                      s    d S Nffffffr   r   r   r   r   r      r   c                      s    d S )N)r   r   r   r   r   r   r   r       r   c                      s    d S )N)r   r   r   r   r   r   r   r   !   r   c                      s    dd d f S r   r   r   r   r   r   r   "   r   c                      s    d d df S r   r   r   r   r   r   r   #   r   c                      s    d d dd d f S r   r   r   r   r   r   r   $   r   c                      s    dd d d d f S r   r   r   r   r   r   r   %   r   c                      s    d S )N)r   r   r   r   r   r   r   r   r   &   r   c                      s    d S )N)r   r   r   r   r   r   r   r   r   '   r   c                      s    d S )N)r   r   r   r   r   r   r   r   r   (   r   c                      s    dd df S r   r   r   r   r   r   r   )   r   c                      s    dd dd d f S r   r   r   r   r   r   r   *   r   )nparrayr   
IndexErrorselfr   r   r   test_index_no_floats   s.    z!TestIndexing.test_index_no_floatsc                    s  t dgg tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fd	d tt fd
d tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd tt fdd d S )Nr   c                      s    dd  S r   r   r   r   r   r   r   0   r   z5TestIndexing.test_slicing_no_floats.<locals>.<lambda>c                      s    dd ddf S )Nr   r      r   r   r   r   r   r   1   r   c                      s    dd dd df S Nr   r   r   r   r   r   r   r   r   2   r   c                      s    dddd d f S )Nr      r   r   r   r   r   r   r   3   r   c                      s    d d dd f S r   r   r   r   r   r   r   4   r   c                      s    d d S r   r   r   r   r   r   r   6   r   c                      s    d dddf S )Nr   r           @r   r   r   r   r   r   7   r   c                      s    d ddd df S r   r   r   r   r   r   r   8   r   c                      s    d dd d f S r   r   r   r   r   r   r   9   r   c                      s    d d dddf S )Nr         @r   r   r   r   r   r   r   :   r   c                      s    d d d S )N      ?r   r   r   r   r   r   <   r   c                      s    dd d ddf S )Nr   r   r!   r   r   r   r   r   r   =   r   c                      s    dd dd df S )Nr    r"   r   r   r   r   r   r   r   >   r   c                      s    d d dd d f S )N      @r   r   r   r   r   r   ?   r   c                      s    d d dddf S )Nr      r!   r   r   r   r   r   r   @   r   c                      s    ddd S )Nr#   r   r!   r   r   r   r   r   r   B   r   c                      s    dd d S )Nr#   r!   r   r   r   r   r   r   C   r   c                      s    dd d ddf S )Nr   r!   r   r   r   r   r   r   D   r   c                      s    dddd df S )Nr#   r    r"   r   r   r   r   r   r   r   E   r   c                      s    dddd d f S )Nr#   r$   r   r   r   r   r   r   F   r   c                      s    d d dddf S )Ng?r"   r!   r   r   r   r   r   r   G   r   c                      s    d d d S r   r   r   r   r   r   r   I   r   r   r   r   	TypeErrorr   r   r   r   test_slicing_no_floats,   s.    z#TestIndexing.test_slicing_no_floatsc                    s&   t dggg tt fdd d S )Nr    c                      s        S Nr   r   r   r   r   r   O   r   z;TestIndexing.test_index_no_array_to_index.<locals>.<lambda>r&   r   r   r   r   test_index_no_array_to_indexK   s    z)TestIndexing.test_index_no_array_to_indexc                 C   s>   t dddg}t|d  |t j  t|d  j|jd  d S )Nr    r      )r   r   r   Znewaxisndimr   r   r   r   r   test_none_indexQ   s    zTestIndexing.test_none_indexc                 C   sR   t dddg}t|d | t|d j|k t d}tt|d t j d S )Nr    r   r+   r   r   )r   r   r   r   base
isinstanceint_r-   r   r   r   test_empty_tuple_indexW   s
    
z#TestIndexing.test_empty_tuple_indexc                 C   sF   t jddd}t|d j|j t|d | tt|d t j d S )Nr   ZV4dtype.)r   zerosr   r4   typendarray)r   sr   r   r   test_void_scalar_empty_tuple_   s    z)TestIndexing.test_void_scalar_empty_tuplec                 C   s   t d}|t j}t d}t|| ||  t d||< t|t d t ddd}t|| ||  t dd d d f ||< t|t dd d d f jddd t ddd}t|||f |||f  d S )Nr   
   r   r    Zaxis   )r   arangeastypeZuintpr   reshaperepeat)r   indexZu_indexarrr   r   r   test_same_kind_index_castinge   s    

&z)TestIndexing.test_same_kind_index_castingc                 C   s|   t dddg}t|g  g  t|g  j|j t jg t jd}t|g  g  t|g  j|j t g }tt|j| d S )Nr    r   r+   r3   )r   r   r   r4   intpr   r   __getitem__r   r   br   r   r   test_empty_fancy_indexy   s    
z#TestIndexing.test_empty_fancy_indexc                 C   s   t dddgdddgddd	gg}t|d
 |k	 t|d
 | t|d
 j|k t|d |d  t|d |dd d f  t|d |d d df  t|d t d t d}d|tf< t|d d S )Nr    r   r+   r%   r            	   .)r   .r   .r   )r   .r    )r   r   r   r   r/   EllipsisrF   r   r   r   test_ellipsis_index   s    

z TestIndexing.test_ellipsis_indexc                 C   sj   t dddgdddgddd	gg}t|d
 dddg t|d ddd	g tt|jd tt|jd d S )Nr    r   r+   r%   r   rI   rJ   rK   rL   r   i   @l            )r   r   r   r   r   rE   r-   r   r   r   test_single_int_index   s    z"TestIndexing.test_single_int_indexc                 C   s^   t dddgdddgddd	gg}t|t d
 |d   t|t d |d  dd  d S Nr    r   r+   r%   r   rI   rJ   rK   rL   TFr   r   r   r   r-   r   r   r   test_single_bool_index   s    z#TestIndexing.test_single_bool_indexc                 C   sx   t d}t dg}tt|j| t dgd }tt|j| t jdtd}tt|j| tt|jtd |f d S )N)r   r%   r+   TFrI   r%   r%   r3   )	r   onesr   r   r   rE   r5   boolslice)r   rB   rA   r   r   r   test_boolean_shape_mismatch   s    
z(TestIndexing.test_boolean_shape_mismatchc                 C   sN   t dddgg}t jdgtd}t|| | d||< t|dddgg d S )Nr   Tr3   r#   )r   r   rW   r   rF   r   r   r   test_boolean_indexing_onedim   s
    z)TestIndexing.test_boolean_indexing_onedimc                 C   sT   t d}dd }tt||g  tt||dddg tt||d d dddg d S )Nr%   c                 S   s   || | dk< d S )NrP   r   )r   vr   r   r   f   s    z>TestIndexing.test_boolean_assignment_value_mismatch.<locals>.fr    r   r+   )r   r=   r   
ValueError)r   r   r\   r   r   r   &test_boolean_assignment_value_mismatch   s
    
z3TestIndexing.test_boolean_assignment_value_mismatchc                 C   sZ   t d}t jdtd}d|d d< t jdtd||< t d}d|d d< t|| d S )N  r3   Td   r    )r   r5   rW   rV   objectr   )r   rB   indxexpectedr   r   r   !test_boolean_assignment_needs_api   s    

z.TestIndexing.test_boolean_assignment_needs_apic                 C   s   t dddgdddgddd	gg}t d
dd
gdd
dgd
dd
gg}t|| ddddd	g t||d  dddgg t||d  ||d   d||< t|dddgdddgdddgg d S rR   rS   rF   r   r   r   test_boolean_indexing_twodim   s     z)TestIndexing.test_boolean_indexing_twodimc                 C   sH   t dddg}dddg}t|| ddg t|d |f ddgg d S )Nr    r   r+   TFrS   rF   r   r   r   test_boolean_indexing_list   s    
z'TestIndexing.test_boolean_indexing_listc                 C   s   t d}t jdt jdd d d }t dd d d }|||< t|d d t d}t dddd d d }|||d d f< t|d ddg d S )	Nr   r3   rP   r   r   r   r:   r   r    )r   rV   r5   rD   r=   r   r?   )r   r   rG   cr   r   r   ,test_reverse_strides_and_subspace_bufferinit  s    

z9TestIndexing.test_reverse_strides_and_subspace_bufferinitc                 C   sX   t dd d d f }t dd d d }t|| ||d  t ddd}d S )Nr:   rP   C   r   )r   r=   r   copyr?   )r   r   ir   r   r   'test_reversed_strides_result_allocation  s    z4TestIndexing.test_reversed_strides_result_allocationc                 C   sf   t dd}t dd}t ddddj|ddg< t ddddj |ddg< t|| d S )N)r+   r%   r   rP      r   r%   r   r    )r   fullr=   r?   Trl   r   rF   r   r   r   %test_uncontiguous_subspace_assignment  s
    "z2TestIndexing.test_uncontiguous_subspace_assignmentc                 C   s*   t d}tt|jt dgfd  d S )N) r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r    r       )r   rV   r   r   rE   r   r-   r   r   r   (test_too_many_fancy_indices_special_case)  s    
z5TestIndexing.test_too_many_fancy_indices_special_casec                 C   sJ   t d}t|t d |t d  t|t d |t d  d S )Nr    TF)r   r   r   bool_r-   r   r   r   test_scalar_array_bool.  s    
z#TestIndexing.test_scalar_array_boolc                 C   sB   t d}t||d k	 t||d k	 t||d d  k	 d S )Nr   r   .)r   r=   r   r-   r   r   r   test_everything_returns_views;  s    
z*TestIndexing.test_everything_returns_viewsc                 C   sH   t d}tt|jddgdddgf tt|jddgdddgfd d S )Nr   r   r   r    r   )r   r5   r   r   rE   __setitem__r-   r   r   r   test_broaderrors_indexingC  s    
z&TestIndexing.test_broaderrors_indexingc                 C   sz   t d}t jdt jd}d|d< tt|j| tt|j|d t jdt jd}d|d< tt|j| tt|j|d d S )Nr   rk   r3   r:   rP   r      )r   r5   rV   rD   r   r   rE   ry   )r   r   indr   r   r    test_trivial_fancy_out_of_boundsH  s    
z-TestIndexing.test_trivial_fancy_out_of_boundsc                 C   st   t d}t jdt jddddd d d d df }t|| | d||< t d}d|d< d|d< t|| d S )NrI   r3   r   r    r+   r   rP   )r   r=   rD   r?   r   )r   r   idxresr   r   r   test_trivial_fancy_not_possibleS  s    
,
z,TestIndexing.test_trivial_fancy_not_possiblec                 C   s   G dd dt j}t d}| j|d}|d ||ddddd	gd d f< t|dk  ||d d ddddd	gf< t|dk  |d ||d
< t|dk  d S )Nc                   @   s   e Zd Zdd ZdS )z7TestIndexing.test_nonbaseclass_values.<locals>.SubClassc                 S   s   |  d d S )Nc   )fillr   oldr   r   r   __array_finalize__d  s    zJTestIndexing.test_nonbaseclass_values.<locals>.SubClass.__array_finalize__N__name__
__module____qualname__r   r   r   r   r   SubClassc  s   r   rx   )r6   r    r   r   r+   r%   .)r   r7   r5   rl   viewr   r   all)r   r   r   r8   r   r   r   test_nonbaseclass_valuesb  s    


z%TestIndexing.test_nonbaseclass_valuesc                 C   s   t d}t jdt jddd}t||ddddd	gd d f< t|| t||d d ddddd	gf< t|| t||d
< t|| d S )Nrx   r<   r3   r   r   r    r   r+   r%   .)r   r5   r=   float64r?   
memoryviewr   )r   r   r8   r   r   r   test_array_like_valuesw  s    


z#TestIndexing.test_array_like_valuesc                 C   s   t jjdddgddgd}t jdddgtd}t|| jj t d	d
g}t|| jj t|d jj t|d	 jj d S )N)ZNGC1001r{   )ZNGC1002r#   )ZNGC1003r#   )targetZS20)ZV_magz>f4r3   FTr   r    .)r   Zrecr   rW   r   flags	writeable)r   dr|   r   r   r   test_subclass_writeable  s    z$TestIndexing.test_subclass_writeablec                 C   sR   t d}t dddj}t|| jj |dd}t||df jj d S )Nr:   r   r   rP   r    r   )r   r=   r?   rq   r   r   f_contiguousrF   r   r   r   test_memory_order  s
    
zTestIndexing.test_memory_orderc                 C   sB  G dd d}| }G dd d}t d}tt|d t j t d}tt|| t j t d}tt||t df t j tt||| f t j t d}t jdtd	}||d< tt|d t j t |d g}tt|| t j t |d gg}tt||t df t j tt||| f t j d S )
Nc                   @   s   e Zd Zdd ZdS )z2TestIndexing.test_scalar_return_type.<locals>.Zeroc                 S   s   dS Nr   r   r   r   r   r   	__index__  s    z<TestIndexing.test_scalar_return_type.<locals>.Zero.__index__N)r   r   r   r   r   r   r   r   Zero  s   r   c                   @   s   e Zd Zdd ZdS )z7TestIndexing.test_scalar_return_type.<locals>.ArrayLikec                 S   s
   t dS r   r   r   r   r   r   r   	__array__  s    zATestIndexing.test_scalar_return_type.<locals>.ArrayLike.__array__N)r   r   r   r   r   r   r   r   	ArrayLike  s   r   r   r    )r    r    r   r3   )r   r5   r   r0   float_r   ra   r7   )r   r   zr   r   rG   r   r   r   test_scalar_return_type  s&    



z$TestIndexing.test_scalar_return_typec                 C   s   t dg}tr"tt t j}d|t jdgt jd< d|t jdgt jd< tt	|j
t jdgt jdd tt	|j
t jdgt jdd trttt t j| d S )Nr   r    r3   )r   r   r
   sysgetrefcountr4   rD   Zuint8r   r   ry   r   )r   r   refcountr   r   r   test_small_regressions  s      z#TestIndexing.test_small_regressionsc                 C   s<  t jdt jdtd dd }|t d}t jdt jdtd dd }|t d}t jdd	d|d
< t |j}t	|| | |||< t |jd t jdt 
djd   }|t j
d |j }t |j|d
< t	||t j | |||t j< ||d dk  |d d d ||d dk< d S )N@   r3   r   r    iZS8ro   ZbbbbbbbbS.r   r   )r   r5   int8ordr   r4   r   r=   sizer   rD   itemsizer>   Zint16)r   r[   r   xrG   r   r   r   test_unaligned  s      .zTestIndexing.test_unalignedc                 C   sX   t d}G dd dt}dgdgf}||}t|| jdk t||f jdk d S )Nrx   c                   @   s   e Zd ZdS )z7TestIndexing.test_tuple_subclass.<locals>.TupleSubclassNr   r   r   r   r   r   r   TupleSubclass  s   r   r    r    )r   rV   tupler   shape)r   rB   r   rA   r   r   r   test_tuple_subclass  s    
z TestIndexing.test_tuple_subclassc                 C   s^   G dd d}t d}t||  || f  t jdddgd}t||  || f  d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )zDTestIndexing.test_broken_sequence_not_nd_index.<locals>.SequenceLikec                 S   s   dS r   r   r   r   r   r   r     s    zNTestIndexing.test_broken_sequence_not_nd_index.<locals>.SequenceLike.__index__c                 S   s   dS )Nr    r   r   r   r   r   __len__  s    zLTestIndexing.test_broken_sequence_not_nd_index.<locals>.SequenceLike.__len__c                 S   s   t dd S )NzNot possible)r   )r   itemr   r   r   rE     s    zPTestIndexing.test_broken_sequence_not_nd_index.<locals>.SequenceLike.__getitem__N)r   r   r   r   r   rE   r   r   r   r   SequenceLike  s   r   r:   r   )f1i8)f2r   r3   )r   r=   r   r5   )r   r   rB   r   r   r   !test_broken_sequence_not_nd_index  s
    

z.TestIndexing.test_broken_sequence_not_nd_indexc                 C   s   t d}t d}t dd d d d d f }t |d}t|| ||   t jdt jd}t|||f || |f  d S )Nr:   )r:   r   )r:   7   r%   r%   r%   r3   )r   rV   r=   Zbroadcast_tor   rl   r5   rD   )r   r   Zx2r|   Zzindr   r   r   !test_indexing_array_weird_strides  s    

z.TestIndexing.test_indexing_array_weird_stridesc                 C   sL   t d}|d d dd d df }td ddddgf}d||< t|d d S )	NrU   rP   r   r    r   r+   r:   g      $@)r   r5   rX   r   )r   ZarrorB   Zslicesr   r   r   $test_indexing_array_negative_strides  s
    
z1TestIndexing.test_indexing_array_negative_stridesc                 C   sH   t jddd}t d|d< t|d t jddd |d dksDtd S )N)r    r   rh   r3   Zasdfgr   r   r       s)r   r5   Zstr_r   r   AssertionError)r   rB   r   r   r   test_character_assignment  s    z&TestIndexing.test_character_assignmentrA   TFr   numrs   (   original_ndimr    c              	   C   sZ   t d| }tt ||f|   W 5 Q R X tt d||f| < W 5 Q R X d S )Nr   r#   )r   rV   pytestraisesr   )r   rA   r   r   rB   r   r   r   test_too_many_advanced_indices(  s
    z+TestIndexing.test_too_many_advanced_indiceszno threading)reasonc                    s   ddl m} tdg}td|fgd }td|fgd }tjjdd|d d df  tj fdd	|d
d fddtdD }|D ]}|	  q j|kst
d S )Nr   )ThreadPoolExecutor) f8r   r   )p  rK   )r   c                    s$    j dt| dtjd}| |  d S )Nr   r   )r   r4   )Zintegerslenr   rD   )rB   rb   )rngr   r   funcD  s    z<TestIndexing.test_structured_advanced_indexing.<locals>.funcrK   )max_workersc                    s   g | ]}  qS r   )Zsubmit).0_)rB   r   tper   r   
<listcomp>I  s     zBTestIndexing.test_structured_advanced_indexing.<locals>.<listcomp>r:   )concurrent.futuresr   r   r4   randomuniformr   Zdefault_rngrangeresultr   )r   r   dtZfuturesr\   r   )rB   r   r   r   r   !test_structured_advanced_indexing6  s     


z.TestIndexing.test_structured_advanced_indexingc                 C   sp   t dd}t|ddg t |d |d g t|ddgddgf t ddg tt|jtd g d S )Nr<   rx   r   r    rI   )	r   r=   r?   r   r   r   r   rE   rX   r-   r   r   r   test_nontuple_ndindexO  s    $$z"TestIndexing.test_nontuple_ndindexN)3r   r   r   r   r(   r*   r.   r2   r9   rC   rH   rO   rQ   rT   rY   rZ   r^   rd   re   rf   ri   rn   rr   rt   rv   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   Zskipifr   r   r   r   r   r   r   r      s^   	
		
"
	

r   c                   @   s   e Zd Zdd ZdS )TestFieldIndexingc                 C   s<   t ddg}tt|d t j tt|dg t j d S )Nr   )r   r   r   )r   r5   r   r0   r7   r-   r   r   r   r   W  s    z)TestFieldIndexing.test_scalar_return_typeN)r   r   r   r   r   r   r   r   r   V  s   r   c                	   @   s~   e Zd Zdd Zdd Zdd Zdd Zej	d	d
ddge
dfddgd
dfd
ddgddgfgdd Zdd Zdd ZdS )TestBroadcastedAssignmentsc                 C   s   |||< |S r)   r   )r   r   r|   valr   r   r   assign`  s    z!TestBroadcastedAssignments.assignc                 C   st   t d}t d|d< t d|dddgd d f< t d|d d ddgf< t d|dgdgdggddgf< d S )N)r+   r   )r    r+   r   .r   r    r   )r   r5   rV   r-   r   r   r   test_prepending_onesd  s
    
z/TestBroadcastedAssignments.test_prepending_onesc                 C   sz   | j }tj}td}tt|||d td tt|||dddgf td tt|||dgdggf td d S )Nr   .r   r    r    r   r+   )r   r   r    )r   r   s_r5   r   r]   rV   r   r   r   r   r   r   r   test_prepend_not_onen  s    
"z/TestBroadcastedAssignments.test_prepend_not_onec                 C   s   | j }tj}td}tt|||d td tt|||d td tt|||d d dgf td tt|||d d dgf td tt|||dgd d f td d S )N)r   r    .rg   )r   r   r   r   )r   r   r   r5   r   r]   r   r   r   r   test_simple_broadcasting_errorsx  s    
$$z:TestBroadcastedAssignments.test_simple_broadcasting_errorsrA   .r    r   Nr   c              	   C   s`   t d}t d}t|| jdd}tt}|||< W 5 Q R X t|j	|s\t
d S )Nr`   r`   )r+   r%   r   rI   rJ    r   )r   r5   strr   replacer   r   r]   valueendswithr   )r   rA   valuesrB   Z	shape_strer   r   r   *test_broadcast_error_reports_correct_shape  s    

zETestBroadcastedAssignments.test_broadcast_error_reports_correct_shapec                 C   sX   t d}dddg|dgdgdggdddgf< t|d dd df dddgk  d S )Nrx   r   r+   r%   r   r    )r   r5   r   r   r-   r   r   r   test_index_is_larger  s    
$z/TestBroadcastedAssignments.test_index_is_largerc                 C   sZ   t d}t dd d d f }t dd d d }|||< t|d d d |k  d S )Nr   r`   rP   )r   r5   r=   r   r   )r   r   r[   rG   r   r   r   test_broadcast_subspace  s
    
z2TestBroadcastedAssignments.test_broadcast_subspace)r   r   r   r   r   r   r   r   r   r   rX   r   r   r   r   r   r   r   r   _  s   


r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestSubclassesc                 C   s4  G dd dt j}t d}||}|d d }tt||k t|j|k t||d d  |dddg }tt||k t|j|k	 tt|jt jk t||dddg  t|j|dddg  ||dk }tt||k t|j|k	 tt|jt jk t|||dk  t|j||dk  d S )Nc                   @   s   e Zd ZdS )z+TestSubclasses.test_basic.<locals>.SubClassNr   r   r   r   r   r     s   r   r   r+   r   r    r   )r   r7   r=   r   r   r6   r/   r   )r   r   r   r8   Zs_slices_fancyZs_boolr   r   r   
test_basic  s&    

zTestSubclasses.test_basicc                 C   sL   G dd dt j}t d}||}d|j_|dddg }t|jj d S )Nc                   @   s   e Zd ZdS )z8TestSubclasses.test_fancy_on_read_only.<locals>.SubClassNr   r   r   r   r   r     s   r   r   Fr   r    r   )r   r7   r=   r   r   r   r   )r   r   r   r8   r   r   r   r   test_fancy_on_read_only  s    

z&TestSubclasses.test_fancy_on_read_onlyc                 C   s   G dd dt j}t d|}|d d }t|j| t|j| |ddddg }t|j| t|j| ||dk }t|j| t|j| d S )Nc                   @   s   e Zd Zdd ZdS )z=TestSubclasses.test_finalize_gets_full_info.<locals>.SubClassc                 S   s   t | | _|| _d S r)   )r   r   finalize_statusr   r   r   r   r   r     s    zPTestSubclasses.test_finalize_gets_full_info.<locals>.SubClass.__array_finalize__Nr   r   r   r   r   r     s   r   r:   r+   r   r    r   )r   r7   r=   r   r   r   r   )r   r   r8   Znew_sr   r   r   test_finalize_gets_full_info  s    z+TestSubclasses.test_finalize_gets_full_infoN)r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestFancyIndexingCastc                 C   s   d}t |t}d|d< t |}t dg||< t|d d tt j|jdgdgft dg t|d d tt j|j|t dg t|d d d S )	N)rK   ?   Tr   r    r   y       @      ?r   y              ?)	r   r5   r>   rW   r   r   r	   ZComplexWarningry   )r   r   Z
bool_indexZ
zero_arrayr   r   r   test_boolean_index_cast_assign  s$    
 
 
  
z4TestFancyIndexingCast.test_boolean_index_cast_assignN)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 )TestFancyIndexingEquivalencec                 C   s\  t jdtd}| }dddg|d d< dddg|dddg< t|| t jdtdd d d f }dddgg|dgd df< t||d  |j}dgdgdgg|d ddgf< t||d d df  t jdtd}| }dgdgdgd	ggg|d dd
f< dgdgdgd	ggg|dgd
f< t|| |d}dgdgdgd	ggg|dgd
f< t|| d S )Nr   r3   r    r    r   r+   r   r   )r+   r%   r   r%   .F)r   r=   ra   rl   r   rq   rV   )r   r   rG   rB   Zcmp_arrr   r   r   test_object_assign  s&    
" 

 z/TestFancyIndexingEquivalence.test_object_assignc                 C   s   t d}| }t dddg|d d< t dddg|dddg< t|| t dd d d f }t dddgg|dgd df< t||d  d S )	Nr   2z-3z-1r+   r   r   r    )r   r=   rl   r   r   rF   r   r   r   test_cast_equivalence  s    

 z2TestFancyIndexingEquivalence.test_cast_equivalenceN)r   r   r   r   r  r   r   r   r   r     s    r   c                   @   sP   e Zd 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 )TestMultiIndexingAutomateda:  
    These tests use code to mimic the C-Code indexing for selection.

    NOTE:

        * This still lacks tests for complex item setting.
        * If you change behavior of indexing, you might want to modify
          these tests to try more combinations.
        * Behavior was written to match numpy version 1.8. (though a
          first version matched 1.7.)
        * Only tuple indices are supported by the mimicking code.
          (and tested as of writing this)
        * Error types should match most of the time as long as there
          is only one error. For multiple errors, what gets raised
          will usually not be the same one. They are *not* tested.

    Update 2016-11-30: It is probably not worth maintaining this test
    indefinitely and it can be dropped if maintenance becomes a burden.

    c                 C   sP  t t ddddgdddd| _t d| _dtdt dd	d	gt dd	gd	dggt d	d	gd	d	gggt	d
ddt	dddt	dddt	d d dt jdt j
dt dddgt dgdgdggt jddgddggt d dt jddgt jdt jdgd tdt ddgg| _td ddgt dgdg| _t	d d dg| _d S )Nr+   r    r   rI   )r+   r   r   rI   skipr   TFr   r`   r%   rP   )r   r    r    r3   rD      r   r#   )r   r=   prodr?   r   emptyrG   rN   r   rX   rD   r4   Znewbyteorderr   r5   intcomplex_indicessimple_indicesfill_indicesr   r   r   r   setup_method>  s.    &



"z'TestMultiIndexingAutomated.setup_methodc              
   C   s  t |}g }d}d}d}d}d}d}	t|D ]\}
}|dkr@q,t|tjr~|jtkr~d}|jdkrht||j7 }||j7 }q,|t	kr|	dkr|
}	q,tt|t
r|d7 }q,t|tjsztj|tjd}W n tk
r   tY nX |||
< n$|jjdkr|jjdkrtd	|jdkr$d}|d7 }|d7 }q,|j| dk rJt|dkrjd|krj| |fS |	dk	rt
ddg|j|  ||	|	d < t|D ]:\}}t|t
rtj||j|  }|d
|g qnP|dkr.|dtjdgtjdg ||jd| d |j|d  }qt|tjr$|jtkr$|j|j|||j  krhtz*tjt||j|||j  dd}W n4 tk
r   d}tjdg|  tjd}Y nX |jdkr||jd| t|j|||j  f |j||j d  }|}ntn2|jdkrV||j| ksR||j|  k rVt|jdkr||j| ks||j|  k rtt|dkr|d d dkr||	kr|d | n|d7 }|d|g q|dkr|s|dd }t t|j}g }|ddg d}d}|D ]}|d7 }|d dkr|d |dd  ||= |d8 }t||t|dd  D ]}|| || q||t|d 7 }q$|}|j||  }d}|D ]}|d dkrt|dkrq|j}|||t|dd   }||jd| t| t!f |j|t|dd  d  }tj"|dd  }|j#dkr|rztt$|dd |D ]@\}}|j#dkrqt%||kst%|| k rtqt|dd t|krPt&|dkr6ztj|dd |dd}W n tk
r2   tdY nX ntj|dd |dd}nt|j'|( |d}z0||jd| |j |j|d d  }W n tk
r   tY nX ||j7 }q|j'|d |d}|d7 }q||fS )a  Mimic multi dimensional indexing.

        Parameters
        ----------
        arr : ndarray
            Array to be indexed.
        indices : tuple of index objects

        Returns
        -------
        out : ndarray
            An array equivalent to the indexing operation (but always a copy).
            `arr[indices]` should be identical.
        no_copy : bool
            Whether the indexing operation requires a copy. If this is `True`,
            `np.may_share_memory(arr, arr[indices])` should be `True` (with
            some exceptions for scalars and possibly 0-d arrays).

        Notes
        -----
        While the function may mostly match the errors of normal indexing this
        is generally not the case.
        Tr   FNr    r3   rG   rm   z;arrays used as indices must be of integer (or boolean) typer8   nr   raise)moderP   r\   zinvalid index into 0-sizedwrapr;   ))list	enumerater0   r   r7   r4   rW   r,   r   rN   rX   r   rD   r]   kindrl   r=   indicesr   appendr?   Zravel_multi_indexZnonzero	Exceptionsumr  r   r   insertextendremoveZ	transposer>   r
  	broadcastr   zipanyr   takeravel)r   rB   r  Z
in_indicesno_copyZ	num_fancyZ	fancy_dimZerror_unless_broadcast_to_emptyr,   Zellipsis_posrm   rb   ZaxZ	flat_indxZnew_indicesZaxesZ
fancy_axesniZaiZ
orig_shapeZ
orig_slicer   Z_indx_sizemir   r   r   _get_multi_index[  s4   









& 
 ""

"



z+TestMultiIndexingAutomated._get_multi_indexc              
   C   s   z|  ||\}}W np tk
r } zRtr4t|}tt||j| tt||j|d trnt	|t| W Y dS d}~X Y nX | 
|||| dS )a   Check a multi index item getting and simple setting.

        Parameters
        ----------
        arr : ndarray
            Array to be indexed, must be a reshaped arange.
        index : tuple of indexing objects
            Index being tested.
        r   Nr&  r  r
   r   r   r   r6   rE   ry   r   _compare_index_resultr   rB   rA   	mimic_getr"  r   Zprev_refcountr   r   r   _check_multi_indexJ  s    
z-TestMultiIndexingAutomated._check_multi_indexc              
   C   s   z|  ||f\}}W np tk
r } zRtr6t|}tt||j| tt||j|d trpt	|t| W Y dS d}~X Y nX | 
|||| dS )aW  Check a single index item getting and simple setting.

        Parameters
        ----------
        arr : ndarray
            Array to be indexed, must be an arange.
        index : indexing object
            Index being tested. Must be a single index and not a tuple
            of indexing objects (see also `_check_multi_index`).
        r   Nr'  r)  r   r   r   _check_single_indexb  s    
z.TestMultiIndexingAutomated._check_single_indexc                 C   s   |  }|| }t|| |jdkrl|jdkrltt|||k trl|r\tt	
|d ntt	
|d |  }|d ||< |jdkrdS |r|jdkr|d7 }t|| dS |j|   d7  < t|| dS )z4Compare mimicked result to indexing result.
        r   r+   r   r_   N)rl   r   r   r,   r   r   Zmay_share_memoryr
   r   r   r   Zflatr!  )r   rB   rA   r*  r"  Zindexed_arrrG   r   r   r   r(  z  s&    


z0TestMultiIndexingAutomated._compare_index_resultc                 C   s   t d}t|t d d d|t d< t|d | | jt j| jtdf | | jt j| jtdd f | | jt j| jtdd f d S )Nr   Tr    r3   rM   )N.)r   r   r   r+  r   Z
zeros_likerW   r-   r   r   r   test_boolean  s     

   z'TestMultiIndexingAutomated.test_booleanc              	      s  t   t ddt t ddtj dd  dD ]b}| j| j| j| jg}| j||< t	| D ]6}t
 fdd|D }| | j| | | j| q^q4W 5 Q R X | | jd | | jd tt| jjd	 tt| jjd	d
 tt| jjd
d
dgd
d
f tt| jjd
d
dgd
d
fd
 d S )Nerrorr   c                 S   s   t | to| dkS )Nr  )r0   r   )r~   r   r   r   isskip  s    z8TestMultiIndexingAutomated.test_multidim.<locals>.isskip)r   r   r+   c                 3   s   | ]} |s|V  qd S r)   r   )r   rm   r/  r   r   	<genexpr>  s      z;TestMultiIndexingAutomated.test_multidim.<locals>.<genexpr>)r   r   r   r   )r   r   r   r   r   r   r    )warningscatch_warningsfilterwarningsDeprecationWarningr   ZVisibleDeprecationWarningr  r  r  r   r   r+  r   rG   r   r   rE   ry   )r   Z
simple_posZtocheckrA   r   r0  r   test_multidim  s(    
 
z(TestMultiIndexingAutomated.test_multidimc                 C   s&   t d}| jD ]}| || qd S )Nr:   )r   r=   r  r,  )r   r   rA   r   r   r   test_1d  s    

z"TestMultiIndexingAutomated.test_1dN)r   r   r   __doc__r  r&  r+  r,  r(  r-  r6  r7  r   r   r   r   r  (  s    p r  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )TestFloatNonIntegerArgumentz
    These test that ``TypeError`` is raised when you try to use
    non-integers as arguments to for indexing and slicing e.g. ``a[0.0:5]``
    and ``a[0.5]``, or other functions like ``array.reshape(1., -1)``.

    c                 C   st   t dggg}|t dg  |ddg  |d d ddgf  |d d dd d f  |d d d d d d f  d S )Nr   r   r   r-   r   r   r   test_valid_indexing  s    z/TestFloatNonIntegerArgument.test_valid_indexingc                 C   s|   t dggg}|d d   |dd   |d d  |dd  |d d d  |dd d  |d dd  |ddd  d S )Nr   r   r   r    r   r-   r   r   r   test_valid_slicing  s    z.TestFloatNonIntegerArgument.test_valid_slicingc                 C   sj   t dgg}ttt j|d ttt j|t ddf ttt j|dgd ttt j|dgt d d S )Nr   )r#   r#   rP   r#   rP   r   )r   r   r   r'   r?   r   r   r-   r   r   r    test_non_integer_argument_errors  s
    z<TestFloatNonIntegerArgument.test_non_integer_argument_errorsc                 C   s4   dd }t t|dgtd |dgtd d S )Nc                 S   s   | | S r)   r   )r   rG   r   r   r   mult  s    zRTestFloatNonIntegerArgument.test_non_integer_sequence_multiplication.<locals>.multr    r+   )r   r'   r   r   r1   )r   r=  r   r   r   (test_non_integer_sequence_multiplication  s    zDTestFloatNonIntegerArgument.test_non_integer_sequence_multiplicationc                 C   sN   t d}ttt j|d ttt j|d ttt j|d ttt j|d d S )N)r+   r+   r+         ?)r?  r    )r    g@)g?g333333?)r   r5   r   r'   min)r   r   r   r   r   test_reduce_axis_float_index  s
    
z8TestFloatNonIntegerArgument.test_reduce_axis_float_indexN)	r   r   r   r8  r:  r;  r<  r>  rA  r   r   r   r   r9    s   
	r9  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestBooleanIndexingc                 C   sz   t dggg}ttt j|d ttt j|t ddf tttjt d tt	tjt j
 ttt j|dgdfd d S )Nr    )TrP   TrP   r   F)args)r   r   r   r'   r?   ru   operatorrA   r	   r5  ZTrue_r   r-   r   r   r    test_bool_as_int_argument_errors  s    z4TestBooleanIndexing.test_bool_as_int_argument_errorsc                    sZ   t d  d jdkst dddgdddgdggf jdksDttt fd	d
 d S )N)r   r+   r%   )FT.)r   r   r+   r%   Tr   r    r   r   c                      s    dddgdf S )NFr   r    .r   r   r   r   r   r     r   zETestBooleanIndexing.test_boolean_indexing_weirdness.<locals>.<lambda>)r   rV   r   r   r   r   r   r   r   r   test_boolean_indexing_weirdness  s    
(z3TestBooleanIndexing.test_boolean_indexing_weirdnessc                    s   t d t dgd gttd fdd t dgd dg gttd fd	d t dgd
 gttd fdd t d t dgdgggttd fdd d S )N)r+   r+   FrL   ztboolean index did not match indexed array along dimension 0; dimension is 3 but corresponding boolean dimension is 1c                      s     S r)   r   r   )r   idx1r   r   r   #  r   zETestBooleanIndexing.test_boolean_indexing_fast_path.<locals>.<lambda>rK   Tc                      s     S r)   r   r   )r   idx2r   r   r   *  r   r:   c                      s     S r)   r   r   )r   idx3r   r   r   1  r   )r    r    r   ztboolean index did not match indexed array along dimension 1; dimension is 1 but corresponding boolean dimension is 2c                      s     S r)   r   r   )r   r~   r   r   r   9  r   )r   rV   r   r   r   r   r   )r   r~   rG  rH  rI  r   test_boolean_indexing_fast_path  s,    

z3TestBooleanIndexing.test_boolean_indexing_fast_pathN)r   r   r   rE  rF  rJ  r   r   r   r   rB    s   rB  c                   @   s   e Zd ZdZdd ZdS )TestArrayToIndexDeprecationz7Creating an index from array not 0-D is an error.

    c                 C   sR   t dggg}tttjt dg ttt j||df ttt j|dg| d S )Nr    rP   r   )r   r   r   r'   rD  rA   r?   r   r-   r   r   r   test_array_to_index_error@  s    z5TestArrayToIndexDeprecation.test_array_to_index_errorN)r   r   r   r8  rL  r   r   r   r   rK  <  s   rK  c                   @   s   e Zd ZdZdd ZdS )TestNonIntegerArrayLikezTests that array_likes only valid if can safely cast to integer.

    For instance, lists give IndexError when they cannot be safely cast to
    an integer.

    c                 C   s>   t d}tt|jddg tt|jddgf |g  d S )Nr:   r?  g      ?1r   )r   r=   r   r   rE   r-   r   r   r   r   P  s    
z"TestNonIntegerArrayLike.test_basicNr   r   r   r8  r   r   r   r   r   rM  I  s   rM  c                   @   s   e Zd ZdZdd ZdS )TestMultipleEllipsisErrorz/An index can only have a single ellipsis.

    c                    sL   t d tt fdd tt jtfd f tt jtfd f d S )Nr:   c                      s    d S )N)..r   r   r   r   r   r   `  r   z6TestMultipleEllipsisError.test_basic.<locals>.<lambda>r   r+   )r   r=   r   r   rE   rN   r   r   r   r   r   ^  s    
z$TestMultipleEllipsisError.test_basicNrO  r   r   r   r   rP  Z  s   rP  c                   @   s   e Zd Zdd Zdd ZdS )TestCApiAccessc                 C   s   t td}tt|tdd tt|tdd tt|tdd tt|tdd tt|tdd td}t|d ||d |	dd	}t|d
 ||d
 d S )Nr   r   r:   r{   r:   r:   r%   r   r   )
	functoolspartialr   r   r   r   rV   r=   r   r?   )r   Z	subscriptr   r   r   r   test_getitemf  s    
zTestCApiAccess.test_getitemc                 C   s   t td}tt|tdd tt|tddd tt|tddd tt|tddd tt|tddd tt|tddd td}||dd t	|d dk |
d	d
}||dd t|d ddg d S )Nr    r:   r   r   r{   rR  rS  r%   r   r   rP   )rU  rV  r   r   r]   r   rV   r   r=   r   r?   r   )r   r   r   r   r   r   test_setitemv  s    
zTestCApiAccess.test_setitemN)r   r   r   rW  rX  r   r   r   r   rQ  e  s   rQ  )!r   r2  rU  rD  r   Znumpyr   Znumpy.core._multiarray_testsr   	itertoolsr   Znumpy.testingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r  r9  rB  rK  rM  rP  rQ  r   r   r   r   <module>   s8   (    I	C@0   )77