B
     \                 @   s  d dl mZm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 G dd de ZG d	d
 d
e ZG dd de ZG dd de ZG dd de ZG dd de ZG dd de ZG dd de ZG dd de ZG dd de ZG dd de ZG dd de ZG dd  d e ZG d!d" d"e ZG d#d$ d$e ZG d%d& d&e ZG d'd( d(e ZG d)d* d*e ZG d+d, d,e Z G d-d. d.e Z!G d/d0 d0e Z"G d1d2 d2e Z#G d3d4 d4e
j$Z%G d5d6 d6e
j$Z&e'd7kre
(  d8S )9    )print_functionabsolute_import)irbinding)types)unittest_support)	datamodel)test_factoryc               @   s   e Zd ZejZdS )TestBoolN)__name__
__module____qualname__r   Zbooleanfe_type r   r   9lib/python3.7/site-packages/numba/tests/test_datamodel.pyr
      s   r
   c               @   s   e Zd ZejZdS )TestPyObjectN)r   r   r   r   Zpyobjectr   r   r   r   r   r      s   r   c               @   s   e Zd ZejZdS )TestInt8N)r   r   r   r   Zint8r   r   r   r   r   r      s   r   c               @   s   e Zd ZejZdS )	TestInt16N)r   r   r   r   int16r   r   r   r   r   r      s   r   c               @   s   e Zd ZejZdS )	TestInt32N)r   r   r   r   int32r   r   r   r   r   r      s   r   c               @   s   e Zd ZejZdS )	TestInt64N)r   r   r   r   int64r   r   r   r   r   r      s   r   c               @   s   e Zd ZejZdS )	TestUInt8N)r   r   r   r   Zuint8r   r   r   r   r   r   #   s   r   c               @   s   e Zd ZejZdS )
TestUInt16N)r   r   r   r   Zuint16r   r   r   r   r   r   '   s   r   c               @   s   e Zd ZejZdS )
TestUInt32N)r   r   r   r   Zuint32r   r   r   r   r   r   +   s   r   c               @   s   e Zd ZejZdS )
TestUInt64N)r   r   r   r   Zuint64r   r   r   r   r   r   /   s   r   c               @   s   e Zd ZejZdS )	TestFloatN)r   r   r   r   float32r   r   r   r   r   r   3   s   r   c               @   s   e Zd ZejZdS )
TestDoubleN)r   r   r   r   Zfloat64r   r   r   r   r   r   7   s   r   c               @   s   e Zd ZejZdS )TestComplexN)r   r   r   r   	complex64r   r   r   r   r   r    ;   s   r    c               @   s   e Zd ZejZdS )TestDoubleComplexN)r   r   r   r   
complex128r   r   r   r   r   r"   ?   s   r"   c               @   s   e Zd ZeejZdS )TestPointerOfInt32N)r   r   r   r   ZCPointerr   r   r   r   r   r   r$   C   s   r$   c               @   s   e Zd ZeejdZdS )TestUniTupleOf2xInt32   N)r   r   r   r   UniTupler   r   r   r   r   r   r%   G   s   r%   c               @   s   e Zd ZeejdZdS )TestUniTupleEmptyr   N)r   r   r   r   r'   r   r   r   r   r   r   r(   K   s   r(   c               @   s   e Zd ZeejejgZdS )TestTupleInt32Float32N)r   r   r   r   Tupler   r   r   r   r   r   r   r)   O   s   r)   c               @   s   e Zd Zeg ZdS )TestTupleEmptyN)r   r   r   r   r*   r   r   r   r   r   r+   S   s   r+   c               @   s   e Zd ZeejddZdS )Test1DArrayOfInt32   CN)r   r   r   r   Arrayr   r   r   r   r   r   r,   W   s   r,   c               @   s   e Zd ZeejddZdS )Test2DArrayOfComplex128r&   r.   N)r   r   r   r   r/   r#   r   r   r   r   r   r0   [   s   r0   c               @   s   e Zd ZeejddZdS )Test0DArrayOfInt32r   r.   N)r   r   r   r   r/   r   r   r   r   r   r   r1   _   s   r1   c               @   sD   e 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S )TestArgInfoc                s  t j t  |}t }tt g }tj||dd}t }|	|
   fdd|D }|||}|||}	| t|	t| tdd |D }
| |
|j dd |D }dd |	D }| || ||dd tt|D  |  tt| d	S )
z
        Test round-tripping types *fe_args* through the default data model's
        argument conversion and unpacking logic.
        Ztest_arguments)namec                s"   g | ]}t  | d qS )N)r   ZConstantlookupZget_value_type).0t)dmmr   r   
<listcomp>s   s   z2TestArgInfo._test_as_arguments.<locals>.<listcomp>c             S   s   g | ]
}|j qS r   )type)r5   vr   r   r   r8   {   s    c             S   s   g | ]
}|j qS r   )r9   )r5   ar   r   r   r8   ~   s    c             S   s   g | ]
}|j qS r   )r9   )r5   r;   r   r   r   r8      s    c             S   s   g | ]}d qS )zarg%ir   )r5   ir   r   r   r8      s    N)r   default_managerZ	ArgPackerr   ZModuleFunctionTypeZVoidTypeZFunctionZ	IRBuilderZposition_at_endZappend_basic_blockZas_argumentsZfrom_argumentsZassertEquallentupleZargument_typesZassign_namesrangeZret_voidllZparse_assemblystr)selffe_argsZfimoduleZfntyZfunctionZbuilderargsvaluesZasargsZvaltysZexpect_typesZ	got_typesr   )r7   r   _test_as_argumentse   s(    
zTestArgInfo._test_as_argumentsc             C   s(   t jt t jddt jg}| | d S )Nr-   r.   )r   r   r/   r!   rI   )rD   rE   r   r   r   test_int32_array_complex   s    z$TestArgInfo.test_int32_array_complexc             C   s$   t t jddgd }| | d S )Nr-   r.   r&   )r   r/   r   rI   )rD   rE   r   r   r   test_two_arrays   s    zTestArgInfo.test_two_arraysc             C   s$   t t jddgd }| | d S )Nr   r.   r&   )r   r/   r   rI   )rD   rE   r   r   r   test_two_0d_arrays   s    zTestArgInfo.test_two_0d_arraysc             C   s~   t t jdt t jdg}| | t t jdd}t |dt |dg}| | t t t jddg}| | d S )Nr&      r-   r.   )r   r'   r   rI   r/   )rD   rE   Zarrtyr   r   r   test_tuples   s    


zTestArgInfo.test_tuplesc             C   s*   t t jdt dt jg}| | d S )Nr   r   )r   r'   r   r*   r   rI   )rD   rE   r   r   r   test_empty_tuples   s    zTestArgInfo.test_empty_tuplesc             C   s*   t jt t ddt jg}| | d S )Nr   r&   )r   r   r'   r*   r   rI   )rD   rE   r   r   r   test_nested_empty_tuples   s    z$TestArgInfo.test_nested_empty_tuplesN)
r   r   r   rI   rJ   rK   rL   rN   rO   rP   r   r   r   r   r2   c   s   %r2   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestMemInfoc             C   s   t j| _d S )N)r   r=   r7   )rD   r   r   r   setUp   s    zTestMemInfo.setUpc             C   s"   t j}| j| }| |  d S )N)r   r   r7   assertFalsecontains_nrt_meminfo)rD   tydmr   r   r   test_number   s    
zTestMemInfo.test_numberc             C   s*   t jd d  }| j| }| |  d S )N)r   r   r7   
assertTruerT   )rD   rU   rV   r   r   r   
test_array   s    
zTestMemInfo.test_arrayc             C   s,   t jt jdd}| j| }| |  d S )Nr&   )dtypecount)r   r'   r   r7   rS   rT   )rD   rU   rV   r   r   r   test_tuple_of_number   s    
z TestMemInfo.test_tuple_of_numberc             C   s4   t jt jd d  dd}| j| }| |  d S )Nr&   )rZ   r[   )r   r'   r   r7   rX   rT   )rD   rU   rV   r   r   r   test_tuple_of_array   s    
zTestMemInfo.test_tuple_of_arrayN)r   r   r   rR   rW   rY   r\   r]   r   r   r   r   rQ      s
   rQ   __main__N))Z
__future__r   r   Zllvmliter   r   rB   Znumbar   r   Zunittestr   Znumba.datamodel.testingr	   r
   r   r   r   r   r   r   r   r   r   r   r   r    r"   r$   r%   r(   r)   r+   r,   r0   r1   ZTestCaser2   rQ   r   mainr   r   r   r   <module>   s>   P
