
    `i                       d Z ddlmZ ddlZddl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 dd	lmZ dd
lmZmZmZ  ej        d          dd            ZddZddZddZ ej        d          d d            ZdS )!z7Stateful helpers for querying TVM FFI runtime metadata.    )annotationsN)defaultdict)GetRegisteredTypeKeys)
TypeSchema+_lookup_or_register_type_info_from_type_key)get_global_func_metadatalist_global_func_names   )consts)FuncInfoNamedTypeSchema
ObjectInfo)maxsizetype_keystrreturnr   c                |    t          t          |                     }|j        | k    sJ t          j        |          S )z2Construct an `ObjectInfo` from an object type key.)r   r   r   r   from_type_info)r   	type_infos     j/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/tvm_ffi/stub/lib_state.pyobject_info_from_type_keyr   !   s<     <CMMJJI))))$Y///    dict[str, list[FuncInfo]]c                 8   i } t                      D ]}	 |                    dd          \  }}	 |                     |g                               t	          |                     T# t
          $ r- t          t          j         d| t          j	                    Y w xY w# t          $ r- t          t          j         d| t          j	                    Y w xY wt          |                                           D ]}| |                             d             | S )z8Collect global functions from TVM FFI's global registry..r
   z'[Skipped] Function has no type schema: z+[Skipped] Invalid name in global function: c                    | j         j        S )N)schemaname)xs    r   <lambda>z&collect_global_funcs.<locals>.<lambda>7   s
    18= r   )key)r	   rsplit
setdefaultappend_func_info_from_global_name	ExceptionprintCTERM_YELLOW
TERM_RESET
ValueErrorlistkeyssort)global_funcsr   prefix_ks        r   collect_global_funcsr3   )   sY   .0L&(( 	e 	e	eC++IFAe''33::;VW[;\;\]]]] e e ecctcUVUaccddddde  	e 	e 	eQ]cctcUVUaccddddd	e ,##%%&& : :Q!8!89999s"   B6A%%4BB4CCdict[str, list[str]]c                 N   i } t                      D ]U}	 |                    dd          \  }}|                     |g                               |           F# t          $ r Y Rw xY wt          |                                           D ]}| |                                          | S )zCCollect registered object type keys from TVM FFI's global registry.r   r
   )r   r"   r#   r$   r+   r,   r-   r.   )global_objectsr   r0   r1   r2   s        r   collect_type_keysr7   ;   s    +-N)++ C C	C Q//IFA %%fb1188BBBB  	 	 	D	 .%%''(( ! !q    s   A
A$#A$	type_keys	list[str]list[ObjectInfo]c                   t          t                              |                     }d |D             t          t                     }t          t                    }                                D ]\\  }}|j        }|v r<||                             |           ||xx         dz  cc<   ||xx         dz  cc<   L||xx         dz  cc<   ]|                                D ]}|	                                 d |                                D             }t          j        |           g }	|rgt          j        |          }|	                    |           ||         D ]3}
||
xx         dz  cc<   ||
         dk    rt          j        ||
           4|gt          |	          t                    k    sJ fd|	D             S )zNCollect ObjectInfo objects for type keys, topologically sorted by inheritance.c                .    i | ]}|t          |          S  )r   ).0r   s     r   
<dictcomp>z$toposort_objects.<locals>.<dictcomp>N   s0     $ $ $:B+H55$ $ $r   r
   r   c                $    g | ]\  }}|d k    |S )r   r=   )r>   tydegs      r   
<listcomp>z$toposort_objects.<locals>.<listcomp>`   s!    HHHwr3saxxxxxr   c                     g | ]
}|         S r=   r=   )r>   r   infoss     r   rC   z$toposort_objects.<locals>.<listcomp>l   s    888E(O888r   )r,   dictfromkeysr   intitemsparent_type_keyr$   valuesr.   heapqheapifyheappopheappushlen)r8   unique_type_keyschild_types	in_degreer   inforJ   childrenqueuesorted_keyschild_type_keyrE   s              @r   toposort_objectsrY   J   s    DMM)4455$ $FV$ $ $E )4D(9(9K +C 0 0I++-- % %$.e##(//999h1$o&&&!+&&&&h1$&&((  HH)//*;*;HHHE	M%K
 6=''8$$$)(3 	6 	6Nn%%%*%%%(A--un555  6 {s5zz))))8888K8888r   r   r   c           
         t          t          | t          j        t	          |           d                             d          S )z3Construct a `FuncInfo` from a global function name.type_schema)r   r   F)r   	is_member)r   r   r   from_json_strr   )r   s    r   r%   r%   o   sQ     +,DT,J,J=,YZZ
 
 
    r   )r   r   r   r   )r   r   )r   r4   )r8   r9   r   r:   )r   r   r   r   )__doc__
__future__r   	functoolsrL   collectionsr   tvm_ffi._ffi_apir   tvm_ffi.corer   r   tvm_ffi.registryr   r	    r   r(   utilsr   r   r   	lru_cacher   r3   r7   rY   r%   r=   r   r   <module>rh      sa  " > = " " " " " "      # # # # # # 2 2 2 2 2 2 P P P P P P P P M M M M M M M M       8 8 8 8 8 8 8 8 8 8 T"""0 0 0 #"0   $   "9 "9 "9 "9J T"""   #"  r   