
    Χg.                        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dS )*    )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_aliaseidict[str, object]return"dict[ETKernelKey, BackendMetadata]c                   |                                  }|                    dd          x}i S |                    di           }|                    di           }|                    dd           i }|D ]}|                    d          }||                    d           |                    d          }t          j        |d	          }	|	                    d
          }
t          |	j        d|
dz             }|t          dd          gnt          j	        |||          }|D ]8}||vs-J dt          |          z   dz   t          |          z               |||<   9|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)r   er   r   r   kernel_mappingentryr   r   namespace_helperkernel_namespacebackend_metadatakernel_keys
kernel_keys                 U/var/www/html/ai-engine/env/lib/python3.11/site-packages/torchgen/executorch/parse.pyparse_from_yamlr9      s    			A55D)))2	'(uu\2'>'>J,-EE2CR,H,HO
D)))9;N : :99Z((LL$$$ii..*A1
 
 
 ,==d=KK*#/+j8
 
 
  T***++*8ZQQ 	 & 	: 	:J^333(3z??:S@3q66I 433 *:N:&&		:     esobjectr   c                   i }| D ]}|                                 }|                    d          }t          |t                    sJ d|             t	          j        |d          }t          j        |j                  j	        }||vsJ d| d            t          t          |          x}          dk    r|||<   t          |          S )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lenr9   r   )r;   indicesr   r0   funcsr3   opnameindexs           r8   parse_et_yaml_structrK   L   s    
 GIG $ $GGIIf%%%<<'<U'<'<<<<*A#q
 
 
  %&6&BCCHW$$$&Wv&W&W&W$$$***u++q00#GFO!!!r:   "dict[OperatorName, dict[str, Any]]c                f   t          t                    }| D ]}|                    d          }t          |t                    sJ d|             t          j        |d          }t          j        |j	                  j
        }t          D ]$}|                    |          x}|||         |<   %|S )zGiven a loaded yaml representing a list of operators, extract the
    kernel key related fields indexed by the operator name.
    r>   r?   r@   rA   )r   dictr*   rC   r/   r   r+   r   rD   r-   rE   	ET_FIELDS)r;   fieldsr   rH   r3   rI   fieldvalues           r8   extract_kernel_fieldsrS   d   s     2=T1B1BF 
. 
.v%%%<<'<U'<'<<<<*A#q
 
 
  %&6&BCCH 	. 	.E&3(-vu%	. Mr:   Fpathr/   tags_yaml_pathignore_keysset[DispatchKey] | Noneskip_native_fns_genbool?tuple[list[NativeFunction], dict[OperatorName, dict[str, Any]]]c                    t          |           5 }t          j        |t                    }ddd           n# 1 swxY w Y   t	          |          }t          |           t          | ||||          }|j        |fS )zParse native_functions.yaml into NativeFunctions and an Operator Indexed Dict
    of fields to persist from native_functions.yaml to functions.yaml
    )LoaderN)rX   loaded_yaml)openyamlloadr	   rS   strip_et_fieldsr
   r   )rT   rU   rV   rX   fr;   	et_kernelnative_yamls           r8   parse_et_yamlre   x   s     
d -qYq,,,- - - - - - - - - - - - - - - &b))I B#/  K '22s   8<<Nonec                P    | D ]"}t           D ]}|                    |d           #dS )zGiven a loaded yaml representing a list of operators,
    remove ET specific fields from every entries for BC compatibility
    N)rO   r)   )r;   r2   rQ   s      r8   ra   ra      sH      # # 	# 	#EIIeT""""	## #r:   )r   r   r   r   )r;   r<   r   r   )r;   r<   r   rL   )NF)
rT   r/   rU   r/   rV   rW   rX   rY   r   rZ   )r;   r<   r   rf   )
__future__r   collectionsr   r   typingr   r_   torchgen.executorch.modelr   r   torchgen.genr	   r
   torchgen.modelr   r   r   r   r   torchgen.utilsr   r   rO   r9   rK   rS   re   ra   r&   r:   r8   <module>ro      sw   " " " " " " / / / / / / / /        @ @ @ @ @ @ @ @ 6 6 6 6 6 6 6 6              + * * * * * z.+=?R*STT 988	. . . .b" " " "0   . ,0 %	3 3 3 3 36# # # # # #r:   