
    ¯wgz1                        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     f/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torchgen/selective_build/selector.pyget_nop_selectorz!SelectiveBuilder.get_nop_selectorF   s    ..0G/NOOr   c           
     J   h d}t        | j                               }t        ||z
        dkD  r,t        dj	                  dj                  ||z
                    | j                  dd      }t        |t              sJ d }d| v r)| d   }t        |t              sJ t        d |D              }i }| j                  d	i       }t        |t              sJ |j                         D ]  \  }}	t        j                  ||	      ||<     i }
| j                  d
i       }t        |t              sJ |j                         D ]*  \  }}	|	D cg c]  }t        |       c}|
t        |      <   , | j                  di       }t        |t              sJ | j                  dg       }t        |t               sJ t        |      }| j                  dg       }t        |t               sJ t        |      }| j                  dd      }t        |t              sJ t#        ||||
||||      S c c}w )N>   r   
debug_infor   r   r   r   r   r   r   z!Got unexpected top level keys: {},r   Fr#   c              3  2   K   | ]  }t        |        y wN)str).0xs     r    	<genexpr>z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>e   s     7!s1v7s   r   r   r   r   r   r   )setkeyslen	Exceptionformatjoinget
isinstancer   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66
4<(Ggt,,,7w77J	+r2.$///"((* 	GDAq1@@AFIaL	G #xx(92>.555(..0 	BDAq?@&Aes5z&AOCF#	B "XX&:B?,d333"2B7.(333^,"2B7.(333^,(,1PRW(X%7>>>!)	
 		
! 'Bs   H 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&   )openrA   rB   r   r   )config_pathfrD   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_listrM   rN   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   rO   )selfrL   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_functionrV   rU   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 )rL   rM   rN   rO   r   )rV   r   r
   r   r   rN   rO   )rU   rL   not_training_oprQ   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&   )rX   ra   rY   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)rV   r   r   rM   r   rO   )rU   rL   rQ   r`   s       r    rM   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 rT   )r   r   r   )rU   
kernel_tagr?   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.   r3   )rU   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   r6   to_dictr   sortedr   r   r   r   )rU   retr   r[   rQ   r<   r=   s          r    ru   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   )r7   dict[str, object]rx   r   )rC   r'   rx   r   )rH   r'   rx   r   )rP   r   rM   r   rN   r   rx   r   )rL   r'   rx   r   )rZ   r   rx   r   )rf   r'   r?   r'   rx   r   )r[   r'   rn   	list[str]rx   rz   )rx   ry   )__name__
__module____qualname____annotations__staticmethodr!   r   rE   rJ   rR   rV   r\   ra   rc   rM   rg   rs   ru   r   r   r    r   r      s       (' 10 *)
 -,
 
  $('P P A
 A
F 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&   )r3   r6   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+   r3   r,   updater1   r6   rv   )r   r   merge_et_kernel_metadatarQ   vals        r    r   r   6  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   B  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::)	namespacerZ   rL   )rI   s    r    rX   rX   ]  s!     kk]"QVV[[M**r   )r   r   r   r   rx   r   )r   r   r   r   rx   r   )rI   r   rx   r'   )
__future__r   collectionsr   collections.abcr   dataclassesr   typingr   rA   !torchgen.selective_build.operatorr   r	   r
   r   torchgen.modelr   r   r   r   r   rX   r   r   r    <module>r      s    " # $ !     - $F F FR		 	M		M		M 	M	 06+r   