
    Ph2              	       H   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZmZmZmZ  ed	       G d
 d             Zdeeee   f   deeee   f   deeee   f   fdZdeeee   f   deeee   f   deeee   f   fdZdededefdZdedefdZy)    )defaultdict)Iterable)	dataclass)DictListOptionalSetTupleN)NativeFunction)merge_debug_infomerge_operator_dictsSelectiveBuildOperatorstrip_operator_overload_nameT)frozenc            	          e Zd ZU eed<   eeedf      ed<   eee	f   ed<   eee
e   f   ed<   eee
e   f   ed<   ee   ed<   ee   ed<   eed	<   ed%d       Zedeeef   d
d fd       Zeded
d fd       Zeded
d fd       Zedee   deded
d fd       Zded
efdZded
efdZded
efdZded
efdZded
efdZdeded
efdZd ed!e
e   d
e
e   fd"Zd
eeef   fd#Zy$)&SelectiveBuilderinclude_all_operators._debug_info	operatorskernel_metadataet_kernel_metadatacustom_classesbuild_featuresinclude_all_non_op_selectivesreturnc                  0    t         j                  ddi      S )Nr   Tr   from_yaml_dict     lC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torchgen/selective_build/selector.pyget_nop_selectorz!SelectiveBuilder.get_nop_selectorA   s    ..0G/NOOr    datac           
      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>`   s     7w!s1vws   r   r   r   r   r   r   )setkeyslen	Exceptionformatjoinget
isinstancebool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_dictdtyper   r   r   r   s                    r!   r   zSelectiveBuilder.from_yaml_dictE   s6   	 
 TYY[)~ 44593::HH^.BBC 
 !%)@% H/666
4<(Ggt,,,7w77J	+r2.$///"((*DAq1@@AFIaL + #xx(92>.555(..0DAq?@&Aqes5zq&AOCF# 1 "XX&:B?,d333"2B7.(333^,"2B7.(333^,(,1PRW(X%7>>>!)	
 		
! 'Bs   H config_contentsc                 V    t        j                  |       }t        j                  |      S r(   )yaml	safe_loadr   r   )rB   contentss     r!   from_yaml_strzSelectiveBuilder.from_yaml_str   s!    >>/2..x88r    config_pathc                     t        |       5 }t        j                  |      }t        j	                  |      cd d d        S # 1 sw Y   y xY wr(   )openrD   rE   r   r   )rH   frF   s      r!   from_yaml_pathzSelectiveBuilder.from_yaml_path   s4    +!~~a(H#228< s   *A  A	
allow_listis_root_operatoris_used_for_trainingc                 X    i }| D ]  }|||dd||<    t         j                  |dd      S )NT)namerN   rO   include_all_overloads)r   r   r   )rM   rN   rO   r   ops        r!   &from_legacy_op_registration_allow_listz7SelectiveBuilder.from_legacy_op_registration_allow_list   sJ     	B$4(<)-	IbM   ..&15
 	
r    rQ   c                     | j                   ry|| j                  v ryt        |      }|| j                  v xr | j                  |   j                  S NT)r   r   r   rR   )selfrQ   s     r!   is_operator_selectedz%SelectiveBuilder.is_operator_selected   sJ    %%4>>!+D1t~~%T$..*>*T*TTr    funcc                 :    t        |      }| j                  |      S r(   )op_name_from_native_functionrX   rW   rY   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 )rQ   rN   rO   rR   r   )rX   r   r   r   r   rO   rR   )rW   rQ   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(   )r[   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   rN   r   rR   )rW   rQ   rS   rb   s       r!   rN   z!SelectiveBuilder.is_root_operator   s    ((.%%4>>!)-)=B&&&+D1t~~%*...*>,,I1I1IIr    
kernel_tagrA   c                 v    | j                   s| j                  ry|| j                  v xr || j                  |   v S rV   )r   r   r   )rW   rg   rA   s      r!   is_kernel_dtype_selectedz)SelectiveBuilder.is_kernel_dtype_selected   sC    %%)K)K $... :--j99	
r    r]   
kernel_keyc                 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addr0   r6   )rW   r]   rj   
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- "B" 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   r9   to_dictr   sortedr   r   r   r   )rW   retr   r]   rS   r>   r?   s          r!   rw   zSelectiveBuilder.to_dict  s    -1-O-O%)%?%?"
 	>>//1KGR!#Ig 2$K' &t'7'7 8C (,';';'A'A'C"
'CVaAvayL'C"
 %)$;$; ! &t':': ; &t':': ;
"
s   C5N)r   r   )__name__
__module____qualname__r5   __annotations__r   r
   r)   r   r   r   r	   staticmethodr"   objectr   rG   rL   rT   rX   r   r^   rc   re   rN   ri   ru   rw   r   r    r!   r   r      s      %S/** C//00 #tCy.))
 S$s)^,,
 H
 H $('P P A
T#v+. A
3E A
 A
F 9s 9/A 9 9 =C =,> = =
 
H
04
LP
	
 
$U U U2 24 2
c 
d 
4?^ ?PT ?JS JT J
3 
s 
t 
 s  S	  dSVi  <c6k* r    r   lhsrhsr   c                     i }t        | j                               t        |j                               z   D ]3  \  }}t        |      }||v r|t        ||         z  }t        |      ||<   5 |S r(   )r6   r9   r-   )r   r   r   tag_namedtypesdtypes_copys         r!   merge_kernel_metadatar   "  sp     -/O -SYY[0AA&&k&3x899K$($5! B 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-   r6   r.   updater3   r9   rx   )r   r   merge_et_kernel_metadatarS   vals        r!   r   r   1  s     5@4D388:chhj!11 $++CGGBO< $++CGGBO< 2 ,D+I+I+KL+KCBsO+K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    rK   c                 L    | j                    d| j                  j                   S )Nz::)	namespacerY   rQ   )rK   s    r!   r[   r[   X  s!     kk]"QVV[[M**r    )collectionsr   collections.abcr   dataclassesr   typingr   r   r   r	   r
   rD   torchgen.modelr   !torchgen.selective_build.operatorr   r   r   r   r   r)   r   r   r   r[   r   r    r!   <module>r      s   # $ ! 3 3  )  $F F FR	c49n		c49n	 
#tCy.	M	c49n		M	c49n		M 
#tCy.	M	 06+N +s +r    