B
     \                 @   s   d dl m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
 d dlmZmZ d dlmZmZ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 )    )print_functionN)compile_isolatedFlags)typesjitnumpy_support   )TestCasec             C   s   | S )N )xr
   r
   :lib/python3.7/site-packages/numba/tests/test_conversion.pyidentity   s    r   c             C   s   | | S )Nr
   )r   yr
   r
   r   addition   s    r   c             C   s   | |kS )Nr
   )r   r   r
   r
   r   equality   s    r   c             C   s   | S )Nr
   )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S )TestConversionz-
    Testing Python to Native conversion
    c             C   s   t }t|tjgtjd}ddddg}x|D ]}| ||| q*W x$t|D ]}| ||| qPW t|tjgtjd}ddddg}x|D ]}| ||| qW x$t|D ]}| ||| qW 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}x(|D ] }|}| |||||  q.W x.t|D ] }|}| |||||  q^W t|tjtjgtjd}ddddg}x(|D ] }|}| |||||  qW x.t|D ] }|}| |||||  qW d S )N)r   y              ?y      ?      ?y            y      ?        )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   sZ   t }t|tjtjg}|j}d}d}x0t||D ] \}}| |||||| q2W d S )N)TF)r   r   )	r   r   r   booleanZintpr   	itertoolsproductr   )r   r   r   cfuncr   ysr
   r
   r   test_boolean_as_intO   s    z"TestConversion.test_boolean_as_intc             C   sZ   t }t|tjtjg}|j}d}d}x0t||D ] \}}| |||||| q2W d S )N)TF)r    r   r   )	r   r   r   r!   float64r   r"   r#   r   )r   r   r   r$   r   r%   r
   r
   r   test_boolean_as_floatZ   s    z$TestConversion.test_boolean_as_floatc             C   sZ   t }t|tjtjg}|j}d}d}x0t||D ] \}}| |||||| q2W d S )N)TF)r   r   r   r!   r   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 d Q R X d S )Nc             S   s   | S )Nr
   )r   r
   r
   r   fv   s    z3TestConversion.test_negative_to_unsigned.<locals>.fzuintp(uintp)T)nopython)assertRaisesOverflowErrorr   )r   r*   r
   r
   r   test_negative_to_unsignedu   s    z(TestConversion.test_negative_to_unsignedc          	   C   sd   t }t|tjtjtjgtjd}|j}d}| t& x|D ]\}}}|||| q<W W d Q R X d S )N)r   ))r    r   r   )r   r    r   )r   r   r    )r   r   r   uint64r   r-   r.   )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}x4|D ],\}}	}
| t |||	|
 W d Q R X qW ~~~	~
t  W d Q R X d S )	Nprowcol)r      )dtyper   r    )r   r   r:   r'   r   
from_dtyper   r   r0   r   ZrecarrayZarangesizer6   r7   r8   assertRefCountr-   r.   gcZcollect)r   r   Zmystruct_dtZmystructr   r$   Zst1r1   r2   r3   r4   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 )Nr
   r
   r
   r
   r   r*      s    z1TestConversion.test_with_no_parameters.<locals>.fz()T)r+   )r   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Q R X | j| ( | t ||d W dQ R X W dQ R X t |tj|f}| j|  |d| W dQ R X | j| ( | t |d| W dQ R X W dQ R X dS )zF
        Check that argument cleanup doesn't leak references.
        c             S   s   d S )Nr
   )r   r   r
   r
   r   r*      s    z0TestConversion.check_argument_cleanup.<locals>.fc                s.   | g}t | tr*x| D ]}| |7 }qW |S )N)
isinstancetuple)objZobjsv)_objectsr
   r   rE      s
    

z7TestConversion.check_argument_cleanup.<locals>._objectsr   Nr    )r   r   Zuint32r=   r   r-   r.   )r   typrC   r*   Zobjectsr   r
   )rE   r   check_argument_cleanup   s     z%TestConversion.check_argument_cleanupc             C   s(   t td}| ttjdd| d S )Ns   xyzr   C)
memoryview	bytearrayrG   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   )r:   r   )r   r:   r'   ZzerosrG   r   r;   )r   r:   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 )Ns   xyzr   rH      )rI   rJ   r   ZUniTuplerK   rL   rG   )r   rM   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 )Ns   xyzr   rH   )rI   rJ   r   ZOptionalrK   rL   rG   )r   rM   rQ   r
   r
   r   test_cleanup_optional   s    z$TestConversion.test_cleanup_optionalN)__name__
__module____qualname____doc__r   r   r&   r(   r)   r/   r5   r?   r@   rG   rN   rO   rR   rS   r
   r
   r
   r   r      s   r   __main__)Z
__future__r   Zarrayr>   r"   sysZnumpyr   Znumba.unittest_supportZunittest_supportZunittestZnumba.compilerr   r   Znumbar   r   r   Zsupportr	   r   r   r   r   r   rT   mainr
   r
   r
   r   <module>   s"    @