U
    iâËdÔ  ã                   @   sb   d dl Z d dlZd dlmZmZ d dlmZmZm	Z	 d dl
Z
G dd„ de
jƒZedkr^e
 ¡  dS )é    N)Úcaptured_stdoutÚoverride_config)ÚnjitÚ	vectorizeÚguvectorizec                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestFastMathc                 C   s†   dd„ }t dd�|ƒ}t |ƒ}|  |dƒ|dƒ¡ | |jd ¡}| |jd ¡}|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )	Nc                 S   s   | t  | ¡ S ©N©ÚmathÚsin©Úx© r   úR/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_fastmath.pyÚfoo   s    z"TestFastMath.test_jit.<locals>.fooT©Zfastmathç      à?r   ú	fadd fastú	call fast)r   ÚassertEqualÚinspect_llvmÚ
signaturesÚassertInÚassertNotIn©Úselfr   ÚfastfooÚslowfooÚfastllvmÚslowllvmr   r   r   Útest_jit
   s    zTestFastMath.test_jitc                 C   sZ   dd„ }t ddhd�|ƒ}t dhd�|ƒ}|  |dtjƒd¡ |  t |dtjƒ¡¡ d S )Nc                 S   s   | | | S r   r   )r   Úyr   r   r   r      s    z3TestFastMath.test_jit_subset_behaviour.<locals>.fooÚreassocÚnszr   r   )r   r   ÚnpÚinfÚ
assertTrueÚisnan)r   r   r   r   r   r   r   Útest_jit_subset_behaviour   s
    z&TestFastMath.test_jit_subset_behaviourc                 C   sÔ   dd„ }t ddhd�|ƒ}t ƒ |ƒ}|  |dƒ|dƒ¡ | |jd ¡}| |jd ¡}|  d|¡ |  d	|¡ |  d
|¡ |  d|¡ |  d|¡ |  d|¡ |  d|kp²d
|k|¡ |  d|kpÊd|k|¡ d S )Nc                 S   s   | t  | ¡ S r   r	   r   r   r   r   r   !   s    z.TestFastMath.test_jit_subset_code.<locals>.foor"   r#   r   r   r   r   r   zfadd reassoc nszzcall reassoc nszzfadd nsz reassoczcall nsz reassoc)r   r   r   r   r   r&   r   r   r   r   Útest_jit_subset_code    s,    
ýýz!TestFastMath.test_jit_subset_codec              	   C   sÄ   |   t¡�}tdhd�dd„ ƒdƒ W 5 Q R X |  dt|jƒ¡ |   t¡� }tddid�dd„ ƒdƒ W 5 Q R X |  dt|jƒ¡ |   t¡�}td	d�d
d„ ƒdƒ W 5 Q R X |  dt|jƒ¡ d S )NZspqrr   c                 S   s   | d S ©Né   r   r   r   r   r   Ú<lambda><   ó    z5TestFastMath.test_jit_subset_errors.<locals>.<lambda>r+   zUnrecognized fastmath flags:Fc                 S   s   | d S r*   r   r   r   r   r   r,   C   r-   i9  c                 S   s   | d S r*   r   r   r   r   r   r,   J   r-   z!Expected fastmath option(s) to be)ÚassertRaisesÚ
ValueErrorr   r   ÚstrÚ	exception)r   Zraisesr   r   r   Útest_jit_subset_errors:   s$    "þ$þ þz#TestFastMath.test_jit_subset_errorsc              
   C   sÎ   dd„ }t dd�|ƒ}t |ƒ}tj d¡ tj¡}tddƒ�J tƒ �}||ƒ}W 5 Q R X | ¡ }tƒ �}||ƒ}	W 5 Q R X | ¡ }
W 5 Q R X tj 	||	¡ |  
d|
¡ |  
d|
¡ |  d|¡ |  d|¡ d S )	Nc                 S   s   | t  | ¡ S r   r	   r   r   r   r   r   Q   s    z(TestFastMath.test_vectorize.<locals>.fooTr   é   ÚDUMP_OPTIMIZEDr   r   )r   r$   ÚrandomÚastypeÚfloat32r   r   ÚgetvalueÚtestingÚassert_almost_equalr   r   )r   r   r   r   r   Úslow_capÚexpectr   Úfast_capÚgotr   r   r   r   Útest_vectorizeP   s     zTestFastMath.test_vectorizec              
   C   sâ   dd„ }t j d¡ t j¡}tddƒ�d dg}d}tƒ �}t||dd�|ƒ}W 5 Q R X | ¡ }tƒ �}t||ƒ|ƒ}	W 5 Q R X | ¡ }
W 5 Q R X |	|ƒ}||ƒ}t j 	||¡ |  
d	|¡ |  
d
|¡ |  d	|
¡ |  d
|
¡ d S )Nc                 S   s   | t  | ¡ |d< d S )Nr   r	   )r   Úoutr   r   r   r   e   s    z*TestFastMath.test_guvectorize.<locals>.foor3   r4   Tz(float32, float32[:])z()->()r   r   r   )r$   r5   r6   r7   r   r   r   r8   r9   r:   r   r   )r   r   r   ÚtypesÚsigr=   r   r   r;   r   r   r<   r>   r   r   r   Útest_guvectorized   s$    zTestFastMath.test_guvectorizeN)	Ú__name__Ú
__module__Ú__qualname__r    r(   r)   r2   r?   rC   r   r   r   r   r   	   s   r   Ú__main__)r
   Únumpyr$   Znumba.tests.supportr   r   Znumbar   r   r   ZunittestZTestCaser   rD   Úmainr   r   r   r   Ú<module>   s   q