U
    iâËd~  ã                   @   s´   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m	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ dd„ Zd	d
„ Zdd„ Zdd„ ZG dd„ deƒZedkr°e ¡  dS )é    N)Úcompile_isolatedÚFlags)Újit)Útypes)ÚTestCase)Únumpy_supportc                 C   s   | S ©N© ©Úxr	   r	   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/tests/test_conversion.pyÚidentity   s    r   c                 C   s   | | S r   r	   ©r   Úyr	   r	   r   Úaddition   s    r   c                 C   s   | |kS r   r	   r   r	   r	   r   Úequality   s    r   c                 C   s   | S r   r	   )r   r   Úzr	   r	   r   Úfoobar   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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!ÚTestConversionz-
    Testing Python to Native conversion
    c                 C   sÄ   t }t|tjgtjd�}ddddg}|D ]}|  | |¡|¡ q(t |¡D ]}|  | |¡|¡ qJt|tjgtjd�}ddddg}|D ]}|  | |¡|¡ q†t |¡D ]}|  | |¡|¡ q¨d S ©N©Úreturn_typey              ð?y      ð?      ð?y      ð¿      ð¿y      ð?        )r   r   r   Ú	complex64ÚassertEqualÚentry_pointÚnpÚ
complex128)ÚselfÚpyfuncÚcresÚxsr   r	   r	   r   Útest_complex_identity"   s"    
ÿ
ÿz$TestConversion.test_complex_identityc                 C   sô   t }t|tjtjgtjd�}ddddg}|D ] }|}|  | ||¡|| ¡ q,t |¡D ] }|}|  | ||¡|| ¡ qXt|tjtjgtjd�}ddddg}|D ] }|}|  | ||¡|| ¡ q¢t |¡D ] }|}|  | ||¡|| ¡ qÎd S r   )r   r   r   r   r   r   r   r   )r   r   r   r    r   r   r	   r	   r   Útest_complex_addition6   s*    ÿÿz$TestConversion.test_complex_additionc                 C   sV   t }t|tjtjgƒ}|j}d}d}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q0d S ©N©TF©éÿÿÿÿr   é   )	r   r   r   ÚbooleanZintpr   Ú	itertoolsÚproductr   ©r   r   r   Úcfuncr    Zysr	   r	   r   Útest_boolean_as_intO   s    z"TestConversion.test_boolean_as_intc                 C   sV   t }t|tjtjgƒ}|j}d}d}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q0d S r#   )	r   r   r   r(   Úfloat64r   r)   r*   r   r+   r	   r	   r   Útest_boolean_as_floatZ   s    z$TestConversion.test_boolean_as_floatc                 C   sV   t }t|tjtjgƒ}|j}d}d}t ||¡D ] \}}|  |||ƒ|||ƒ¡ q0d S )Nr$   )r   r   r   r(   r   r)   r*   r   r+   r	   r	   r   Útest_boolean_eq_booleane   s    z&TestConversion.test_boolean_eq_booleanc              	   C   s6   dd„ }|   t¡� tddd�|ƒdƒ W 5 Q R X d S )Nc                 S   s   | S r   r	   r
   r	   r	   r   Úfv   s    z3TestConversion.test_negative_to_unsigned.<locals>.fzuintp(uintp)T©Znopythonéûÿÿÿ)ÚassertRaisesÚOverflowErrorr   ©r   r1   r	   r	   r   Útest_negative_to_unsignedu   s    z(TestConversion.test_negative_to_unsignedc              	   C   s`   t }t|tjtjtjgtjd�}|j}d}|  t¡�" |D ]\}}}||||ƒ q:W 5 Q R X d S )Nr   )r%   )r   r&   r'   )r   r'   r&   )r   r   r   Úuint64r   r4   r5   )r   r   r   r,   Útest_fail_argsÚaÚbÚcr	   r	   r   Ú'test_multiple_args_negative_to_unsigned}   s    ÿz6TestConversion.test_multiple_args_negative_to_unsignedc                 C   s  t }t dtjfdtjfdtjfg¡}t |¡}t||d d … tjtjg|d d … d�}|j	}tj
d|d�}t |j¡d |_t |j¡d |_t |j¡d |_|  |¡�\ |ddf|ddff}|D ],\}}	}
|  t¡� |||	|
ƒ W 5 Q R X qÆ~~~	~
t ¡  W 5 Q R X d S )	NÚpÚrowÚcolr   é   ©Údtyper'   r&   )r   r   rC   r.   r   Ú
from_dtyper   r   r8   r   ZrecarrayZarangeÚsizer>   r?   r@   ÚassertRefCountr4   r5   ÚgcZcollect)r   r   Zmystruct_dtZmystructr   r,   Zst1r9   r:   r;   r<   r	   r	   r   Útest_multiple_args_recordsˆ   s*    þ

ÿz)TestConversion.test_multiple_args_recordsc                 C   s(   dd„ }|   |ƒ tddd�|ƒƒ ¡ d S )Nc                   S   s   d S r   r	   r	   r	   r	   r   r1   ¦   s    z1TestConversion.test_with_no_parameters.<locals>.fz()Tr2   )r   r   r6   r	   r	   r   Útest_with_no_parameters¥   s    z&TestConversion.test_with_no_parametersc              
      sô   dd„ }‡ fdd„‰ ˆ |ƒ}t ||tjfƒ}| j|Ž � | |d¡ W 5 Q R X | j|Ž �( |  t¡� | |d¡ W 5 Q R X W 5 Q R X t |tj|fƒ}| j|Ž � | d|¡ W 5 Q R X | j|Ž �( |  t¡� | d|¡ W 5 Q R X W 5 Q R X dS )zF
        Check that argument cleanup doesn't leak references.
        c                 S   s   d S r   r	   r   r	   r	   r   r1   ®   s    z0TestConversion.check_argument_cleanup.<locals>.fc                    s*   | g}t | tƒr&| D ]}|ˆ |ƒ7 }q|S r   )Ú
isinstanceÚtuple)ÚobjZobjsÚv©Ú_objectsr	   r   rO   ±   s
    
z7TestConversion.check_argument_cleanup.<locals>._objectsr'   r&   N)r   r   Zuint32rF   r   r4   r5   )r   ÚtyprL   r1   Úobjectsr   r	   rN   r   Úcheck_argument_cleanupª   s     z%TestConversion.check_argument_cleanupc                 C   s(   t tdƒƒ}|  t tjdd¡|¡ d S ©Nó   xyzr'   ÚC)Ú
memoryviewÚ	bytearrayrR   r   ÚBufferÚintc)r   Úmemr	   r	   r   Útest_cleanup_bufferÈ   s    z"TestConversion.test_cleanup_bufferc                 C   sB   t  dt jfdt jfg¡}t jd|d�}|  t |¡|d ¡ d S )Nr   r   r'   rB   r   )r   rC   r.   ZzerosrR   r   rD   )r   rC   Zrecarrr	   r	   r   Útest_cleanup_recordÌ   s    z"TestConversion.test_cleanup_recordc                 C   s8   t tdƒƒ}t t tjdd¡d¡}|  |||f¡ d S )NrT   r'   rU   é   )rV   rW   r   ZUniTuplerX   rY   rR   ©r   rZ   Útpr	   r	   r   Útest_cleanup_tupleÑ   s    z!TestConversion.test_cleanup_tuplec                 C   s2   t tdƒƒ}t t tjdd¡¡}|  ||¡ d S rS   )rV   rW   r   ÚOptionalrX   rY   rR   r^   r	   r	   r   Útest_cleanup_optionalÖ   s    z$TestConversion.test_cleanup_optionalc                    s<   t t tj¡dd�dd„ ƒ‰ t t ¡ dd�‡ fdd„ƒ}d S )NTr2   c                 S   s   d S r   r	   )Ústringr	   r	   r   Úbarß   s    z9TestConversion.test_stringliteral_to_unicode.<locals>.barc                      s   ˆ dƒ d S )Nzliteral stringr	   r	   ©rd   r	   r   Úfoo2ã   s    z:TestConversion.test_stringliteral_to_unicode.<locals>.foo2)r   r   ÚvoidZunicode_type)r   rf   r	   re   r   Útest_stringliteral_to_unicodeÛ   s    
z,TestConversion.test_stringliteral_to_unicodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r"   r-   r/   r0   r7   r=   rH   rI   rR   r[   r\   r`   rb   rh   r	   r	   r	   r   r      s    r   Ú__main__)ÚarrayrG   r)   ÚsysÚnumpyr   ZunittestZnumba.core.compilerr   r   Znumbar   Z
numba.corer   Znumba.tests.supportr   Znumba.npr   r   r   r   r   r   ri   Úmainr	   r	   r	   r   Ú<module>   s$    L