
    `iN                        d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZmZ  e
d          ZddZddZddZdS )z7Utilities for constructing Python proxies of FFI types.    )annotationsN)MISSING)AnyCallableTypeTypeVarcast   )Object	TypeFieldTypeInfo_InputClsType	type_infor   clsType[_InputClsType]methods$dict[str, Callable[..., Any] | None]returnc                  
 | j         
J d            j        }|t          fk    rt          f}t	          j                  

                    dd            
                    dd            d
d<   | 
d<   | j        D ]}|                              
|j	        <    d
fd}|
                                D ]\  }}| |||           | j        D ]} ||j	        |j                   t          j        |
          }	j        |	_         t!          j        d          |	          }	t%          t&          t(                   |	          S )NzType class is already created__dict____weakref__ 	__slots____tvm_ffi_type_info__namestrfuncCallable[..., Any]r   Nonec                    | dk    rd} | v rd S j         |_         | |_        j         d|  |_        d|  dj         d|_        || <   t	          | |           d S )N__ffi_init____c_ffi_init__.zMethod `z` of class ``)
__module____name____qualname____doc__setattr)r   r   attrsr   s     n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/tvm_ffi/dataclasses/_utils.py_add_methodz%type_info_to_cls.<locals>._add_method:   s    >!!#D5==F."/88$88G$GGC4DGGGdT4         )updated)r   r   r   r   r   r   )type_cls	__bases__objectr   dictr   popfieldsas_propertyr   itemsr   r   typer&   r%   	functoolswrapsr	   r   r   )r   r   r   	cls_basesfieldr,   r   method_implmethodnew_clsr*   s    `        @r+   type_info_to_clsr?   "   s   
 %%'F%%%IVII	 E	IIj$	IImT"""E+%.E
!" ! 3 3!--c22ej
! 
! 
! 
! 
! 
! 
! %]]__ + +k"Kk***# . .FK---- 3<E22GG.ioc2...w77G]#W---r-   r/   r7   
type_fieldr   r   c           
        ddl m}m } |j        }t          | |t                    }|t          u r |            }nnt          ||          rn]t          |t          t          t          t          t          d           f          r ||          }nt          d|j         d|           t          ||          sJ |j        |_        ||_        d S )N   )Fieldr;   )defaultzCannot recognize field: z: )r;   rC   r   getattrr   
isinstanceintfloatr   boolr7   
ValueErrordataclass_field)r/   r@   rC   r;   
field_namerhss         r+   fill_dataclass_fieldrN   S   s    ########JxW55C
g~~egg	C		 N	C#uc4d<	=	= NeC   LJOLLsLLMMMc5!!!!!CH!$Jr-   Callable[..., None]c           
        g }|}|0|                     t          |j                             |j        }|0|                                 |j        D ]}|j        dk    r nt          d|j         d          g }g }g }g }dt          i}	|D ]}
|
j        J |
j
        J |
j
        }|j        x}t          u}|j        r{|                    |
j                   |rD|                    |
j                   |                    |
j        df           ||	d|
j         <   |                    |
j                   |rC|                    |
j                   |                    |
j        df           ||	d|
j         <   d	g}|                     |           |                     d
 |D                        g }|D ]B\  }}|r |                    d| d| d| d           '|                    | d| d           C|                    dd                    |           d           |                     g d           dd                    |           dg}|                     d |D                        |                    d           d                    |          }i }t          ||	|           |d         }|S )zGenerate an ``__init__`` that forwards to the FFI constructor.

    The generated initializer has a proper Python signature built from the
    reflected field list, supporting default values and ``__post_init__``.
    Nr!   z!Cannot find constructor method: `z.__ffi_init__`r   T_default_factory_Fselfc              3      K   | ]	}| d V  
dS )z=MISSINGNr   ).0r   s     r+   	<genexpr>zmethod_init.<locals>.<genexpr>   s+      AAd4!!!AAAAAAr-   zif z is MISSING: z = _default_factory_z()zself.__ffi_init__(z, ))ztry:z%    fn_post_init = self.__post_init__zexcept AttributeError:z    passzelse:z    fn_post_init()zdef __init__(z):c              3      K   | ]	}d | V  
dS )z    Nr   )rT   lines     r+   rU   zmethod_init.<locals>.<genexpr>   s(      ==$t======r-   z    ...
__init__)extendreversedr4   parent_type_inforeverser   r   rJ   type_keyr   rK   default_factoryinitappendjoinexec)r/   r   r4   cur_type_infotype_methodargs_no_defaultsargs_with_defaultsfields_with_defaultsffi_arg_orderexec_globalsr;   rK   r`   has_default_factoryargs
body_linesrL   is_initsource_linessource	namespacerZ   s                         r+   method_initrs   e   s    !F%.M

#h}344555%6 
# NN ( a a~--E . _Y=O___```"$$&35!Mw'L M Mz%%%$000/2A2QQZaa 	M  ,,," 4"))%*555$++UZ,>???AP===>> ''
3333  	M  ,,, ''U(;<<<=LL9UZ99:hDKK !!!KKAA.@AAAAAAJ3 Q Q
G 	Q]j]]z]]z]]]    OOOOOPPPPF499]+C+CFFFGGG	
 	
 	
	 	 	 8DIIdOO7778L==*======	"""YY|$$F !#Iy)))$HOr-   )r   r   r   r   r   r   r   r   )r/   r7   r@   r   r   r   )r/   r7   r   r   r   rO   )r(   
__future__r   r8   dataclassesr   typingr   r   r   r   r	   corer   r   r   r   r?   rN   rs   r   r-   r+   <module>rx      s   " > = " " " " " "           5 5 5 5 5 5 5 5 5 5 5 5 5 5          ((.. .. .. ..b% % % %$K K K K K Kr-   