U
    ,d                     @   s  d dl mZ d dlmZ d dlZd dlZd dlmZm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZmZ e	 Zd
e_e	 Zd
e_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. Z0d/d0 Z1d1d2 Z2d3d4 Z3d5d6 Z4d7d8 Z5d9d: Z6d;d< Z7d=d> Z8d?d@ Z9dAdB Z:dOdDdEZ;dFdG Z<dHdI Z=dJdK Z>G dLdM dMeeZ?e@dNkreA  dS )P    )partial)permutationsN)compile_isolatedFlags)jitnjit
from_dtypetypeof)numpy_version)TypingError)typeserrors)TestCaseMemoryLeakMixinCompilationCachetagTc                    s    fdd}|S )aP  Decorator for generic check functions.
        Iterates over 'pyfuncs_to_use', calling 'func' with the iterated
        item as first argument. Example:

        @from_generic(numpy_array_reshape, array_reshape)
        def check_only_shape(pyfunc, arr, shape, expected_shape):
            # Only check Numba result to avoid Numpy bugs
            self.memory_leak_setup()
            got = generic_run(pyfunc, arr, shape)
            self.assertEqual(got.shape, expected_shape)
            self.assertEqual(got.size, arr.size)
            del got
            self.memory_leak_teardown()
    c                    s    fdd}|S )Nc                     s    fddD S )Nc                    s   g | ]}|f qS  r   ).0pyfunc)argsfunckwargsr   G/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_array_manipulation.py
<listcomp>'   s     zCfrom_generic.<locals>.decorator.<locals>.result.<locals>.<listcomp>r   r   r   )r   pyfuncs_to_user   r   result&   s    z/from_generic.<locals>.decorator.<locals>.resultr   )r   r   r   )r   r   	decorator%   s    zfrom_generic.<locals>.decoratorr   )r   r   r   r   r   from_generic   s    r   c                 C   s
   |  |S N)reshapearrZnewshaper   r   r   array_reshape,   s    r$   c                 C   s   t | |S r    )npr!   r"   r   r   r   numpy_array_reshape0   s    r&   c                 C   s   t | |S r    r%   Zbroadcast_to)r#   shaper   r   r   numpy_broadcast_to4   s    r)   c                  G   s
   t j|  S r    )r%   Zbroadcast_shapesr   r   r   r   numpy_broadcast_shapes8   s    r+   c                  G   s
   t j|  S r    )r%   Zbroadcast_arraysr*   r   r   r   numpy_broadcast_arrays<   s    r,   c                 C   s   t | || S r    r'   )r#   r(   idxr   r   r   numpy_broadcast_to_indexing@   s    r.   c                 C   s   |   S r    )flattenar   r   r   flatten_arrayD   s    r2   c                 C   s   |   S r    )ravelr0   r   r   r   ravel_arrayH   s    r4   c                 C   s
   |   jS r    )r3   sizer0   r   r   r   ravel_array_sizeL   s    r6   c                 C   s
   t | S r    )r%   r3   r0   r   r   r   numpy_ravel_arrayP   s    r7   c                 C   s   |   S r    	transposer0   r   r   r   transpose_arrayT   s    r:   c                 C   s
   t | S r    r%   r9   r0   r   r   r   numpy_transpose_arrayX   s    r<   c                 C   s   t j| |dS N)axesr;   r#   r>   r   r   r    numpy_transpose_array_axes_kwarg[   s    r@   c                 C   s   t j| |d S r=   )r%   r9   copyr?   r   r   r   %numpy_transpose_array_axes_kwarg_copy_   s    rB   c                 C   s
   |  |S r    r8   r?   r   r   r   array_transpose_axesc   s    rC   c                 C   s   |  | S r    )r9   rA   r?   r   r   r   array_transpose_axes_copyg   s    rD   c                 C   s^   t t | | d | d|f}t t |d |df}||j j}t |d}|d }|S )N   )   r      rG   )r%   r!   arangeTr9   )mnZr1Zr2Zr_difzr   r   r   transpose_issue_4708k   s     rM   c                 C   s   |   S r    )squeezer0   r   r   r   squeeze_arrayt   s    rO   c                 C   s   t | |S r    )r%   expand_dims)r1   axisr   r   r   rP   x   s    rP   c                  G   s
   t j|  S r    )r%   
atleast_1dr*   r   r   r   rR   |   s    rR   c                  G   s
   t j|  S r    )r%   
atleast_2dr*   r   r   r   rS      s    rS   c                  G   s
   t j|  S r    )r%   
atleast_3dr*   r   r   r   rT      s    rT   c                 C   s0   | j d d f| j dd   }tjjj| |dS )Nr   rF   rG   )strides)rU   r%   libstride_tricks
as_strided)r1   rU   r   r   r   as_strided1   s    rY   c                 C   sN   d}| j d d | j d | d |f }| j| jd f }tjjj| ||dS )NrE   rG   )r(   rU   )r(   rU   r%   rV   rW   rX   )r1   Zwindowr(   rU   r   r   r   as_strided2   s    $r[   c                 C   s   | t jd d f S r    )r%   Znewaxisr0   r   r   r   	add_axis2   s    r\   c                 C   s   | j f}| j}d|||f< d S )N      ?)xy)r#   Zarr2dr^   r_   r   r   r   	bad_index   s    r`   c                 C   s   | d S )N)rG   g       @r   r#   r   r   r   bad_float_index   s    rb   Fc                 C   s   t | ||S r    )r%   Zfill_diagonal)r#   valwrapr   r   r   numpy_fill_diagonal   s    re   c                 C   s
   t | S r    )r%   r(   ra   r   r   r   numpy_shape   s    rf   c                 C   s
   t | S r    )r%   Zflatnonzeror0   r   r   r   numpy_flatnonzero   s    rg   c                 C   s
   t | S r    )r%   Zargwherer0   r   r   r   numpy_argwhere   s    rh   c                       s  e Zd 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edfddZdd ZefddZefddZdd  Zd!d" Zefd#d$Zd%d& Zefd'd(Zd)d* Zef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"e#$e%d?k d@dAdB Z&e#$e%d?k d@dCdD Z'e#$e%d?k d@dEdF Z(e#$e%d?k d@dGdH Z)dIdJ Z*dKdL Z+dMdN Z,e-dOdP Z.dQdR Z/dSdT Z0dUdV Z1dWdX Z2dYdZ Z3d[d\ Z4d]d^ Z5d_d` Z6dadb Z7dcdd Z8dedf Z9dgdh Z:  Z;S )iTestArrayManipulationz4
    Check shape-changing operations on arrays.
    c                    s   t t|   t | _d S r    )superri   setUpr   ccacheself	__class__r   r   rk      s    zTestArrayManipulation.setUpc                    s4  t tg}dd t|fdd t|fddt|fdd}t|fd	d
t|fdd}td} |d  |d  |d  |d  |d tdd} |d  |d  |d  |d  |d |d |d |d tdd} |d  |d  |d  |d tddj} |d  |d ||d ||d ||d tddd} |d  |d  |d  |d   |d! |d" ||d# ||d$  fd%d&}tg }|| ||d'   d S )(Nc                 S   s"   t | t|t|f}|||S r    )r   r	   entry_point)r   r#   r(   cresr   r   r   generic_run   s    z=TestArrayManipulation.test_array_reshape.<locals>.generic_runc                    s8   | ||}    | ||}|| ~  d S r    memory_leak_setupassertPreciseEqualmemory_leak_teardown)r   r#   r(   expectedgotrs   rn   r   r   check   s    
z7TestArrayManipulation.test_array_reshape.<locals>.checkc                    s@       | ||}|j| |j|j ~  d S r    )ru   assertEqualr(   r5   rw   )r   r#   r(   expected_shapery   rz   r   r   check_only_shape   s    zBTestArrayManipulation.test_array_reshape.<locals>.check_only_shapec              	      s8    t} | || W 5 Q R X t|jd d S )Nzincompatible shape for array)assertRaisesNotImplementedErrorr|   str	exceptionr   r#   r(   raisesrz   r   r   check_err_shape   s
    zATestArrayManipulation.test_array_reshape.<locals>.check_err_shapec              	      s8    t} | || W 5 Q R X t|jd d S )Nz)total size of new array must be unchangedr   
ValueErrorr|   r   r   r   rz   r   r   check_err_size   s
    z@TestArrayManipulation.test_array_reshape.<locals>.check_err_sizec              	      s8    t} | || W 5 Q R X t|jd d S )Nzmultiple negative shape valuesr   r   rz   r   r   check_err_multiple_negative   s
    zMTestArrayManipulation.test_array_reshape.<locals>.check_err_multiple_negative   )r   )      )   rE   )r   rG   rE   )rG   r   rG   rG   rE   rG   rF   rE   r   r   )   )r   r   )r   rE   rF   )rG   r   rG   rE   rG   rF   rG   r   r   )rF      r      rZ   rZ   )rZ   r   )r   rZ   r   )r   r   rZ   )rZ   r   )rZ   r   r   )r   r   rZ   rZ   c                    s    | d  | d  | d  | d | dd | dd | dd | d	d
 | dd | d | d | d d S )Nr   r   )rG   r   rF   )r   7   rG   r   rF   rZ   r   )r   rZ   r   r   )r   rZ   )r   r   )rZ   r   r   )r   r   r   r   rG   rG   rF   r   ra   )r{   r   r~   r   r   check_empty  s    





z=TestArrayManipulation.test_array_reshape.<locals>.check_empty)rE   rF   r   )	r$   r&   r   r%   rH   r!   rI   arraydisable_leak_check)rn   r   r   r   r#   r   r   )r{   r   r~   rs   rn   r   test_array_reshape   sh    	































z(TestArrayManipulation.test_array_reshapec              	      s  t tttg}fddt|fdd}t|fdd}t|fdd}t|fd	d
}tdtdddtddddtdddddtddddd d dd d dd d f g}tt	|D ]j}||| d  t
tt|| jD ]@}t	| t fdd|D }	||| | ||| |	 qqttgdd }
|
dd |
dd |
dd   ||d d ||d d ||d d ||d d ||d d ||d d ||d d ||d d  ||d d! ||d d" ||d d# ||d d$ ||d d% ||d d& ||d d' ||d d( t$}td)d*ttddgf W 5 Q R X d+t|j d S ),Nc                    s&    j | t|t|f}|||S r    rl   compiler	   rq   )r   r#   r>   rr   rm   r   r   run6  s    z<TestArrayManipulation.test_array_transpose_axes.<locals>.runc                    sN   | ||} | ||} || |jj|jj |jj|jj d S r    )rv   r|   flagsf_contiguousc_contiguous)r   r#   r>   rx   ry   r   rn   r   r   r{   :  s    


z>TestArrayManipulation.test_array_transpose_axes.<locals>.checkc              	      s8    t} | || W 5 Q R X t|jd d S )Nzrepeated axis in transposer   r   r#   r>   r   r   r   r   check_err_axis_repeatedD  s
    zPTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_axis_repeatedc              	      s8    t} | || W 5 Q R X t|jd d S )Nz2axis is out of bounds for array of given dimensionr   r   r   r   r   check_err_axis_oobK  s
    zKTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_axis_oobc              	      s*    ttf  | || W 5 Q R X d S r    )r   	TypeErrorr   )r   r#   r>   r   r   r   check_err_invalid_argsR  s    zOTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_invalid_argsr   r   r   rF   rE   rG   @   r   c                    s   g | ]}|  qS r   r   r   r^   )ndimr   r   r   c  s     zCTestArrayManipulation.test_array_transpose_axes.<locals>.<listcomp>c                 S   s*   | ||}t | ||}tj|| d S r    )r   r%   testingassert_equal)r   rJ   rK   rx   ry   r   r   r   check_issue_4708g  s    
zITestArrayManipulation.test_array_transpose_axes.<locals>.check_issue_4708r   foo)r   g333333@)333333?r   r   )rF   r   r   )rE   rF   rG   rG   r   rG   )r   r   rF   )rF   )r   r   )rE   rG   rF   )rG   rF   )rE   rG   rF   r   )rE   rG   rF   TZnopythonz#np.transpose does not accept tuples)r@   rB   rC   rD   r   r%   rH   r!   rangelenr   tupler   rM   r   r   r   r   r<   r   assertInr   r   )rn   r   r{   r   r   r   Zarrsir>   Zneg_axesr   er   )r   r   rn   r   test_array_transpose_axes0  sl    	,



(z/TestArrayManipulation.test_array_transpose_axesc                    s   t fddfdd  fdd}td}|| tdd	}|| ||j ||d d d
  td}|| d S )Nc                    s&   j  t| t|f}|| |S r    r   )r#   rQ   rr   r   rn   r   r   r     s    z3TestArrayManipulation.test_expand_dims.<locals>.runc                    s6    | |}   | |}|| ~  d S r    rt   )r#   rQ   rx   ry   r   r   rn   r   r   r{     s    

z5TestArrayManipulation.test_expand_dims.<locals>.checkc                    s,   t | j d | jd D ]} | | qd S )NrG   )r   r   )r#   rQ   )r{   r   r   check_all_axes  s    z>TestArrayManipulation.test_expand_dims.<locals>.check_all_axesr   r   r   rZ   *   )rP   r%   rH   r!   rI   r   )rn   r   r#   r   )r{   r   r   rn   r   test_expand_dims  s    


z&TestArrayManipulation.test_expand_dimsc                    s(  fdd fdd} fdd}t d}t d}|| ||| t d	}t d
d }|d d d }	|| ||||	 t d
d}
|
j}|
d d d }||
 ||
|| t dd}|j}|d d d }|| |||| t dd}|| ||||| d S )Nc                    s$     | |  |  |  d S r    )ZassertStridesEqualrv   r/   )ry   rx   rm   r   r   check_result  s    z<TestArrayManipulation.check_atleast_nd.<locals>.check_resultc                    s    | |  d S r    r   )arg)cfuncr   r   r   r   check_single  s    z<TestArrayManipulation.check_atleast_nd.<locals>.check_singlec                     sF   |  } |  } t|t| t||D ]\}}|| q.d S r    )r|   r   zip)r   Zexpected_tupleZ	got_tuplery   rx   r   r   r   rn   r   r   check_tuple  s
    z;TestArrayManipulation.check_atleast_nd.<locals>.check_tupler   y              @r   r                 ?rZ   rF   rE   r   r      )rF   rF   rF   rF   )r%   r   rH   r!   rI   )rn   r   r   r   r   Za1Za2Zb1Zb2Zb3Zc1c2c3d1Zd2Zd3r   r   r   r   check_atleast_nd  s2    



z&TestArrayManipulation.check_atleast_ndc                 C   s"   t }tdd|}| || d S NTr   )rR   r   r   rn   r   r   r   r   r   test_atleast_1d  s    z%TestArrayManipulation.test_atleast_1dc                 C   s"   t }tdd|}| || d S r   )rS   r   r   r   r   r   r   test_atleast_2d  s    z%TestArrayManipulation.test_atleast_2dc                 C   s"   t }tdd|}| || d S r   )rT   r   r   r   r   r   r   test_atleast_3d  s    z%TestArrayManipulation.test_atleast_3dc                    sP    fdd fdd}t d}|| ||d ||d d S )Nc                    s   j  t| f}|| S r    r   )r#   rr   r   r   r   r     s    z3TestArrayManipulation.check_as_strided.<locals>.runc                    s     | }| } || d S r    rv   )r#   rx   ry   r   r   r   r{     s    z5TestArrayManipulation.check_as_strided.<locals>.checkr   r   )r   rG   r   )r%   rH   r!   )rn   r   r{   r#   r   r   r   check_as_strided  s    
z&TestArrayManipulation.check_as_stridedc                 C   s   |  t |  t d S r    )r   rY   r[   rm   r   r   r   test_as_strided  s    
z%TestArrayManipulation.test_as_stridedCc           
      C   s   t ddd}|dkr |j}t}t|}|dkr@|jdd}| |j| t	||f|d}|j
}||}||}	t j||	 d S )N	   rE   FA)layoutr   )r%   rH   r!   rI   r2   r	   rA   r|   r   r   rq   r   r   )
rn   r   r   r1   r   
arraytype1crr   rx   ry   r   r   r   test_flatten_array  s    z(TestArrayManipulation.test_flatten_arrayc                 C   s,   | j td | j tdd | j tdd d S )Nr   r   )r   r   r   )r   no_pyobj_flagsrm   r   r   r   test_flatten_array_npm  s    z,TestArrayManipulation.test_flatten_array_npmc                    s  fdd}t |tt |t  fdd}|tddddd |tdjddd	d
d	d |tddddd d d d df dd |tdddddd |tdjdddd	d
d	d |tdddddd d d d d d df dd d S )Nc           
         s   t |}|j| t| |f d}|j}| |}||}tj|| |jj	|jj	k}|jj	|jj	k}	||dk ||	 d S )Nr   r   )
r	   r|   r   r   rq   r%   r   r   ctypesdata)
r   r1   assume_layoutr   r   r   rx   ry   Z	py_copiedZ	nb_copied)r   rn   r   r   generic_check  s    z=TestArrayManipulation.test_ravel_array.<locals>.generic_checkc                     s   | |  | | d S r    r   r   )check_functioncheck_methodr   r   r{   *  s    
z5TestArrayManipulation.test_ravel_array.<locals>.checkr   rE   r   )r   r   order   rF   r   r   $   )r   r4   r7   r%   rH   r!   )rn   r   r   r{   r   )r   r   r   rn   r   test_ravel_array  s    

. z&TestArrayManipulation.test_ravel_arrayc           	      C   sV   t ddd}t}t|}t||f|d}|j}||}||}t j|| d S Nr   rE   r   )	r%   rH   r!   r6   r	   r   rq   r   r   	rn   r   r1   r   r   r   r   rx   ry   r   r   r   test_ravel_array_size8  s    z+TestArrayManipulation.test_ravel_array_sizec                 C   s   | j td d S Nr   )r   r   rm   r   r   r   test_ravel_array_npmD  s    z*TestArrayManipulation.test_ravel_array_npmc                 C   s   | j td d S r   )r   r   rm   r   r   r   test_ravel_array_size_npmG  s    z/TestArrayManipulation.test_ravel_array_size_npmc                    s"   t ttg fdd}|  d S )Nc                    sR   t ddd}t|}t| |f d}|j}| |}||}t j|| d S r   )r%   rH   r!   r	   r   rq   r   r   )r   r1   r   r   r   rx   ry   r   r   r   r{   K  s    z9TestArrayManipulation.test_transpose_array.<locals>.check)r   r:   r<   )rn   r   r{   r   r   r   test_transpose_arrayJ  s    
z*TestArrayManipulation.test_transpose_arrayc                 C   s   | j td d S r   )r   r   rm   r   r   r   test_transpose_array_npmY  s    z.TestArrayManipulation.test_transpose_array_npmc           	      C   s\   t dddddd}t}t|}t||f|d}|j}||}||}t j|| d S )Nr   rF   rG   rE   r   r   )	r%   rH   r!   rO   r	   r   rq   r   r   r   r   r   r   test_squeeze_array\  s    z(TestArrayManipulation.test_squeeze_arrayc              	   C   s:   |  tj}| jtd W 5 Q R X | dt|j d S )Nr   rN   )r   r   r   r   r   r   r   r   rn   r   r   r   r   test_squeeze_array_npmh  s    z,TestArrayManipulation.test_squeeze_array_npmc           	      C   sV   t ddd}t}t|}t||f|d}|j}||}||}t j|| d S r   )	r%   rH   r!   r\   r	   r   rq   r   r   r   r   r   r   test_add_axis2n  s    z$TestArrayManipulation.test_add_axis2c              	   C   s6   |   }| jtd W 5 Q R X | dt|j d S )Nr   z$unsupported array index type none in)assertTypingErrorr   r   r   r   r   r   r   r   r   test_add_axis2_npmz  s
    
z(TestArrayManipulation.test_add_axis2_npmc              	   C   sj   |   F}ttdtjfdtjfg}ttjdd}tt||ft	d W 5 Q R X | 
dt|j d S )Nr^   r_   rF   r   r   zunsupported array index type)r   r   r%   dtypeint32r   Arrayr   r`   r   r   r   r   )rn   r   r   Z
arraytype2r   r   r   test_bad_index_npm  s    

z(TestArrayManipulation.test_bad_index_npmc              	   C   sB   |   }ttttjddf W 5 Q R X | dt|j d S )NrF   r   z$unsupported array index type float64)	r   r   rb   r   r   float64r   r   r   r   r   r   r   test_bad_float_index_npm  s    
z.TestArrayManipulation.test_bad_float_index_npmc                    s   t tdddd  dd } fdd} fd	d
}fdd}|dD ]}| D ]}||| q\qR|dD ]}| D ]}||| qqvtdgd dd}||d ||dddg ||tdddg d S )NTr   c                 s   sX   | | fV  d|  | fV  | d|  fV  d|  d d|  d fV  | | | | fV  dV  d S )NrF   rG   )rG   rG   rG   r   )rK   r   r   r   _shape_variations  s    
zITestArrayManipulation.test_fill_diagonal_basic.<locals>._shape_variationsc                   s   s   dV  dV  t jV  t j V  dV  t dV  dV  ddgV  t ddd	d
dV  t t dd	d	V  t dd	d	d d d V  d S )NrG   gA`"	@Tr   r   r   r   6   rE   rF   rZ   )r%   naninfrH   r!   asfortranarrayr   r   r   r   _val_variations  s    

zGTestArrayManipulation.test_fill_diagonal_basic.<locals>._val_variationsc                 3   s<    | D ].}t j|t jdV  t t j|t jdV  qd S )Nr   )r%   zerosr  r  ones)rK   r(   r  r   r   #_multi_dimensional_array_variations  s    z[TestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variationsc                 3   sL    | D ]>}t jtdd |D t jd}tdd |D }|| V  qd S )Nc                 S   s   g | ]}|d  qS rF   r   r   r   r   r   r     s     zwTestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variations_strided.<locals>.<listcomp>r
  c                 s   s   | ]}t d |d dV  qdS )r   rF   N)slicer   r   r   r   	<genexpr>  s     zvTestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variations_strided.<locals>.<genexpr>)r%   r  r   r  )rK   r(   tmpZslicerr  r   r   +_multi_dimensional_array_variations_strided  s    zcTestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variations_stridedc                    s\   dD ]R}|   }|   }|d kr&i }nd|i}||f|  ||f| || qd S )N)NTFrd   )rA   rv   )r#   rc   rd   r1   bparamsr   r   rn   r   r   _check_fill_diagonal  s    zLTestArrayManipulation.test_fill_diagonal_basic.<locals>._check_fill_diagonalrE   r   F)re   r   r%   r   r!   )rn   r	  r  r  r  r#   rc   r   )r  r   r   rn   r   test_fill_diagonal_basic  s"    


z.TestArrayManipulation.test_fill_diagonal_basicc              
      sT  t }tdd| d}  tg tdfD ]6}t} || W 5 Q R X dt|j	ks2t
q2t,}td} || dt|j	 W 5 Q R X  fdd	}tjd
tjd}tj}||| dtjg}||| tjdddgtjd}||| tjd
tjd}dddg}||| d}||| tdg}||| d S )NTr   rG   r   z'The first argument must be at least 2-D)rE   rE   r   z/All dimensions of input must be of equal lengthc              	      s6    t} | | W 5 Q R X dt|j d S )Nz'Unable to safely conform val to a.dtyper   )r#   rc   r   r   rn   r   r   _assert_raises  s    zPTestArrayManipulation.test_fill_diagonal_exception_cases.<locals>._assert_raisesrE   rE   r
  ffffff
@rF   g    _Bgffffff?g@g}Ô%Igp=T)re   r   r   r%   r   r  r   r   r   r   AssertionErrorr   r  r|   r   r  r  int64Zfloat32)rn   r   rc   r1   r   r  r#   r   r  r   "test_fill_diagonal_exception_cases  s6    








z8TestArrayManipulation.test_fill_diagonal_exception_casesc                 C   s  t }tdd|}tddgtddgtddgtddgtddgtdd	gtd
dgtd
dgtd
dgtddgtddgtddgtddgtddgtddgddgddgg}|D ](\}}|||}|||}| || qd S )NTr   r   r   r   rE   rG   r  rG   rF   rE   rE   rG   rE   r   rF   r   r   rF   rG   )rF   r   rF   rF   )r)   r   r%   r   r  rH   rv   )rn   r   r   r   input_arrayr(   rx   ry   r   r   r   test_broadcast_to  s0    

z'TestArrayManipulation.test_broadcast_toc           	      C   s@  t }tdd|}tddtdgtddtdgtddtdgtddtdgtdd	tdgtdd
tdgtddtdgtddtdgtddtdgtddtdgtddtdgtddtdgtddtdgddtdgg}|   |D ]>\}}}}| |}||| W 5 Q R X | |t	|j
 qd S )NTr   r   r   z3The argument "shape" must be a tuple or an integer.r   r   z=operands could not be broadcast together with remapped shapesr  r  r   r#  rG   rG   zDinput operand has more dimensions than allowed by the axis remappingr$  rZ   z4all elements of broadcast shape must be non-negativer   )rZ   rF   g?g@z7The second argument "shape" must be a tuple of integershelloz-The first argument "array" must be array-like)r)   r   r%   r  r   r   r   r   r   r   r   )	rn   r   r   r   r#   Ztarget_shapeerrmsgr   r   r   r   test_broadcast_to_raises)  sd    z.TestArrayManipulation.test_broadcast_to_raisesc                 C   s\   t }tdd|}tjdtjd}d}|||}d|d< | | d | | d d S )	NTr   rF   r
  r$  
   r      )r)   r   r%   r  r   r|   sum)rn   r   r   r%  r(   viewr   r   r   test_broadcast_to_change_viewS  s    
z3TestArrayManipulation.test_broadcast_to_change_viewc           	      C   s\   t }tdd|}tdddgg}|D ].\}}}||||}||||}| || q(d S )NTr   rF   r$  r   )r.   r   r%   r  rv   )	rn   r   r   r   r%  r(   r-   rx   ry   r   r   r   test_broadcast_to_indexing^  s    z0TestArrayManipulation.test_broadcast_to_indexing)rG   r.  zrequires NumPy 1.20 or newerc                 C   s   t }tdd|}dgddgdgdgdgddgdd	dd
gd	gddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgddgg}|D ],}|| }|| }| |t | || qd S )NTr   r   )   r   r'  )rE   r   )r   r3  )r   r   rG   )r   rG   r3  r"  rE   rG   rG   r   r   r   rG   r   r   r   rF   rE   rF   )r+   r   ZassertIsInstancer   rv   )rn   r   r   r   input_shaperx   ry   r   r   r   test_broadcast_shapesi  sF    
z+TestArrayManipulation.test_broadcast_shapesc              
   C   s   t }tdd|}|   ddgddgdddgddgd	d
ddgddgg}|D ]4}| t}||  W 5 Q R X | dt|j qLd S )NTr   r   r  r   r  rG   rE   r   rF   rE   rE   r   r4  r7  )r-  r   rF   =shape mismatch: objects cannot be broadcast to a single shaper+   r   r   r   r   r   r   r   )rn   r   r   r   r8  r   r   r   r   test_broadcast_shapes_raises  s     
z2TestArrayManipulation.test_broadcast_shapes_raisesc              	   C   sR   t }tdd|}|   | t}|ddd W 5 Q R X | dt|j d S )NTr   r   rF   r   z#negative dimensions are not allowedr=  )rn   r   r   r   r   r   r   (test_broadcast_shapes_negative_dimension  s    z>TestArrayManipulation.test_broadcast_shapes_negative_dimensionc              
   C   sf   t }tdd|}|   dddddg}|D ]4}| t}||  W 5 Q R X | dt|j q,d S )	NTr   )r   )r)  )g333333@)stringr   r1   )rG   rA  z#must be either an int or tuple[int])r+   r   r   r   r   r   r   r   )rn   r   r   Zinpsinpr   r   r   r   "test_broadcast_shapes_invalid_type  s    z8TestArrayManipulation.test_broadcast_shapes_invalid_typec              	      s   t tdd  fdd}dD ]}t|}|| q&dddgddgd	d
ggddfD ]}|| q\t} d W 5 Q R X dt|j d S )NTr   c                    s    | } | } || d S r    r   )r^   rx   ry   r  r   r   r{     s    z/TestArrayManipulation.test_shape.<locals>.check)r   r   r   )r   r   r   rG   FrF   rE   r   r   r!  r1   z+The argument to np.shape must be array-like)	rf   r   r%   emptyr   r   r   r   r   )rn   r{   tr#   r   r   r  r   
test_shape  s    

"
z TestArrayManipulation.test_shapec                    sJ   t }tdd|} fdd}| D ] }||}||} || q$d S )NTr   c                  3   s   t ddV  t jdddV  t g V   jd} d| t | dk< | V  | dddV  | jd	d
ddV  | dddd d
 V  | d V  d S )Nr   r   r   Z
fill_valued           皙?r   2   rF   r   r   r   rG   r   )r%   rH   fullr   randomrandnabsr!   r0   rm   r   r   a_variations  s    zBTestArrayManipulation.test_flatnonzero_basic.<locals>.a_variations)rg   r   rv   rn   r   r   rP  r1   rx   ry   r   rm   r   test_flatnonzero_basic  s    
z,TestArrayManipulation.test_flatnonzero_basicc                    sJ   t }tdd|} fdd}| D ] }||}||} || q$d S )NTr   c                  3   s   t dddkV  t jdddV  t jdddV  t g V  t ddd	gV   jd
} | dkV  | ddddkV  | jdddddkV  | dddd d dkV  | | d kV  | |  kV  d S )Nr   r   rF   r   rG  rG   g      rI  r]   rH  rJ  r   g      ?rK  r   r   r   )r%   rH   rL  r   rM  rN  r!   r0   rm   r   r   rP    s    
z?TestArrayManipulation.test_argwhere_basic.<locals>.a_variations)rh   r   rv   rQ  r   rm   r   test_argwhere_basic  s    
z)TestArrayManipulation.test_argwhere_basicc                   c   sf   dV  dV  ddgddgfV  dV  t jV  dV  dV  dV  d	V  d
V  dV  d V  dV  dV  d S )N)r(  )r  g@)g      @gffffff@)rI  r]   rI  g      r   rG   rF   rE   r   FT)TFTy       @      ?Za_string )r%   r  r   r   r   r   array_like_variations  s    z+TestArrayManipulation.array_like_variationsc                 C   s@   t }tdd|}|  D ] }||}||}| || qd S r   )rg   r   rU  rv   rn   r   r   r1   rx   ry   r   r   r   test_flatnonzero_array_like#  s    z1TestArrayManipulation.test_flatnonzero_array_likec                 C   s@   t }tdd|}|  D ] }||}||}| || qd S r   )rh   r   rU  rv   rV  r   r   r   test_argwhere_array_like,  s    z.TestArrayManipulation.test_argwhere_array_likec           	      C   sT   t }tdd|}dd |D }|| }|gt| }dd |D }| || d S )NTr   c                 S   s   g | ]}t |qS r   r%   r  r   sr   r   r   r   :  s     zOTestArrayManipulation.broadcast_arrays_assert_correct_shape.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r   r(   r   r1   r   r   r   r   =  s     r,   r   r   rv   )	rn   input_shapesr}   r   r   inarrays	outarraysrx   ry   r   r   r   %broadcast_arrays_assert_correct_shape4  s    z;TestArrayManipulation.broadcast_arrays_assert_correct_shapec              	   C   sr   t }tdd|}ddddddd	d
dg	}|D ]@}|g}| || ||g}| || |||g}| || q,d S )NTr   r   r   r6  )r   rE   r5  )rE   r   r"  r4  r  )r,   r   rb  )rn   r   r   r   r(   r_  Zinput_shapes2Zinput_shapes3r   r   r   'test_broadcast_arrays_same_input_shapes@  s&    
z=TestArrayManipulation.test_broadcast_arrays_same_input_shapesc                 C   s   ddgdgddgdgddgdgddgdgddgdgddgdgddgdgddgdgd	dgdgdd	gdgddgdgddgdgdd	gd	gg}|D ]*\}}|  || |  |d d d
 | qd S )Nr   r   r"  r  r4  r'  r5  r   r6  rZ   rb  rn   r   r_  r}   r   r   r   9test_broadcast_arrays_two_compatible_by_ones_input_shapes^  s"    












zOTestArrayManipulation.test_broadcast_arrays_two_compatible_by_ones_input_shapesc                 C   s   ddgdgddgdgddgdgddgdgddgdgddgdgddgdgddgdgddgdgddgdgddgdgdd	gd	gdd
gd	gdd	gd	gdd	gd	gddgdgdd
gd
gddgdgddgdgdd
gd
gg}|D ]*\}}|  || |  |d d d | qd S )Nr   r   r  r4  r   r'  r"  r   r   r6  r5  rZ   rd  re  r   r   r   Dtest_broadcast_arrays_two_compatible_by_prepending_ones_input_shapesx  s0    



















zZTestArrayManipulation.test_broadcast_arrays_two_compatible_by_prepending_ones_input_shapesc           	      C   sv   t }tdd|}ddgdgddgdgddgdgg}|D ]8\}}|| }d	d
 |D }|gt| }| || q8d S )NTr   Fr   rG   rF   r   r  c                 S   s   g | ]
}|j qS r   r\  r]  r   r   r   r     s     zLTestArrayManipulation.test_broadcast_arrays_scalar_input.<locals>.<listcomp>r^  )	rn   r   r   r   r`  r}   ra  ry   rx   r   r   r   "test_broadcast_arrays_scalar_input  s    


z8TestArrayManipulation.test_broadcast_arrays_scalar_inputc                 C   sB   t }tdd|}|dd}ddg}dd |D }| || d S )NTr   ){   i  )i  r  c                 S   s   g | ]
}|j qS r   r\  r]  r   r   r   r     s     zKTestArrayManipulation.test_broadcast_arrays_tuple_input.<locals>.<listcomp>)r,   r   rv   rn   r   r   ra  rx   ry   r   r   r   !test_broadcast_arrays_tuple_input  s    
z7TestArrayManipulation.test_broadcast_arrays_tuple_inputc                 C   sT   t }tdd|}|tdtjdtjd}ddg}dd |D }| || d S )NTr   rF   r"  r
  c                 S   s   g | ]
}|j qS r   r\  r]  r   r   r   r     s     zOTestArrayManipulation.test_broadcast_arrays_non_array_input.<locals>.<listcomp>)r,   r   r%   Zintpr  rv   rj  r   r   r   %test_broadcast_arrays_non_array_input  s    z;TestArrayManipulation.test_broadcast_arrays_non_array_inputc              	   C   sd   t }tdd|}|   | t$}tdd}d}||| W 5 Q R X | dt	|j
 d S )NTr   r   r   zMismatch of argument types)r,   r   r   r   r   r%   rH   r!   r   r   r   )rn   r   r   r   r#   r  r   r   r   /test_broadcast_arrays_invalid_mixed_input_types  s    zETestArrayManipulation.test_broadcast_arrays_invalid_mixed_input_typesc              	   C   sd   t }tdd|}|   | t$}tjdtjd}d}||| W 5 Q R X | dt	|j
 d S )NTr   rE   r
  zhello worldzArgument "1" must be array-like)r,   r   r   r   r   r%   r  r  r   r   r   )rn   r   r   r   r#   r[  r   r   r   #test_broadcast_arrays_invalid_input  s    z9TestArrayManipulation.test_broadcast_arrays_invalid_inputc                 C   s   t }tdd|}|   ddgddgdddgddgg}|D ]Z}||d d d	 fD ]B}| t}d
d |D }||  W 5 Q R X | dt|j qRq<d S )NTr   r   r  r   r  r:  r;  rZ   c                 S   s   g | ]}t |qS r   rY  rZ  r   r   r   r     s     zdTestArrayManipulation.test_broadcast_arrays_incompatible_shapes_raise_valueerror.<locals>.<listcomp>r<  )r,   r   r   r   r   r   r   r   )rn   r   r   r   r_  r(   r   r`  r   r   r   :test_broadcast_arrays_incompatible_shapes_raise_valueerror  s     zPTestArrayManipulation.test_broadcast_arrays_incompatible_shapes_raise_valueerror)<__name__
__module____qualname____doc__rk   r   r   r   r   r   r   r   r   r   enable_pyobj_flagsr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r&  r,  r1  r2  unittestZskipIfr
   r9  r>  r?  rC  rF  rR  rS  staticmethodrU  rW  rX  rb  rc  rf  rg  rh  rk  rl  rm  rn  ro  __classcell__r   r   ro   r   ri      sp   p^/#	H.#*
*




	!ri   __main__)F)B	functoolsr   	itertoolsr   Znumpyr%   ru  Znumba.core.compilerr   r   Znumbar   r   r   r	   Znumba.np.numpy_supportr
   Znumba.core.errorsr   Z
numba.corer   r   Znumba.tests.supportr   r   r   r   rt  Zenable_pyobjectr   Znrtr   r$   r&   r)   r+   r,   r.   r2   r4   r6   r7   r:   r<   r@   rB   rC   rD   rM   rO   rP   rR   rS   rT   rY   r[   r\   r`   rb   re   rf   rg   rh   ri   rp  mainr   r   r   r   <module>   sp   	
        8
