U
    iâËd¡  ã                   @   sÈ   d dl Zd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dl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G dd„ de	ƒZG dd„ de	ƒZedkrÄe ¡  dS )é    N)Úcompile_isolated)Újit)Útypes)ÚTestCaseÚtagc                 C   s   t | ƒS ©N)Úbool©Úa© r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_numberctor.pyÚdobool   s    r   c                 C   s   t | ƒS r   )Úintr	   r   r   r   Údoint   s    r   c                 C   s   t | ƒS r   )Úfloatr	   r   r   r   Údofloat   s    r   c                 C   s   t | ƒS r   ©Úcomplexr	   r   r   r   Ú	docomplex   s    r   c                 C   s
   t | |ƒS r   r   )r
   Úbr   r   r   Ú
docomplex2   s    r   c                 C   s   t | ƒ}|jd |jd  S ©Né   ©r   ÚrealÚimag)r
   Úzr   r   r   Úcomplex_calc   s    r   c                 C   s   t | |ƒ}|jd |jd  S r   r   )r
   r   r   r   r   r   Úcomplex_calc2$   s    
r   c                    s   ‡ fdd„}|S )Nc                    s   ˆ | ƒS r   r   r	   ©Útpr   r   Úf*   s    zconverter.<locals>.fr   )r    r!   r   r   r   Ú	converter)   s    r"   c                  c   s   dD ]
} | V  qd S )N)Zint8Zint16Úint32Úint64Zuint8Zuint16Zuint32Zuint64ZintcZuintcZintpZuintpÚfloat32Úfloat64Zbool_r   ©Útp_namer   r   r   Úreal_np_types/   s    r)   c                  c   s   dD ]
} | V  qd S )N)Ú	complex64Ú
complex128r   r'   r   r   r   Úcomplex_np_types6   s    r,   c                   @   s`   e 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
dd„ Zdd„ Zdd„ ZdS )ÚTestScalarNumberCtorz*
    Test <number class>(some scalar)
    c                 C   sd   t jt jt jt jt jg}dddddg}t||ƒD ].\}}t||gƒ}|j}|  	||ƒ||ƒ¡ q0d S )Né   r   éè  çffffff(@çffffff7@)
r   Úbooleanr#   r$   r%   r&   Úzipr   Úentry_pointÚassertPreciseEqual©ÚselfÚpyfuncÚx_typesÚx_valuesÚtyÚxÚcresÚcfuncr   r   r   Úcheck_int_constructor@   s        ÿz*TestScalarNumberCtor.check_int_constructorc                 C   s   |   t¡ d S r   )r?   r   ©r7   r   r   r   Ú	test_boolK   s    zTestScalarNumberCtor.test_boolc                 C   s   |   t¡ d S r   )r?   r   r@   r   r   r   Útest_intN   s    zTestScalarNumberCtor.test_intc                 C   st   t }tjtjtjtjg}ddddg}t||ƒD ]@\}}t||gƒ}|j}| j	||ƒ||ƒ|tjkrfdndd� q.d S )Nr.   r/   r0   r1   ÚsingleÚexact©Úprec)
r   r   r#   r$   r%   r&   r3   r   r4   r5   r6   r   r   r   Ú
test_floatQ   s       ÿÿzTestScalarNumberCtor.test_floatc           
      C   sà   t }tjtjtjtjtjtjg}ddddddg}t||ƒD ]P\}}t	||gƒ}|j
}||ƒ}||ƒ}	| j||ƒ||ƒ|tjkr‚dndd	� q:t}d
}t	|tjgƒ}|j
}|  ||ƒd¡ t	|tjgƒ}|j
}|  ||ƒd¡ d S )Nr.   r/   r0   r1   y      ø?      Ày      ð?      ÀrC   rD   rE   ç     ð?ç      ð?)r   r   r#   r$   r%   r&   r*   r+   r3   r   r4   r5   r   ÚassertGreater)
r7   r8   r9   r:   r;   r<   r=   r>   ÚgotÚexpectedr   r   r   Útest_complex_   s2        þÿz!TestScalarNumberCtor.test_complexc           
      C   sè   t }tjtjtjtjg}ddddg}dd„ |D ƒ}t|||ƒD ]H\}}}t|||gƒ}|j}	| j	|||ƒ|	||ƒ|tjkr~dndd	� q>t
}d
}t|tjtjgƒ}|j}	|  	|	||ƒd¡ t|tjtjgƒ}|j}	|  |	||ƒd¡ d S )Nr.   r/   r0   r1   c                 S   s   g | ]}|d  ‘qS )é   r   )Ú.0r<   r   r   r   Ú
<listcomp>ƒ   s     z6TestScalarNumberCtor.test_complex2.<locals>.<listcomp>rC   rD   rE   rH   g       @)r   r   r#   r$   r%   r&   r3   r   r4   r5   r   rJ   )
r7   r8   r9   r:   Zy_valuesr;   r<   Úyr=   r>   r   r   r   Útest_complex2|   s,       ÿÿz"TestScalarNumberCtor.test_complex2c                    s’   t |ƒ}tdd�|ƒ}tˆ tjƒr0‡ fdd„}nˆ }t ˆ ¡}|D ]J}|jdkrdt|tƒrd|dk rdqB||ƒ}	||ƒ}
| j	|
|	dˆ |f d� qBd S )	NT©Znopythonc                    s   ˆ t  | ¡ƒS r   )Únpr$   )r<   ©Únp_typer   r   Ú<lambda>Ÿ   ó    z;TestScalarNumberCtor.check_type_converter.<locals>.<lambda>Úug        zfor type %s with arg %s)Úmsg)
r"   r   Ú
issubclassrT   ÚintegerÚdtypeÚkindÚ
isinstancer   r5   )r7   r    rV   Úvaluesr8   r>   Znp_converterr]   ÚvalrL   rK   r   rU   r   Úcheck_type_converter—   s    

ÿz)TestScalarNumberCtor.check_type_converterc              	   C   s|   ddddddddd	g	}t ƒ D ]$}tt|ƒ}||ƒ}|  |||¡ q| d
¡ tƒ D ]$}tt|ƒ}||ƒ}|  |||¡ qRd S )Nr   r.   éÿÿÿÿi£† l    åa$i]yþÿlýÿÿÿ åa$g      ø?g      Ày      ø?      @)r)   ÚgetattrrT   rb   Úappendr,   )r7   Ú
tp_factoryr`   r(   rV   r    r   r   r   Úcheck_number_types­   s     ÿ




z'TestScalarNumberCtor.check_number_typesc                 C   s   dd„ }|   |¡ dS )z>
        Test explicit casting to Numba number types.
        c                 S   s
   t t| ƒS r   )rd   r   r'   r   r   r   rf   ¾   s    z9TestScalarNumberCtor.test_numba_types.<locals>.tp_factoryN©rg   ©r7   rf   r   r   r   Útest_numba_typesº   s    z%TestScalarNumberCtor.test_numba_typesc                 C   s   dd„ }|   |¡ dS )z>
        Test explicit casting to Numpy number types.
        c                 S   s
   t t| ƒS r   )rd   rT   r'   r   r   r   rf   Æ   s    z9TestScalarNumberCtor.test_numpy_types.<locals>.tp_factoryNrh   ri   r   r   r   Útest_numpy_typesÂ   s    z%TestScalarNumberCtor.test_numpy_typesN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r?   rA   rB   rG   rM   rR   rb   rg   rj   rk   r   r   r   r   r-   ;   s   r-   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚTestArrayNumberCtorz,
    Test <number class>(some sequence)
    c                 C   s@   t |ƒ}tdd�|ƒ}|D ] }||ƒ}||ƒ}|  ||¡ qd S )NTrS   )r"   r   r5   )r7   rV   r`   r8   r>   ra   rL   rK   r   r   r   Úcheck_type_constructorÐ   s    z*TestArrayNumberCtor.check_type_constructorc                 C   sd   ddddgdg}t ƒ D ]}tt|ƒ}|  ||¡ qdddgg}tƒ D ]}tt|ƒ}|  ||¡ qDd S )N©rI   ç      @)r.   rs   rI   rs   r   )y              ð?rs   ©r)   rd   rT   rq   r,   ©r7   r`   r(   rV   r   r   r   Útest_1dØ   s    ü

þ

zTestArrayNumberCtor.test_1dc                 C   sh   dddgddgddgfddgg}t ƒ D ]}tt|ƒ}|  ||¡ q&tƒ D ]}tt|ƒ}|  ||¡ qHd S )	N)rr   )ç      @é   rr   )rw   ç      @rI   rs   rw   ry   r   rt   ru   r   r   r   Útest_2dê   s    ü



zTestArrayNumberCtor.test_2dN)rl   rm   rn   ro   rq   rv   rz   r   r   r   r   rp   Ë   s   rp   Ú__main__)ÚnumpyrT   Znumba.core.compilerr   Znumbar   Z
numba.corer   Znumba.tests.supportr   r   Zunittestr   r   r   r   r   r   r   r"   r)   r,   r-   rp   rl   Úmainr   r   r   r   Ú<module>   s(    .