o
    ٰi                     @  sp  d Z ddlmZ ddlmZ er(ddlmZmZ ddlm	Z	m
Z
mZ ddlm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mZ edG dd de
ZedG dd de
ZedG dd deZedG dd dZd4dd Zd5d!d"Zd6d%d&Zed'G d(d) d)Zed*G d+d, d,eZed-G d.d/ d/eZ ed0G d1d2 d2Z!d3S )7zTesting utilities.    )annotations)TYPE_CHECKING)MappingSequence)DeviceObjectdtype)Any)ClassVar   )_ffi_api)r   )c_classfield)get_global_funcregister_objectztesting.TestObjectBasec                   @  s<   e Zd ZU dZded< ded< ded< erdd
dZdS dS )TestObjectBasezTest object base class.intv_i64floatv_f64strv_str_1returnc                C     d S N selfr   r   r   K/home/ubuntu/.local/lib/python3.10/site-packages/tvm_ffi/testing/testing.pyadd_i643       zTestObjectBase.add_i64Nr   r   r   r   )__name__
__module____qualname____doc____annotations__r   r    r   r   r   r   r   )   s   
 r   ztesting.TestIntPairc                   @  sB   e Zd ZU dZded< ded< eredd	d
ZdddZdS dS )TestIntPairzTest Int Pair.r   ab_0r   r   r   c                C  r   r   r   )r+   r   r   r   r   __c_ffi_init__A      zTestIntPair.__c_ffi_init__c                C  r   r   r   )r   r   r   r   sumC   r!   zTestIntPair.sumN)r+   r   r   r   r   r   )r   r   )	r#   r$   r%   r&   r'   r   staticmethodr,   r.   r   r   r   r   r(   8   s   
 r(   ztesting.TestObjectDerivedc                   @  s"   e Zd ZU dZded< ded< dS )TestObjectDerivedzTest object derived class.zMapping[Any, Any]v_mapzSequence[Any]v_arrayN)r#   r$   r%   r&   r'   r   r   r   r   r0   H   s   
 r0   ztesting.SchemaAllTypesc                   @  s   e Zd ZU ded< ded< ded< ded< d	ed
< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< er`d.d!d"Zd/d$d%Zd0d&d'Zd1d(d)Ze	d2d+d,Z
d-S d-S )3_SchemaAllTypesboolv_boolr   v_intr   v_floatr   v_devicer   v_dtyper   v_stringbytesv_bytesz
int | None	v_opt_int
str | None	v_opt_strSequence[int]	v_arr_intzSequence[str]	v_arr_strzMapping[str, int]v_map_str_intMapping[str, Sequence[int]]v_map_str_arr_intz'str | Sequence[int] | Mapping[str, int]	v_variantzSequence[int | str] | Nonev_opt_arr_variantr   r   c                C  r   r   r   r   r   r   r   add_inti   r!   z_SchemaAllTypes.add_int_2c                C  r   r   r   r   r   rI   r   r   r   
append_intj   r!   z_SchemaAllTypes.append_intc                C  r   r   r   rJ   r   r   r   maybe_concatk   r!   z_SchemaAllTypes.maybe_concatc                C  r   r   r   rJ   r   r   r   	merge_mapl   r!   z_SchemaAllTypes.merge_mapr+   c                C  r   r   r   )r+   r   rI   r   r   r   	make_withm   r-   z_SchemaAllTypes.make_withNr"   )r   r@   rI   r   r   r@   )r   r>   rI   r>   r   r>   )r   rD   rI   rD   r   rD   )r+   r   r   r   rI   r   r   r3   )r#   r$   r%   r'   r   rH   rK   rL   rM   r/   rN   r   r   r   r   r3   T   s0   
 



r3   type_keyr   kwargsr	   r   r   c                 K  s6   | g}|  D ]\}}|| || qtj| S )aZ  Make an object by reflection.

    Parameters
    ----------
    type_key
        The type key of the object.
    kwargs
        The keyword arguments to the object.

    Returns
    -------
    obj
        The created object.

    Note
    ----
    This function is only used for testing purposes and should
    not be used in other cases.

    )itemsappendr   MakeObjectFromPackedArgs)rO   rP   argskvr   r   r   create_objects   s
   

rW   c                   C  s
   t d S )zAReturn an object whose type is not registered on the Python side.z testing.make_unregistered_objectr   r   r   r   r   make_unregistered_object   s   
rY   xr   c                 C  s   t d| S )zAdd one to the input integer.ztesting.add_onerX   )rZ   r   r   r   add_one   s   r[   ztesting.TestCxxClassBasec                   @  s8   e Zd ZU ded< ded< dZdZded< dd
dZdS )_TestCxxClassBaser   r   v_i32   r   zClassVar[int]not_field_2r   Nonec                 C  s   |  |d |d  d S )Nr^   r   )__ffi_init__)r   r   r]   r   r   r   __init__   s   z_TestCxxClassBase.__init__N)r   r   r]   r   r   r`   )r#   r$   r%   r'   not_field_1r_   rb   r   r   r   r   r\      s   
 r\   ztesting.TestCxxClassDerivedc                   @  s"   e Zd ZU ded< dZded< dS )_TestCxxClassDerivedr   r      v_f32N)r#   r$   r%   r'   rf   r   r   r   r   rd      s   
 rd   z"testing.TestCxxClassDerivedDerivedc                   @  s,   e Zd ZU edd dZded< ded< dS )	_TestCxxClassDerivedDerivedc                   C     dS )Ndefaultr   r   r   r   r   <lambda>   r!   z$_TestCxxClassDerivedDerived.<lambda>)default_factoryr   r   r4   r5   N)r#   r$   r%   r   r   r'   r   r   r   r   rg      s   
 rg   ztesting.TestCxxInitSubsetc                   @  s@   e Zd ZU ded< eddZded< edd ddZd	ed
< dS )_TestCxxInitSubsetr   required_fieldF)initoptional_fieldc                   C  rh   )Nz
py-defaultr   r   r   r   r   rj      r!   z_TestCxxInitSubset.<lambda>)rk   rn   r   noteN)r#   r$   r%   r'   r   ro   rp   r   r   r   r   rl      s   
 rl   N)rO   r   rP   r	   r   r   )r   r   )rZ   r   r   r   )"r&   
__future__r   typingr   collections.abcr   r   tvm_ffir   r   r   r	   r
    r   coredataclassesr   r   registryr   r   r   r(   r0   r3   rW   rY   r[   r\   rd   rg   rl   r   r   r   r   <module>   s>   



