
    Χgz1                        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     ]/var/www/html/ai-engine/env/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J d }d| v r8| d         }t          |t                    sJ t          d |D                       }i }|                     d	i           }t          |t                    sJ |                                D ]\  }}	t          j        ||	          ||<   i }
|                     d
i           }t          |t                    sJ |                                D ]!\  }}	d |	D             |
t          |          <   "|                     di           }t          |t                    sJ |                     dg           }t          |t                     sJ t          |          }|                     dg           }t          |t                     sJ t          |          }|                     dd          }t          |t                    sJ t#          ||||
||||          S )N>   r   
debug_infor   r   r   r   r   r   r   z!Got unexpected top level keys: {},r   Fr&   c              3  4   K   | ]}t          |          V  d S Nstr).0xs     r!   	<genexpr>z2SelectiveBuilder.from_yaml_dict.<locals>.<genexpr>e   s(      77!s1vv777777r    r   r   c                ,    g | ]}t          |          S r   r*   )r,   dtypes     r!   
<listcomp>z3SelectiveBuilder.from_yaml_dict.<locals>.<listcomp>s   s    &A&A&Aes5zz&A&A&Ar    r   r   r   r   )setkeyslen	Exceptionformatjoinget
isinstancer   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666
4<(Ggt,,,,,77w77777J	+r22.$/////"((** 	G 	GDAq1@AFFIaLL#xx(92>>.55555(..00 	B 	BDAq&A&Aq&A&A&AOCFF##!XX&:B??,d33333"2B77.(33333^,,"2B77.(33333^,,(,1PRW(X(X%7>>>>>!)	
 	
 		
r    config_contentsr+   c                ^    t          j        |           }t                              |          S r)   )yaml	safe_loadr   r   )rE   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)   )openrG   rH   r   r   )rK   frI   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)namerQ   rR   include_all_overloads)r   r   r   )rP   rQ   rR   r   ops        r!   &from_legacy_op_registration_allow_listz7SelectiveBuilder.from_legacy_op_registration_allow_list   s`     	 	 	B$4(<)-	 IbMM  ..&15 
 
 	
r    rT   c                ~    | j         rdS || j        v rdS t          |          }|| j        v o| j        |         j        S NT)r   r   r   rU   )selfrT   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[   rZ   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 )rT   rQ   rR   rU   r   )r[   r   r
   r   r   rR   rU   )rZ   rT   not_training_oprV   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^   rf   r_   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   rQ   r   rU   )rZ   rT   rV   re   s       r!   rQ   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 rY   )r   r   r   )rZ   rj   r0   s      r!   is_kernel_dtype_selectedz)SelectiveBuilder.is_kernel_dtype_selected   sC    % 	)K 	4 $.. :-j99	
r    r`   
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:   )rZ   r`   rm   
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,   rB   rC   s      r!   
<dictcomp>z,SelectiveBuilder.to_dict.<locals>.<dictcomp>  s1     "
 "
 "
#aAvayy"
 "
 "
r    r   r   r   r   )r   r   r   r=   to_dictr   r}   r   r   r   r   )rZ   retr   r`   rV   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   )rE   r+   r   r   )rK   r+   r   r   )rP   r   rQ   r   rR   r   r   r   )rT   r+   r   r   )r\   r   r   r   )rj   r+   r0   r+   r   r   )r`   r+   rm   rn   r   rn   )r   r$   )__name__
__module____qualname____annotations__staticmethodr"   r   rJ   rO   rW   r[   ra   rf   rh   rQ   rl   ry   r   r   r    r!   r   r      s           (''' 1000 *)))
 -,,,
 
  ('''P P P \P A
 A
 A
 \A
F 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,   rV   vals      r!   r~   z,merge_et_kernel_metadata.<locals>.<dictcomp>?  s$    LLLCBsLLLr    )r   r2   r:   r3   updater8   r=   )r   r   merge_et_kernel_metadatarV   s       r!   r   r   6  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   B  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    rN   r   r+   c                .    | j          d| j        j         S )Nz::)	namespacer\   rT   )rN   s    r!   r^   r^   ]  s     k**QV[***r    )r   r   r   r   r   r   )r   r   r   r   r   r   )rN   r   r   r+   )
__future__r   collectionsr   collections.abcr   dataclassesr   typingr   rG   !torchgen.selective_build.operatorr   r	   r
   r   torchgen.modelr   r   r   r   r   r^   r   r    r!   <module>r      si   " " " " " " # # # # # # $ $ $ $ $ $ ! ! ! ! ! !                          .------ $F F F F F F F FR   	M 	M 	M 	M   6+ + + + + +r    