U
    iâËd0Í  ã                   @   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<„ Z7edOd=d>„ƒZ8d?d@„ Z9dAdB„ Z:dPdDdE„Z;dFdG„ Z<dHdI„ Z=dJdK„ Z>G dLdM„ dMeeƒZ?e@dNk�rÔe A¡  dS )Qé    )Ú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   ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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%   Ú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    r3   c                 C   s   |   ¡ S r    ©Úravelr1   r   r   r   Úravel_arrayH   s    r6   c                 C   s
   |   ¡ jS r    )r5   Úsizer1   r   r   r   Úravel_array_sizeL   s    r8   c                 C   s
   t  | ¡S r    )r%   r5   r1   r   r   r   Únumpy_ravel_arrayP   s    r9   c                 C   s   |   ¡ S r    ©Ú	transposer1   r   r   r   Útranspose_arrayT   s    r<   c                 C   s
   t  | ¡S r    ©r%   r;   r1   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    rB   c                 C   s   t j| |d� ¡ S r?   )r%   r;   ÚcopyrA   r   r   r   Ú%numpy_transpose_array_axes_kwarg_copy_   s    rD   c                 C   s
   |   |¡S r    r:   rA   r   r   r   Úarray_transpose_axesc   s    rE   c                 C   s   |   |¡ ¡ S r    )r;   rC   rA   r   r   r   Úarray_transpose_axes_copyg   s    rF   c                 C   s^   t  t  | | d ¡| d|f¡}t  t  |d ¡|df¡}||j j}t  |d¡}|d }|S )Né   )é   r   é   rI   )r%   r!   ÚarangeÚTr;   )ÚmÚnÚr1Úr2Zr_difÚzr   r   r   Útranspose_issue_4708k   s     rQ   c                 C   s   |   ¡ S r    )Úsqueezer1   r   r   r   Úsqueeze_arrayt   s    rS   c                 C   s   t  | |¡S r    )r%   Úexpand_dims)r2   Úaxisr   r   r   rT   x   s    rT   c                  G   s
   t j| Ž S r    )r%   Ú
atleast_1dr+   r   r   r   rV   |   s    rV   c                  G   s
   t j| Ž S r    )r%   Ú
atleast_2dr+   r   r   r   rW   €   s    rW   c                  G   s
   t j| Ž S r    )r%   Ú
atleast_3dr+   r   r   r   rX   „   s    rX   c                 C   s0   | j d d f| j dd …  }tjjj| |d�S )Nr   rH   rI   )Ústrides)rY   r%   ÚlibÚstride_tricksÚ
as_strided)r2   rY   r   r   r   Úas_strided1ˆ   s    r]   c                 C   sN   d}| j d d… | j d | d |f }| j| jd f }tjjj| ||d�S )NrG   éÿÿÿÿrI   )r)   rY   )r)   rY   r%   rZ   r[   r\   )r2   Zwindowr)   rY   r   r   r   Úas_strided2Ž   s    $r_   c                 C   s   t jjj| ||d�S )N)rU   )r%   rZ   r[   Úsliding_window_view)ÚxÚwindow_shaperU   r   r   r   r`   –   s    r`   c                 C   s   | j f}| j}d|||f< d S )Nç      ð?)ra   Úy)r#   Zarr2dra   rd   r   r   r   Ú	bad_index›   s    re   c                 C   s   | d S )N)rI   g       @r   ©r#   r   r   r   Úbad_float_index¢   s    rg   Fc                 C   s   t  | ||¡S r    )r%   Zfill_diagonal)r#   ÚvalÚwrapr   r   r   Únumpy_fill_diagonal¨   s    rj   c                 C   s
   t  | ¡S r    )r%   r)   rf   r   r   r   Únumpy_shape¬   s    rk   c                 C   s
   t  | ¡S r    )r%   Zflatnonzeror1   r   r   r   Únumpy_flatnonzero°   s    rl   c                 C   s
   t  | ¡S r    )r%   Zargwherer1   r   r   r   Únumpy_argwhere´   s    rm   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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/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)dMdN„ Z*dOdP„ Z+dQdR„ Z,dSdT„ Z-dUdV„ Z.e/dWdX„ ƒZ0dYdZ„ Z1d[d\„ Z2d]d^„ Z3d_d`„ Z4dadb„ Z5dcdd„ Z6dedf„ Z7dgdh„ Z8didj„ Z9dkdl„ Z:dmdn„ Z;dodp„ Z<dqdr„ Z=dsdt„ Z>dudv„ Z?‡  Z@S )wÚTestArrayManipulationz4
    Check shape-changing operations on arrays.
    c                    s   t t| ƒ ¡  tƒ | _d S r    )Úsuperrn   ÚsetUpr   Úccache©Úself©Ú	__class__r   r   rp   ½   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©rx   rs   r   r   ÚcheckÈ   s    
z7TestArrayManipulation.test_array_reshape.<locals>.checkc                    s@   ˆ  ¡  ˆ | ||ƒ}ˆ |j|¡ ˆ |j|j¡ ~ˆ ¡  d S r    )rz   ÚassertEqualr)   r7   r|   )r   r#   r)   Úexpected_shaper~   r   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)   Úraisesr   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ˆ   r   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ˆ   r   r   r   Úcheck_err_multiple_negativeé   s
    ÿzMTestArrayManipulation.test_array_reshape.<locals>.check_err_multiple_negativeé   )r�   )é   é   )é   rG   )r’   rI   rG   )rI   r’   rI   rI   rG   rI   ©rH   rG   r�   r   )é   )r’   r�   )r�   rG   rH   )rI   r�   rI   rG   rI   rH   rI   ©r‘   r�   )rH   é   r”   é   r^   ©r^   )r^   r—   )r—   r^   r—   )r—   r—   r^   )r^   r�   )r^   éþÿÿÿr—   r—   )r—   r—   r^   r^   c                    s†   ˆ | dƒ ˆ | dƒ ˆ | dƒ ˆ | dƒ ˆ| ddƒ ˆ| ddƒ ˆ| ddƒ ˆ| d	d
ƒ ˆ| ddƒ ˆ| dƒ ˆ| dƒ ˆ| dƒ d S )Nr   ©r   )rI   r   rH   )r   é7   rI   r   rH   r^   r˜   ©r   r^   ©r   r   )r�   r^   )r�   r   )r^   r   r�   )r   r   r�   r   rI   ©rI   rH   r   rf   )r€   r�   rƒ   r   r   Úcheck_empty  s    





z=TestArrayManipulation.test_array_reshape.<locals>.check_empty)rG   rH   r   )	r$   r&   r   r%   rJ   r!   rK   ÚarrayÚdisable_leak_check)rs   r   rŠ   rŽ   r#   rŸ   r   )r€   r�   rƒ   rx   rs   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qêt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    ©rq   Úcompiler	   rv   )r   r#   r@   rw   rr   r   r   Úrun7  s    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#   r@   r}   r~   ©r¥   rs   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_repeatedE  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_oobL  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_argsS  s    zOTestArrayManipulation.test_array_transpose_axes.<locals>.check_err_invalid_argsr�   r�   r‘   rH   rG   rI   é@   r’   c                    s   g | ]}|ˆ  ‘qS r   r   ©r   ra   )Úndimr   r   r   d  s     zCTestArrayManipulation.test_array_transpose_axes.<locals>.<listcomp>c                 S   s*   | ||ƒ}t | ƒ||ƒ}tj ||¡ d S r    )r   r%   ÚtestingÚassert_equal)r   rL   rM   r}   r~   r   r   r   Úcheck_issue_4708h  s    
zITestArrayManipulation.test_array_transpose_axes.<locals>.check_issue_4708r—   Úfoo)rµ   g333333@)ç333333ó?r—   r�   )rH   r   r   )rG   rH   rI   rI   r   ©rI   )r™   ©r   rH   )éýÿÿÿrH   ©r   r¹   )rG   rI   rH   )éüÿÿÿrI   rH   )rG   rI   rH   r—   )rG   rI   rH   éûÿÿÿT©Znopythonz#np.transpose does not accept tuples)rB   rD   rE   rF   r   r%   rJ   r!   ÚrangeÚlenr   Útupler±   rQ   r¡   r„   r   r   r>   r    ÚassertInr†   r‡   )rs   r   r€   r«   r¬   r®   ZarrsÚir@   Zneg_axesr´   Úer   )r±   r¥   rs   r   Útest_array_transpose_axes1  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#   rU   rw   ©r   rs   r   r   r¥   ’  s    z3TestArrayManipulation.test_expand_dims.<locals>.runc                    s6   ˆ | |ƒ}ˆ  ¡  ˆ| |ƒ}ˆ ||¡ ~ˆ ¡  d S r    ry   )r#   rU   r}   r~   ©r   r¥   rs   r   r   r€   –  s    

z5TestArrayManipulation.test_expand_dims.<locals>.checkc                    s,   t | j d | jd ƒD ]}ˆ | |ƒ qd S )NrI   )r¾   r±   )r#   rU   )r€   r   r   Úcheck_all_axesž  s    z>TestArrayManipulation.test_expand_dims.<locals>.check_all_axesr—   r�   r“   r^   é*   )rT   r%   rJ   r!   rK   r    )rs   rÇ   r#   r   )r€   r   r¥   rs   r   Útest_expand_dims�  s    


z&TestArrayManipulation.test_expand_dimsc              	   C   s€   t }tdd�|ƒ}t d¡}|  ¡ �}|ddƒ W 5 Q R X |  dt|jƒ¡ |  ¡ �}||dƒ W 5 Q R X |  dt|jƒ¡ d S )NTr½   r—   ÚhellorG   z#First argument "a" must be an arrayz"Argument "axis" must be an integer)rT   r   r%   rJ   ÚassertTypingErrorrÁ   r†   r‡   )rs   r   Úcfuncr#   r‰   r   r   r   Útest_expand_dims_exceptions®  s    


z1TestArrayManipulation.test_expand_dims_exceptionsc                    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assertStridesEqualr{   r0   )r~   r}   rr   r   r   Úcheck_result½  s    z<TestArrayManipulation.check_atleast_nd.<locals>.check_resultc                    s   ˆˆ | ƒˆ| ƒƒ d S r    r   )Úarg)rÌ   rÎ   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_tupler~   r}   ©rÌ   rÎ   r   rs   r   r   Úcheck_tupleÇ  s
    z;TestArrayManipulation.check_atleast_nd.<locals>.check_tuplerÈ   y              @r—   r‘   ù              ð?r^   ©rH   rG   r�   r“   é   )rH   rH   rH   rH   )r%   r    rJ   r!   rK   )rs   r   rÌ   rÐ   rÓ   Za1Za2Úb1Úb2Zb3Úc1Úc2Úc3Zd1Zd2Zd3rÃ   r   rÒ   r   Úcheck_atleast_nd¼  s2    



z&TestArrayManipulation.check_atleast_ndc                 C   s"   t }tdd�|ƒ}|  ||¡ d S ©NTr½   )rV   r   rÜ   ©rs   r   rÌ   r   r   r   Útest_atleast_1dë  s    z%TestArrayManipulation.test_atleast_1dc                 C   s"   t }tdd�|ƒ}|  ||¡ d S rÝ   )rW   r   rÜ   rÞ   r   r   r   Útest_atleast_2dð  s    z%TestArrayManipulation.test_atleast_2dc                 C   s"   t }tdd�|ƒ}|  ||¡ d S rÝ   )rX   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#   rw   rÅ   r   r   r¥   û  s    z3TestArrayManipulation.check_as_strided.<locals>.runc                    s    ˆ | ƒ}ˆ| ƒ}ˆ  ||¡ d S r    ©r{   )r#   r}   r~   rÆ   r   r   r€   þ  s    z5TestArrayManipulation.check_as_strided.<locals>.checkr�   r•   )r�   rI   r‘   )r%   rJ   r!   )rs   r   r€   r#   r   rÆ   r   Úcheck_as_stridedú  s    
z&TestArrayManipulation.check_as_stridedc                 C   s   |   t¡ |   t¡ d S r    )rã   r]   r_   rr   r   r   r   Útest_as_strided  s    
z%TestArrayManipulation.test_as_stridedc              
      s,  ‡ fdd„}t  d¡}dD ],}ˆ  d|› �¡� ||d|ƒ W 5 Q R X qt  d¡ dd	¡}d
D ],}ˆ  d|› �¡� ||d|ƒ W 5 Q R X q^dD ],}ˆ  d|› �¡� ||d|ƒ W 5 Q R X q�t  d¡ dddd¡}dD ],}ˆ  d|› �¡� ||d|ƒ W 5 Q R X qØˆ  d¡� ||ddƒ W 5 Q R X d S )Nc                    s2   t jjj| ||dd�}t| ||ƒ}ˆ  ||¡ d S )NT)Ú	writeable)r%   rZ   r[   r`   r{   )r#   rb   rU   r}   r~   rr   r   r   r€     s       ÿz=TestArrayManipulation.test_sliding_window_view.<locals>.checkr�   )Nr   r^   rš   z1d array, axis=r—   éÈ   é
   é   rœ   z2d array, axis=)N©r   rI   ©rI   r   )rI   r™   )r—   r’   r�   rH   )rž   )r™   r¹   z4d array, axis=©rG   rH   z2d array, repeated axes)r—   rG   rG   )r   rI   r   )r%   rJ   ÚsubTestr!   )rs   r€   Úarr1rU   Úarr2Zarr4r   rr   r   Útest_sliding_window_view  s$    	
z.TestArrayManipulation.test_sliding_window_viewc              	      sz  ‡ fdd„}‡ fdd„}ˆ   ¡  t d¡}t d¡ dd¡}ˆ  d	¡� |d
|dd ƒ W 5 Q R X ˆ  d¡� |d
|dd ƒ W 5 Q R X ˆ  d¡� |d|dd ƒ W 5 Q R X ˆ  d¡� |d|dd ƒ W 5 Q R X ˆ  d¡� |d|dd ƒ W 5 Q R X ˆ  d¡� |d|ddƒ W 5 Q R X ˆ  d¡� |d|ddƒ W 5 Q R X ˆ  d¡� |d|ddƒ W 5 Q R X ˆ  d¡� |d|ddƒ W 5 Q R X ˆ  d ¡� |d|d!d"ƒ W 5 Q R X ˆ  d#¡� |d|d!d$ƒ W 5 Q R X ˆ  d%¡� |d&|d ƒ W 5 Q R X ˆ  d'¡� |d&|d(ƒ W 5 Q R X ˆ  d)¡� |d&|d*ƒ W 5 Q R X ˆ  d+¡� |d,|dd(ƒ W 5 Q R X ˆ  d-¡� |d,|dd*ƒ W 5 Q R X d S ).Nc              	      s4   ˆ   t¡�}t|Ž  W 5 Q R X ˆ  | t|jƒ¡ d S r    )r„   rŒ   r`   rÁ   r†   r‡   ©Úmsgr   r‰   rr   r   r   Ú_raises1  s    zFTestArrayManipulation.test_sliding_window_view_errors.<locals>._raisesc              	      s6   ˆ   tj¡�}t|Ž  W 5 Q R X ˆ  | t|jƒ¡ d S r    )r„   r   r   r`   rÁ   r†   r‡   rð   rr   r   r   Ú_typing_error6  s    zLTestArrayManipulation.test_sliding_window_view_errors.<locals>._typing_errorr�   ræ   rç   rè   z1d window shape too largezwindow_shape cannot be largerr”   z2d window shape too large)r�   é   z1d window negative sizez&`window_shape` cannot contain negativer^   z2d window with a negative size)r�   r¹   z1d array, 2d window shapez%matching length window_shape and axis)rç   rH   z$2d window shape, only one axis givenrI   z1d window shape, 2 axes givenr—   r�   z1d array, second axiszArgument axis out of boundsr�   z1d array, axis -2r™   z2d array, fourth axis)r�   r�   ©r   rG   z2d array, axis -3rº   zwindow_shape=Nonez3window_shape must be an integer or tuple of integerzwindow_shape=floatçÍÌÌÌÌÌ@zwindow_shape=tuple(float))rö   z
axis=floatz1axis must be None, an integer or tuple of integerzaxis=tuple(float))r¡   r%   rJ   r!   rì   )rs   rò   ró   rí   rî   r   rr   r   Útest_sliding_window_view_errors0  sv    
  ÿ  ÿ  ÿ   ÿ   ÿz5TestArrayManipulation.test_sliding_window_view_errorsÚ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é	   rG   ÚFÚA)Úlayout©r¦   )r%   rJ   r!   rK   r3   r	   rC   r�   rü   r   rv   r²   r³   )
rs   r¦   rü   r2   r   Ú
arraytype1ÚcrrÌ   r}   r~   r   r   r   Útest_flatten_arrayt  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_flagsrr   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   rv   r%   r²   r³   ÚctypesÚdata)
r   r2   Úassume_layoutrþ   rÿ   rÌ   r}   r~   Z	py_copiedZ	nb_copied)r¦   rs   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ù   rG   rø   )r  rú   ©Úorderé   rH   r   rû   é$   )r   r6   r9   r%   rJ   r!   )rs   r¦   r  r€   r   )r  r  r¦   rs   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ù   rG   rý   )	r%   rJ   r!   r8   r	   r   rv   r²   r³   ©	rs   r¦   r2   r   rþ   rÿ   rÌ   r}   r~   r   r   r   Útest_ravel_array_size¯  s    z+TestArrayManipulation.test_ravel_array_sizec                 C   s   | j td� d S ©Nrý   )r  r  rr   r   r   r   Útest_ravel_array_npm»  s    z*TestArrayManipulation.test_ravel_array_npmc                 C   s   | j td� d S r  )r  r  rr   r   r   r   Útest_ravel_array_size_npm¾  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%   rJ   r!   r	   r   rv   r²   r³   )r   r2   rþ   rÿ   rÌ   r}   r~   rý   r   r   r€   Â  s    z9TestArrayManipulation.test_transpose_array.<locals>.check)r   r<   r>   )rs   r¦   r€   r   rý   r   Útest_transpose_arrayÁ  s    
z*TestArrayManipulation.test_transpose_arrayc                 C   s   | j td� d S r  )r  r  rr   r   r   r   Útest_transpose_array_npmÐ  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�   rH   rI   rG   r�   rý   )	r%   rJ   r!   rS   r	   r   rv   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ý   rR   )r„   r   r   r  r  rÁ   r†   r‡   ©rs   r‰   r   r   r   Útest_squeeze_array_npmß  s    z,TestArrayManipulation.test_squeeze_array_npmc                 C   sh  t dd„ ƒ}t dd„ ƒ}t d¡ d¡}td ƒtjftjtd ƒftdƒtjdftjdtd ƒftdƒttjdfdtjtftjtdƒtjdfdtd tjftjtdƒttjdfdtjtjtftjdtjtftd	ƒdtjd ftjdtd fg}|j}|}|j}|}|D ]f}	|||	ƒ}
|||	ƒ}tj 	|
|¡ t 
|¡}||	 }|| ¡ |	|ƒ}
|| ¡ |	|ƒ}tj 	|
|¡ qüd S )
Nc                 S   s   | | S r    r   )r2   r.   r   r   r   Únp_new_axis_getitemæ  s    z@TestArrayManipulation.test_add_axis.<locals>.np_new_axis_getitemc                 S   s   || |< | S r    r   )r2   r.   Úitemr   r   r   Únp_new_axis_setitemê  s    z@TestArrayManipulation.test_add_axis.<locals>.np_new_axis_setitemiH  )r�   r—   r‘   é   rI   rH   rG   )r   r%   rJ   r!   ÚsliceZnewaxisÚEllipsisÚpy_funcr²   r³   Z
zeros_likerC   )rs   r  r  r2   Z	idx_casesZpyfunc_getitemZcfunc_getitemZpyfunc_setitemZcfunc_setitemr.   r}   r~   Za_emptyr  r   r   r   Útest_add_axiså  s@    


ó


z#TestArrayManipulation.test_add_axisc              	   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 )Nra   rd   rH   rø   rý   zUnsupported array index type)rË   r   r%   ÚdtypeÚint32r   ÚArrayr   re   r  rÁ   r†   r‡   )rs   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 )NrH   rø   z$Unsupported array index type float64)	rË   r   rg   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 ]}|||ƒ q€qvt 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 )NrH   rI   )rI   rI   rI   r   )rM   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 )NrI   g‰A`åÐ"	@Tr�   ©r�   r’   rù   é6   rG   rH   r^   )r%   ÚnanÚinfrJ   r!   Úasfortranarrayr   r   r   r   Ú_val_variations3  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)rM   r)   ©r'  r   r   Ú#_multi_dimensional_array_variationsA  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 ©rH   r   r°   r   r   r   r   I  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   rH   N)r  r°   r   r   r   Ú	<genexpr>J  s     zvTestArrayManipulation.test_fill_diagonal_basic.<locals>._multi_dimensional_array_variations_strided.<locals>.<genexpr>)r%   r/  rÀ   r%  )rM   r)   ÚtmpZslicerr1  r   r   Ú+_multi_dimensional_array_variations_stridedG  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)NTFri   )rC   r{   )r#   rh   ri   r2   ÚbÚparams©rÌ   r   rs   r   r   Ú_check_fill_diagonalM  s    zLTestArrayManipulation.test_fill_diagonal_basic.<locals>._check_fill_diagonalrG   rù   F)rj   r   r%   r    r!   )rs   r-  r2  r6  r:  r#   rh   r   )r'  rÌ   r   rs   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½   rI   r—   z'The first argument must be at least 2-D)rG   rG   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#   rh   r‰   ©rÌ   rs   r   r   Ú_assert_raises~  s    zPTestArrayManipulation.test_fill_diagonal_exception_cases.<locals>._assert_raises©rG   rG   r.  çffffff
@rH   g    _ Bgffffffö?gÍÌÌÌÌÌ@g}Ã”%­I²Ôgp=½Ø´T)rj   r   r¡   r%   r    r0  r„   r   r†   r‡   ÚAssertionErrorrŒ   r/  r�   r"  r*  r+  Úint64Zfloat32)rs   r   rh   r2   r‰   r=  r#   r   r<  r   Ú"test_fill_diagonal_exception_casesi  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 ](\}}|||ƒ}|||ƒ}|  ||¡ qÚd S )NTr½   r   rš   r·   ©rG   rI   r3  ©rI   rH   rG   rG   ©rI   rG   rÕ   rH   rž   r¸   ©rH   rI   )rH   r   ©rH   rH   )r*   r   r%   r    r0  rJ   r{   )rs   r   rÌ   r  Úinput_arrayr)   r}   r~   r   r   r   Útest_broadcast_to—  s0    ê

z'TestArrayManipulation.test_broadcast_toc                 C   sd   t }tdd�|ƒ}t d¡ddg}d}|D ]4}|||ƒ}|||ƒ}|  ||¡ |  |jd ¡ q*d S )NTr½   é{   r   Z	WRITEABLE)r*   r   r%   r    r{   ZassertFalser¦   )rs   r   rÌ   Úinputsr)   r#   r}   r~   r   r   r   Útest_broadcast_to_0d_arrayº  s    ý


z0TestArrayManipulation.test_broadcast_to_0d_arrayc           	      C   s`  t }tdd�|ƒ}t d¡dtdgt d¡dtdgt d¡dtdgddtdg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ddtdgg}|  ¡  |D ]@\}}}}|  |¡�}|||ƒ W 5 Q R X |  |t	|j
ƒ¡ �qd S )NTr½   rš   r   z/Cannot broadcast a non-scalar to a scalar arrayr·   rC  )rJ  z=operands could not be broadcast together with remapped shapesr3  r(  rž   rF  ©rI   rI   zDinput operand has more dimensions than allowed by the axis remappingrG  r^   z4all elements of broadcast shape must be non-negativer˜   )r^   rH   ©gš™™™™™ñ?gš™™™™™@z7The second argument "shape" must be a tuple of integersrÊ   z-The first argument "array" must be array-likerG   )rH   r2   z*object cannot be interpreted as an integer)r*   r   r%   r/  r   rŒ   r¡   r„   rÁ   r†   r‡   )	rs   r   rÌ   r  r#   Ztarget_shapeÚerrrñ   r‰   r   r   r   Útest_broadcast_to_raisesÐ  sv    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß$z.TestArrayManipulation.test_broadcast_to_raisesc                 C   s*   t dd„ ƒ}| ¡ }|ƒ }|  ||¡ d S )Nc                   S   s   t  dd¡S )Nr2   rÕ   r'   r   r   r   r   Ú_broadcast_to_1  s    zMTestArrayManipulation.test_broadcast_to_corner_cases.<locals>._broadcast_to_1)r   r  r{   )rs   rQ  r}   r~   r   r   r   Útest_broadcast_to_corner_cases   s
    
z4TestArrayManipulation.test_broadcast_to_corner_casesc                 C   s\   t }tdd�|ƒ}tjdtjd�}d}|||ƒ}d|d< |  | ¡ d¡ |  | ¡ d¡ d S )	NTr½   rH   r.  rG  rç   r   rè   )r*   r   r%   r/  r"  r�   Úsum)rs   r   rÌ   rH  r)   Úviewr   r   r   Útest_broadcast_to_change_view	  s    
z3TestArrayManipulation.test_broadcast_to_change_viewc           	      C   s\   t }tdd�|ƒ}t d¡ddgg}|D ].\}}}||||ƒ}||||ƒ}|  ||¡ q(d S )NTr½   rH   rG  r·   )r/   r   r%   r0  r{   )	rs   r   rÌ   r  rH  r)   r.   r}   r~   r   r   r   Útest_broadcast_to_indexing  s    ÿz0TestArrayManipulation.test_broadcast_to_indexingc                 C   s8   t dd„ ƒ}t d¡}| |¡}||ƒ}|  ||¡ d S )Nc                 S   s   t  | d¡}||j|j|jfS )NrÕ   )r%   r(   r7   r)   rY   )r#   Úretr   r   r   rµ   "  s    z@TestArrayManipulation.test_broadcast_to_array_attrs.<locals>.foorG   )r   r%   rJ   r  r{   )rs   rµ   r#   r}   r~   r   r   r   Útest_broadcast_to_array_attrs  s    


z3TestArrayManipulation.test_broadcast_to_array_attrsc                 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¡ |  ||¡ q¶d S )NTr½   r   )r  rž   rM  )rG   r�   )r‘   r  )r—   r‘   rI   )r—   rI   r  rE  ©rG   rI   rê   r�   ré   rš   r·   rC  rH   rë   )r,   r   ZassertIsInstancerÀ   r{   )rs   r   rÌ   r  Úinput_shaper}   r~   r   r   r   Útest_broadcast_shapes-  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½   rC  r(  rÕ   r3  ©rI   rG   r�   ©rH   rG   rG   rž   rY  rë   )rç   r—   rH   ú=shape mismatch: objects cannot be broadcast to a single shape©r,   r   r¡   r„   rŒ   rÁ   r†   r‡   )rs   r   rÌ   r  rZ  r‰   r   r   r   Útest_broadcast_shapes_raisesW  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ž   rH   r™   z#negative dimensions are not allowedr_  )rs   r   rÌ   r‰   r   r   r   Ú(test_broadcast_shapes_negative_dimensionn  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¶   r2   )rI   rc  z#must be either an int or tuple[int])r,   r   r¡   r„   r   rÁ   r†   r‡   )rs   r   rÌ   ZinpsZinpr‰   r   r   r   Ú"test_broadcast_shapes_invalid_typex  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â   )ra   r}   r~   r9  r   r   r€   �  s    z/TestArrayManipulation.test_shape.<locals>.check)r   r·   rÕ   )r�   r—   r‘   rI   FrH   rG   r�   r·   rD  r2   z+The argument to np.shape must be array-like)	rk   r   r%   Úemptyr„   r   rÁ   r†   r‡   )rs   r€   Útr#   r‰   r   r9  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_valueéd   ç        çš™™™™™É?r�   é2   rH   rú   r	  r”   rI   rÔ   )r%   rJ   Úfullr    ÚrandomÚrandnÚabsr!   r1   rr   r   r   Úa_variations¨  s    zBTestArrayManipulation.test_flatnonzero_basic.<locals>.a_variations)rl   r   r{   ©rs   r   rÌ   rq  r2   r}   r~   r   rr   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—   rH   r   rh  rI   g      ð¿rj  rc   ri  rk  r�   g      à?rl  rú   r	  r”   )r%   rJ   rm  r    rn  ro  r!   r1   rr   r   r   rq  ½  s    
z?TestArrayManipulation.test_argwhere_basic.<locals>.a_variations)rm   r   r{   rr  r   rr   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)rN  )r?  gš™™™™™@)g      @gffffff@)rj  rc   rj  g      Àr   rI   rH   rG   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Ý   )rl   r   rv  r{   ©rs   r   rÌ   r2   r}   r~   r   r   r   Útest_flatnonzero_array_likeã  s    z1TestArrayManipulation.test_flatnonzero_array_likec                 C   s@   t }tdd�|ƒ}|  ¡ D ] }||ƒ}||ƒ}|  ||¡ qd S rÝ   )rm   r   rv  r{   rw  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   r2   r   r   r   r   ý  s     ©r-   r   r¿   r{   )	rs   Úinput_shapesr‚   r   rÌ   ÚinarraysÚ	outarraysr}   r~   r   r   r   Ú%broadcast_arrays_assert_correct_shapeô  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·   rC  ré   rõ   rê   )rG   r   rE  rY  r>  )r-   r   rƒ  )rs   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
… |¡ qŠd S )Nr·   rC  rE  r>  rY  rM  rê   r�   ré   r^   ©rƒ  ©rs   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… |¡ qÐd S )Nr   rC  r>  rY  r·   rM  rE  rš   r�   ré   rê   r^   r…  r†  r   r   r   ÚDtest_broadcast_arrays_two_compatible_by_prepending_ones_input_shapes8  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·   rI   rH   rž   r3  c                 S   s   g | ]
}|j ‘qS r   r}  r~  r   r   r   r   c  s     zLTestArrayManipulation.test_broadcast_arrays_scalar_input.<locals>.<listcomp>r  )	rs   r   rÌ   r  r�  r‚   r‚  r~   r}   r   r   r   Ú"test_broadcast_arrays_scalar_inputY  s    


ýz8TestArrayManipulation.test_broadcast_arrays_scalar_inputc                 C   sB   t }tdd�|ƒ}|ddƒ}ddg}dd„ |D ƒ}|  ||¡ d S )NTr½   )rJ  iÈ  )i  r3  c                 S   s   g | ]
}|j ‘qS r   r}  r~  r   r   r   r   l  s     zKTestArrayManipulation.test_broadcast_arrays_tuple_input.<locals>.<listcomp>)r-   r   r{   ©rs   r   rÌ   r‚  r}   r~   r   r   r   Ú!test_broadcast_arrays_tuple_inputg  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½   rH   rE  r.  c                 S   s   g | ]
}|j ‘qS r   r}  r~  r   r   r   r   t  s     zOTestArrayManipulation.test_broadcast_arrays_non_array_input.<locals>.<listcomp>)r-   r   r%   Zintpr/  r{   rŠ  r   r   r   Ú%test_broadcast_arrays_non_array_inputo  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%   rJ   r!   rÁ   r†   r‡   )rs   r   rÌ   r‰   r#   r7  r   r   r   Ú/test_broadcast_arrays_invalid_mixed_input_typesw  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½   rG   r.  zhello worldzArgument "1" must be array-like)r-   r   r¡   r„   r   r%   r/  rA  rÁ   r†   r‡   )rs   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½   rC  r(  rÕ   r3  r\  r]  r^   c                 S   s   g | ]}t  |¡‘qS r   rz  r{  r   r   r   r      s     zdTestArrayManipulation.test_broadcast_arrays_incompatible_shapes_raise_valueerror.<locals>.<listcomp>r^  )r-   r   r¡   r„   rŒ   rÁ   r†   r‡   )rs   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_valueerrorc                 C   s|   dd„ }|}t dd�|ƒ}|t dddgdddgdddgg¡dƒ}|t dddgdddgdddgg¡dƒ}tj ||¡ d S )Nc                 S   sj   | j \}}t | |||f¡}t |dd¡}| ¡ }t |d|f¡}|d d| … ||d d …d d …f< |S ©Nr   rI   r^   )r)   r%   r(   Úswapaxesr0   r!   ©ra   rd   ÚrÚcr2   r7  ÚccÚdr   r   r   Úunfold_flatten§  s    
$zITestArrayManipulation.test_readonly_after_flatten.<locals>.unfold_flattenTr½   rI   rH   rG   ©r   r%   r    r²   Zassert_array_equal)rs   r—  r   rÌ   Úres_nbÚres_pyr   r   r   Útest_readonly_after_flatten¥  s    	((z1TestArrayManipulation.test_readonly_after_flattenc                 C   s|   dd„ }|}t dd�|ƒ}|t dddgdddgdddgg¡dƒ}|t dddgdddgdddgg¡dƒ}tj ||¡ d S )Nc                 S   sj   | j \}}t | |||f¡}t |dd¡}| ¡ }t |d|f¡}|d d| … ||d d …d d …f< |S r�  )r)   r%   r(   r‘  r5   r!   r’  r   r   r   Úunfold_ravel»  s    
$zETestArrayManipulation.test_readonly_after_ravel.<locals>.unfold_ravelTr½   rI   rH   rG   r˜  )rs   rœ  r   rÌ   r™  rš  r   r   r   Útest_readonly_after_ravel¹  s    	((z/TestArrayManipulation.test_readonly_after_ravelc           	      C   s�   |   ¡  t d¡ d¡ ¡ }|jdd�}d|j_d|j_dd„ }|}tdd	�|ƒ}||ƒ}||ƒ}d
}|  |jj |¡ d}|  |jj|¡ d S )Nrù   r>  rú   r	  Fc                 S   s   |   ¡ }|S r    r4   )r2   r   r   r   r   Útry_ravel_w_copy×  s    zKTestArrayManipulation.test_mutability_after_ravel.<locals>.try_ravel_w_copyTr½   zCNo copy was performed, so the resulting array must not be writeablez?A copy was performed, yet the resulting array is not modifiable)	r¡   r%   rJ   r!   rC   r¦   rå   r   Ú
assertTrue)	rs   Za_cZa_frž  r   rÌ   Zret_cZret_frñ   r   r   r   Útest_mutability_after_ravelÍ  s    z1TestArrayManipulation.test_mutability_after_ravel)AÚ__name__Ú
__module__Ú__qualname__Ú__doc__rp   r¢   rÄ   rÉ   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;  rB  rI  rL  rP  rR  rU  rV  rX  r[  r`  ra  rd  rg  rs  rt  Ústaticmethodrv  rx  ry  rƒ  r„  r‡  rˆ  r‰  r‹  rŒ  r�  rŽ  r�  r›  r�  r   Ú__classcell__r   r   rt   r   rn   ¸   sx   p^/$D#,	H.#0	*

	!rn   Ú__main__)N)F)BÚ	functoolsr   Ú	itertoolsr   Únumpyr%   ZunittestZ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   r¥  Zenable_pyobjectr  Znrtr   r$   r&   r*   r,   r-   r/   r3   r6   r8   r9   r<   r>   rB   rD   rE   rF   rQ   rS   rT   rV   rW   rX   r]   r_   r`   re   rg   rj   rk   rl   rm   rn   r¡  Úmainr   r   r   r   Ú<module>   sv   	
          ;
