o
    8ήc$                     @   s   d Z ddlZ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mZ ddlmZ G d	d
 d
eZedkrBe  dS dS )z*
Tests for the as_numba_type() machinery.
    N)types)TypingError)typeof)as_numba_typeAsNumbaTypeRegistry)jitclass)TestCasec                   @   s   e Zd ZedZedZeedZedZedZ	e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 )TestAsNumbaTyper   g        numbaTNc                 C   st   |  tt| j |  tt| j |  tt| j |  tt| j	 |  tt
| j |  ttd | j d S N)assertEqualr   intint_nb_typefloatfloat_nb_typecomplexcomplex_nb_typestrstr_nb_typeboolbool_nb_typetypenone_nb_typeself r   C/tmp/pip-target-vg8gfxp4/lib/python/numba/tests/test_asnumbatype.pytest_simple_types   s   z!TestAsNumbaType.test_simple_typesc              
   C   sN   t jt jt t jt t jt t jt jgg}|D ]
}| t	|| qd S r   )
r   intpbooleanListTypefloat64DictTypeTuplefloat32r   r   )r   numba_typestyr   r   r   test_numba_types"   s   
	z TestAsNumbaType.test_numba_typesc                 C   s   |  ttjt t| j |  ttjtt	f t
| j| j |  ttjt t| j |  ttjttf t| j| jg |  ttjttf t| j| jg d S r   )r   r   	py_typingListr   r   r    r   Dictr   r"   r   Setr   r   r#   r   r   r   r   test_single_containers/   s(   

z&TestAsNumbaType.test_single_containersc                 C   s   |  ttjt t| j |  ttjtd f t| j	 |  ttjd t
f t| j | t}ttjttf  W d    n1 sJw   Y  | dt|j d S )Nz)Cannot type Union that is not an Optional)r   r   r(   Optionalr   r   r   Unionr   r   r   r   assertRaisesr   r   assertIn	exception)r   raisesr   r   r   test_optionalE   s$   


zTestAsNumbaType.test_optionalc              
   C   s   t jt }| tt j| tt| j | tt jt jt	t
f  tt| j| j | tt jt jt jt t	f  ttt| j| jg d S r   )r(   r)   r   r   r   r   r    r   r*   r   r   r"   r   r   r+   r#   r-   )r   IntListr   r   r   test_nested_containersZ   s&   
z&TestAsNumbaType.test_nested_containersc                 C   s*   t G dd d}| t||jj d S )Nc                   @   s   e Zd ZU eed< dd ZdS )z6TestAsNumbaType.test_jitclass_registers.<locals>.MyIntxc                 S   s
   || _ d S r   )r6   )r   valuer   r   r   __init__s   s   
z?TestAsNumbaType.test_jitclass_registers.<locals>.MyInt.__init__N)__name__
__module____qualname__r   __annotations__r8   r   r   r   r   MyInto   s   
 r=   )r   r   r   
class_typeinstance_type)r   r=   r   r   r   test_jitclass_registersm   s   z'TestAsNumbaType.test_jitclass_registersc                 C   sT   t jttf }t j| }t| j| jf}| t|| | t|t| d S r   )	r(   r#   r   r)   r   r   r   r   r    )r   PairListOfPairspair_nb_typer   r   r   test_type_aliasx   s   
zTestAsNumbaType.test_type_aliasc                 C   sN   t  }| |t| j |ttj | |ttj | |t| j d S r   )r   r   r   r   registerr   r$   assertNotEqual)r   r   r   r   r   test_overwrite_type   s
   z#TestAsNumbaType.test_overwrite_typec              	   C   s   t j}t j| t j| t j| t jt|f t j|tf t jt|f g}|D ]$}| 	t
}t| W d    n1 s;w   Y  | dt|j q%d S )Nz&Cannot infer numba type of python type)r(   Anyr-   r)   r+   r*   r   r#   r   r/   r   r   r0   r   r1   )r   rH   	any_typesbad_py_typer2   r   r   r   test_any_throws   s"   	
zTestAsNumbaType.test_any_throwsc              	   C   s~   t jttf t jttd t jttf f g}|D ]$}| t}t	| W d    n1 s.w   Y  | 
dt|j qd S )NzCannot type Union)r(   r.   r   r   r   r#   r   r/   r   r   r0   r1   )r   
bad_unionsrJ   r2   r   r   r   test_bad_union_throws   s   
z%TestAsNumbaType.test_bad_union_throws)r9   r:   r;   r   r   r   r   r   r   r   r   r   r'   r,   r3   r5   r@   rD   rG   rK   rM   r   r   r   r   r	      s"    
r	   __main__)__doc__typingr(   unittest
numba.corer   numba.core.errorsr   numba.core.typing.typeofr   numba.core.typing.asnumbatyper   r   numba.experimental.jitclassr   numba.tests.supportr   r	   r9   mainr   r   r   r   <module>   s     