
    9j5                        d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlmZmZmZmZ e	rd dlmZ  ed	
       G d d             Z	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZddZy)    )annotations)defaultdict)Iterable)	dataclass)TYPE_CHECKINGN)merge_debug_infomerge_operator_dictsSelectiveBuildOperatorstrip_operator_overload_name)NativeFunctionT)frozenc                     e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   ded<   edd       Zedd       Zedd       Zedd       Ze	 	 	 	 	 	 	 	 d d       Z	d!dZ
d"dZd!dZd"dZd!dZd#dZd$dZd%dZy)&SelectiveBuilderboolinclude_all_operatorsztuple[str, ...] | None_debug_infoz!dict[str, SelectiveBuildOperator]	operatorsdict[str, list[str]]kernel_metadataet_kernel_metadataset[str]custom_classesbuild_featuresinclude_all_non_op_selectivesc                 0    t         j                  ddi      S )Nr   Tr   from_yaml_dict     a/media/conek/DATA/Code/OCR/venv/lib/python3.12/site-packages/torchgen/selective_build/selector.pyget_nop_selectorz!SelectiveBuilder.get_nop_selectorF   s    ..0G/NOOr   c           
        h d}t        | j                               }t        ||z
        dkD  r,t        dj	                  dj                  ||z
                    | j                  dd      }t        |t              st        dt        |             d }d| v r>| d   }t        |t              st        d	t        |             t        d
 |D              }i }| j                  di       }t        |t              st        dt        |             |j                         D ]  \  }}	t        j                   ||	      ||<     i }
| j                  di       }t        |t              st        dt        |             |j                         D ]*  \  }}	|	D cg c]  }t#        |       c}|
t#        |      <   , | j                  di       }t        |t              st        dt        |             | j                  dg       }t        |t$              st        dt        |             t        |      }| j                  dg       }t        |t$              st        dt        |             t        |      }| j                  dd      }t        |t              st        dt        |             t'        ||||
||||      S c c}w )N>   r   
debug_infor   r   r   r   r   r   r   z!Got unexpected top level keys: {},r   Fz1Expected 'include_all_operators' to be bool, got r#   z&Expected 'debug_info' to be list, got c              3  2   K   | ]  }t        |        y wN)str).0xs     r    	<genexpr>z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>k   s     7!s1v7s   r   z%Expected 'operators' to be dict, got r   z+Expected 'kernel_metadata' to be dict, got r   z.Expected 'et_kernel_metadata' to be dict, got r   z.Expected 'custom_classes' to be Iterable, got r   z.Expected 'build_features' to be Iterable, got r   z9Expected 'include_all_non_op_selectives' to be bool, got )setkeyslen	Exceptionformatjoinget
isinstancer   AssertionErrortypelisttupledictitemsr
   r   r'   r   r   )datavalid_top_level_keystop_level_keysr   r#   di_listr   operators_dictkvr   kernel_metadata_dictdtyper   r   r   r   s                    r    r   zSelectiveBuilder.from_yaml_dictJ   s   	 
 TYY[)~ 44593::HH^.BBC 
 !%)@% H/6 CDI^D_C`a  
4<(Ggt,$<T']OL  7w77J	+r2.$/ 7^8L7MN  #((* 	GDAq1@@AFIaL	G #xx(92>.5 =dCW>X=YZ  )..0 	BDAq?@&Aes5z&AOCF#	B "XX&:B?,d3 @FXAY@Z[  "2B7.(3 @nAU@VW  ^,"2B7.(3 @nAU@VW  ^,(,1PRW(X%7> 9:;= 
  !)	
 		
; 'Bs   Kc                V    t        j                  |       }t        j                  |      S r&   )yaml	safe_loadr   r   )config_contentscontentss     r    from_yaml_strzSelectiveBuilder.from_yaml_str   s!    >>/2..x88r   c                    t        |       5 }t        j                  |      }t        j	                  |      cd d d        S # 1 sw Y   y xY wr&   )openrC   rD   r   r   )config_pathfrF   s      r    from_yaml_pathzSelectiveBuilder.from_yaml_path   s=    + 	=!~~a(H#228<	= 	= 	=s   *A  A	c                X    i }| D ]  }|||dd||<    t         j                  |dd      S )NT)nameis_root_operatoris_used_for_traininginclude_all_overloads)r   r   r   )
allow_listrO   rP   r   ops        r    &from_legacy_op_registration_allow_listz7SelectiveBuilder.from_legacy_op_registration_allow_list   sO     	 	B$4(<)-	IbM	  ..&15
 	
r   c                    | j                   ry|| j                  v ryt        |      }|| j                  v xr | j                  |   j                  S NT)r   r   r   rQ   )selfrN   s     r    is_operator_selectedz%SelectiveBuilder.is_operator_selected   sJ    %%4>>!+D1t~~%T$..*>*T*TTr   c                :    t        |      }| j                  |      S r&   )op_name_from_native_functionrX   rW   funcop_names      r    is_native_function_selectedz,SelectiveBuilder.is_native_function_selected   s    .t4((11r   c                B   | j                  |      sy| j                  ryt        ddddd       }|}|| j                  v r| j                  |   }t	        |      }|}|| j                  v r| j                  |   }|j
                  xs |j                  xr |j
                  S )NFT )rN   rO   rP   rQ   r   )rX   r   r
   r   r   rP   rQ   )rW   rN   not_training_oprS   base_ops        r    !is_operator_selected_for_trainingz2SelectiveBuilder.is_operator_selected_for_training   s    ((.%%0"!&"'
 4>>!%B+D1!4>>!nnT*G&& 
))Jg.J.J	
r   c                :    t        |      }| j                  |      S r&   )rZ   rc   r[   s      r    (is_native_function_selected_for_trainingz9SelectiveBuilder.is_native_function_selected_for_training   s    .t455g>>r   c                   | j                  |      sy| j                  ry|| j                  v r| j                  |   }|j                  S t	        |      }|| j                  vry| j                  |   }|j
                  xr |j                  S )NFT)rX   r   r   rO   r   rQ   )rW   rN   rS   rb   s       r    rO   z!SelectiveBuilder.is_root_operator   s    ((.%%4>>!)-)=B&&&+D1t~~%*...*>,,I1I1IIr   c                v    | j                   s| j                  ry|| j                  v xr || j                  |   v S rV   )r   r   r   )rW   
kernel_tagrA   s      r    is_kernel_dtype_selectedz)SelectiveBuilder.is_kernel_dtype_selected   sC    %%)K)K $... :--j99	
r   c                p   || j                   vr| j                  r|S g S t               }| j                   |   D ]r  }d}|D ]F  }|dk7  s	|j                  d      d   |j                  d      d   k(  s3|j	                  |       d} n |rSd|vrt        d      |j	                  d       t t        |      S )zF
        Return a list of kernel keys that cover the used ops
        Fdefault/   TzMissing kernel for the model)r   r   r+   splitaddr.   r5   )rW   r]   
kernel_key
result_setmodel_kernel_keys	key_foundkeys          r    et_get_selected_kernelsz(SelectiveBuilder.et_get_selected_kernels  s    
 $111!%!;!;:CC U
!%!8!8!A 	.I!  9$		#q)->-D-DS-I!-LLNN3' $I J.#$BCCNN9-	." Jr   c                   | j                   | j                  d}i }| j                  j                         D ]  \  }}|j	                         ||<    ||d<   | j
                  t        | j
                        |d<   | j                  j                         D ci c]  \  }}|t        |       c}}|d<   | j                  |d<   t        | j                        |d<   t        | j                        |d<   |S c c}}w )N)r   r   r   r#   r   r   r   r   )r   r   r   r8   to_dictr   sortedr   r   r   r   )rW   retr   r]   rS   r>   r?   s          r    rw   zSelectiveBuilder.to_dict&  s    -1-O-O%)%?%?"
 	>>//1 	.KGR!#Ig	.$K' &t'7'7 8C (,';';'A'A'C"
#aAvayL"
 %)$;$; ! &t':': ; &t':': ;
"
s   C5N)returnr   )r9   dict[str, object]rz   r   )rE   r'   rz   r   )rJ   r'   rz   r   )rR   r   rO   r   rP   r   rz   r   )rN   r'   rz   r   )r\   r   rz   r   )rh   r'   rA   r'   rz   r   )r]   r'   rp   	list[str]rz   r|   )rz   r{   )__name__
__module____qualname____annotations__staticmethodr!   r   rG   rL   rT   rX   r^   rc   re   rO   ri   ru   rw   r   r   r    r   r      s       (' 10 *)
 -,
 
  $('P P Z
 Z
x 9 9 = =
 

04
LP
	
 
$U2
4?J
 <r   r   c                    i }t        | j                               t        |j                               z   D ]3  \  }}t        |      }||v r|t        ||         z  }t        |      ||<   5 |S r&   )r5   r8   r+   )lhsrhsr   tag_namedtypesdtypes_copys         r    merge_kernel_metadatar   @  st     -/O -SYY[0AA 6&&k&3x899K$($5!6 r   c                   t        t              }t        | j                               t        |j                               z   D ]J  }||   j	                  | j                  |g              ||   j	                  |j                  |g              L |j                         D ci c]  \  }}|t        |       c}}S c c}}w r&   )r   r+   r5   r,   updater1   r8   rx   )r   r   merge_et_kernel_metadatarS   vals        r    r   r   O  s     5@4D388:chhj!11 = $++CGGBO< $++CGGBO<= ,D+I+I+KLCBsOLLLs   #B=c           
     "   | j                   xs |j                   }t        | j                  |j                        }t        | j                  |j                        }t        | j                  |j                        }t        | j                  |j                        }| j                  xs |j                  }| j                  j                  |j                        }| j                  j                  |j                        }	t        |||||||	|      S r&   )r   r   r   r	   r   r   r   r   r   r   r   unionr   r   )
r   r   r   r#   r   r   r   r   r   r   s
             r    combine_selective_buildersr   [  s      55R9R9R!#//3??CJ$S]]CMMBI+C,?,?ATATUO1 6 6 	))NS-N-N " ''--c.@.@AN''--c.@.@AN%	 	r   c                L    | j                    d| j                  j                   S )Nz::)	namespacer\   rN   )rK   s    r    rZ   rZ   v  s!     kk]"QVV[[M**r   )r   r   r   r   rz   r   )r   r   r   r   rz   r   )rK   r   rz   r'   )
__future__r   collectionsr   collections.abcr   dataclassesr   typingr   rC   !torchgen.selective_build.operatorr   r	   r
   r   torchgen.modelr   r   r   r   r   rZ   r   r   r    <module>r      s    " # $ !     - $_ _ _D			 	M		M		M 	M	 06+r   