U
    ,d                     @   s   d dl Zd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dl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G dd de	ZG dd de	Zedkre  dS )    N)compile_isolated)jit)types)TestCasetagc                 C   s   t | S N)boola r   ?/tmp/pip-unpacked-wheel-eu7e0c37/numba/tests/test_numberctor.pydobool   s    r   c                 C   s   t | S r   )intr	   r   r   r   doint   s    r   c                 C   s   t | S r   )floatr	   r   r   r   dofloat   s    r   c                 C   s   t | S r   complexr	   r   r   r   	docomplex   s    r   c                 C   s
   t | |S r   r   )r
   br   r   r   
docomplex2   s    r   c                 C   s   t | }|jd |jd  S N   r   realimag)r
   zr   r   r   complex_calc   s    r   c                 C   s   t | |}|jd |jd  S r   r   )r
   r   r   r   r   r   complex_calc2$   s    
r   c                    s    fdd}|S )Nc                    s    | S r   r   r	   tpr   r   f*   s    zconverter.<locals>.fr   )r    r!   r   r   r   	converter)   s    r"   c                  c   s   dD ]
} | V  qd S )N)Zint8Zint16int32int64Zuint8Zuint16Zuint32Zuint64ZintcZuintcZintpZuintpfloat32float64Zbool_r   tp_namer   r   r   real_np_types/   s    r)   c                  c   s   dD ]
} | V  qd S )N)	complex64
complex128r   r'   r   r   r   complex_np_types6   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S )TestScalarNumberCtorz*
    Test <number class>(some scalar)
    c                 C   sd   t jt jt jt jt jg}dddddg}t||D ].\}}t||g}|j}| 	|||| q0d S )N   r     ffffff(@ffffff7@)
r   booleanr#   r$   r%   r&   zipr   entry_pointassertPreciseEqualselfpyfuncx_typesx_valuestyxcrescfuncr   r   r   check_int_constructor@   s        z*TestScalarNumberCtor.check_int_constructorc                 C   s   |  t d S r   )r?   r   r7   r   r   r   	test_boolK   s    zTestScalarNumberCtor.test_boolc                 C   s   |  t d S r   )r?   r   r@   r   r   r   test_intN   s    zTestScalarNumberCtor.test_intc                 C   st   t }tjtjtjtjg}ddddg}t||D ]@\}}t||g}|j}| j	|||||tjkrfdndd q.d S )Nr.   r/   r0   r1   singleexactprec)
r   r   r#   r$   r%   r&   r3   r   r4   r5   r6   r   r   r   
test_floatQ   s       zTestScalarNumberCtor.test_floatc           
      C   s   t }tjtjtjtjtjtjg}ddddddg}t||D ]P\}}t	||g}|j
}||}||}	| j|||||tjkrdndd	 q:t}d
}t	|tjg}|j
}| ||d t	|tjg}|j
}| ||d d S )Nr.   r/   r0   r1   y      ?      y      ?      rC   rD   rE        ?      ?)r   r   r#   r$   r%   r&   r*   r+   r3   r   r4   r5   r   assertGreater)
r7   r8   r9   r:   r;   r<   r=   r>   gotexpectedr   r   r   test_complex_   s2        z!TestScalarNumberCtor.test_complexc           
      C   s   t }tjtjtjtjg}ddddg}dd |D }t|||D ]H\}}}t|||g}|j}	| j	||||	|||tjkr~dndd	 q>t
}d
}t|tjtjg}|j}	| 	|	||d t|tjtjg}|j}	| |	||d d S )Nr.   r/   r0   r1   c                 S   s   g | ]}|d  qS )   r   ).0r<   r   r   r   
<listcomp>   s     z6TestScalarNumberCtor.test_complex2.<locals>.<listcomp>rC   rD   rE   rH   g       @)r   r   r#   r$   r%   r&   r3   r   r4   r5   r   rJ   )
r7   r8   r9   r:   Zy_valuesr;   r<   yr=   r>   r   r   r   test_complex2|   s,       z"TestScalarNumberCtor.test_complex2c                    s   t |}tdd|}t tjr0 fdd}n }t }|D ]J}|jdkrdt|trd|dk rdqB||}	||}
| j	|
|	d |f d qBd S )	NTZnopythonc                    s    t | S r   )npr$   )r<   np_typer   r   <lambda>       z;TestScalarNumberCtor.check_type_converter.<locals>.<lambda>ug        zfor type %s with arg %s)msg)
r"   r   
issubclassrT   integerdtypekind
isinstancer   r5   )r7   r    rV   valuesr8   r>   Znp_converterr]   valrL   rK   r   rU   r   check_type_converter   s    

z)TestScalarNumberCtor.check_type_converterc              	   C   s|   ddddddddd	g	}t  D ]$}tt|}||}| ||| q|d
 t D ]$}tt|}||}| ||| qRd S )Nr   r.   i l    a$i]yl a$g      ?g      y      ?      @)r)   getattrrT   rb   appendr,   )r7   
tp_factoryr`   r(   rV   r    r   r   r   check_number_types   s     




z'TestScalarNumberCtor.check_number_typesc                 C   s   dd }|  | dS )z>
        Test explicit casting to Numba number types.
        c                 S   s
   t t| S r   )rd   r   r'   r   r   r   rf      s    z9TestScalarNumberCtor.test_numba_types.<locals>.tp_factoryNrg   r7   rf   r   r   r   test_numba_types   s    z%TestScalarNumberCtor.test_numba_typesc                 C   s   dd }|  | dS )z>
        Test explicit casting to Numpy number types.
        c                 S   s
   t t| S r   )rd   rT   r'   r   r   r   rf      s    z9TestScalarNumberCtor.test_numpy_types.<locals>.tp_factoryNrh   ri   r   r   r   test_numpy_types   s    z%TestScalarNumberCtor.test_numpy_typesN)__name__
__module____qualname____doc__r?   rA   rB   rG   rM   rR   rb   rg   rj   rk   r   r   r   r   r-   ;   s   r-   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestArrayNumberCtorz,
    Test <number class>(some sequence)
    c                 C   s@   t |}tdd|}|D ] }||}||}| || qd S )NTrS   )r"   r   r5   )r7   rV   r`   r8   r>   ra   rL   rK   r   r   r   check_type_constructor   s    z*TestArrayNumberCtor.check_type_constructorc                 C   sd   ddddgdg}t  D ]}tt|}| || qdddgg}t D ]}tt|}| || qDd S )NrI         @)r.   rs   rI   rs   r   )y              ?rs   r)   rd   rT   rq   r,   r7   r`   r(   rV   r   r   r   test_1d   s    



zTestArrayNumberCtor.test_1dc                 C   sh   dddgddgddgfddgg}t  D ]}tt|}| || q&t D ]}tt|}| || qHd S )	N)rr   )      @   rr   )rw         @rI   rs   rw   ry   r   rt   ru   r   r   r   test_2d   s    



zTestArrayNumberCtor.test_2dN)rl   rm   rn   ro   rq   rv   rz   r   r   r   r   rp      s   rp   __main__)ZnumpyrT   Znumba.core.compilerr   Znumbar   Z
numba.corer   Znumba.tests.supportr   r   Zunittestr   r   r   r   r   r   r   r"   r)   r,   r-   rp   rl   mainr   r   r   r   <module>   s(    .