o
    8ήc                     @   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rde  dS dS )    N)compile_isolated)jit)types)TestCasetagc                 C      t | S N)boola r   B/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_numberctor.pydobool      r   c                 C   r   r   )intr
   r   r   r   doint   r   r   c                 C   r   r   )floatr
   r   r   r   dofloat   r   r   c                 C   r   r   complexr
   r   r   r   	docomplex   r   r   c                 C   s
   t | |S r   r   )r   br   r   r   
docomplex2      
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*   r   zconverter.<locals>.fr   )r#   r$   r   r"   r   	converter)   s   r%   c                  c       dD ]} | V  qd S )N)int8int16int32int64uint8uint16uint32uint64intcuintcintpuintpfloat32float64bool_r   tp_namer   r   r   real_np_types/   s   r8   c                  c   r&   )N)	complex64
complex128r   r6   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   s^   t jt jt jt jt jg}g d}t||D ]\}}t||g}|j}| 	|||| qd S )N)   r     ffffff(@ffffff7@)
r   booleanr)   r*   r3   r4   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      |  t d S r   )rN   r   rF   r   r   r   	test_boolK      zTestScalarNumberCtor.test_boolc                 C   rO   r   )rN   r   rP   r   r   r   test_intN   rR   zTestScalarNumberCtor.test_intc                 C   sp   t }tjtjtjtjg}g d}t||D ] \}}t||g}|j}| j	|||||tju r1dndd qd S )Nr=   r>   r?   r@   singleexactprec)
r   r   r)   r*   r3   r4   rB   r   rC   rD   rE   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}g d}t||D ](\}}t	||g}|j
}||}||}	| j|||||tju r=dndd qt}d}t	|tjg}|j
}| ||d t	|tjg}|j
}| ||d d S )N)r=   r>   r?   r@   y      ?      y      ?      rU   rV   rW        ?      ?)r   r   r)   r*   r3   r4   r9   r:   rB   r   rC   rD   r    assertGreater)
rF   rG   rH   rI   rJ   rK   rL   rM   gotexpectedr   r   r   test_complex_   s*   z!TestScalarNumberCtor.test_complexc           
      C   s   t }tjtjtjtjg}g d}dd |D }t|||D ]$\}}}t|||g}|j}	| j	||||	|||tju 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 )	NrT   c                 S   s   g | ]}|d  qS )   r   ).0rK   r   r   r   
<listcomp>   s    z6TestScalarNumberCtor.test_complex2.<locals>.<listcomp>rU   rV   rW   rZ   g       @)r   r   r)   r*   r3   r4   rB   r   rC   rD   r!   r\   )
rF   rG   rH   rI   y_valuesrJ   rK   yrL   rM   r   r   r   test_complex2|   s&   z"TestScalarNumberCtor.test_complex2c                    s   t |}tdd|}t tjr fdd}n }t }|D ]%}|jdkr2t|tr2|dk r2q!||}	||}
| j	|
|	d |f d q!d S )	NTnopythonc                    s    t | S r   )npr*   )rK   np_typer   r   <lambda>   s    z;TestScalarNumberCtor.check_type_converter.<locals>.<lambda>ug        zfor type %s with arg %s)msg)
r%   r   
issubclassrh   integerdtypekind
isinstancer   rD   )rF   r#   rj   valuesrG   rM   np_converterrp   valr^   r]   r   ri   r   check_type_converter   s   

z)TestScalarNumberCtor.check_type_converterc                 C   sn   g d}t  D ]}tt|}||}| ||| q|d t D ]}tt|}||}| ||| q"d S )N)	r   r=   i l    a$i]yl a$g      ?g      y      ?      @)r8   getattrrh   rv   appendr;   )rF   
tp_factoryrs   r7   rj   r#   r   r   r   check_number_types   s   




z'TestScalarNumberCtor.check_number_typesc                 C      dd }|  | dS )z>
        Test explicit casting to Numba number types.
        c                 S   
   t t| S r   )rx   r   r6   r   r   r   rz      r   z9TestScalarNumberCtor.test_numba_types.<locals>.tp_factoryNr{   rF   rz   r   r   r   test_numba_types      z%TestScalarNumberCtor.test_numba_typesc                 C   r|   )z>
        Test explicit casting to Numpy number types.
        c                 S   r}   r   )rx   rh   r6   r   r   r   rz      r   z9TestScalarNumberCtor.test_numpy_types.<locals>.tp_factoryNr~   r   r   r   r   test_numpy_types   r   z%TestScalarNumberCtor.test_numpy_typesN)__name__
__module____qualname____doc__rN   rQ   rS   rY   r_   re   rv   r{   r   r   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 )NTrf   )r%   r   rD   )rF   rj   rs   rG   rM   ru   r^   r]   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|}| || q"d S )Nr[         @)r=   r   r[   r   r   )y              ?r   r8   rx   rh   r   r;   rF   rs   r7   rj   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|}| || q$d S )	N)r   )      @   r   )r         @r[   r   r   r   r   r   r   r   r   r   test_2d   s   



zTestArrayNumberCtor.test_2dN)r   r   r   r   r   r   r   r   r   r   r   r      s
    r   __main__)numpyrh   numba.core.compilerr   numbar   
numba.corer   numba.tests.supportr   r   unittestr   r   r   r   r   r    r!   r%   r8   r;   r<   r   r   mainr   r   r   r   <module>   s,     .