U
    ,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re  dS )    N)compile_isolatedFlags)jit)types)TestCase)numpy_supportc                 C   s   | S N xr	   r	   ?/tmp/pip-unpacked-wheel-eu7e0c37/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 ]}| ||| qt|D ]}| ||| qd 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 ] }|}| |||||  qt|D ] }|}| |||||  qd 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)objobjsv_objectsr	   r   rP      s
    
z7TestConversion.check_argument_cleanup.<locals>._objectsr'   r&   N)r   r   Zuint32rF   r   r4   r5   )r   typrL   r1   Zobjectsr   r	   rO   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.   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	   re   r	   r   foo2   s    z:TestConversion.test_stringliteral_to_unicode.<locals>.foo2)r   r   voidZunicode_type)r   rg   r	   rf   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]   ra   rc   ri   r	   r	   r	   r   r      s    r   __main__)arrayrG   r)   sysZnumpyr   ZunittestZnumba.core.compilerr   r   Znumbar   Z
numba.corer   Znumba.tests.supportr   Znumba.npr   r   r   r   r   r   rj   mainr	   r	   r	   r   <module>   s$    L