o
    ۾i                     @   s   d dl mZ d dl mZ d dlmZ d dlZG dd dejZG dd de	Z
G d	d
 d
e	ZG dd dee
ZG dd deeZdddZdS )    )ir)binding)	datamodelNc                   @   s,   e Zd ZdZeZdd Zdd Zdd ZdS )	DataModelTesterzE
    Test the implementation of a DataModel for a frontend type.
    c                 C   s   t  | _tj| j | _d S N)r   Modulemoduler   default_managerfe_type)self r   P/home/ubuntu/.local/lib/python3.10/site-packages/numba/core/datamodel/testing.pysetUp   s   
zDataModelTester.setUpc           
         s  t t  g }t j| j|dd}t  }||  t | j	
 d}| j	||}| |td t|ttfr[d
 fdd	 t |dd d	}t | j	 }| || n
| |j| j	  | j	||}| |j| j	
  |  tt| j}	t|	 dS )zi
        - Is as_arg() and from_arg() implemented?
        - Are they the inverse of each other?
        test_as_argnameNz(as_argument returned NotImplementedErrorc                 3   sL    | D ] }t |ttfrt ||dV  q|d u r|V  q||V  qd S )Nfunc)
isinstancetuplelist)argsr   argrecur_tuplizer   r   r   "   s   z2DataModelTester.test_as_arg.<locals>.recur_tuplizec                 S   s   | j S r   )type)xr   r   r   <lambda>,   s    z-DataModelTester.test_as_arg.<locals>.<lambda>r   r   )r   FunctionTypeVoidTypeFunctionr   	IRBuilderposition_at_endappend_basic_blockConstantr   get_value_typeas_argumentassertIsNotNotImplementedr   r   r   get_argument_typeassertEqualr   from_argumentret_voidllparse_assemblystr)
r   fntyfunctionbuilderundef_valuer   argtypesexptypes	rev_valuematerializedr   r   r   r      s,   
zDataModelTester.test_as_argc                 C   s   t t  g }t j| j|dd}t  }||  t | j	
 d}| j	||}| |td | |j| j	  | j	||}| |j| j	
  |  tt| j}t| dS )zo
        - Is as_return() and from_return() implemented?
        - Are they the inverse of each other?
        test_as_returnr   Nz&as_return returned NotImplementedError)r   r   r   r    r   r!   r"   r#   r$   r   r%   	as_returnr'   r(   r*   r   get_return_typefrom_returnr,   r-   r.   r/   )r   r0   r1   r2   r3   retr6   r7   r   r   r   r8   =   s   zDataModelTester.test_as_returnN)	__name__
__module____qualname____doc__r(   r
   r   r   r8   r   r   r   r   r      s    +r   c                   @      e Zd ZdZdd ZdS )SupportAsDataMixinz#Test as_data() and from_data()
    c                 C   s   t t  g }t j| j|dd}t  }||  t | j	
 d }| j	||}| |td | |j| j	  | j	||}| |j| j	
  |  tt| j}t| d S )Ntest_as_datar   zas_data returned NotImplemented)r   r   r   r    r   r!   r"   r#   r$   r   r%   as_datar'   r(   r*   r   get_data_type	from_datar,   r-   r.   r/   )r   r0   r1   r2   r3   datar6   r7   r   r   r   rC   ]   s"   zSupportAsDataMixin.test_as_dataN)r=   r>   r?   r@   rC   r   r   r   r   rB   X   s    rB   c                   @   rA   )NotSupportAsDataMixinz@Ensure as_data() and from_data() raise NotImplementedError.
    c                 C   s   t t  g }t j| j|dd}t  }||  t | j	
 d }| t | j	||}W d    n1 s<w   Y  | t | j	||}W d    d S 1 sYw   Y  d S )NrC   r   )r   r   r   r    r   r!   r"   r#   r$   r   r%   assertRaisesNotImplementedErrorrD   rF   )r   r0   r1   r2   r3   rG   rev_datar   r   r   test_as_data_not_supportedy   s   "z0NotSupportAsDataMixin.test_as_data_not_supportedN)r=   r>   r?   r@   rL   r   r   r   r   rH   u   s    rH   c                   @      e Zd ZdS )"DataModelTester_SupportAsDataMixinNr=   r>   r?   r   r   r   r   rN          rN   c                   @   rM   )%DataModelTester_NotSupportAsDataMixinNrO   r   r   r   r   rQ      rP   rQ   Tc                 C   s   | rt S tS )z;A helper for returning a unittest TestCase for testing
    )rN   rQ   )support_as_datar   r   r   test_factory   s   rS   )T)llvmliter   r   r-   
numba.corer   unittestTestCaser   objectrB   rH   rN   rQ   rS   r   r   r   r   <module>   s    P