
    `iv                        U d Z ddlm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mZ dZd	ed
<   	 ddlZn# e$ r Y nw xY wdZd	ed<   	 ddlZn# e$ r Y nw xY wddZdS )zCConversion utilities to convert Python objects into TVM FFI values.    )annotationsN)Number)
ModuleType)Any   )_dtype	containercorezModuleType | Nonetorchnumpyvaluer   returnc           	     (   t          | t          j        t          j        t          t
          t          j        t          j	        f          r| S t          | t          t          f          rt          j        |           S t          | t                    rt          j        |           S t          | t                     rt          j        |           S t          | t$          t&          f          rt          j        |           S t          | t          j                  r|                                 S t/          |           rt          j        |           S | dS t3          | d          rt          j        |           S t6          .t          | t6          j	                  rt          j        |           S t:          .t          | t:          j	                  rt          j        |           S t3          | d          rit          j        t          j         g| !                                R  }t           "                    t          j	        t!          |                    }||_#        |S t          | tH                    rt          j%        |           S t3          | d          r| &                                S t3          | d          r| S t3          | d          r| S t3          | d          r| S t3          | d          r| S t3          | d	          r| S t          j'        |           S )
a  Convert a Python object into TVM FFI values.

    This helper mirrors the automatic argument conversion that happens when
    calling FFI functions. It is primarily useful in tests or places where
    an explicit conversion is desired.

    Parameters
    ----------
    value
        The Python object to be converted.

    Returns
    -------
    ffi_obj
        The converted TVM FFI object.

    Examples
    --------
    .. code-block:: python

        import tvm_ffi

        # Lists and tuples become tvm_ffi.Array
        a = tvm_ffi.convert([1, 2, 3])
        assert isinstance(a, tvm_ffi.Array)

        # Dicts become tvm_ffi.Map
        m = tvm_ffi.convert({"a": 1, "b": 2})
        assert isinstance(m, tvm_ffi.Map)

        # Strings and bytes become zero-copy FFI-aware types
        s = tvm_ffi.convert("hello")
        b = tvm_ffi.convert(b"bytes")
        assert isinstance(s, tvm_ffi.core.String)
        assert isinstance(b, tvm_ffi.core.Bytes)

        # Callables are wrapped as tvm_ffi.Function
        f = tvm_ffi.convert(lambda x: x + 1)
        assert isinstance(f, tvm_ffi.Function)

        # Array libraries that support DLPack export can be converted to Tensor
        import numpy as np

        x = tvm_ffi.convert(np.arange(4, dtype="int32"))
        assert isinstance(x, tvm_ffi.Tensor)

    Note
    ----
    Function arguments to ffi function calls are
    automatically converted. So this function is mainly
    only used in internal or testing scenarios.

    N
__dlpack____dlpack_data_type____tvm_ffi_object____cuda_stream____tvm_ffi_opaque_ptr____dlpack_device____tvm_ffi_int____tvm_ffi_float__)(
isinstancer
   ObjectPyNativeObjectboolr   ctypesc_void_pr   dtypetuplelistr	   ArraydictMapstrStringbytes	bytearrayBytesObjectConvertibleasobjectcallable_convert_to_ffi_funchasattrfrom_dlpackr   !_convert_torch_dtype_to_ffi_dtyper   !_convert_numpy_dtype_to_ffi_dtype_create_cdtype_from_tupleDataTyper   __new___tvm_ffi_dtype	Exception_convert_to_ffi_errorr   _convert_to_opaque_object)r   cdtyper   s      d/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/tvm_ffi/_convert.pyconvertr:   )   s   l T0$QWQ]^  .5 	EE4=	)	) *5u%%%	E4	 	  (5}U###	E3		 &5{5!!!	EE9-	.	. $5z%   	E41	2	2 "5~~	%  5(///	t		%	% 5&&&		z%==	5e<<<		z%==	5e<<<	.	/	/ 5/]@Z@Z@\@\]]]FL#f++66%	E9	%	% 5)%000	,	-	- 5'')))	)	*	* 5	0	1	1 
5	+	,	, 5	)	*	* 5	+	,	, 5 -e444    )r   r   r   r   )__doc__
__future__r   r   numbersr   typesr   typingr    r   r	   r
   r   __annotations__ImportErrorr   r:    r;   r9   <module>rE      s(  " J I I " " " " " "                    % % % % % % % % % %    	LLLL 	 	 	D	      	LLLL 	 	 	D	d5 d5 d5 d5 d5 d5s   7 ??
A AA