
    aj5                        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dS )    )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d0d            Zed1d            Z	d2dZ
d3d Zd2d!Zd3d"Zd2d#Zd4d&Zd5d*Zd6d+Zd,S )7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_selectivesreturnc                 :    t                               ddi          S )Nr   Tr   from_yaml_dict     f/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/torchgen/selective_build/selector.pyget_nop_selectorz!SelectiveBuilder.get_nop_selectorF   s    ..0G/NOOOr    datadict[str, object]c           
        h d}t          |                                           }t          ||z
            dk    r8t          d                    d                    ||z
                                |                     dd          }t          |t                    st          dt          |                     d }d| v rU| d         }t          |t                    st          d	t          |                     t          d
 |D                       }i }|                     di           }t          |t                    st          dt          |                     |                                D ]\  }}	t          j        ||	          ||<   i }
|                     di           }t          |t                    st          dt          |                     |                                D ]!\  }}	d |	D             |
t#          |          <   "|                     di           }t          |t                    st          dt          |                     |                     dg           }t          |t$                    st          dt          |                     t          |          }|                     dg           }t          |t$                    st          dt          |                     t          |          }|                     dd          }t          |t                    st          dt          |                     t'          ||||
||||          S )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  4   K   | ]}t          |          V  d S Nstr).0xs     r!   	<genexpr>z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>k   s(      77!s1vv777777r    r   z%Expected 'operators' to be dict, got r   z+Expected 'kernel_metadata' to be dict, got c                ,    g | ]}t          |          S r   r*   )r,   dtypes     r!   
<listcomp>z3SelectiveBuilder.from_yaml_dict.<locals>.<listcomp>   s    &A&A&Aes5zz&A&A&Ar    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   )r#   valid_top_level_keystop_level_keysr   r&   di_listr   operators_dictkvr   kernel_metadata_dictr   r   r   r   s                   r!   r   zSelectiveBuilder.from_yaml_dictJ   s   	 
 	 
 	 
 TYY[[))~ 4455993::HH^.BBCC   
 !%)@% H H/66 	 aDI^D_D_aa   
4<(Ggt,, $LT']]LL   77w77777J	+r22.$// 	 N^8L8LNN   #((** 	G 	GDAq1@AFFIaLL#xx(92>>.55 	 ZdCW>X>XZZ   )..00 	B 	BDAq&A&Aq&A&A&AOCFF##!XX&:B??,d33 	 [FXAYAY[[   "2B77.(33 	 WnAUAUWW   ^,,"2B77.(33 	 WnAUAUWW   ^,,(,1PRW(X(X%7>> 	 =9::= =  
  !)	
 	
 		
r    config_contentsr+   c                ^    t          j        |           }t                              |          S r)   )yaml	safe_loadr   r   )rG   contentss     r!   from_yaml_strzSelectiveBuilder.from_yaml_str   s%    >/22..x888r    config_pathc                    t          |           5 }t          j        |          }t                              |          cd d d            S # 1 swxY w Y   d S r)   )openrI   rJ   r   r   )rM   frK   s      r!   from_yaml_pathzSelectiveBuilder.from_yaml_path   s    + 	=!~a((H#228<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   .AAA
allow_listis_root_operatoris_used_for_trainingc                ^    i }| D ]}|||dd||<   t                               |dd          S )NT)namerS   rT   include_all_overloads)r   r   r   )rR   rS   rT   r   ops        r!   &from_legacy_op_registration_allow_listz7SelectiveBuilder.from_legacy_op_registration_allow_list   s`     	 	 	B$4(<)-	 IbMM  ..&15 
 
 	
r    rV   c                ~    | j         rdS || j        v rdS t          |          }|| j        v o| j        |         j        S NT)r   r   r   rW   )selfrV   s     r!   is_operator_selectedz%SelectiveBuilder.is_operator_selected   sM    % 	44>!!4+D11t~%T$.*>*TTr    funcr   c                J    t          |          }|                     |          S r)   )op_name_from_native_functionr]   r\   r^   op_names      r!   is_native_function_selectedz,SelectiveBuilder.is_native_function_selected   s#    .t44((111r    c                   |                      |          sdS | j        rdS t          ddddd           }|}|| j        v r| j        |         }t	          |          }|}|| j        v r| j        |         }|j        p|j        o|j        S )NFT )rV   rS   rT   rW   r   )r]   r   r
   r   r   rT   rW   )r\   rV   not_training_oprX   base_ops        r!   !is_operator_selected_for_trainingz2SelectiveBuilder.is_operator_selected_for_training   s    ((.. 	5% 	40"!&"'
 
 
 4>!!%B+D11!4>!!nT*G& 
)Jg.J	
r    c                J    t          |          }|                     |          S r)   )r`   rh   ra   s      r!   (is_native_function_selected_for_trainingz9SelectiveBuilder.is_native_function_selected_for_training   s#    .t4455g>>>r    c                    |                      |          sdS | j        rdS || j        v r| j        |         }|j        S t	          |          }|| j        vrdS | j        |         }|j        o|j        S )NFT)r]   r   r   rS   r   rW   )r\   rV   rX   rg   s       r!   rS   z!SelectiveBuilder.is_root_operator   s    ((.. 	5% 	44>!!)-)=B&&+D11t~%%5*..*>,I1IIr    
kernel_tagr0   c                R    | j         s| j        rdS || j        v o|| j        |         v S r[   )r   r   r   )r\   rl   r0   s      r!   is_kernel_dtype_selectedz)SelectiveBuilder.is_kernel_dtype_selected   sC    % 	)K 	4 $.. :-j99	
r    rb   
kernel_key	list[str]c                   || j         vr| j        r|ng S t                      }| j         |         D ]}d}|D ]Y}|dk    rQ|                    d          d         |                    d          d         k    r|                    |           d} nZ|s(d|vrt          d          |                    d           t          |          S )zF
        Return a list of kernel keys that cover the used ops
        Fdefault/   TzMissing kernel for the model)r   r   r2   splitaddr5   r<   )r\   rb   ro   
result_setmodel_kernel_keys	key_foundkeys          r!   et_get_selected_kernelsz(SelectiveBuilder.et_get_selected_kernels  s    
 $111!%!;C::C UU
!%!8!A 	. 	.I!   9$$		#q)->-D-DS-I-I!-LLLNN3''' $IE .J..#$BCCCNN9---Jr    c                   | j         | j        d}i }| j                                        D ]\  }}|                                ||<   ||d<   | j        t          | j                  |d<   d | j                                        D             |d<   | j        |d<   t          | j	                  |d<   t          | j
                  |d<   |S )	N)r   r   r   r&   c                4    i | ]\  }}|t          |          S r   sorted)r,   rD   rE   s      r!   
<dictcomp>z,SelectiveBuilder.to_dict.<locals>.<dictcomp>3  s1     "
 "
 "
#aAvayy"
 "
 "
r    r   r   r   r   )r   r   r   r?   to_dictr   r   r   r   r   r   )r\   retr   rb   rX   s        r!   r   zSelectiveBuilder.to_dict&  s    -1-O%)%?"
 "
 	>//11 	. 	.KGR!#Ig$K' &t'7 8 8C"
 "
'+';'A'A'C'C"
 "
 "
 %)$; ! &t': ; ; &t': ; ;
r    N)r   r   )r#   r$   r   r   )rG   r+   r   r   )rM   r+   r   r   )rR   r   rS   r   rT   r   r   r   )rV   r+   r   r   )r^   r   r   r   )rl   r+   r0   r+   r   r   )rb   r+   ro   rp   r   rp   )r   r$   )__name__
__module____qualname____annotations__staticmethodr"   r   rL   rQ   rY   r]   rc   rh   rj   rS   rn   r{   r   r   r    r!   r   r      s           (''' 1000 *)))
 -,,,
 
  ('''P P P \P Z
 Z
 Z
 \Z
x 9 9 9 \9 = = = \=
 
 
 
 \
$U U U U2 2 2 2
 
 
 
4? ? ? ?J J J J
 
 
 
       <     r    r   lhsr   rhsr   c                   i }t          |                                           t          |                                          z   D ]B\  }}t          |          }||v r|t          ||                   z  }t          |          ||<   C|S r)   )r<   r?   r2   )r   r   r   tag_namedtypesdtypes_copys         r!   merge_kernel_metadatar   @  s     -/O --SYY[[0A0AA 6 6&&kk&&3x8999K$($5$5!!r    c                   t          t                    }t          |                                           t          |                                          z   D ]`}||                             |                     |g                      ||                             |                    |g                      ad |                                D             S )Nc                4    i | ]\  }}|t          |          S r   r~   )r,   rX   vals      r!   r   z,merge_et_kernel_metadata.<locals>.<dictcomp>X  s$    LLLCBsLLLr    )r   r2   r<   r3   updater8   r?   )r   r   merge_et_kernel_metadatarX   s       r!   r   r   O  s     5@4D4D388::chhjj!1!11 = = $++CGGBOO<<< $++CGGBOO<<<<LL+C+I+I+K+KLLLLr    c           
        | j         p|j         }t          | j        |j                  }t          | j        |j                  }t          | j        |j                  }t          | j        |j                  }| j	        p|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R9R!#/3?CCJ$S]CMBBI+C,?ATUUO1 6  	)NS-N " '--c.@AAN'--c.@AAN%	 	 	r    rP   r   r+   c                .    | j          d| j        j         S )Nz::)	namespacer^   rV   )rP   s    r!   r`   r`   v  s     k**QV[***r    )r   r   r   r   r   r   )r   r   r   r   r   r   )rP   r   r   r+   )
__future__r   collectionsr   collections.abcr   dataclassesr   typingr   rI   !torchgen.selective_build.operatorr   r	   r
   r   torchgen.modelr   r   r   r   r   r`   r   r    r!   <module>r      si   " " " " " " # # # # # # $ $ $ $ $ $ ! ! ! ! ! !                          .------ $_ _ _ _ _ _ _ _D	   	M 	M 	M 	M   6+ + + + + +r    