U
    #c                     @   sB  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dl	m
Z
mZ d dlmZ d dlmZ d dlZd dlmZmZmZmZmZmZmZmZmZ ejejejejej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,gZ-ej./ Z0ej1/ Z2e3 dgZ4ej5ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAgZBG dd dZCejDjEed	d
de
eeBejFeG ddejFeG dddd ZHG dd dZIG dd dZJdd ZKdd ZLG dd dZMG dd dZNG dd dZOG dd dZPesG d d! d!ZQG d"d# d#ZRG d$d% d%ZSG d&d' d'ZTG d(d) d)ZUG d*d+ d+ZVG d,d- d-ZWe jXd.d/ ZYe
ee4eeBee-d0d1 ZZe
ee4eeBee-d2d3 Z[e
eeBee-ee-d4d5 Z\ejD]d6eBejD]d7dd8gd9d: Z^ejD]d6eBejD]d7dd8gd;d< Z_ejD]d=ej`d> ejDj]d?d@dA dBdA dCdA gdDdEdFgdGdHdI ZaejD]d=ej`dJ ejDj]d?dKdA dLdA dMdA ejbdNdA ejDjcdOdPdQgdRdSdFdTgdGdUdV ZdejD]d=ej`dW dXdY ZeejD]d=ej`d> ejDj]d?dZdA d[dA gdTd\gdGd]d^ Zfd_d`ej5dafdbdcej6dafddddej7dafdedeej8dafd`d_ej:dafdcdbej9dafdfdgej<dhfdidjejAdhfdkdlej;dhfdmdnej=dhfdodpej>dhfdqdrej?dhfdsdtej@dhfgZgejD]dudvd6dwgegejD]dxejhejiej)gdydz Zjd{d| ZkejD]dudvd6dwgegejD]d}elemenejogep d~d ZqdS )    N)_pep440)givensettings)sampled_from)numpy)	assert_assert_equalassert_raisesassert_almost_equalassert_array_equalIS_PYPYsuppress_warnings_gen_alignment_dataassert_warnsc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
	TestTypesc                 C   s,   t D ]"}|d}t|dkd||f  qd S )N   error with %r: got %r)typesr   )selfatypea r   D/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_scalarmath.py
test_types(   s    zTestTypes.test_typesc                 C   s   t tD ]\}}|d}tjdg|d}t tD ]\\}}|d}tjdg|d}|| }	|| }
t|	j|
jd|t|j|t|jf  q0qd S )N   dtyper   z$error with types (%d/'%c' + %d/'%c'))	enumerater   nparrayr   r   char)r   kr   Za_scalarZa_arraylZbtypeZb_scalarZb_arrayZc_scalarZc_arrayr   r   r   test_type_add-   s    
zTestTypes.test_type_addc                 C   s@   t tD ]2\}}tdddg|}|dddg}t|| qd S )Nr      r   )r   r   r   r   r   )r   r!   r   r   br   r   r   test_type_createA   s    zTestTypes.test_type_createc                 C   s   t dD ]}tdd qd S )Ni@ r   )ranger   add)r   ir   r   r   	test_leakG   s    zTestTypes.test_leakN)__name__
__module____qualname__r   r#   r&   r*   r   r   r   r   r   '   s   r   i'  i  )Zmax_examplesdeadliner   )r   shapec           	      C   s(  |d }|d }t |tjs tt |tjs0t|jjdksH|jjdkrtjtjtj	tj
h}| |krt|sxt|rtd t  tjdd| tdt z| ||}W nF tk
r } z(tt| | || W 5 Q R X W 5 d}~X Y nX | ||}t|| W 5 Q R X W 5 Q R X dS )z
    This is a thorough test attempting to cover important promotion paths
    and ensuring that arrays and scalars stay as aligned as possible.
    However, if it creates troubles, it should maybe just be removed.
    r   cz3complex comp ufuncs use sort-order, scalars do not.ignoreallerrorN)
isinstancer   ZgenericAssertionErrorr   kindoperatorgegtleltisnanpytestxfailwarningscatch_warningserrstatesimplefilterDeprecationWarning	Exceptionraisestyper   )	opZarr1Zarr2Zscalar1Zscalar2Zcomp_opsreseZ
scalar_resr   r   r   #test_array_scalar_ufunc_equivalenceN   s"    
&
rK   c                   @   s   e Zd Zdd Zdd ZdS )TestBaseMathc              	   C   s  t jdft jdft jdffD ]t\}}t|d|dD ]Z\}}}}t |}t ||d< t ||d< tt ||||d tt |d|d |d tt d|||d t j|||d	 t|||d |d  t j	|j
|d
d 7  < tt |t |||d |t jkr0tt |t d||d t ||d< t j|d|d	 t||d |d t ||d< t jd||d	 t||d |d q4qd S )N      binary)r   rG   max_size.err_msgr$   r   outr   )r   float32float64int32r   	ones_likeZ
zeros_liker
   r(   ZarangesizeZsquaremultiplyZ
reciprocaldivide)r   dtszrT   Zinp1Zinp2msgZexp1r   r   r   test_blockedr   s:    &
 

 

 zTestBaseMath.test_blockedc                 C   s   t jdt jddd t j}t jdt jddd t j}t|| |d  t j|||d t jt |||d t j|t ||d t t || t |t | d S )N   r      r$   rS   )r   zerosint8viewrV   r
   r(   rX   )r   dor   r   r   test_lower_align   s      zTestBaseMath.test_lower_alignN)r+   r,   r-   r_   rh   r   r   r   r   rL   q   s    rL   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )	TestPowerc                 C   s@   t jt jt jfD ]*}|d}|d }t|dkd||f  qd S )Nr   ra   Q   r   )r   rd   int16float16r   r   tr   r%   r   r   r   test_small_types   s    zTestPower.test_small_typesc                 C   sj   t jt jt jt jt jfD ]L}|d}|d }d||f }t |t jrVt|dk| qt	|d|d qd S )N3   ra   r   i:g rQ   )
r   rW   int64rU   rV   
longdouble
issubdtypeintegerr   r
   )r   rn   r   r%   r^   r   r   r   test_large_types   s    zTestPower.test_large_typesc                 C   sR  dd dD }dd dD }t ||D ]N\}}|jtjkrNtttj|| q(t||}t	|jj
tjk t|d q(dd dD }t ||D ]N\}}|jtjkrtttj|| qt||}t	|jj
tjk t|d qd	d dD }t ||D ]P\}}|jtjkr$tttj|| qt||}t	|jj
tjk t|d
 qd S )Nc                 S   s   g | ]}t d |d qS r   r   r   .0r\   r   r   r   
<listcomp>   s     zETestPower.test_integers_to_negative_integer_power.<locals>.<listcomp>Zbhilqc                 S   s   g | ]}t d |d qS )r   r   rx   ry   r   r   r   r{      s     Z
bhilqBHILQ      ?c                 S   s   g | ]}t d |d qS rv   rx   ry   r   r   r   r{      s           c                 S   s   g | ]}t d |d qS )r$   r   rx   ry   r   r   r   r{      s     g      ?)	itertoolsproductr   r   uint64r	   
ValueErrorr8   powr   rG   rV   r
   )r   expbasei1i2rI   r   r   r   'test_integers_to_negative_integer_power   s,    z1TestPower.test_integers_to_negative_integer_powerc              	   C   s   t jt jt jt jt jt jt jt jt jg	}|D ]h}|D ]^}|d}|d}|| }d|||df }t t 	|t j
rt|dk| q4t|d|d q4q,d S )Nr   r$   z(error with %r and %r:got %r, expected %r	   rQ   )r   rd   rk   rl   rU   rV   rW   rq   rs   r   rt   r   r
   )r   Ztypelistt1t2r   r%   resultr^   r   r   r   test_mixed_types   s&        
zTestPower.test_mixed_typesc                 C   sd   d}d}d}t |||}tjtjtjfD ]6}tttj |||| tttj t|||| q(d S )N   ra   
   )	r   r   rW   rU   	complex64r	   	TypeErrorr8   r   )r   r   r%   r0   expectedrn   r   r   r   test_modular_power   s    zTestPower.test_modular_powerN)r+   r,   r-   ro   ru   r   r   r   r   r   r   r   ri      s
   
$ri   c                 C   s   | | | | fS Nr   )xyr   r   r   floordiv_and_mod   s    r   c                 C   s   | t jd krdS dS d S )NUnsignedInteger)r   r   rw   )r   	typecodes)r\   r   r   r   _signs   s    r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestModulusc              	   C   s  t jd t jd  }ttfD ]}t||D ]\}}tt|t|D ]\}}d}||j||||f }t j|d |dd }	t j|d |dd }
||	|
\}}t	||
 | |	|d |d	krt
|
|  k od
kn  | qHt
|
|  kod
kn  | qHq,qd S )N
AllIntegerFloat*op: %s, dt1: %s, dt2: %s, sg1: %s, sg2: %sG   r   r      rQ   rw   r   )r   r   r   divmodr~   r   r   r+   r   r   r   r   r\   rH   dt1dt2Zsg1Zsg2fmtr^   r   r%   divremr   r   r   test_modulus_basic   s     zTestModulus.test_modulus_basicc                    s8  t tdd}t tdd}|dg | }|| }t t||}t dd |D }tj|tdj\}}tj|tdj\}	}
t	|	dk|dk |dk A @ d	|	}	t	|
dk|dk @ d	|
}
t
tfD ]r tjd
 D ]b}d j|f }||}||}t fddt||D  \}}t||	|d t||
|d qqd S )Nir   r      c                 s   s   | ]}t | V  qd S r   )r   )rz   rn   r   r   r   	<genexpr>  s     z7TestModulus.test_float_modulus_exact.<locals>.<genexpr>r                  r   zop: %s, dtype: %sc                    s   g | ]\}} ||qS r   r   )rz   Za_Zb_rH   r   r   r{   $  s     z8TestModulus.test_float_modulus_exact.<locals>.<listcomp>rQ   )listr'   r~   r   r   r   intTfloatwherer   r   r   r+   astypezipr   )r   ZnlstZplstZdividendZdivisorargtgtr   r%   ZtgtdivZtgtremr\   r^   faZfbr   r   r   r   r   test_float_modulus_exact  s$    "

 z$TestModulus.test_float_modulus_exactc              	   C   s   t jd }ttfD ]}t||D ]\}}tddD ]\}}d}||j||||f }t j|d d |dd }	t j|d |dd }
||	|
\}}t||
 | |	|d |d	krt	|
|  k od
kn  | q6t	|
|  kod
kn  | q6q"qd S )Nr   r   r   N   g+i)+p>r   r   rQ   rw   r   )
r   r   r   r   r~   r   r+   r   r   r   r   r   r   r   test_float_modulus_roundoff(  s    
 z'TestModulus.test_float_modulus_roundoffc              	   C   s  t jd D ]l}t jd|d}t t jd|d| }t||}t||kd|  t| | }t|| kd|  q
t *}|t	d |t	d |t	d |t	d	 |t	d
 t jd D ]}t jd|d}t jd|d}t jt j
|d}t jt j|d}	t||}tt |d|  t||	}tt |d|  t||}tt |d|  ttfD ]2}
|
||\}}tt |ott | qpqW 5 Q R X d S )Nr   r|   r   r   zdt: %sz&invalid value encountered in remainderz'divide by zero encountered in remainderz*divide by zero encountered in floor_dividez$divide by zero encountered in divmodz#invalid value encountered in divmod)r   r   r   Z	nextafterr8   modr   r   filterRuntimeWarninginfnanr=   r   r   isinf)r   r\   r%   r   r   supZfoneZfzerZfinfZfnanrH   r   r   r   r   r   test_float_modulus_corner_cases:  s6    
z+TestModulus.test_float_modulus_corner_casesc              	   C   sJ   t ddgt j}t ddgt j}tjtdd || }W 5 Q R X d S )Nr   r$   z,Cannot cast ufunc 'floor_divide' output frommatch)r   r   rq   r   r>   rF   r   )r   r   r%   r   r   r   test_inplace_floordiv_handling]  s    z*TestModulus.test_inplace_floordiv_handlingN)r+   r,   r-   r   r   r   r   r   r   r   r   r   r      s
   #r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestComplexDivisionc              	   C   s   t jdd t jt jfD ]}|d}|d}tt ||  |tt jt j}tt ||  |tt jt j}tt ||  |tt jt j}tt ||  |tt jt j}tt 	||  |d}tt 	||  qW 5 Q R X d S )Nr1   r2   r   r|   )
r   rB   r   
complex128r   r   complexr   r   r=   rm   r   r   r   test_zero_divisioni  s    z&TestComplexDivision.test_zero_divisionc              	   C   s   t jdd t jt jfD ]v}d}|D ]h}|d }|d }|d }|t|d |d |t|d |d  }t|j|d  t|j|d  q&qW 5 Q R X d S )Nr1   r2   ))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   rB   r   r   r   r   realimagr   rn   dataZcasesnrf   exr   r   r   r   test_signed_zerosz  s    
,z%TestComplexDivision.test_signed_zerosc              	   C   s   t jdd t jt jfD ]}t }|d |d |D ]h}|d }|d }|d }|t|d |d |t|d |d  }t|j|d  t|j	|d  q<qW 5 Q R X d S )Nr1   r2   )       @r|   r   r   )r|   r   r   r   r   r   r$   )
r   rB   r   r   r   appendr   r   r   r   r   r   r   r   test_branches  s    

,z!TestComplexDivision.test_branchesN)r+   r,   r-   r   r   r   r   r   r   r   r   h  s   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zejj	e
 d	d
dd Zejj	eejeejkdd
ejj	e ddd
dd Zdd Zdd Zdd ZdS )TestConversionc                 C   s   ddddddg}ddd	d
ddg}d t jt jfD ]&}t j||d}tdd |D | q.t j|d d t jd}tdd |D |d d  d S )Ng    .Ag   mBg NgmCg    .g   mg Ngmi@B l    J)l     NZoil J)l  NZor   c                 S   s   g | ]}t |qS r   r   rz   _mr   r   r   r{     s     z5TestConversion.test_int_from_long.<locals>.<listcomp>r   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r{     s     )r   rV   rq   r   r   r   )r   r"   lir   r   r   r   r   test_int_from_long  s    z!TestConversion.test_int_from_longc              
   C   s   dD ]L}t t  tjt|jd |d}W 5 Q R X t|j}t||k qtj	d D ]2}tjt|j|d}t|j}t||k q\tj	d D ]4}t
|t|j}t|j}t||k qd S )NZbBhHr   r   r   )r>   warnsrD   r   r   iinfomaxminr   r   r   rG   )r   coderI   r   r   r   r   test_iinfo_long_values  s    $z%TestConversion.test_iinfo_long_valuesc                 C   s2   dd }t jt jt jt jfD ]}tt|| qd S )Nc                 S   s   | t | jd  d S Nr   )r   r   r   r   r   r   r   overflow_error_func  s    zDTestConversion.test_int_raise_behaviour.<locals>.overflow_error_func)r   int_uintlonglong	ulonglongr	   OverflowError)r   r   r   r   r   r   test_int_raise_behaviour  s    z'TestConversion.test_int_raise_behaviourc              	   C   sb   t t j}ttt| t :}|t j t 	t j}ttt| t
t|jd W 5 Q R X d S r   )r   rr   r   r	   r   r   r   recordComplexWarningclongdoubler   lenlogr   r   r   r   r   r   !test_int_from_infinite_longdouble  s    z0TestConversion.test_int_from_infinite_longdoublezTest is PyPy only (gh-9972)reasonc              	   C   sb   t t j}tt|j t :}|t j t 	t j}tt|j t
t|jd W 5 Q R X d S r   )r   rr   r   r	   r   __int__r   r   r   r   r   r   r   r   r   r   r   )test_int_from_infinite_longdouble___int__  s    z8TestConversion.test_int_from_infinite_longdouble___int__zlong double is same as doubleppczIBM double doublec                 C   sP   t t jjd }dt d|  }dd|  }t|t jk tt|| d S )Nr   i	  r$   )	r   finfodoubleZmaxexprr   r   r   r   r   )r   r   Zhuge_ldZhuge_ir   r   r   test_int_from_huge_longdouble  s
    z,TestConversion.test_int_from_huge_longdoublec                 C   s4   t d}tt|d t d}tt|d d S )N      ?r   g      %i)r   rr   r   r   )r   r   r   r   r   test_int_from_longdouble  s    

z'TestConversion.test_int_from_longdoublec                 C   s  t jd D ]}tdt jd|dd kd|f  tdt jd|dd k  d|f  t jd D ]j}tt jd|dd t jd|dd kd||f  tt jd|dd t jd|dd k  d||f  q^q
dD ]}td	t jd|dd k d|f  td	t jd|dd k d|f  td	t jd|dd kd|f  d
D ]}tt jd|dd t jd	|dd kd||f  tt jd|dd t jd	|dd k  d||f  tt jd|dd t jd	|dd kd||f  qBqdt jd  D ]}tdt jd	|dd kd|f  tdt jd	|dd k  d|f  td	t jd	|dd kd|f  dt jd  D ]}tt jd|dd t jd	|dd kd||f  tt jd|dd t jd	|dd k  d||f  tt jd	|dd t jd	|dd kd||f  qnqd S )Nr   r   r   r   r   ztype %s failedztype %s and %s failedZBHILQPrw   ZbhilqpZbhlqpr   )r   r   r   r   )r   r   r   r   r   r   &test_numpy_scalar_relational_operators  sL    "$$
&

"$"$
&
$

"$"$
&
$
z5TestConversion.test_numpy_scalar_relational_operatorsc              	   C   s   t jdd}t ddt ttdd k  ttdd k  ttdd k  ttdd k ttdd k ttdd k W 5 Q R X tt	|dk tt
tdd  d S )	NT)r   always r   testZNaTr   )r@   rA   filterwarningsFutureWarningr   r   rU   Zstr_Z
datetime64r   equal)r   wr   r   r   test_scalar_comparison_to_none#  s    z-TestConversion.test_scalar_comparison_to_noneN)r+   r,   r-   r   r   r   r   r>   markZskipifr   r   r   r   r   rr   platformmachine
startswithr  r  r  r  r   r   r   r   r     s    


		)r   c                   @   s   e Zd Zdd Zdd ZdS )TestReprc                 C   s   t |}|j|j }|j}t |jd }dD ]}t jdg| t jd}|dkrt|d }d|d  }	d|	> ||< n2|dkr|d }d|d  }	d|	> ||< ntd	|	|d }
t
|
}|t|}|dkr|
d
k s0t|
| q0d S )N   )small denorm
small normr   r   r  rN   r   r  Zhmmg0.++)r   r   ZnexpZnmantr   itemsizer   Zuint8r   re   reprevalr   )r   rn   r   Zlast_fraction_bit_idxZlast_exponent_bit_idxZstorage_byteswhichZconstrbyteZbytebitvalZval_reprZval2r   r   r   _test_type_reprC  s(    
zTestRepr._test_type_reprc                 C   s    t jt jfD ]}| | qd S r   )r   rU   rV   r  )r   rn   r   r   r   test_float_repr\  s    zTestRepr.test_float_reprN)r+   r,   r-   r  r  r   r   r   r   r  B  s   r  c                   @   s   e Zd Zdd Zdd ZdS )
TestSizeOfc                 C   s*   t D ] }|d}tt||jk qd S )Nr   )r   r   sys	getsizeofnbytes)r   rG   r   r   r   r   test_equal_nbytesg  s    zTestSizeOf.test_equal_nbytesc                 C   s   t  }tt|jd d S )Nr   )r   rU   r	   r   
__sizeof__)r   rf   r   r   r   
test_errorl  s    zTestSizeOf.test_errorN)r+   r,   r-   r!  r#  r   r   r   r   r  e  s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestMultiplyc                 C   s&  t tjd }dh}t tjd | | }|dh8 }ttfD ]}|dddg}|D ]@}t|d}t|| |t|  t|| t||  qR|D ]N}t| }tt	t
tj|||t|  tt	t
tj||t||  q|D ]2}t| }tttj|| tttj|| qq<d S )Nr   ?ZAllVr   r$   r   )setr   r   r   tupler   rG   r   r   r   rD   r8   mulr	   r   )r   Zaccepted_typesZdeprecated_typesZforbidden_typesZseq_typeseqZ
numpy_typer)   r   r   r   test_seq_repeatr  s2    


zTestMultiply.test_seq_repeatc                 C   s   G dd d}|t dtt dfD ]t}t|t d t dd tt d| t dd t|t d t dd tt d| t dd q*d S )Nc                   @   s   e Zd Zdd Zdd ZdS )zCTestMultiply.test_no_seq_repeat_basic_array_like.<locals>.ArrayLikec                 S   s
   || _ d S r   arr)r   r-  r   r   r   __init__  s    zLTestMultiply.test_no_seq_repeat_basic_array_like.<locals>.ArrayLike.__init__c                 S   s   | j S r   r,  )r   r   r   r   	__array__  s    zMTestMultiply.test_no_seq_repeat_basic_array_like.<locals>.ArrayLike.__array__N)r+   r,   r-   r.  r/  r   r   r   r   	ArrayLike  s   r0  r   g      @)r   ones
memoryviewr   rU   fullr   )r   r0  Zarr_liker   r   r   #test_no_seq_repeat_basic_array_like  s     z0TestMultiply.test_no_seq_repeat_basic_array_likeN)r+   r,   r-   r+  r4  r   r   r   r   r$  q  s    r$  c                   @   s   e Zd Zdd Zdd ZdS )TestNegativec                 C   s&   t jdt jdd }tttj| d S Nr   r   )r   r1  bool_r	   r   r8   negr   r   r   r   r   test_exceptions  s    zTestNegative.test_exceptionsc              	   C   s   t jd t jd  }t |}|t |D ]f}t jd|dd }|t jd kr|t |j}|t |j	}t
t|| q*t
t|| d q*W 5 Q R X d S )Nr   AllFloatr   r   r   r   )r   r   r   r   r   r1  r   rG   r   r   r   r8   r8  )r   r   r   r\   r   str   r   r   r   test_result  s    
zTestNegative.test_resultNr+   r,   r-   r:  r=  r   r   r   r   r5    s   r5  c                   @   s   e Zd Zdd Zdd ZdS )TestSubtractc                 C   s(   t jdt jdd }tttj|| d S r6  )r   r1  r7  r	   r   r8   subr9  r   r   r   r:    s    zTestSubtract.test_exceptionsc              	   C   sb   t jd t jd  }t >}|t |D ](}t jd|dd }tt||d q*W 5 Q R X d S )Nr   r;  r   r   r   )	r   r   r   r   r   r1  r   r8   r@  )r   r   r   r\   r   r   r   r   r=    s    
zTestSubtract.test_resultNr>  r   r   r   r   r?    s   r?  c                   @   sH   e Zd Zdd Zejdee dd Z	ejdee dd Z
dS )	TestAbsc              	   C   s   |d}t ||d |d}||}t |d |d}||}t |d |t|j}t |||j t 0}|t |t|j}t |||j W 5 Q R X |t|j	}t |||j  d S )Ng      r  r   r   )
r   r   r   r   r   r   r   UserWarningZtinyr   )r   ZabsfuncZ
test_dtyper   rI   r   r   r   r   _test_abs_func  s     


zTestAbs._test_abs_funcr   c                 C   sR   t jdkrB|tjkrBtt dd tdk rBt	j
dd | t| d S Ncygwin-r   z3.3.0z4absl is computed in double precision on cygwin < 3.3r   r  r  r   r   r   parsereleasesplitVersionr>   r?   rC  absr   r   r   r   r   test_builtin_abs  s    zTestAbs.test_builtin_absc                 C   sT   t jdkrB|tjkrBtt dd tdk rBt	j
dd | tj| d S rD  rG  rM  r   r   r   test_numpy_abs  s    zTestAbs.test_numpy_absN)r+   r,   r-   rC  r>   r  parametrizefloating_typescomplex_floating_typesrN  rO  r   r   r   r   rA    s
   
rA  c                   @   sF   e Zd Zejdejd ejjdej	ej
gddgddd Zd	S )
TestBitShifts	type_coder   rH   z>>z<<idsc                 C   s   t |}|jd }dD ]}||d fD ]}t ||d }||}|||}	|dk rr|tjkrrt|	d n
t|	d t j|gd |d}
t j|gd |d}||
|}t||	 q(qd	S )
zA Shifts where the shift amount is the width of the type or wider r  )r   ra   r   r   rw       r   N)	r   r   r  r   r   rG   r8   rshiftr   )r   rT  rH   r\   nbitsr  shiftZval_sclZ	shift_sclZres_sclZval_arrZ	shift_arrZres_arrr   r   r   test_shift_all_bits  s    





z!TestBitShifts.test_shift_all_bitsN)r+   r,   r-   r>   r  rP  r   r   r8   rY  lshiftr\  r   r   r   r   rS    s   
 rS  c                   @   s`   e Zd Zejdejd dd Zejdejd dd Z	ejdejd d	d
 Z
dS )TestHashrT  r   c                 C   s6   t |j}tdD ]}t|t||kstqd S )Nr   )r   r   rG   r'   hashr6   )r   rT  scalarr)   r   r   r   test_integer_hashes  s    zTestHash.test_integer_hashesr;  c                 C   s   t |j}t jt jddfD ]J}||}|jjdkr>t|}nt|}||ksRtt	|t	|kstqt	tt j
t	tt j
krt	|t j
t	|t j
kstd S )Nr   g      @r0   )r   r   rG   pir   r7   r   r   r6   r_  r   r   rT  r`  r  Z	numpy_valr   r   r   test_float_and_complex_hashes  s    
z&TestHash.test_float_and_complex_hashesComplexc                 C   sN   t |j}t jd t jd ddfD ]$}||}tt|t|ks$tq$d S )N              ?y              @y      @      ?)r   r   rG   rb  r   r_  r   r6   rc  r   r   r   test_complex_hashes+  s    zTestHash.test_complex_hashesN)r+   r,   r-   r>   r  rP  r   r   ra  rd  rg  r   r   r   r   r^    s   

r^  c              	   c   s.   t  }zt |  d V  W 5 t | X d S r   )r  getrecursionlimitsetrecursionlimit)r   rg   r   r   r   recursionlimit4  s
    

rj  c              	   C   s@   z&t d || |d W 5 Q R X W n tk
r:   Y nX d S N   r   rj  r   rg   rH   type_r   r   r   test_operator_object_left>  s
    
rp  c              	   C   s@   z&t d ||d|  W 5 Q R X W n tk
r:   Y nX d S rk  rm  rn  r   r   r   test_operator_object_rightI  s
    
rq  c                 C   s0   z| |d|d W n t k
r*   Y nX d S r   )r   )rH   Ztype1Ztype2r   r   r   test_operator_scalarsT  s    rr  rH   r  l            c                 C   sX   z| t d| W n tk
r(   Y nX z| |t d W n tk
rR   Y nX d S Nr   )r   rr   r   rH   r  r   r   r   test_longdouble_inf_loop^  s    ru  c                 C   sX   z| t d| W n tk
r(   Y nX z| |t d W n tk
rR   Y nX d S rs  )r   r   r   rr   rt  r   r   r   test_clongdouble_inf_loopl  s    rv  r   r   	operationc                 C   s   || S r   r   r   r   r   r   r   <lambda>|      ry  c                 C   s   | | S r   r   rx  r   r   r   ry  }  rz  c                 C   s   || S r   r   rx  r   r   r   ry  ~  rz  +rF  *rU  c              	   C   sT   t | j}|t | j}|t | j}tjtdd ||| W 5 Q R X d S )Noverflow encounteredr   )	r   r   rG   r   r   r   r>   r   r   )r   rw  r<  r   r   r   r   r   &test_scalar_integer_operation_overflowz  s
    r~  ZIntegerc                 C   s   |  S r   r   r   neg_1r   r   r   ry    rz  c                 C   s   t | S r   )rL  r  r   r   r   ry    rz  c                 C   s   | | S r   r   r  r   r   r   ry    rz  c                 C   s   | | S r   r   r  r   r   r   ry    rz  zbroken on some platformsr   )Zmarksr8  rL  z//c              	   C   sL   t | j}|t | j}|d}tjtdd ||| W 5 Q R X d S )Nrw   r}  r   )r   r   rG   r   r   r>   r   r   )r   rw  r<  r   r  r   r   r   #test_scalar_signed_integer_overflow  s
    
r  r   c              	   C   sJ   t | d}tjtdd |  W 5 Q R X t | d}|  d S )Nr  r}  r   r   r   r   rG   r>   r   r   )r   r  zeror   r   r   %test_scalar_unsigned_integer_overflow  s
    r  c                 C   s   | | S r   r   r  r  r   r   r   ry    rz  c                 C   s   | | S r   r   r  r   r   r   ry    rz  %c              	   C   sD   t | j}|d}|d}tjtdd ||| W 5 Q R X d S )Nd   r   zdivide by zeror   r  )r   rw  r<  r  r  r   r   r   'test_scalar_integer_operation_divbyzero  s
    r  __lt____gt__T__le____ge____eq____ne____floordiv____rfloordiv__F__truediv____rtruediv____add____radd____mod____rmod____mul____rmul____pow____rpow____sub____rsub____op____rop__cmpsctypec                    s   G dd d| }G dd d| } fdd}fdd}t d	| f ||i}	||d
|d}
t |
| ks~t |
tjks~t||d
|d|d
dkst||	d
|d kst||d
|	d|d
dkstdS )a  
    This test covers scalar subclass deferral.  Note that this is exceedingly
    complicated, especially since it tends to fall back to the array paths and
    these additionally add the "array priority" mechanism.

    The behaviour was modified subtly in 1.22 (to make it closer to how Python
    scalars work).  Due to its complexity and the fact that subclassing NumPy
    scalars is probably a bad idea to begin with.  There is probably room
    for adjustments here.
    c                   @   s   e Zd ZdS )z+test_subclass_deferral.<locals>.myf_simple1Nr+   r,   r-   r   r   r   r   myf_simple1  s   r  c                   @   s   e Zd ZdS )z+test_subclass_deferral.<locals>.myf_simple2Nr  r   r   r   r   myf_simple2  s   r  c                    s    S r   r   r   otherr  r   r   op_func  s    z'test_subclass_deferral.<locals>.op_funcc                    s    S r   r   r  r  r   r   rop_func  s    z(test_subclass_deferral.<locals>.rop_funcmyf_opr   r$   N)rG   r   r7  r6   )r  r  r  rH   r  r  r  r  r  r  rI   r   r  r  r   test_subclass_deferral  s     r  c                  C   s.   t d} | d dkstd|  dks*td S )Nr   rf  y      ?      ?)r   rr   r6   )r   r   r   r   test_longdouble_complex  s    
r  subtypec           
   	      s   fdd}fdd}t d| f ||dd i}||dtd ksNt|td|dksjt|tjtjhkr| tkrd S  krd S t d| f|i}||dtd}|| dtd}	||	kstt |t |	kst|t	d|d}|t	d| d}	||	ks"tt |t |	ks8t||dt
d}|| dt
d}	||	ksntt |t |	kst|t	d|d}|t
d| d}	||	kstd S )	Nc                    s    S r   r   r  r  r   r   r    s    z)test_pyscalar_subclasses.<locals>.op_funcc                    s    S r   r   r  r  r   r   r    s    z*test_pyscalar_subclasses.<locals>.rop_funcmytZ__array_ufunc__r   r$   )rG   r   rV   r6   r8   r   floordivr   rl   rU   rr   )
r  r  r  rH   r  r  r  r  rI   r   r   r  r   test_pyscalar_subclasses  s6    r  )r
contextlibr  r@   r~   r8   r  Znumpy.compatr   r>   Z
hypothesisr   r   Zhypothesis.strategiesr   Zhypothesis.extrar   Zhynpr   Znumpy.testingr   r   r	   r
   r   r   r   r   r   r7  r  ZubyteshortZushortZintcZuintcr   r   r   r   Zsingler   rr   ZcsingleZcdoubler   r   Zfloating__subclasses__rQ  ZcomplexfloatingrR  objectZobjecty_thingsr<   r;   eqner9   r:   r(   r  r   r)  r   r@  truedivZ reasonable_operators_for_scalarsr   r  ZslowZarraysZscalar_dtypesrK   rL   ri   r   r   r   r   r   r  r  r$  r5  r?  rA  rS  r^  contextmanagerrj  rp  rq  rr  rP  ru  rv  r   r~  paramskipr  r  r  Zops_with_namesrU   rV   r  r  r   r   r   rl   Z_no_nep50_warningr  r   r   r   r   <module>   s  ,       


          	'
.QmH !33!
	


	




$