o
    8ήc~                     @   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rZe  dS dS )    N)compile_isolatedFlags)jit)types)TestCase)numpy_supportc                 C      | S N xr
   r
   B/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_conversion.pyidentity      r   c                 C   s   | | S r	   r
   r   yr
   r
   r   addition      r   c                 C   s   | |kS r	   r
   r   r
   r
   r   equality   r   r   c                 C   r   r	   r
   )r   r   zr
   r
   r   foobar   r   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}g d}|D ]}| ||| qt|D ]}| ||| q#t|tjgtjd}g d}|D ]}| ||| q?t|D ]}| ||| qPd S Nreturn_type)y              ?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}g d}|D ]}|}| |||||  qt|D ]}|}| |||||  q*t|tjtjgtjd}g d}|D ]}|}| |||||  qMt|D ]}|}| |||||  qcd 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   V   t }t|tjtjg}|j}d}d}t||D ]\}}| |||||| qd S NTFr      )	r   r   r   booleanintpr   	itertoolsproductr   r    r!   r"   cfuncr#   ysr
   r
   r   test_boolean_as_intO      z"TestConversion.test_boolean_as_intc                 C   r&   r'   )	r   r   r   r,   float64r   r.   r/   r   r0   r
   r
   r   test_boolean_as_floatZ   r4   z$TestConversion.test_boolean_as_floatc                 C   sV   t }t|tjtjg}|j}d}d}t||D ]\}}| |||||| qd S )Nr(   )r   r   r   r,   r   r.   r/   r   r0   r
   r
   r   test_boolean_eq_booleane   r4   z&TestConversion.test_boolean_eq_booleanc                 C   sL   dd }|  t tddd|d W d    d S 1 sw   Y  d S )Nc                 S   r   r	   r
   r   r
   r
   r   fv   r   z3TestConversion.test_negative_to_unsigned.<locals>.fzuintp(uintp)Tnopython)assertRaisesOverflowErrorr   r    r8   r
   r
   r   test_negative_to_unsignedu   s   "z(TestConversion.test_negative_to_unsignedc                 C   sv   t }t|tjtjtjgtjd}|j}d}| t |D ]\}}}|||| qW d    d S 1 s4w   Y  d S )Nr   )r)   )r   r*   r+   )r   r+   r*   )r   r   r   uint64r   r<   r=   )r    r!   r"   r1   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 d    n1 s~w   Y  qc~~~	~
t  W d    d S 1 sw   Y  d S )	Nprowcolr      dtyper+   r*   )r   r   rK   r5   r   
from_dtyper   r   r@   r   recarrayarangesizerF   rG   rH   assertRefCountr<   r=   gccollect)r    r!   mystruct_dtmystructr"   r1   st1rA   rB   rC   rD   r
   r
   r   test_multiple_args_records   s0   


"z)TestConversion.test_multiple_args_recordsc                 C   s(   dd }|  | tddd|  d S )Nc                   S      d S r	   r
   r
   r
   r
   r   r8      r   z1TestConversion.test_with_no_parameters.<locals>.fz()Tr9   )r   r   r>   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 d   n1 s,w   Y  | j| # | t ||d W d   n1 sMw   Y  W d   n1 s\w   Y  t |tj|f}| j|  |d| W d   n1 sw   Y  | j| , | t |d| W d   n1 sw   Y  W d   dS W d   dS 1 sw   Y  dS )zF
        Check that argument cleanup doesn't leak references.
        c                 S   rW   r	   r
   r   r
   r
   r   r8      r   z0TestConversion.check_argument_cleanup.<locals>.fc                    s*   | g}t | tr| D ]}| |7 }q
|S r	   )
isinstancetuple)objobjsv_objectsr
   r   r_      s
   
z7TestConversion.check_argument_cleanup.<locals>._objectsr+   Nr*   )r   r   uint32rP   r   r<   r=   )r    typr[   r8   objectsr"   r
   r^   r   check_argument_cleanup   s0   "z%TestConversion.check_argument_cleanupc                 C   s(   t td}| ttjdd| d S N   xyzr+   C)
memoryview	bytearrayrc   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+   rJ   r   )r   rK   r5   zerosrc   r   rL   )r    rK   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 )Nre   r+   rf      )rg   rh   r   UniTupleri   rj   rc   r    rk   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 rd   )rg   rh   r   Optionalri   rj   rc   rr   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 )NTr9   c                 S   rW   r	   r
   )stringr
   r
   r   bar   s   z9TestConversion.test_stringliteral_to_unicode.<locals>.barc                      s    d d S )Nzliteral stringr
   r
   rx   r
   r   foo2   s   z:TestConversion.test_stringliteral_to_unicode.<locals>.foo2)r   r   voidunicode_type)r    rz   r
   ry   r   test_stringliteral_to_unicode   s   
z,TestConversion.test_stringliteral_to_unicodeN)__name__
__module____qualname____doc__r$   r%   r3   r6   r7   r?   rE   rV   rX   rc   rl   ro   rt   rv   r}   r
   r
   r
   r   r      s"    r   __main__)arrayrQ   r.   sysnumpyr   unittestnumba.core.compilerr   r   numbar   
numba.corer   numba.tests.supportr   numba.npr   r   r   r   r   r   r~   mainr
   r
   r
   r   <module>   s(     L