o
    gµ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   śO/home/kuhnn/.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’’