
    JTh.                        S SK Jr  S SKJrJr  S SKJr  S SKrS SKJ	r	J
r
  S SKJrJr  S SKJrJrJrJrJr  S SKJr  \" S	S
S/5      r/ SQrSS jrSS jrSS jr  S         SS jjrSS jrg)    )annotations)defaultdict
namedtuple)AnyN)ETKernelIndexETKernelKey)
LineLoaderparse_native_yaml)BackendMetadataDispatchKeyFunctionSchemaNativeFunctionOperatorName)NamespaceHelperETParsedYamlnative_functionset_kernel_indices)kernels
type_aliasdim_order_aliasc                l   U R                  5       nUR                  SS5      =nc  0 $ UR                  S0 5      nUR                  S0 5      nUR                  SS5        0 nU H  nUR                  S5      nUb  UR                  S5        UR                  S5      n[        R                  " USS	9n	U	R                  S
S9n
[        U	R                  SU
S-   S9nUc  [        SSS9/O[        R                  " XsU5      nU H.  nX;  d"   S[        U5      -   S-   [        U5      -   5       eXU'   M0     M     U$ )a  Given a loaded yaml representing kernel assignment information, extract the
mapping from `kernel keys` to `BackendMetadata` (the latter representing the kernel instance)

Args:
    ei: Dict keys {kernels, type_alias, dim_order_alias}
        See ETKernelKey for description of arguments
r   Nr   r   __line__arg_metakernel_name   )	max_levelat)defaultFz::native)kernel
structuredcpp_namespace TzDuplicate kernel key:  )copypopgetr   from_namespaced_entityget_cpp_namespacer   entity_namer   gen_from_yamlstr)eier   r   r   kernel_mappingentryr   r   namespace_helperkernel_namespacebackend_metadatakernel_keys
kernel_keys                 Q/var/www/auris/envauris/lib/python3.13/site-packages/torchgen/executorch/parse.pyparse_from_yamlr6      sZ    		A55D))2	'(uu\2'>J,-EE2CR,HO
D)9;N99Z(LL$ii.*AA1
 ,==d=K*#//+j8
  T*+**8Q 	 &J3 (3z?:S@3q6I3 *::&	 &- 8     c                   0 nU  H  nUR                  5       nUR                  S5      n[        U[        5      (       d
   SU 35       e[        R
                  " USS9n[        R                  " UR                  5      R                  nXa;  d   SU S35       e[        [        U5      =n5      S:w  d  M  XqU'   M     [        U5      $ )zGiven a loaded yaml representing a list of operators, for each op extract the mapping
of `kernel keys` to `BackendMetadata` (the latter representing the kernel instance
that should be used by the kernel key).
funcnot a str:    namespaced_entityr   zDuplicate func found in yaml: z alreadyr   )r$   r%   
isinstancer+   r   r'   r   parser)   namelenr6   r   )esindicesr,   r-   funcsr0   opnameindexs           r5   parse_et_yaml_structrG   L   s    
 GIGGGIf%%%<UG'<<%*AA#q
  %%&6&B&BCHH$W(Fvhh&WW$**u+q0#FO  !!r7   c                h   [        [        5      nU  H  nUR                  S5      n[        U[        5      (       d
   SU 35       e[
        R                  " USS9n[        R                  " UR                  5      R                  n[         H   nUR                  U5      =nc  M  XqU   U'   M"     M     U$ )zzGiven a loaded yaml representing a list of operators, extract the
kernel key related fields indexed by the operator name.
r9   r:   r;   r<   )r   dictr&   r>   r+   r   r'   r   r?   r)   r@   	ET_FIELDS)rB   fieldsr,   rD   r0   rE   fieldvalues           r5   extract_kernel_fieldsrN   d   s     2=T1BFv%%%<UG'<<%*AA#q
  %%&6&B&BCHHE&3(-vu%   Mr7   c                    [        U 5       n[        R                  " U[        S9nSSS5        [	        W5      n[        U5        [        U UUUUS9nUR                  U4$ ! , (       d  f       N?= f)zParse native_functions.yaml into NativeFunctions and an Operator Indexed Dict
of fields to persist from native_functions.yaml to functions.yaml
)LoaderN)skip_native_fns_genloaded_yaml)openyamlloadr	   rN   strip_et_fieldsr
   r   )pathtags_yaml_pathignore_keysrQ   frB   	et_kernelnative_yamls           r5   parse_et_yamlr]   x   sl     
dqYYq, 
 &b)I B#/K ''22 
s   A
A-c                T    U  H"  n[          H  nUR                  US5        M     M$     g)zxGiven a loaded yaml representing a list of operators,
remove ET specific fields from every entries for BC compatibility
N)rJ   r%   )rB   r/   rL   s      r5   rV   rV      s&     EIIeT"  r7   )r,   zdict[str, object]returnz"dict[ETKernelKey, BackendMetadata])rB   objectr_   r   )rB   r`   r_   z"dict[OperatorName, dict[str, Any]])NF)
rW   r+   rX   r+   rY   zset[DispatchKey] | NonerQ   boolr_   z?tuple[list[NativeFunction], dict[OperatorName, dict[str, Any]]])rB   r`   r_   None)
__future__r   collectionsr   r   typingr   rT   torchgen.executorch.modelr   r   torchgen.genr	   r
   torchgen.modelr   r   r   r   r   torchgen.utilsr   r   rJ   r6   rG   rN   r]   rV   r"   r7   r5   <module>rj      s    " /   @ 6  + .+=?R*ST 9	.b"0. ,0 %	3
33 )3 	3
 E36#r7   