
    '}h/                     \   d dl mZmZ d dlmZmZmZmZmZ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eeef   deeef   fdZdedefdZdedeeeeef   f   fdZ	 	 ddededeee      de de	ee   eeeeef   f   f   f
dZ!deddfdZ"y)    )defaultdict
namedtuple)AnyDictListOptionalSetTupleN)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returnc                 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)r   er   r   r   kernel_mappingentryr   r    namespace_helperkernel_namespacebackend_metadatakernel_keys
kernel_keys                 X/var/www/html/test/engine/venv/lib/python3.12/site-packages/torchgen/executorch/parse.pyparse_from_yamlr;      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     esc                 |   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+   
isinstancer1   r   r-   r   parser/   namelenr;   r   )r=   indicesr   r2   funcsr5   opnameindexs           r:   parse_et_yaml_structrL   J   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$ !!r<   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.
    r?   r@   rA   rB   )r   dictr,   rD   r1   r   r-   r   rE   r/   rF   	ET_FIELDS)r=   fieldsr   rI   r5   rJ   fieldvalues           r:   extract_kernel_fieldsrS   b   s     2=T1BF 
.v%%<UG'<<%*AA#q
  %%&6&B&BCHH 	.E&3(-vu%	.
. Mr<   pathtags_yaml_pathignore_keysskip_native_fns_genc                     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)rW   loaded_yaml)openyamlloadr   rS   strip_et_fieldsr   r   )rT   rU   rV   rW   fr=   	et_kernelnative_yamls           r:   parse_et_yamlrb   v   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)rO   r+   )r=   r4   rQ   s      r:   r^   r^      s0      # 	#EIIeT"	##r<   )NF)#collectionsr   r   typingr   r   r   r   r	   r
   r\   torchgen.executorch.modelr   r   torchgen.genr   r   torchgen.modelr   r   r   r   r   torchgen.utilsr   r   rO   r1   objectr;   rL   rS   boolrb   r^   r(   r<   r:   <module>rl      s   / 8 8  @ 6  + .+=?R*ST 9	.S&[) .d;3O.P .b"V " "0f lDcN.J)K . /3 %	3
33 #k*+3 	3
 4lDcN&B!CCD36# #4 #r<   