o
    i                    @   s   d dl mZmZ d dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZmZ dZd	Zd
d Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd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/d0d1 Z0d2d3 Z1d4d5 Z2d6d7 Z3d8d9 Z4d:d; Z5d<d= Z6d>d? Z7d@dA Z8dBdC Z9dDdE Z:dFdG Z;dHdI Z<dJdK Z=ej>dLd fdMej?fdNdOZ@ddPdQZAddRdSZBdTdU ZCdVdW ZDdXdY ZEdZd[ ZFd\d] ZGd^d_ ZHd`da ZIdbdc ZJddde ZKdfdg ZLdhdi ZMdjdk ZNdldm ZOdndo ZPdpdq ZQdrds ZRdtdu ZSdvdw ZTdxdy ZUdzd{ ZVd|d} ZWd~d ZXdddZYdddZZdddZ[dddZ\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd ZcG dd deeZdG dd deZeefdkreg  dS dS )    )productcycleN)jitnjittypeof)types)TypingErrorNumbaValueError)as_dtypenumpy_version)TestCaseMemoryLeakMixin
needs_blasskip_if_numpy_2expected_failure_np2ztimedelta64[M]ztimedelta64[Y]c                 C      t | || d S Nnparoundarrdecimalsout r   \/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_array_methods.pynp_around_array      r   c                 C      t | |S r   r   valr   r   r   r   np_around_binary      r!   c                 C   
   t | S r   r   r    r   r   r   np_around_unary      
r%   c                 C   r   r   r   roundr   r   r   r   np_round_array   r   r)   c                 C   r   r   )r   round_r   r   r   r   np_round__array!   r   r+   c                 C   r   r   r'   r   r   r   r   np_round_binary$   r"   r,   c                 C   r#   r   r'   r$   r   r   r   np_round_unary'   r&   r-   c                 C   s   |dur| j jdkrt| j||j t| j||j |S t| ||}|du rIdd }t| ttj	frDt|| j|j|| j|j}|S || |}|S )z4
    A slightly bugfixed version of np.round().
    Ncc                 S   s    |dkr| dk rt | S |S )N        r   )r   abs)argresr   r   r   fixup_signed_zero7   s   z*_fixed_np_round.<locals>.fixup_signed_zero)
dtypekind_fixed_np_roundrealimagr   r(   
isinstancecomplexcomplexfloating)r   r   r   r2   r3   r   r   r   r6   *   s   
r6   c                 C   s   | j S r   )Tr   r   r   r   array_TD   s   r>   c                 C      |   S r   )	transposer=   r   r   r   array_transposeG      rA   c                 C   r?   r   copyr=   r   r   r   
array_copyJ   rB   rE   c                 C   r#   r   )r   rD   r=   r   r   r   np_copyM   r&   rF   c                 C   r#   r   )r   asfortranarrayr=   r   r   r   np_asfortranarrayP   r&   rH   c                 C   r#   r   )r   ascontiguousarrayr=   r   r   r   np_ascontiguousarrayS   r&   rJ   c                 C   
   |  |S r   view)r   newtyper   r   r   
array_viewV   r&   rO   c                 C   rK   r   take)r   indicesr   r   r   
array_takeY   r&   rS   c                 C   s   | j ||dS NaxisrP   )r   rR   rV   r   r   r   array_take_kws\      rW   c                 C   r#   r   r   arange)arg0r   r   r   np_arange_1_   r&   r\   c                 C   r   r   rY   )r[   arg1r   r   r   np_arange_2b   r"   r^   c                 C      t | ||S r   rY   )r[   r]   arg2r   r   r   np_arange_3e   rX   ra   c                 C      t | |||S r   rY   )r[   r]   r`   arg3r   r   r   np_arange_4h      rd   c                 C      t j| |dS N)stoprY   )r[   rh   r   r   r   np_arange_1_stopk   rX   ri   c                 C   rf   NsteprY   )r[   rl   r   r   r   np_arange_1_stepn   rX   rm   c                 C   rf   Nr4   rY   )r[   r4   r   r   r   np_arange_1_dtypeq   rX   rp   c                 C      t j| ||dS rj   rY   )r[   r]   rl   r   r   r   np_arange_2_stept   re   rr   c                 C   rq   rn   rY   )r[   r]   r4   r   r   r   np_arange_2_dtypew   re   rs   c                 C   rf   rg   rY   )startrh   r   r   r   np_arange_start_stopz   rX   ru   c                 C   rq   N)rh   rl   rY   )rt   rh   rl   r   r   r   np_arange_start_stop_step}   re   rw   c                 C      t j| |||dS )N)rh   rl   r4   rY   )rt   rh   rl   r4   r   r   r   np_arange_start_stop_step_dtype   r   ry   c                 C   rK   r   )fill)r   r    r   r   r   
array_fill   r&   r{   c                        fdd}|S )Nc                    
   |   S r   rL   r=   rN   r   r   rO      r&   z#make_array_view.<locals>.array_viewr   )rN   rO   r   r~   r   make_array_view      r   c                 C   s   | dd  tjd S )Nr      )rM   r   float32r=   r   r   r   array_sliced_view   s   r   c                    r|   )Nc                    r}   r   )astyper=   r~   r   r   array_astype   r&   z'make_array_astype.<locals>.array_astyper   )rN   r   r   r~   r   make_array_astype   r   r   r4   c                 C   rx   )z7
    np.frombuffer() on a Python-allocated buffer.
    r4   countoffsetr   
frombuffer)br4   r   r   r   r   r   np_frombuffer   s   r   c                 C   s   t j| t j||dS )Nr   )r   r   	complex64r   r   r   r   r   r   np_frombuffer_dtype   s   r   c                 C   s   t j| d||dS )Nr   r   r   r   r   r   r   np_frombuffer_dtype_str   r   r   c                 C   s   t j| t jd}t |S )z6
    np.frombuffer() on a Numba-allocated buffer.
    ro   )r   onesint32r   shaper   r   r   r   np_frombuffer_allocated   s   
r   c                 C   s    t j| t jd}t j|t jdS rn   )r   r   r   r   r   r   r   r   r   np_frombuffer_allocated_dtype   s   r   c                 C   s   | |u | |ufS r   r   ar   r   r   r   identity_usecase   re   r   c                 C   r?   r   )tobytesr   r   r   r   array_tobytes   rB   r   c                 C   r?   r   )nonzeror   r   r   r   array_nonzero   rB   r   c                 C   r#   r   )r   r   r   r   r   r   
np_nonzero   r&   r   c                 C   r#   r   r   where)r.   r   r   r   
np_where_1   r&   r   c                 C   r_   r   r   )r.   xyr   r   r   
np_where_3   rX   r   c                 C   r?   r   )itemr   r   r   r   
array_item   rB   r   c                 C   s   |  | d S r   )itemset)r   vr   r   r   array_itemset   rX   r   c                 G   
   | j | S r   sumr   argsr   r   r   	array_sum   r&   r   c                 C      | j |dS rT   r   r   rV   r   r   r   array_sum_axis_kws   r"   r   c                 C   r   rn   r   )r   r4   r   r   r   array_sum_dtype_kws   r"   r   c                 C   s   | j ||dS )NrV   r4   r   )r   r4   rV   r   r   r   array_sum_axis_dtype_kws   rX   r   c                 C      |  ||S r   r   )r   a1a2r   r   r   array_sum_axis_dtype_pos   r"   r   c                 C   sN   t j| dd}t | d}t | |}| jdd}t j| dd}|||||fS )Nr   rU         r   )r   r   )r   rV   r   r   r.   der   r   r   array_sum_const_multi   s   r   c                 C      | j ddS )Nr   rU   r   r   r   r   r   array_sum_const_axis_neg_one   s   r   c                 G   r   r   cumsumr   r   r   r   array_cumsum   r&   r   c                 C   r   rT   r   r   r   r   r   array_cumsum_kws   r"   r   c                 C   r#   r   )r   r7   r   r   r   r   
array_real   r&   r   c                 C   r#   r   )r   r8   r   r   r   r   
array_imag   r&   r   c                 C   r_   r   r   clipr   a_mina_maxr   r   r   np_clip_no_out   rX   r   c                 C   rb   r   r   r   r   r   r   r   r   r   np_clip   re   r   c                 C   rx   Nr   r   r   r   r   r   np_clip_kwargs   r   r   c                 C   s   |  |||S r   r   r   r   r   r   
array_clip   rX   r   c                 C   s   | j |||dS r   r   r   r   r   r   array_clip_kwargs   re   r   c                 C   r   r   r   r   r   r   r   array_clip_no_out  r"   r   c                 C   r?   r   )conjr   r   r   r   
array_conj  rB   r   c                 C   r?   r   )	conjugater   r   r   r   array_conjugate  rB   r   c                 C   r#   r   )r   uniquer   r   r   r   	np_unique
  r&   r   c                 C   rK   r   dotr   r   r   r   	array_dot  r&   r   c                 C   s   |  | |S r   r   r   r   r   r   array_dot_chain  re   r   c                 C   rf   rn   r   r   )nr4   r   r   r   
array_ctor  rX   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
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ejd*d+ fd,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Z d8d9 Z!d:d; Z"d<d= Z#d>d? Z$d@dA Z%dBdC Z&dDdE Z'dFdG Z(dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1dZd[ Z2d\d] Z3d^d_ Z4d`da Z5dbdc Z6ddde Z7dfdg Z8dhdi Z9djdk Z:dldm Z;dndo Z<edpdq Z=drds Z>dtdu Z?dvdw Z@dxdy ZAdzd{ ZBd|d} ZCd~d ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVeWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_  Z`S )TestArrayMethodszA
    Test various array methods and array-related functions.
    c                    s   t t|   d S r   )superr   setUpself	__class__r   r   r     r   zTestArrayMethods.setUpc                 C   s  g d}dd |D }dd |D }t jt jt jt jt jf}|||||g}|}t||D ]/\}	}
t|	t jf|}dD ]}|
D ]}|dkrI|d9 }t||}|||}| 	|| q?q;q,|}t||D ]\}	}
t|	f|}|
D ]}t|}||}| 	|| qpqcd S )Ng      g      g      g            ?g      @      @g      @c                 S   s   g | ]}|d  qS )      ?      r   .0r   r   r   r   
<listcomp>!      z7TestArrayMethods.check_round_scalar.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )intr   r   r   r   r   "  r   )   r   r   r   
   )
r   float64r   r   r   
complex128zipr   r6   assertPreciseEqual)r   unary_pyfuncbinary_pyfuncbase_valuescomplex_values
int_valuesargtypes	argvaluespyfunctyvaluescfuncr   r   expectedgotr   r   r   check_round_scalar  s<   

z#TestArrayMethods.check_round_scalarc                 C      |  tt d S r   )r	  r-   r,   r   r   r   r   test_round_scalar;  re   z"TestArrayMethods.test_round_scalarc                 C   r
  r   )r	  r%   r!   r   r   r   r   test_around_scalar>  re   z#TestArrayMethods.test_around_scalarc                    sh   fdd  fdd}t g d}tjtjf}|||| tjtjf}||||d    d S )Nc           	         s   | t|}t| t|}| }t|||    | |||    tj	||  
t}| |||dd   W d    n1 sJw   Y   t|jd d S )Nr   zinvalid output shape)r   r
   r   
zeros_likerD   r6   memory_leak_setupmemory_leak_teardowntestingassert_allcloseassertRaises
ValueErrorassertEqualstr	exception)	r  r  intyouttyr   r   r   pyoutraisesr   r   r   check_roundB  s   z7TestArrayMethods.check_round_array.<locals>.check_roundc                    s   t | |D ]<\}}t|ddtjt|ddf}t|} ||||d  ||||d t|tjs@ ||d ||d q	 qd S )Nr   Ar   r   r   )r   r   Arrayr   r   r9   Integer)r  outtypesr  r  r  argtysr  )r  r  r   r   check_typesR  s   z7TestArrayMethods.check_round_array.<locals>.check_typesr   r   )r   arrayr   r   r   r   r   disable_leak_check)r   r  r!  r  r  r   )r  r  r   r   check_round_arrayA  s   z"TestArrayMethods.check_round_arrayc                 C      |  t d S r   )r$  r)   r   r   r   r   test_round_arrayk  rX   z!TestArrayMethods.test_round_arrayc                 C   r%  r   )r$  r   r   r   r   r   test_around_arrayn  rX   z"TestArrayMethods.test_around_arrayc                 C   r%  r   )r$  r+   r   r   r   r   test_round__arrayq  s   z"TestArrayMethods.test_round__arrayc              	   C   sX   t tfD ]%}tdd|}d}| t| |d  W d    n1 s$w   Y  qd S )NTnopython'.*The argument "a" must be array-like.*)r-   r%   r   assertRaisesRegexr   r   r  r  msgr   r   r   test_around_bad_arrayu  s   
z&TestArrayMethods.test_around_bad_arrayc              	   C   st   t tg}tdk r|t |D ](}tdd|}d}| t| |dddd W d    n1 s2w   Y  qd S )	N   r   Tr)  9.*The argument "out" must be an array if it is provided.*r   r      r   )r)   r   r   appendr+   r   r,  r   )r   funcspy_funcr  r.  r   r   r   test_around_bad_out|  s   
z$TestArrayMethods.test_around_bad_outc                    sB  dd   fdd} fdd} fdd} fd	d
} fdd} fdd}t dt jfdt jfg}t dt jfdt jfg}t dt jfdt jfg}	tdkrb|}
|}|}|}n|}
|}|}|}t jdt jd}||t d ||t j ||t j ||t j ||t j ||| ||| |
|t j |	d}||t j ||t j ||t j ||| |
|| |
|t j t jdt jd	dj
}t dj
d d dd d df }tdkr|}n|}||t j ||t j ||t j ||t j ||| ||| ||t j ||t j t jdt jdd d d }||t j ||t j |||	 ||t j ||t j ||t j ||| ||| t jdgt jd	d}||t j ||t j |||	 ||t j ||t j ||t j ||| ||| t dg}||t j   d S ) Nc                 S      t |}t|| S r   )r   r   r   r4   r  r   r   r   run     z-TestArrayMethods.test_array_view.<locals>.runc                    s6   |  |}   | |}|| ~  d S r   )rM   r  r   r  r   r4   r  r  r:  r   r   r   check  s   

z/TestArrayMethods.test_array_view.<locals>.checkc                    sJ    t} | | W d    n1 sw   Y  t|jd d S )Nz"new type not compatible with array)r  r  r  r  r  )r   r4   r  r=  r   r   	check_err  s   z3TestArrayMethods.test_array_view.<locals>.check_errc                       d} t}t||  W d    n1 sw   Y  t|j|  t} | | W d    n1 s;w   Y  t|j| d S )NzJTo change to a dtype of a different size, the last axis must be contiguousr  r  r   r  r  r  r   r4   r.  r  r=  r   r   check_err_noncontig_last_axis     zGTestArrayMethods.test_array_view.<locals>.check_err_noncontig_last_axisc                    r@  )NzOChanging the dtype of a 0d array is only supported if the itemsize is unchangedrA  rB  r=  r   r   check_err_0d  rD  z6TestArrayMethods.test_array_view.<locals>.check_err_0dc                    r@  )NzZWhen changing to a smaller dtype, its size must be a divisor of the size of original dtyperA  rB  r=  r   r   check_err_smaller_dtype  rD  zATestArrayMethods.test_array_view.<locals>.check_err_smaller_dtypec                    r@  )NzuWhen changing to a larger dtype, its size must be a divisor of the total size in bytes of the last axis of the array.rA  rB  r=  r   r   check_err_larger_dtype  s   z@TestArrayMethods.test_array_view.<locals>.check_err_larger_dtyper   r   ur   r   r   )r         ro   int16r      r   r   r1     *   r   abcdef)r   r4   int8rK  r   rZ   r   r   r   reshaper<   zerosuint64r   uint32int64r"  r#  )r   r>  r?  rC  rE  rF  rG  dt1dt2dt3check_error_larger_dtcheck_error_smaller_dtcheck_error_noncontigcheck_error_0dr   f_arrnot_f_or_c_arrcheck_maybe_errorr   r=  r   test_array_view  s   




 







z TestArrayMethods.test_array_viewc                 C   s\   t }ttjdd f|}tjddgtjd}|tj}||}||}| || dS )zX
        Test .view() on A layout array but has contiguous innermost dimension.
        Nr   r1  ro   )	r   r   r   uint8r   r"  r   rM   r  )r   r  r  origbytearyexpectr  r   r   r   test_array_sliced_view$  s   z'TestArrayMethods.test_array_sliced_viewc                    s  dd   fdd}t jdt jd}||t d ||t j ||t j ||t j ||d t jdt jdd	j}||t j t jd
t jdd d d }||t j	 t jd
t jd}d|j
_||t j t dt jfg} }||| W d    n1 sw   Y  dt|j d} }tdddd }|| W d    n1 sw   Y  dt|j d S )Nc                 S   r8  r   )r   r   r9  r   r   r   r:  5  r;  z/TestArrayMethods.test_array_astype.<locals>.runc                    s,   |  |jdd} | |}|| d S )Nr  order)r   rD   r   r<  r=  r   r   r>  9  s   
z1TestArrayMethods.test_array_astype.<locals>.checkrJ  ro   rK  r   rL  rO  r1  Fr   z#cannot convert from int32 to RecordTr)  c                 S   s   t dg|  d S Nr   )r   r"  r   ro   r   r   r   foo\  s   z/TestArrayMethods.test_array_astype.<locals>.fooz5array.astype if dtype is a string it must be constant)r   rZ   rR  r4   r   r   r   rS  r<   rU  flags	writeableassertTypingErrorassertInr  r  r   )r   r>  r   dtr  unicode_valrk  r   r=  r   test_array_astype3  s>   




z"TestArrayMethods.test_array_astypec                 C   s   | j tdd d d S )Nc                 S   s   t j| t jdjjS rn   )r   r   rc  ctypesdatar   r   r   r   <lambda>f  r   z5TestArrayMethods.test_array_tobytes.<locals>.<lambda>)
memoryaddr)check_layout_dependent_funcr   r   r   r   r   test_array_tobytesc  s   
z#TestArrayMethods.test_array_tobytesc                    s   t   fdd}ttd}|| |t| |t| |td tdd}||   	t
} td W d    n1 sOw   Y  dt|j d S )Nc                    sv   t | }| }   | }|| ~t  t | |d  ~t  t | |   d S rj  )sysgetrefcountr  r   gccollectr  r  )buf
old_refcntr  r  r  r  r   r   r   r>  m  s   
z3TestArrayMethods.check_np_frombuffer.<locals>.checkrO     )r   r   s   xxxz.buffer size must be a multiple of element size)r   	bytearrayrangebytes
memoryviewr   rZ   rS  r#  r  r  r  r  r  )r   r  r>  r   r  r   r  r   check_np_frombufferi  s    z$TestArrayMethods.check_np_frombufferc                 C   r%  r   )r  r   r   r   r   r   test_np_frombuffer  rX   z#TestArrayMethods.test_np_frombufferc                 C   r%  r   )r  r   r   r   r   r   test_np_frombuffer_dtype  rX   z)TestArrayMethods.test_np_frombuffer_dtypec                 C   r%  r   )r  r   r   r   r   r   test_np_frombuffer_dtype_str  rX   z-TestArrayMethods.test_np_frombuffer_dtype_strc                 C   sl   t dddd }| t}|ttdd W d    n1 s"w   Y  t|j}d}| || d S )NTr)  c                 S   s   t j| |d d S rn   r   )r~  rp  r   r   r   func     zETestArrayMethods.test_np_frombuffer_dtype_non_const_str.<locals>.funcrO  r   z@If np.frombuffer dtype is a string it must be a string constant.)r   r  r   r  r  r  r  ro  )r   r  r  excstrr.  r   r   r   &test_np_frombuffer_dtype_non_const_str  s   

z7TestArrayMethods.test_np_frombuffer_dtype_non_const_strc                 C   sP   t dddd }d}| t|}|d  W d    d S 1 s!w   Y  d S )NTr)  c                 S   r#   r   r   )r~  r   r   r   r    s   
z<TestArrayMethods.test_np_frombuffer_bad_buffer.<locals>.funcz).*Argument "buffer" must be buffer-like.*)r   r,  r   )r   r  r.  r  r   r   r   test_np_frombuffer_bad_buffer  s   

"z.TestArrayMethods.test_np_frombuffer_bad_bufferc                 C   s   | j jS r   )rs  rt  ru  r   r   r   rv    s    zTestArrayMethods.<lambda>c                    s    fdd}|d}|| || d || dj || dd d d  || d || dj || dd d d  tdg d}|| d S )	Nc                    sV   t t| f}| }|| }|| | jj |k| jj |k d S r   )r   r   r   r  rs  rt  )r   r  r  r  rw  r  r   r   r   	check_arr  s   z?TestArrayMethods.check_layout_dependent_func.<locals>.check_arrrJ  rL  r1  r1  r   r   r   r   )rS  r<   r   r"  )r   r  facrw  r  r   r   r  r   rx    s   
z,TestArrayMethods.check_layout_dependent_funcc                 C   r%  r   )rx  rA   r   r   r   r   test_array_transpose  rX   z%TestArrayMethods.test_array_transposec                 C   r%  r   )rx  r>   r   r   r   r   test_array_T  rX   zTestArrayMethods.test_array_Tc                 C   r%  r   )rx  rE   r   r   r   r   test_array_copy  rX   z TestArrayMethods.test_array_copyc                    sr    fdd}|d |g d |d d} t|}ttdf  W d    d S 1 s2w   Y  d S )Nc                    2   t t| f } | }|| }|| d S r   r   r   r   )objr  r  r  r  r   r   r   	check_obj     z5TestArrayMethods.check_object_copy.<locals>.check_objr   r1  r   )      ?       @      @r3  r+  hellor,  r   r   r   )r   r  r  r.  r  r   r  r   check_object_copy  s   "z"TestArrayMethods.check_object_copyc                 C   s   |  t | t d S r   )rx  rF   r  r   r   r   r   test_np_copy  s   
zTestArrayMethods.test_np_copyc                    s<    fdd}dddt dt ddfD ]}|| qd S )Nc                    r  r   r  )r   r  r  r  r  r   r   check_scalar  r  zETestArrayMethods.check_ascontiguousarray_scalar.<locals>.check_scalarrP  g      E@y              E@T)r   r   r   )r   r  r  r   r   r  r   check_ascontiguousarray_scalar  s    
z/TestArrayMethods.check_ascontiguousarray_scalarc                 C   sH   d}|  t|}ttdf| W d    d S 1 sw   Y  d S )Nr+  r  r  )r   r  r.  r  r   r   r   check_bad_array  s   "z TestArrayMethods.check_bad_arrayc                 C   s"   |  t | t | t d S r   )rx  rH   r  r  r   r   r   r   test_np_asfortranarray     

z'TestArrayMethods.test_np_asfortranarrayc                    s   t t d fdd	}|ttdddd |tjddgd	d
gddggdd |tjddgd	d
gddggdd |tjg ddd d S )NTc                    @   |rd| j _| } | }|| |j j|j j d S NFrl  rm  r   r  r   set_readonlyr  r  r  r   r   r>       z?TestArrayMethods.test_np_asfortranarray_readonly.<locals>.checkr1  r   r1  Fr  r   r   r   r   r3  Frh  Cr   r1  r   r   r   T)rH   r   r   broadcast_torT  r"  r   r>  r   r  r   test_np_asfortranarray_readonly  s   	$$z0TestArrayMethods.test_np_asfortranarray_readonlyc                 C   s"   |  t | t | t d S r   )rx  rJ   r  rH   r  r   r   r   r   test_np_ascontiguousarray	  r  z*TestArrayMethods.test_np_ascontiguousarrayc                    s   t t d fdd	}|ttddjdd |tjddgd	d
gddggdd |tjddgd	d
gddggdd |tjg ddd d S )NTc                    r  r  r  r  r  r   r   r>    r  zBTestArrayMethods.test_np_ascontiguousarray_readonly.<locals>.checkr1  r  Fr  r   r   r   r   r3  r  rh  r  r  r  )rJ   r   r   r  rT  r<   r"  r  r   r  r   "test_np_ascontiguousarray_readonly  s   	$$z3TestArrayMethods.test_np_ascontiguousarray_readonlyc                    s4   t   fdd}|d |d |d d S )Nc                        | } | } || d S r   r   )r   r  r  r  r   r   r>  (     z=TestArrayMethods.check_np_frombuffer_allocated.<locals>.check)rO  rN  r   r   r   )r   )r   r  r>  r   r  r   check_np_frombuffer_allocated$  s
   z.TestArrayMethods.check_np_frombuffer_allocatedc                 C   r%  r   )r  r   r   r   r   r   test_np_frombuffer_allocated1  rX   z-TestArrayMethods.test_np_frombuffer_allocatedc                 C   r%  r   )r  r   r   r   r   r   test_np_frombuffer_allocated24  rX   z.TestArrayMethods.test_np_frombuffer_allocated2c              	      sf  dd } fdd}t g d}|| t g d}|| |d}|| ||d ||dj ||dd d d	  ||d
 ||d
j ||d
d d d	  t g d}|| ddtdfD ]?}t |gd}tdk r|| qqt	t
f}tt|f  W d    n1 sw   Y  d}|t|j qqd S )Nc                 S   8   t jd t j| }d||dk < td||dk< |S NrP  r/   g333333?nangffffff?r   randomseedfloatNr   r   r   r   r  8  
   z+TestArrayMethods.check_nonzero.<locals>.facc                    s<   t t| f } | }dd |D }|| | d S )Nc                 S   s   g | ]}|  qS r   rC   )r   r   r   r   r   r   B  r   zETestArrayMethods.check_nonzero.<locals>.check_arr.<locals>.<listcomp>r  )r   r  r  r  r   r   r  ?  s   z1TestArrayMethods.check_nonzero.<locals>.check_arrr   r   r   r   r  rJ  rL  r1  r  )Hello worldr/   r   r  r   )r1  r   zYCalling nonzero on 0d arrays is not allowed. Use np.atleast_1d(scalar).nonzero() instead.)r   rK  bool_rS  r<   r"  r  r   r  r  r   r   r   ro  r  r  )r   r  r  r  r   r   r  r.  r   r  r   check_nonzero7  s4   
zTestArrayMethods.check_nonzeroc                 C   r%  r   )r  r   r   r   r   r   test_array_nonzeroa  rX   z#TestArrayMethods.test_array_nonzeroc                 C   r%  r   )r  r   r   r   r   r   test_np_nonzerod  rX   z TestArrayMethods.test_np_nonzeroc                 C   r%  r   )r  r   r   r   r   r   test_np_where_1g  rX   z TestArrayMethods.test_np_where_1c                    s  t dd }tg dtjtjtjtjtjtjg tj	
d d fdd	} fdd	}tg d
}|| tg d}|| |d}|| ||d ||dj ||dd d d  ||d ||dj ||dd d d  ||ddd ||djdd ||dd d d dd ddtdfD ]}t|gd}|| qdD ]}|| qd S )Nc                 S   r  r  r  r  r   r   r   r  l  r  z-TestArrayMethods.test_np_where_3.<locals>.facr  r  r  rP  Fc                    s   t j  |dkr%t j|  d |d}t j|  d |d}| j|d} nt j|  d td}t j|  d td}|d |d tt| t|t|f}| ||}|| ||}	|| d S )NFr   )r4   ri  r   rh  r   	   )
r   r  shuffler  rD   nextrz   r   r   r   )r   layoutr   r   r  r  r  _typeslayoutsr  r   r   r   r  y  s   

z3TestArrayMethods.test_np_where_3.<locals>.check_arrc                    sr   d}d}t j   d d} d d}tt| t|t|f}| ||}|| ||}|| d S )Nr   r   r   r   )r   r  r  r   r   r   )scalr   r   r  r  r  )r  r  r   r   r   
check_scal  s   z4TestArrayMethods.test_np_where_3.<locals>.check_scalr  r  rJ  rL  r1  r  r  )r  r/   r   r  r   )r   r   TFr   y                F)r   r   r   r   rW  r   r   r   r   r  r  rK  r  rS  r<   r  r"  )r   r  r  r  r   r   r   r   r  r   test_np_where_3j  s<   

z TestArrayMethods.test_np_where_3c                    s   t tdd  fdd}fdd}| D ]$}|dkddf}|| |dk tjd	f}|| |dkdd
f}|| qd S )NTr)  c                    s    |  } |  } || d S r   r  )r   r  r  r  r   r   check_ok  r  zGTestArrayMethods.test_np_where_3_broadcast_x_y_scalar.<locals>.check_okc                  3   sb    t ddd}  j|  | V  | dddV  | jddddV  | dddd d d V  d S )	Nr      r1  r   r  rh  r   )r   linspacer  r  rS  r   r   r   r   a_variations  s   zKTestArrayMethods.test_np_where_3_broadcast_x_y_scalar.<locals>.a_variationsr   r   y      ?      @F)r   r   r   r  )r   r  r  r   paramsr   r  r   $test_np_where_3_broadcast_x_y_scalar  s   

z5TestArrayMethods.test_np_where_3_broadcast_x_y_scalarc           	         sr   t tdd  fdd}dd }dd }| D ]}| D ]}t|}||k}|||f}|| q!qd S )	NTr)  c                    sV   | \}}}|||} |||} || |||} |||} || d S r   r  )r   	conditionr   r   r  r  r  r   r   r    s   
zJTestArrayMethods.test_np_where_3_broadcast_x_or_y_scalar.<locals>.check_okc                  s   sb    t ddd} | V  | d V  t | V  | d d d V  t dddddd	d
 V  d S )Nr  r   g?r   r   <   r   r                 ?)r   rZ   rS  rG   r  ru  r   r   r   array_permutations  s   
"zTTestArrayMethods.test_np_where_3_broadcast_x_or_y_scalar.<locals>.array_permutationsc                   s   s&    dV  dV  t jV  dV  dV  d S )Nr   g333333@Ty       @      @)r   r  r   r   r   r   scalar_permutations  s   
zUTestArrayMethods.test_np_where_3_broadcast_x_or_y_scalar.<locals>.scalar_permutations)r   r   r   mean)	r   r  r  r  r   r   x_meanr  r  r   r  r   'test_np_where_3_broadcast_x_or_y_scalar  s   




z8TestArrayMethods.test_np_where_3_broadcast_x_or_y_scalarc           	   
   C   s  t }tdd|}ttjtjtjtjtjg}|D ]s}tj	dtd}tj
|||d|d|d tj
|| |d|d|d tj
|d|d|d|d tj
|d|d|d|d t||}t|}||}d|d< |d |d< tj
||||| tj
||||| tj
||||d | tj
|||d || tj
||d d d	 |d d d	 |d d d	 |d d d	  tj
||dd d	 |dd d	 |dd d	 |dd d	  tj
||d d d
 |d d d
 |d d d
 |d d d
  tj
||dd d
 |dd d
 |dd d
 |dd d
  tj
||d d d |d d d |d d d |d d d  tj
||d d d |d d d |d d d |d d d  tj
||dd d |dd d |dd d |dd d  qd S )NTr)  5   ro   r   r   F   r1  r   r  )r   r   boolr   rK  r   rW  doubler   r   r  assert_equal	ones_liker   r  )	r   r  r  dtsrp  r.   r   r   rr   r   r   test_np_where_numpy_basic  s4   
"$""

>>>>>>@z*TestArrayMethods.test_np_where_numpy_basicc                 C   s   t }tdd|}ddg}td}td}|t|d d tjf ||}tj|d |d  tj|d |d  |j	}|j	}||||}tj|d d df |d d df  tj|d d df |d d df  d S )NTr)  F)r1     r   r   )
r   r   r   rT  r   r"  newaxisr  assert_array_equalr<   )r   r  r  r.   r   r   r  r   r   r   test_np_where_numpy_ndim  s   

 &*z)TestArrayMethods.test_np_where_numpy_ndimc                 C   s   t }tdd|}tg d}td}tjg dtjd}tjg dtjd}tj||||| |tj	}|tj
}tj||||| |t}d||d	k< tj||||| |d	k}d
||d	k< d	||< tj||||| d S )NTr)  )FTFFFFTFFFTFr   )      @r/   r  r              r/         $      $@r  r/   r  ro   )r  r  r  r  r  r   r  r  r  r  r  r  i
r   iau)r   r   r   r"  rV  r   r  r  r   r   rW  r   )r   r  r  r.   r   r   r  tmpmaskr   r   r   test_np_where_numpy_dtype_mix  s*   



z.TestArrayMethods.test_np_where_numpy_dtype_mixc                 C   s   t }tdd|}ddg}td}td}|   | td |||| W d    n1 s2w   Y  | td ||d || W d    d S 1 sQw   Y  d S )NTr)  )r   r   )r   r   zobjects cannot be broadcastr   )r   r   r   r   r#  r,  r  )r   r  r  r.   r   r   r   r   r   test_np_where_numpy_test_error;  s   

"z/TestArrayMethods.test_np_where_numpy_test_errorc                 C   s  t }tdd|}d}| t| |d dd W d    n1 s"w   Y  d}| t| |ddd W d    n1 s@w   Y  d	}| t| |ddd
 W d    n1 s^w   Y  d}| t| |dd d  W d    d S 1 s}w   Y  d S )NTr)  z+The argument "condition" must be array-liker1  r   z/The argument "x" must be array-like if providedr   r  z/The argument "y" must be array-like if providedr  z"Argument "x" or "y" cannot be None)r   r   r,  r   r-  r   r   r   test_np_where_invalid_inputsK  s$   "z-TestArrayMethods.test_np_where_invalid_inputsc                    s   t dd dd f}|D ]2tdd  fdd}|d |d	 |d
 |d |d |td
d
 |td qd S )Nc                 S   s   t | dS )Nr   rY   ru  r   r   r   rv  d      z4TestArrayMethods.test_arange_1_arg.<locals>.<lambda>c                 S   s   t jdtdt| dS )Nr  r   rk   )r   rZ   maxr0   ru  r   r   r   rv  e  s    Tr)  c                    s"   | } | }t j|| d S r   r   r  r  )r[   r  r  r  r  r   r   r  k  s   z4TestArrayMethods.test_arange_1_arg.<locals>.check_okr   r   r   g      @r  )r\   r   r:   r   rR  )r   all_pyfuncsr  r   r
  r   test_arange_1_arg`  s   z"TestArrayMethods.test_arange_1_argc                 C   sD  dd }t tttdd dd f}|D ]J}tdd|}|dd	|| |d
d|| |dd|| |dd|| |dd || tdk r\|tddtdd|| |tddtdd|| qt}tdd|}|d	tj	|| |dtj
|| |dd || |tdd || tdk r|dtj|| |tdtj|| d S d S )Nc                 S   s&   || |}|| |}t j|| d S r   r	  )r[   r]   r  r  r  r  r   r   r   r  y  s   

z4TestArrayMethods.test_arange_2_arg.<locals>.check_okc                 S   s   t | |dS )Nr   rY   r   r   r   r   r   rv        z4TestArrayMethods.test_arange_2_arg.<locals>.<lambda>c                 S   s   t jd|| dS )Nr1  rk   rY   r  r   r   r   rv    s    Tr)  r   r   r         ?r   r0  r   r  r  r   r   )r^   ru   ri   rm   r   r   r:   rp   r   r   r   rR  r   r   )r   r  r  r  r  r   r   r   test_arange_2_argx  s:   	z"TestArrayMethods.test_arange_2_argc                    s  t jdo
t jdkd fdd	}tttfD ]}tdd|}|dd	d
|| |ddd|| |ddd|| |ddd|| |dd
d|| |ddd || |dd d || |t	dt	d	t	d
|| |t	dt
d	td
|| tj	}||d|d	|d
||d |td|d	|d
||d tdk r|dtddtd
d
|| qt}tdd|}|d
d	tj|| |ddtj|| |d
dd || |t	dtd	d ||d tdk r|ddtj|| |dtdtj|| d S d S )Nwin32l        Fc                    sB   || ||}|| ||}t j|| s |j|j d S d S r   )r   r  r  r  r4   )r[   r]   r`   r  r  check_dtyper  r  r   	windows64r   r   r    s   z4TestArrayMethods.test_arange_3_arg.<locals>.check_okTr)  r   r   r   r  r   r   r  r  r  r   r1  皙?r3  r0  r  rM  r  r   r  )rz  platform
startswithmaxsizera   rr   rw   r   r   rR  rK  r   rW  r   r:   rs   r   r   r   )r   r  r  r  i8r   r  r   test_arange_3_arg  s:   
"" z"TestArrayMethods.test_arange_3_argc                    s   t tfD ]Wtdd  fdd}|dddtj |dd	d
tj |dddtj |dddd  |d
dd d  |d
d d d  tdk r[|dddtj |dt	ddt	ddtj qd S )NTr)  c                    s.   | |||} | |||}t j|| d S r   r	  )r[   r]   r`   rc   r  r  r
  r   r   r    s   z4TestArrayMethods.test_arange_4_arg.<locals>.check_okr   r   r   r  r   r   r  r  r  r   r1  r3  r0  r  )
rd   ry   r   r   r   r   r   r   r   r:   )r   r  r   r
  r   test_arange_4_arg  s   z"TestArrayMethods.test_arange_4_argc           	      C   s  |    dd dd dd g}dd dd g}|D ]"}| t}tdd|}|d	 W d    n1 s6w   Y  q|D ]#}| t}tdd|}|d	d
 W d    n1 s\w   Y  q>t}tdd|}||fD ]N}dtd	dfdfD ]A}ttf}| |.}t	
  t	d ||  W d    n1 sw   Y  | dt|j W d    n1 sw   Y  q{qod S )Nc                 S      t j| dS rg   rY   ru  r   r   r   rv    r  z5TestArrayMethods.test_arange_throws.<locals>.<lambda>c                 S   r  rj   rY   ru  r   r   r   rv    r  c                 S   r  rn   rY   ru  r   r   r   rv    r  c                 S   rf   rv   rY   r  r   r   r   rv    r  c                 S   rf   )N)rh   r4   rY   r  r   r   r   rv    r  Tr)  r1  r3  r   r   )r   r1  r   ignorezMaximum allowed size exceeded)r#  r  r   r   ra   r   rK  ZeroDivisionErrorr  warningscatch_warningssimplefilterro  r  r  )	r   bad_funcs_1bad_funcs_2r  r  r  finputspermitted_errorsr   r   r   test_arange_throws  sJ   



z#TestArrayMethods.test_arange_throwsc                 C   s0   t dddd }d}| |||| d S )NTr)  c                 S   s   t dd|  | S )Nr   r   rY   rk   r   r   r   rk    r  z2TestArrayMethods.test_arange_accuracy.<locals>.foog[R֯?)r   r   r6  )r   rk  r   r   r   r   test_arange_accuracy  s   
z%TestArrayMethods.test_arange_accuracyc                    s   t tdd  fdd} fdd}  |tdg |tdgg |td |td |td |td	d
g |tg  d S )NTr)  c                    r  r   r  )r1   r  r  r  r   r   r    r  z,TestArrayMethods.test_item.<locals>.check_okc                    sH    t} |  W d    n1 sw   Y  dt|j d S )Nz>item(): can only convert an array of size 1 to a Python scalarr  r  ro  r  r  )r1   r  r  r   r   r   r?    s   
z-TestArrayMethods.test_item.<locals>.check_errr                 ?r   r1  )r   r   r#  r   r   r   r"  r  r   r  r?  r   r  r   	test_item  s   zTestArrayMethods.test_itemc                    s   t tdd  fdd} fdd}  |tdgd |td	ggd |tdd |td
dg |tg  d S )NTr)  c                    s4   |   }|   }||  || || d S r   )rD   r   )r   r   r  r  r  r   r   r  /  s
   

z/TestArrayMethods.test_itemset.<locals>.check_okc                    sJ    t} | d W d    n1 sw   Y  dt|j d S )NrP  z/itemset(): can only write to an array of size 1r*  )r   r  r+  r   r   r?  6  s   z0TestArrayMethods.test_itemset.<locals>.check_errr   rP  r,  r   r1  )r   r   r#  r   r   r   r"  r-  r   r  r   test_itemset*  s   zTestArrayMethods.test_itemsetc              
   C   s   t }tdd|}tjtjtjtjtjtjtj	g}dd |D }tj
tjtjg}dd |D }|D ]*}|D ]%}| d|j | |||| W d   n1 sUw   Y  q5q1dS )zK test sum over a whole range of dtypes, no axis or dtype parameter
        Tr)  c                 S   2   g | ]}t d |t d|t d|d gqS r  r3  r   r   r   r   )r  r   r   r   	arr_dtyper   r   r   r   N      

z-TestArrayMethods.test_sum.<locals>.<listcomp>c                 S   $   g | ]}t d |t d|gqS r2  r   r   r4  r   r   r   r   U      

zTest np.sum with {} input N)r   r   r   r   r   rW  r   r   r   timedelta64rV  rU  r  subTestformatr4   r   )r   r  r  
all_dtypesall_test_arraysunsigned_dtypesarr_listr   r   r   r   test_sumG  s(   zTestArrayMethods.test_sumc           	      C   s   t }tdd|}tjtjtjtjtjtg}dd |D }tj	tj
g}|dd |D 7 }|D ]=}|D ]8}dD ]3}|t|jd krBq6| d|j | |||d	|||d	 W d
   n1 sdw   Y  q6q2q.d
S )z< test sum with axis parameter over a whole range of dtypes  Tr)  c                 S   r0  r1  r   r4  r   r   r   r   e  r6  z7TestArrayMethods.test_sum_axis_kws1.<locals>.<listcomp>c                 S   r7  r8  r   r4  r   r   r   r   l  r9  r   r   r1  r   #Testing np.sum(axis) with {} input rU   N)r   r   r   r   r   rW  r   r   TIMEDELTA_MrU  r  lenr   r;  r<  r4   r   )	r   r  r  r=  r>  r?  r@  r   rV   r   r   r   test_sum_axis_kws1_  s8   
z#TestArrayMethods.test_sum_axis_kws1c                 C   s8  t }tdd|}tjg}tdtjtdtjtdtjtttti}dd |D }tjg}|dd |D 7 }|D ]Z}|D ]U}d	D ]P}	|	t	|j
d
 krSqG| d|j3 |||	d}
|||	d}t|tjr| |
||j |||j  n| |
| W d   n1 sw   Y  qGqCq?dS )a    testing uint32 and int32 separately

        uint32 and int32 must be tested separately because Numpy's current
        behaviour is different in 64bits Windows (accumulates as int32)
        and 64bits Linux (accumulates as int64), while Numba has decided to always
        accumulate as int64, when the OS is 64bits. No testing has been done
        for behaviours in 32 bits platforms.
        Tr)  r   rV  rW  c                 S   r0  r1  r   r4  r   r   r   r     r6  z7TestArrayMethods.test_sum_axis_kws2.<locals>.<listcomp>c                 S   r7  r8  r   r4  r   r   r   r     r9  rB  r   rC  rU   N)r   r   r   r   r4   rW  rU  rD  rV  rE  r   r;  r<  r9   ndarrayr   r   r  )r   r  r  r=  
out_dtypesr>  r?  r@  r   rV   npy_res	numba_resr   r   r   test_sum_axis_kws2{  sH   	z#TestArrayMethods.test_sum_axis_kws2c                 C   s  t }tdd|}tjtjtjtjtjtjg}dd |D }tj	tj
tjg}dd |D }tdtjgtdtjtjgtdtjtjtjgtd	tjtjtjtjgtd
tjtjtjgtdtjtjgtdtjtjtjtjtjgtdtjtjgtdtjgi	}|D ]9}|D ]4}||j D ],}	d|j|	}
| |
 | |||	d|||	d W d   n1 sw   Y  qqqdS )z< test sum with dtype parameter over a whole range of dtypes Tr)  c                 S   r0  r1  r   r4  r   r   r   r     r6  z7TestArrayMethods.test_sum_dtype_kws.<locals>.<listcomp>c                 S   r7  r8  r   r4  r   r   r   r     r9  r   r   rW  r   rV  rU  r  r   r   z*Testing np.sum with {} input and {} outputro   N)r   r   r   r   r   rW  r   r   r   rV  rU  r  r4   r<  r;  r   )r   r  r  r=  r>  r?  rH  r@  r   	out_dtypesubtest_strr   r   r   test_sum_dtype_kws  sJ   


z#TestArrayMethods.test_sum_dtype_kwsc                 C   s  t }tdd|}tjtjtjtjtjtjg}dd |D }tj	tj
tjg}dd |D }tdtjgtdtjtjgtdtjtjtjgtd	tjtjtjtjgtd
tjtjtjgtdtjtj
gtdtjtjtjtjtjgtdtjtjgtdtjgi	}|D ]N}|D ]I}||j D ]A}	dD ]<}
|
t|jd krqd|j|	}| | |||
|	d}|||
|	d}| || W d   n1 sw   Y  qqqqdS )zF test sum with axis and dtype parameters over a whole range of dtypes Tr)  c                 S   r0  r1  r   r4  r   r   r   r     r6  z<TestArrayMethods.test_sum_axis_dtype_kws.<locals>.<listcomp>c                 S   r7  r8  r   r4  r   r   r   r     r9  r   r   rW  r   rV  rU  r  r   r   rB  r   z+Testing np.sum with {} input and {} output r   N)r   r   r   r   r   rW  r   r   r   rV  rU  r  r4   rE  r   r<  r;  r   )r   r  r  r=  r>  r?  rH  r@  r   rL  rV   rM  py_resnb_resr   r   r   test_sum_axis_dtype_kws  sR   

z(TestArrayMethods.test_sum_axis_dtype_kwsc                 C   s^   t }tdd|}tj}td}| ||d|||d| | ||d|||d| dS )zC testing that axis and dtype inputs work when passed as positional Tr)  r2  r   r1  N)r   r   r   r   r   r   )r   r  r  r4   r   r   r   r   test_sum_axis_dtype_pos_arg  s   


z,TestArrayMethods.test_sum_axis_dtype_pos_argc                 C   st   t }tdd|}td}| ||dd||dd t}tdd|}td}| ||dd||dd d S )NTr)  r  r   rU   r   )r   r   r   rZ   r   r   r   r  r  r   r   r   r   test_sum_1d_kws  s   

 z TestArrayMethods.test_sum_1d_kwsc                 C   sX   t }tdd|}td}d}| |||||| d}| |||||| d S )NTr)  )r   r   r   r3  r  rM  r   r1  )r   r   r   r   r   )r   r  r  r   rV   r   r   r   test_sum_const  s   
zTestArrayMethods.test_sum_constc                 C   s   |    t}tdd|}td}td}| t ||d W d    n1 s,w   Y  | t ||d W d    n1 sFw   Y  | t ||d W d    d S 1 saw   Y  d S )NTr)  r2  r   r   r1  r   r   )r#  r   r   r   r   r  r  r   r  r  r   r   r   r   r   test_sum_exceptions  s   

"z$TestArrayMethods.test_sum_exceptionsc                 C   s   |    tdddd }td}| |||| td}| |||| td}| t}|| W d    n1 sFw   Y  d}| |t	|j
 | t}|| W d    n1 skw   Y  | d	t	|j
 d S )
NTr)  c                 S   r   )Nr  rU   r   r=   r   r   r   rk  .  s   z5TestArrayMethods.test_sum_const_negative.<locals>.foo)r   r1  r   r   r  )r   r1  z"'axis' entry (-1) is out of boundszout of bounds)r#  r   r   r   r   r6  r  r	   ro  r  r  r  )r   rk  r   r  errmsgr   r   r   test_sum_const_negative*  s"   




z(TestArrayMethods.test_sum_const_negativec                 C   s   t }tdd|}td}| |||| | t ||d W d    n1 s-w   Y  t}tdd|}| t ||dd W d    d S 1 sRw   Y  d S )NTr)  )r1  r   r   rU   )r   r   r   r   r   r  r   r   rS  r   r   r   test_cumsumB  s   
"zTestArrayMethods.test_cumsumc           
   	      s  t tdd  fdd}g }|d |d |d |d |tg d	 |tjg d
g dgdd |tg d
g dgg |tddggddggddgggg |g d	 |d
 |d |d tg d}tjtjtjfD ]}tj	d|dj
dt|d}|D ]}||| qqtj	d|dj
dt|d}|j}|| d t|t| d |g| d gg}|D ]}	t  ||	 W d    n1 sw   Y  qЈt  |dg W d    n	1 sw   Y    d S )NTr)  c                    sD   | |} | |} || t|dr |j|jk d S d S )Nri  )r   hasattrr  ri  )r   indr  r  r  r   r   r>  U  s   


z)TestArrayMethods.test_take.<locals>.checkr   r      r  )r   r   r   r^  r   r   r   r   )r^  r   r   r  rh  r   r1  )r_  )r^  r   r1  ))r   )r   r`  ))r^  )r   )r1  r  r  ro   rV  333333?)rS   r   r4  r   r"  r   r   rW  r   rZ   rS  r  sizer  
IndexErrorr   r#  )
r   r>  test_indicesr  rp  r  r]  szAillegal_indicesr   r   r  r   	test_takeQ  sH   



 *


 zTestArrayMethods.test_takec                    s   t tdd  fdd}td}tjtjfD ]	}|||d qtddd	}tjtjfD ]	}|||d q5tjd
tjdddd	d}tjtjtjfD ]	}|||d qUd S )NTr)  c                    sT   t | }||}|d u  t | } ||}|d u  || d S r   )r   rD   
assertTruer   )r   r    r  ervr  grvr  r   r   r>    s   



z)TestArrayMethods.test_fill.<locals>.checkr   r   r  r   r   0   ro   r1  )	r{   r   r   rZ   r   r  rS  r   r   )r   r>  r  r   r   r  r   	test_fill  s   
zTestArrayMethods.test_fillc                 C   j   t }tdd|}tdd}tj|||| t||\}}|d|  }tj|||| d S NTr)  r  r   r  )r   r   r   r  r  r  meshgridr   r  r  r   r   zr   r   r   	test_real     zTestArrayMethods.test_realc                 C   rm  rn  )r   r   r   r  r  r  ro  rp  r   r   r   	test_imag  rs  zTestArrayMethods.test_imagc                    s4    fdd}t j||tdd|| d S )Nc                    s   t |  S r   )r   expm1r   r   r   r  r   r   lower_clip_result  r   zHTestArrayMethods._lower_clip_result_test_util.<locals>.lower_clip_resultTr)  )r   r  assert_almost_equalr   )r   r  r   r   r   rw  r   rv  r   _lower_clip_result_test_util  s
   z-TestArrayMethods._lower_clip_result_test_utilc           	   
   C   sR  t tttf}ttf}tdddtddddddfD ]}|| D ]}t	dd	|}d
}| 
t| ||d d  W d    n1 sEw   Y  tj||dd ||dd  tj||d d||d d tj||dd||dd ||v rt|}t|}tj||dd|||dd| tj|| | ||dd q#qd S )Nr  r   e   (   r   r1  r   Tr)  &array_clip: must set either max or minr   r3  )r   r   r   r   r   r   r   r  rS  r   r,  r  r  r  
empty_likery  )	r   has_out
has_no_outr   r  r  r.  r  coutr   r   r   	test_clip  s0   

zTestArrayMethods.test_clipc                 C   sx  t tttf}ttf}tdddddd}t	dd
|jdd}t	dd	
|jdd}dd
|d g}dd|d g}|| D ]w}tdd|}	|D ]k}
|D ]f}|
d u rz|d u rzd}| t| |	|d d  W d    n1 stw   Y  qQtj|||
||	||
| ||v rt|}t|}tj|||
|||	||
|| tj|| | |	||
| qQqMqBd S )Nr  r   r{  r   r1  r   r  r   rM  r3  Tr)  r|  )r   r   r   r   r   r   r   r  rS  rZ   r   r4   r   r,  r  r  r  r}  ry  )r   r~  r  r   	a_min_arr	a_max_arrminsmaxsr  r  r   r   r.  r  r  r   r   r   test_clip_array_min_max  s:   

z(TestArrayMethods.test_clip_array_min_maxc                 C   sP   t ddt}d}| t| |d dd W d    d S 1 s!w   Y  d S )NTr)  r+  r   r   r   r   r,  r   r   r  r.  r   r   r   test_clip_bad_array  
   "z$TestArrayMethods.test_clip_bad_arrayc                 C   sP   t ddt}d}| t| |ddd W d    d S 1 s!w   Y  d S )NTr)  z).*The argument "a_min" must be a number.*r   r   r   r  r  r   r   r   test_clip_bad_min  r  z"TestArrayMethods.test_clip_bad_minc                 C   sP   t ddt}d}| t| |ddd W d    d S 1 s!w   Y  d S )NTr)  z).*The argument "a_max" must be a number.*r   r   r  r  r   r   r   test_clip_bad_max  r  z"TestArrayMethods.test_clip_bad_maxc                 C   sT   t ddt}d}| t| |ddddd W d    d S 1 s#w   Y  d S )	NTr)  r2  r   r   r   r3  r   r  r  r   r   r   test_clip_bad_out  s
   "z"TestArrayMethods.test_clip_bad_outc           	   	   C   s   |    tddt}d}tdddddd	}td
d|jdd}tdd|jdd}d|fd
|f||f|df|dfg}|D ] \}}| 	t
| |||| W d    n1 scw   Y  qHd S )NTr)  zA.*shape mismatch: objects cannot be broadcast to a single shape.*r  r   r{  r   r1  r   r3  r   r   )r#  r   r   r   r  rS  rZ   r   r4   r,  r  )	r   r  r.  r   r  r  min_maxr   r   r   r   r   test_clip_no_broadcast  s    z'TestArrayMethods.test_clip_no_broadcastc                 C   st   t tfD ]3}tdd|}tdd}tj|||| t||\}}|d|  }tj|||| qd S rn  )r   r   r   r   r  r  r  ro  rp  r   r   r   	test_conj%  s   zTestArrayMethods.test_conjc              	      s   t tdd  fdd}|tg dg dg |ttd |tddgd	d
gdd	gg |tg  |ttjtjg |tjg ddd |ttdtdtdtdg d S )NTr)  c                    s   t j|  |  d S r   )r   r  r  r   r
  r   r   r>  4  s   z+TestArrayMethods.test_unique.<locals>.check)r   r   r   )r   r   r   r   g@ra  gRQ@gffffff
@)r  r  Bz<U16ro   z
2001-01-01z
2001-01-02NAT)r   r   r   r"  rT  r  
datetime64r  r   r
  r   test_unique0  s    zTestArrayMethods.test_uniquec                 C   s   t }tdd|}tddd}td}tj|||||| t}tdd|}tddd}tj|||||| d S )NTr)  g      4@r   r   r  g      0@)r   r   r   rZ   rS  r  r  r   rW  r   r   r   test_array_dotB  s   
zTestArrayMethods.test_array_dotc                 C   s   t }tdd|}d}|tjf}tj|| ||  |tdf}tj|| ||  |tjf}tj|| ||  |tdf}tj|| ||  d S )NTr)  r1  r   f4)r   r   r   r   r  r  r4   r   )r   r  r  r   r   r   r   r   test_array_ctor_with_dtype_argR  s   

z/TestArrayMethods.test_array_ctor_with_dtype_argc                 C   J   t jdt jd}d}t||j|d}t jg d|jd}t j|| d S )NrM  ro   r1  r4   r   )r1  r   r   r   r3  r  r   rZ   rc  r   r4   r"  r  r  )r   bufferr   resultr  r   r   r   test_frombuffer_offset`  
   z'TestArrayMethods.test_frombuffer_offsetc                 C   r  )NrJ  ro   r   r4   r   )r   r   r1  r   r  )r   r  r   r  r  r   r   r   test_frombuffer_counth  r  z&TestArrayMethods.test_frombuffer_countc                 C   sF   t jdt jd}t||jdd}t jg d|jd}t j|| d S )NrM  ro   r   r  )r   r   r1  r   r   r   r3  r  r  )r   r  r  r  r   r   r   (test_frombuffer_count_negative_means_allp  s   z9TestArrayMethods.test_frombuffer_count_negative_means_allc                 C   sP   t jdt jd}d}d}t||j||d}t jg d|jd}t j|| d S )NrJ  ro   r1  r   )r4   r   r   r  r  )r   r  r   r   r  r  r   r   r    test_frombuffer_offset_and_countw  s   z1TestArrayMethods.test_frombuffer_offset_and_countc                 C   sb   t jdt jd}t|d }d}| t| t||j|d W d    d S 1 s*w   Y  d S )NrJ  ro   r   z=offset must be non-negative and no greater than buffer lengthr  )r   rZ   rc  rE  r,  r  r   r4   )r   r  r   r.  r   r   r   test_frombuffer_invalid_offset  s   "z/TestArrayMethods.test_frombuffer_invalid_offsetc                 C   sd   t jdt jd}t|d }d}| t| t j||j|d W d    d S 1 s+w   Y  d S )NrJ  ro   r   z%buffer is smaller than requested sizer  )r   rZ   rc  rE  r,  r  r   r4   )r   r  r   r.  r   r   r   test_frombuffer_invalid_count  s   "z.TestArrayMethods.test_frombuffer_invalid_count)a__name__
__module____qualname____doc__r   r	  r  r  r$  r&  r'  r   r(  r/  r7  rb  rg  rr  ry  r  r  r  r  r  r  r   rZ   rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r(  r)  r.  r/  rA  rF  rK  rN  rQ  rR  rT  rU  rX  rZ  r[  rg  rl  rr  rt  ry  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  __classcell__r   r   r   r   r     s    *

 0$


	*C&'+'

-%)
7
 
	r   c                   @   s   e Zd Zdd ZdS )TestArrayComparisonsc                    s    fdd}t  tjdtjdd}|||d |||d d  d ||| d |||dd |||jd |||d d	 d d S )
Nc                    s4   t t| t|f }|| ||| f d S r   r  )r   r   r  r  r  r   r   r>    s   z1TestArrayComparisons.test_identity.<locals>.checkr   ro   )r1  r   TFrV  r   )r   r   rT  r   rS  rD   rM   r<   )r   r>  r   r   r  r   test_identity  s   z"TestArrayComparisons.test_identityN)r  r  r  r  r   r   r   r   r    s    r  __main__)r   N)r   r   r   )NNN)h	itertoolsr   r   r|  rz  unittestr   numpyr   numbar   r   r   
numba.corer   numba.core.errorsr   r	   numba.np.numpy_supportr
   r   numba.tests.supportr   r   r   r   r   rD  TIMEDELTA_Yr   r!   r%   r)   r+   r,   r-   r6   r>   rA   rE   rF   rH   rJ   rO   rS   rW   r\   r^   ra   rd   ri   rm   rp   rr   rs   ru   rw   ry   r{   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  mainr   r   r   r   <module>   s    






             
