U
    #c<                     @   s   d Z ddlZddlZddlZddlmZ ejddddd Zej	j
ed	d
d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ejejgdd Zdd Zdd Zdd ZdS )z
This file adds basic tests to test the NEP 50 style promotion compatibility
mode.  Most of these test are likely to be simply deleted again once NEP 50
is adopted in the main test suite.  A few may be moved elsewhere.
    N)IS_WASMmoduleT)ZscopeZautousec                  c   s&   t  } t d d V  t |  d S )NZweak_and_warn)npZ_get_promotion_state_set_promotion_state)state r   J/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_nep50_promotions.py_weak_promotion_enabled   s    
r	   z'wasm doesn't have support for fp errors)reasonc               
   C   sl  t jtdd tdd } W 5 Q R X | jtjks8tt jtdd  tdgtjtd } W 5 Q R X | jtjks|tt jtdd& tdgtjtjdtjd } W 5 Q R X | jtjkstt jtdd, tj	dd tdd	 } W 5 Q R X W 5 Q R X | jtjkstt t
}tdd
 } W 5 Q R X t|tj}|ds\tt|tj}|ds|tt|dkstt| st| jtjksttdgtjtdk} | d dkstt jtdd  tdgtjtd } W 5 Q R X | jtjks"tt jtdd  tdgtjtd } W 5 Q R X | jtjkshtd S )Nzresult dtype changedmatch      dtyperaiseZoverd      g;%_nTZoverflowr   g?Fg      ?   )pytestwarnsUserWarningr   uint8r   AssertionErrorarrayZint64errstateWarningfloat32strpopmessage
startswithRuntimeWarninglenisinffloat64)resZrecwarnwarningr   r   r   test_nep50_examples   s<    $*"$$r)   r   Z
AllIntegerc              
   C   s   t d t | j}tt | j}t jdd( t	t
 |d| }W 5 Q R X W 5 Q R X |j| ksntt jd| d| }|j| kstd S )Nweakwarnr   r   r   )r   r   r   typeintZiinfomaxr   r   r   r#   r   r   )r   scalar_typeZmaxintr'   r   r   r   test_nep50_weak_integersF   s    
 r0   ZAllFloatc              	   C   sD  t d t | j}tt | jd }| dkr~tt	 |d|  W 5 Q R X tt	 t j
d| d|  W 5 Q R X n| dkrzt| W n tk
r   td Y nX tt |d| }W 5 Q R X |j| kst|t jksttt  t jt j
d| d|| d}W 5 Q R X |j| ks0t|t jks@td S )Nr*   r   ZdDGr   r   ZgGz)`huge_int -> string -> longdouble` failed)r   r   r   r,   r-   Zfinfor.   r   raisesOverflowErrorr   r   
ValueErrorskipr   r#   r   infadd)r   r/   Ztoo_big_intr'   r   r   r   %test_nep50_weak_integers_with_inexactY   s*    
$r7   opc              	   C   s   t d | t dd}|| ddks,t|jt jksF|jtksFttt | t dd W 5 Q R X | t 	dd}|| ddkst|jt j	ks|jtkstd S )Nr*   r      i  g      @g      @)
r   r   r   r   r   boolr   r1   r2   r   )r8   r'   r   r   r   test_weak_promotion_scalar_path   s    
r;   c               	   C   sP   t d tjtdd t dtdd  } W 5 Q R X t| t jksLtd S )Nr*   z
.*overflowr   r   r   ,  )	r   r   r   r   r#   Z	complex64complexr,   r   )r'   r   r   r   test_nep50_complex_promotion   s    
 r>   c                	   C   s   t d tjtdd t dgt jd  W 5 Q R X tjtdd t dd  W 5 Q R X tjtdd t dd  W 5 Q R X d S )Nr*   z.*uint8r   r   r<   z)Python integer -1 out of bounds for uint8)r   r   r   r1   r2   r   r   r   r   r   r   $test_nep50_integer_conversion_errors   s    
r@   c                  C   sD   t d t d} | d jt jks(t| d d jt jks@td S )Nlegacyr   l            r   )r   r   r   r   r&   r   )Zarrr   r   r   test_nep50_integer_regression   s    

rB   )__doc__operatorZnumpyr   r   Znumpy.testingr   Zfixturer	   markZskipifr)   ZparametrizeZ	typecodesr0   r7   r6   poweqr;   r>   r@   rB   r   r   r   r   <module>   s"   

.

*
	