o
    8ήc                     @   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 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 | ]}|g R i qS  r   ).0pyfunc)argsfunckwargsr   J/tmp/pip-target-vg8gfxp4/lib/python/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&      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 N)reshapearrnewshaper   r   r   array_reshape,      
r'   c                 C      t | |S r"   )npr#   r$   r   r   r   numpy_array_reshape0      r+   c                 C   r)   r"   r*   broadcast_to)r%   shaper   r   r   numpy_broadcast_to4   r,   r0   c                  G   
   t j|  S r"   )r*   broadcast_shapesr   r   r   r   numpy_broadcast_shapes8   r(   r4   c                  G   r1   r"   )r*   broadcast_arraysr3   r   r   r   numpy_broadcast_arrays<   r(   r6   c                 C   s   t | || S r"   r-   )r%   r/   idxr   r   r   numpy_broadcast_to_indexing@      r8   c                 C      |   S r"   )flattenar   r   r   flatten_arrayD      r>   c                 C   r:   r"   )ravelr<   r   r   r   ravel_arrayH   r?   rA   c                 C   s
   |   jS r"   )r@   sizer<   r   r   r   ravel_array_sizeL   r(   rC   c                 C   
   t | S r"   )r*   r@   r<   r   r   r   numpy_ravel_arrayP   r(   rE   c                 C   r:   r"   	transposer<   r   r   r   transpose_arrayT   r?   rH   c                 C   rD   r"   r*   rG   r<   r   r   r   numpy_transpose_arrayX   r(   rJ   c                 C   s   t j| |dS N)axesrI   r%   rL   r   r   r    numpy_transpose_array_axes_kwarg[      rN   c                 C   s   t j| |d S rK   )r*   rG   copyrM   r   r   r   %numpy_transpose_array_axes_kwarg_copy_      rQ   c                 C   r!   r"   rF   rM   r   r   r   array_transpose_axesc   r(   rS   c                 C   s   |  | S r"   )rG   rP   rM   r   r   r   array_transpose_axes_copyg   rO   rT   c                 C   s^   t t | | d | d|f}t t |d |df}||j j}t |d}|d }|S )N   )   r      rW   )r*   r#   arangeTrG   )mnr1r2r_difzr   r   r   transpose_issue_4708k   s    r`   c                 C   r:   r"   )squeezer<   r   r   r   squeeze_arrayt   r?   rb   c                 C   r)   r"   )r*   expand_dims)r=   axisr   r   r   rc   x   r,   rc   c                  G   r1   r"   )r*   
atleast_1dr3   r   r   r   re   |   r(   re   c                  G   r1   r"   )r*   
atleast_2dr3   r   r   r   rf      r(   rf   c                  G   r1   r"   )r*   
atleast_3dr3   r   r   r   rg      r(   rg   c                 C   s0   | j d d f| j dd   }tjjj| |dS )Nr   rV   rW   )strides)rh   r*   libstride_tricks
as_strided)r=   rh   r   r   r   as_strided1   s   rl   c                 C   sN   d}| j d d | j d | d |f }| j| jd f }tjjj| ||dS )NrU   rW   )r/   rh   )r/   rh   r*   ri   rj   rk   )r=   windowr/   rh   r   r   r   as_strided2   s   $ro   c                 C   s   | t jd d f S r"   )r*   newaxisr<   r   r   r   	add_axis2   rR   rq   c                 C   s   | j f}| j}d|||f< d S )N      ?)xy)r%   arr2drs   rt   r   r   r   	bad_index   s   rv   c                 C   s   | d S )N)rW   g       @r   r%   r   r   r   bad_float_index   s   rx   Fc                 C   s   t | ||S r"   )r*   fill_diagonal)r%   valwrapr   r   r   numpy_fill_diagonal   rO   r|   c                 C   rD   r"   )r*   r/   rw   r   r   r   numpy_shape   r(   r}   c                 C   rD   r"   )r*   flatnonzeror<   r   r   r   numpy_flatnonzero   r(   r   c                 C   rD   r"   )r*   argwherer<   r   r   r   numpy_argwhere   r(   r   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"   )superr   setUpr   ccacheself	__class__r   r   r      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r   r   r   r   check   s   
z7TestArrayManipulation.test_array_reshape.<locals>.checkc                    s@       | ||}|j| |j|j ~  d S r"   )r   assertEqualr/   rB   r   )r   r%   r/   expected_shaper   r   r   r   check_only_shape   s   zBTestArrayManipulation.test_array_reshape.<locals>.check_only_shapec                    L    t} | || W d    n1 sw   Y  t|jd d S )Nzincompatible shape for array)assertRaisesNotImplementedErrorr   str	exceptionr   r%   r/   raisesr   r   r   check_err_shape      zATestArrayManipulation.test_array_reshape.<locals>.check_err_shapec                    r   )Nz)total size of new array must be unchangedr   
ValueErrorr   r   r   r   r   r   r   check_err_size   r   z@TestArrayManipulation.test_array_reshape.<locals>.check_err_sizec                    r   )Nzmultiple negative shape valuesr   r   r   r   r   check_err_multiple_negative   r   zMTestArrayManipulation.test_array_reshape.<locals>.check_err_multiple_negative   )r   )      )   rU   )r   rW   rU   )rW   r   rW   rW   rU   rW   rV   rU   r   r   )   )r   r   )r   rU   rV   )rW   r   rW   rU   rW   rV   rW   r   r   )rV      r      rm   rm   )rm   r   )r   rm   r   )r   r   rm   )rm   r   )rm   r   r   )r   r   rm   rm   c                    s    | d  | d  | d  | d | dd | dd | dd | d	d
 | dd | d | d | d d S )Nr   r   )rW   r   rV   )r   7   rW   r   rV   rm   r   )r   rm   r   r   )r   rm   )r   r   )rm   r   r   )r   r   r   r   rW   rW   rV   r   rw   )r   r   r   r   r   check_empty  s   





z=TestArrayManipulation.test_array_reshape.<locals>.check_empty)rU   rV   r   )	r'   r+   r    r*   rX   r#   rY   arraydisable_leak_check)r   r   r   r   r%   r   r   )r   r   r   r   r   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 ]4}||| d  t
tt|| jD ]}t	| t fdd|D }	||| | ||| |	 qqut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 d    n	1 sVw   Y  d+t|j d S ),Nc                    s&    j | t|t|f}|||S r"   r   compiler	   r   )r   r%   rL   r   r   r   r   run6     z<TestArrayManipulation.test_array_transpose_axes.<locals>.runc                    sN   | ||} | ||} || |jj|jj |jj|jj d S r"   )r   r   flagsf_contiguousc_contiguous)r   r%   rL   r   r   r   r   r   r   r   :  s   


z>TestArrayManipulation.test_array_transpose_axes.<locals>.checkc                    r   )Nzrepeated axis in transposer   r   r%   rL   r   r   r   r   check_err_axis_repeatedD  r   zPTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_axis_repeatedc                    r   )Nz2axis is out of bounds for array of given dimensionr   r   r   r   r   check_err_axis_oobK  r   zKTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_axis_oobc                    s@    ttf  | || W d    d S 1 sw   Y  d S r"   )r   	TypeErrorr   )r   r%   rL   r   r   r   check_err_invalid_argsR  s   "zOTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_invalid_argsr   r   r   rV   rU   rW   @   r   c                    s   g | ]}|  qS r   r   r   rs   )ndimr   r   r   c      zCTestArrayManipulation.test_array_transpose_axes.<locals>.<listcomp>c                 S   s*   | ||}t | ||}tj|| d S r"   )r   r*   testingassert_equal)r   rZ   r[   r   r   r   r   r   check_issue_4708g  s   
zITestArrayManipulation.test_array_transpose_axes.<locals>.check_issue_4708r   foo)r   g333333@)333333?r   r   )rV   r   r   )rU   rV   rW   rW   r   rW   )r   r   rV   )rV   )r   r   )rU   rW   rV   )rW   rV   )rU   rW   rV   r   )rU   rW   rV   Tnopythonz#np.transpose does not accept tuples)rN   rQ   rS   rT   r    r*   rX   r#   rangelenr   tupler   r`   r   r   r   r   rJ   r   assertInr   r   )r   r   r   r   r   r   arrsirL   neg_axesr   er   )r   r   r   r   test_array_transpose_axes0  sp   	,



 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%   rd   r   r   r   r   r   r     r   z3TestArrayManipulation.test_expand_dims.<locals>.runc                    s6    | |}   | |}|| ~  d S r"   r   )r%   rd   r   r   r   r   r   r   r   r     s   

z5TestArrayManipulation.test_expand_dims.<locals>.checkc                    s,   t | j d | jd D ]} | | qd S )NrW   )r   r   )r%   rd   )r   r   r   check_all_axes  s   z>TestArrayManipulation.test_expand_dims.<locals>.check_all_axesr   r   r   rm   *   )rc   r*   rX   r#   rY   r   )r   r   r%   r   )r   r   r   r   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"   )assertStridesEqualr   r;   )r   r   r   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  r   z<TestArrayManipulation.check_atleast_nd.<locals>.check_singlec                     sF   |  } |  } t|t| t||D ]	\}}|| qd S r"   )r   r   zip)r   expected_tuple	got_tupler   r   r   r   r   r   r   r   check_tuple  s   z;TestArrayManipulation.check_atleast_nd.<locals>.check_tupler   y              @r   r                 ?rm   rV   rU   r   r      )rV   rV   rV   rV   )r*   r   rX   r#   rY   )r   r   r   r   r   a1a2b1b2b3c1c2c3d1d2d3r   r   r   r   check_atleast_nd  s2   



z&TestArrayManipulation.check_atleast_ndc                 C   "   t }tdd|}| || d S NTr   )re   r   r   r   r   r   r   r   r   test_atleast_1d     z%TestArrayManipulation.test_atleast_1dc                 C   r   r   )rf   r   r   r   r   r   r   test_atleast_2d  r   z%TestArrayManipulation.test_atleast_2dc                 C   r   r   )rg   r   r   r   r   r   r   test_atleast_3d  r   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%   r   r   r   r   r     s   
z3TestArrayManipulation.check_as_strided.<locals>.runc                    s     | }| } || d S r"   r   )r%   r   r   r   r   r   r        z5TestArrayManipulation.check_as_strided.<locals>.checkr   r   )r   rW   r   )r*   rX   r#   )r   r   r   r%   r   r   r   check_as_strided  s   
z&TestArrayManipulation.check_as_stridedc                 C   s   |  t |  t d S r"   )r  rl   ro   r   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	   rU   FA)layoutr   )r*   rX   r#   rY   r>   r	   rP   r   r  r   r   r   r   )
r   r   r  r=   r   
arraytype1crr   r   r   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_flagsr   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   r   r*   r   r   ctypesdata)
r   r=   assume_layoutr  r  r   r   r   	py_copied	nb_copied)r   r   r   r   generic_check  s   z=TestArrayManipulation.test_ravel_array.<locals>.generic_checkc                     s    | i |  | i | d S r"   r   r   )check_functioncheck_methodr   r   r   *  s   z5TestArrayManipulation.test_ravel_array.<locals>.checkr  rU   r  )r  r	  order   rV   r   r
  $   )r   rA   rE   r*   rX   r#   )r   r   r  r   r   )r  r  r   r   r   test_ravel_array  s   

. :z&TestArrayManipulation.test_ravel_arrayc           	      C   V   t ddd}t}t|}t||f|d}|j}||}||}t j|| d S Nr  rU   r  )	r*   rX   r#   rC   r	   r   r   r   r   	r   r   r=   r   r  r  r   r   r   r   r   r   test_ravel_array_size8     z+TestArrayManipulation.test_ravel_array_sizec                 C      | j td d S Nr  )r  r  r   r   r   r   test_ravel_array_npmD  r9   z*TestArrayManipulation.test_ravel_array_npmc                 C   r$  r%  )r"  r  r   r   r   r   test_ravel_array_size_npmG  r9   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*   rX   r#   r	   r   r   r   r   )r   r=   r  r  r   r   r   r  r   r   r   K  s   z9TestArrayManipulation.test_transpose_array.<locals>.check)r    rH   rJ   )r   r   r   r   r  r   test_transpose_arrayJ  s   

z*TestArrayManipulation.test_transpose_arrayc                 C   r$  r%  )r(  r  r   r   r   r   test_transpose_array_npmY  r9   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   rV   rW   rU   r   r  )	r*   rX   r#   rb   r	   r   r   r   r   r!  r   r   r   test_squeeze_array\  s   z(TestArrayManipulation.test_squeeze_arrayc                 C   sN   |  tj}| jtd W d    n1 sw   Y  | dt|j d S )Nr  ra   )r   r   r   r*  r  r   r   r   r   r   r   r   r   test_squeeze_array_npmh  s   z,TestArrayManipulation.test_squeeze_array_npmc           	      C   r  r   )	r*   rX   r#   rq   r	   r   r   r   r   r!  r   r   r   test_add_axis2n  r#  z$TestArrayManipulation.test_add_axis2c                 C   sJ   |   }| jtd W d    n1 sw   Y  | 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   s~   |   (}ttdtjfdtjfg}ttjdd}tt||ft	d W d    n1 s/w   Y  | 
dt|j d S )Nrs   rt   rV   r  r  zunsupported array index type)r.  r   r*   dtypeint32r   Arrayr   rv   r  r   r   r   )r   r   r  
arraytype2r   r   r   test_bad_index_npm  s   

z(TestArrayManipulation.test_bad_index_npmc                 C   sV   |   }ttttjddf W d    n1 sw   Y  | dt|j d S )NrV   r  z$unsupported array index type float64)	r.  r   rx   r   r2  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.q)|dD ]}| D ]}||| q@q;tdgd dd}||d ||g d ||tg d d S )NTr   c                 s   sZ    | | fV  d|  | fV  | d|  fV  d|  d d|  d fV  | | | | fV  dV  d S )NrV   rW   )rW   rW   rW   r   )r[   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 )NrW   gA`"	@Tr   r   r   r  6   rU   rV   rm   )r*   naninfrX   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r0  )r*   zerosr5  r<  ones)r[   r/   r7  r   r   #_multi_dimensional_array_variations  s
   z[TestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variationsc                 3   sN     | 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 rV   r   r   r   r   r   r     r   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   rV   N)slicer   r   r   r   	<genexpr>  s    zvTestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variations_strided.<locals>.<genexpr>)r*   r?  r   r5  )r[   r/   tmpslicerrA  r   r   +_multi_dimensional_array_variations_strided  s   zcTestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variations_stridedc                    sd   dD ]-}|   }|   }|d u ri }nd|i}||fi |  ||fi | || qd S )N)NTFr{   )rP   r   )r%   rz   r{   r=   bparamsr   r   r   r   r   _check_fill_diagonal  s   zLTestArrayManipulation.test_fill_diagonal_basic.<locals>._check_fill_diagonalrU   r  F)FTFTFT)r|   r   r*   r   r#   )r   r=  rB  rH  rL  r%   rz   r   )r7  r   r   r   r   test_fill_diagonal_basic  s&   


z.TestArrayManipulation.test_fill_diagonal_basicc              	      sx  t }tdd| d}  tg tdfD ]%}t} || W d    n1 s0w   Y  dt|j	v s>J qt
}td} || dt|j	 W d    n1 sbw   Y   fdd	}tjd
tjd}tj}||| dtjg}||| tjg dtjd}||| tjd
tjd}g d}||| d}||| tdg}||| d S )NTr   rW   r   z'The first argument must be at least 2-D)rU   rU   r   z/All dimensions of input must be of equal lengthc                    sJ    t} | | W d    n1 sw   Y  dt|j d S )Nz'Unable to safely conform val to a.dtyper   )r%   rz   r   r   r   r   r   _assert_raises  s   zPTestArrayManipulation.test_fill_diagonal_exception_cases.<locals>._assert_raisesrU   rU   r>  ffffff
@)rW   rV   g    _B)gffffff?g@}Ô%Igp=TrS  )r|   r   r   r*   r   r@  r   r   r   r   r   r?  r   r1  r:  r;  int64float32)r   r   rz   r=   r   rP  r%   r   rO  r   "test_fill_diagonal_exception_cases  s:   







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 ]\}}|||}|||}| || qmd S )NTr   r   r   r   rU   rW   rC  rW   rV   rU   rU   rW   rU   r   rV   r   r   rV   rW   )rV   r   rV   rV   )r0   r   r*   r   r@  rX   r   )r   r   r   r  input_arrayr/   r   r   r   r   r   test_broadcast_to  s2   

z'TestArrayManipulation.test_broadcast_toc           	      C   sT  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 d    n1 sw   Y  | |t	|j
 q~d S )NTr   r   r   z3The argument "shape" must be a tuple or an integer.r   rW  z=operands could not be broadcast together with remapped shapesrC  r8  r   rZ  rW   rW   zDinput operand has more dimensions than allowed by the axis remappingr[  rm   z4all elements of broadcast shape must be non-negativer   )rm   rV   g?g@z7The second argument "shape" must be a tuple of integershelloz-The first argument "array" must be array-like)r0   r   r*   r?  r   r   r   r   r   r   r   )	r   r   r   r  r%   target_shapeerrmsgr   r   r   r   test_broadcast_to_raises)  sh   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   rV   r>  r[  
   r      )r0   r   r*   r?  r1  r   sum)r   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   rV   r[  r   )r8   r   r*   r@  r   )	r   r   r   r  r\  r/   r7   r   r   r   r   r   test_broadcast_to_indexing^  s   z0TestArrayManipulation.test_broadcast_to_indexing)rW   rf  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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ddgg}|D ]}|| }|| }| |t | || qYd S )NTr   r      r   r^  )rU   r   ))r   rl  r   r   rW   rk  )r   rW   rl  rm  rY  rU   rW   rW   r   r   r   rW   r   r   rW  rV   rU   rV   )r4   r   assertIsInstancer   r   )r   r   r   r  input_shaper   r   r   r   r   test_broadcast_shapesi  sH   z+TestArrayManipulation.test_broadcast_shapesc              	   C   s   t }tdd|}|   ddgddgg ddd	gg d
ddgg}|D ]$}| t}||  W d    n1 s9w   Y  | dt|j q#d S )NTr   rW  r8  r   rC  rW  rW  r8  rW   rU   r   rV   rU   rU   )r   rn  rq  )re  r   rV   =shape mismatch: objects cannot be broadcast to a single shaper4   r   r   r   r   r   r   r   )r   r   r   r  rs  r   r   r   r   test_broadcast_shapes_raises  s$   
z2TestArrayManipulation.test_broadcast_shapes_raisesc                 C   sf   t }tdd|}|   | t}|ddd W d    n1 s#w   Y  | dt|j d S )NTr   r   rV   r   z#negative dimensions are not allowedry  )r   r   r   r   r   r   r   (test_broadcast_shapes_negative_dimension  s   z>TestArrayManipulation.test_broadcast_shapes_negative_dimensionc              	   C   st   t }tdd|}|   g d}|D ]$}| t}||  W d    n1 s)w   Y  | dt|j qd S )NTr   ))r   )r`  )g333333@)stringr   r=   )rW   r}  z#must be either an int or tuple[int])r4   r   r   r   r   r   r   r   )r   r   r   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 d    n1 sIw   Y  dt|j d S )NTr   c                    s    | } | } || d S r"   r  )rs   r   r   rK  r   r   r     r  z/TestArrayManipulation.test_shape.<locals>.check)r   r   r   )r   r   r   rW   FrV   rU   r   r   rX  r=   z+The argument to np.shape must be array-like)	r}   r   r*   emptyr   r   r   r   r   )r   r   tr%   r   r   rK  r   
test_shape  s   

"

z TestArrayManipulation.test_shapec                    J   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   
fill_valued           皙?r   2   rV   r	  r  r   rW   r   )r*   rX   fullr   randomrandnabsr#   r<   r   r   r   a_variations  s   zBTestArrayManipulation.test_flatnonzero_basic.<locals>.a_variations)r   r   r   r   r   r   r  r=   r   r   r   r   r   test_flatnonzero_basic  s   
z,TestArrayManipulation.test_flatnonzero_basicc                    r  )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 g d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   rV   r   r  rW   )g      r  rr   r  r  r   g      ?r  r	  r  r   )r*   rX   r  r   r  r  r#   r<   r   r   r   r    s   
z?TestArrayManipulation.test_argwhere_basic.<locals>.a_variations)r   r   r   r  r   r   r   test_argwhere_basic  s   
z)TestArrayManipulation.test_argwhere_basicc                   c   sh    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_  )rR  g@)g      @gffffff@)r  rr   r  g      r   rW   rV   rU   r   FTrM  y       @      ?a_string )r*   r:  r   r   r   r   array_like_variations  s   
z+TestArrayManipulation.array_like_variationsc                 C   @   t }tdd|}|  D ]}||}||}| || qd S r   )r   r   r  r   r   r   r   r=   r   r   r   r   r   test_flatnonzero_array_like#  s   z1TestArrayManipulation.test_flatnonzero_array_likec                 C   r  r   )r   r   r  r   r  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      g | ]}t |qS r   r*   r?  r   sr   r   r   r   :      zOTestArrayManipulation.broadcast_arrays_assert_correct_shape.<locals>.<listcomp>c                 S      g | ]}|j qS r   r/   r   r=   r   r   r   r   =      r6   r   r   r   )	r   input_shapesr   r   r   inarrays	outarraysr   r   r   r   r   %broadcast_arrays_assert_correct_shape4  s   z;TestArrayManipulation.broadcast_arrays_assert_correct_shapec                 C   sd   t }tdd|}g d}|D ] }|g}| || ||g}| || |||g}| || qd S )NTr   )	r   rW  rp  )r   rU   ro  )rU   r   rY  rn  rQ  )r6   r   r  )r   r   r   r  r/   r  input_shapes2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
 | qEd S )Nr   rW  rY  rQ  rn  r^  ro  r   rp  rm   r  r   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 | qhd S )Nr   rW  rQ  rn  r   r^  rY  r   r   rp  ro  rm   r  r  r   r   r   Dtest_broadcast_arrays_two_compatible_by_prepending_ones_input_shapesx  s2   



















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 ]\}}|| }d	d
 |D }|gt| }| || qd S )NTr   Fr   rW   rV   r   rC  c                 S   r  r   r  r  r   r   r   r     r  zLTestArrayManipulation.test_broadcast_arrays_scalar_input.<locals>.<listcomp>r  )	r   r   r   r  r  r   r  r   r   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  rC  c                 S   r  r   r  r  r   r   r   r     r  zKTestArrayManipulation.test_broadcast_arrays_tuple_input.<locals>.<listcomp>)r6   r   r   r   r   r   r  r   r   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   rV   rY  r>  c                 S   r  r   r  r  r   r   r   r     r  zOTestArrayManipulation.test_broadcast_arrays_non_array_input.<locals>.<listcomp>)r6   r   r*   intpr?  r   r  r   r   r   %test_broadcast_arrays_non_array_input  s   z;TestArrayManipulation.test_broadcast_arrays_non_array_inputc                 C   sx   t }tdd|}|   | t}tdd}d}||| W d    n1 s,w   Y  | dt	|j
 d S )NTr   r   r   zMismatch of argument types)r6   r   r   r   r   r*   rX   r#   r   r   r   )r   r   r   r   r%   rI  r   r   r   /test_broadcast_arrays_invalid_mixed_input_types     zETestArrayManipulation.test_broadcast_arrays_invalid_mixed_input_typesc                 C   sx   t }tdd|}|   | t}tjdtjd}d}||| W d    n1 s,w   Y  | dt	|j
 d S )NTr   rU   r>  zhello worldzArgument "1" must be array-like)r6   r   r   r   r   r*   r?  rT  r   r   r   )r   r   r   r   r%   r  r   r   r   #test_broadcast_arrays_invalid_input  r  z9TestArrayManipulation.test_broadcast_arrays_invalid_inputc              
   C   s   t }tdd|}|   ddgddgg ddd	gg}|D ]7}||d d d
 fD ]+}| t}dd |D }||  W d    n1 sEw   Y  | dt|j q(qd S )NTr   rW  r8  r   rC  ru  rv  rw  rm   c                 S   r  r   r  r  r   r   r   r     r  zdTestArrayManipulation.test_broadcast_arrays_incompatible_shapes_raise_valueerror.<locals>.<listcomp>rx  )r6   r   r   r   r   r   r   r   )r   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__r   r   r   r   r   r   r  r  r  r  enable_pyobj_flagsr  r  r  r"  r&  r'  r(  r)  r*  r,  r-  r/  r4  r6  rN  rV  r]  rd  ri  rj  unittestskipIfr
   rt  rz  r{  r  r  r  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__r   r   r   r   r      sr    p^/#	H.#*
*




	!r   __main__)F)B	functoolsr   	itertoolsr   numpyr*   r  numba.core.compilerr   r   numbar   r   r   r	   numba.np.numpy_supportr
   numba.core.errorsr   
numba.corer   r   numba.tests.supportr   r   r   r   r  enable_pyobjectr  nrtr    r'   r+   r0   r4   r6   r8   r>   rA   rC   rE   rH   rJ   rN   rQ   rS   rT   r`   rb   rc   re   rf   rg   rl   ro   rq   rv   rx   r|   r}   r   r   r   r  mainr   r   r   r   <module>   st    	
        8