Ë
    Z^(h.  ã                  óÚ   — d dl mZ d dlmZmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlmZmZ d dlmZmZmZmZmZ d dlmZ  ed	d
dg«      Zg d¢Zdd„Zdd„Zdd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Zy)é    )Ú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                ót  — | j                  «       }|j                  dd«      x}€i S |j                  di «      }|j                  di «      }|j                  dd«       i }|D ]Ô  }|j                  d«      }|�|j                  d«       |j                  d«      }t        j                  |d¬	«      }	|	j                  d
¬«      }
t        |	j                  d|
dz   ¬«      }|€t        dd¬«      gnt        j                  |||«      }|D ]-  }||vs"J dt        |«      z   dz   t        |«      z   «       ‚|||<   Œ/ ŒÖ |S )a3  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                 úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torchgen/executorch/parse.pyÚparse_from_yamlr6      sj  € ð 	�‰‹	€AØ—5‘5˜ DÓ)Ð)ˆÐ2Øˆ	à'(§u¡u¨\¸2Ó'>€JØ,-¯E©EÐ2CÀRÓ,H€OØ×Ñ˜
 DÔ)à9;€Nàò :ˆØ—9‘9˜ZÓ(ˆØÐØ�L‰L˜Ô$à—i‘i Ó.ˆÜ*×AÑAØ 1ô
Ðð ,×=Ñ=ÀdÐ=ÓKÐÜ*Ø#×/Ñ/ØØ+¨jÑ8ô
Ðð Ðô ˜ TÔ*Ñ+ä×*Ñ*¨8°ZÀÓQð 	ð &ò 	:ˆJØ ^Ñ3ð Ø(¬3¨z«?Ñ:¸SÑ@Ä3ÀqÃ6ÑIóÐ3ð *:ˆN˜:Ò&ñ		:ð-:ð8 Ðó    c                ó|  — i }| D ]«  }|j                  «       }|j                  d«      }t        |t        «      s
J d|› �«       ‚t	        j
                  |d¬«      }t        j                  |j                  «      j                  }||vsJ d|› d�«       ‚t        t        |«      x}«      dk7  sŒ§|||<   Œ­ t        |«      S )zÝGiven 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Øò $ˆØ�G‰G‹Iˆà—‘�f“ˆÜ˜%¤Ô%Ð<¨°U°GÐ'<Ó<Ð%Ü*×AÑAØ#¨qô
Ðô  ×%Ñ%Ð&6×&BÑ&BÓC×HÑHˆà˜WÑ$ÐWÐ(FÀvÀhÈhÐ&WÓWÐ$äœ¨Ó*Ð*ˆuÓ+¨qÓ0Ø#ˆG�FŠOð$ô ˜Ó!Ð!r7   c                óV  — t        t        «      }| D ]”  }|j                  d«      }t        |t        «      s
J d|› �«       ‚t        j                  |d¬«      }t        j                  |j                  «      j                  }t        D ]  }|j                  |«      x}€Œ|||   |<   Œ  Œ– |S )z‚Given 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=¼TÓ1B€FØò 
.ˆØ—‘�v“ˆÜ˜%¤Ô%Ð<¨°U°GÐ'<Ó<Ð%Ü*×AÑAØ#¨qô
Ðô  ×%Ñ%Ð&6×&BÑ&BÓC×HÑHˆäò 	.ˆEØŸ™ ›Ð&�Ñ3Ø(-��v‘˜uÒ%ñ	.ð
.ð €Mr7   c                óà   — t        | «      5 }t        j                  |t        ¬«      }ddd«       t	        «      }t        |«       t        | ||||¬«      }|j                  |fS # 1 sw Y   Œ=xY w)z˜Parse 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   st   € ô 
ˆd‹ð -�qÜ�Y‰Y�q¤Ô,ˆ÷-ô & bÓ)€Iô �BÔä#ØØØØ/Øô€Kð ×'Ñ'¨Ð2Ð2÷-ð -ús   ŒA$Á$A-c                óL   — | D ]  }t         D ]  }|j                  |d«       Œ Œ! y)z€Given 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   “   s0   € ð ò #ˆÜò 	#ˆEØ�I‰I�e˜TÕ"ñ	#ñ#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ó3ô6#r7   