
    Og.                        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                 `/var/www/html/suriana-translation/venv/lib/python3.12/site-packages/torchgen/executorch/parse.pyparse_from_yamlr6      sj    		A55D))2	'(uu\2'>J,-EE2CR,HO
D)9;N :99Z(LL$ii.*AA1
 ,==d=K*#//+j8
  T*+**8ZQ 	 & 	:J^3 (3z?:S@3q6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 )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$W(Fvhh&WW$**u+q0#GFO$ !!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 )zGiven 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                    t        |       5 }t        j                  |t              }ddd       t	              }t        |       t        | ||||      }|j                  |fS # 1 sw Y   =xY w)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   st     
d -qYYq,- &b)I B#/K ''22- -s   A$$A-c                L    | D ]  }t         D ]  }|j                  |d        ! y)zGiven 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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   