
    9iH                        S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
Jr  S SKJrJr  S SKJr  S SKJrJrJrJrJrJrJr  S SKJrJrJr  S SKJr  \(       a  S S	KJ r   S S
K!J"r"J#r#J$r$  \" \%5      RM                  5       RN                  r(\(RN                  r) " S S\5      r*Sr+S$S jr,\" S5      r-\" S5      r.S%S jr/S&S jr0\Rb                  S'S j5       r2\(       a  \" S5      S(S j5       r\Rf                  S)S j5       r4S*S jr5 " S S5      r6 S+     S,S jjr7  S-       S.S jjr8 S/         S0S jjr9          S1S jr:          S2S jr;              S3S jr< " S  S!5      r= " S" S#\\-   5      r>g)4    )annotationsN)fieldsis_dataclass)autoEnum)Path)AnyCallableGenericLiteralNoReturnTYPE_CHECKINGTypeVar)assert_never
deprecatedSelf)CodeTemplate)	Namespace)IterableIteratorSequencec                  h    \ rS rSr\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r	\" 5       r
Srg)Target$    N)__name__
__module____qualname____firstlineno__r   
DEFINITIONDECLARATIONREGISTRATIONANONYMOUS_DEFINITIONNAMESPACED_DEFINITIONNAMESPACED_DECLARATION__static_attributes__r       N/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/torchgen/utils.pyr   r   $   s/    J&K6L6 F!Vr'   r   z(^|\W){}($|\W)c                    [         R                  " SU 5      nUc  [        SU  35      eUR                  5       u  p#nX$R	                  S5      4$ )Nz(\w+)(\.\w+)?\((.*)\)zUnsupported function schema: , )rematchRuntimeErrorgroupssplit)schemamname_paramss        r(   split_name_paramsr5   7   sL    
)62Ay:6(CDDhhjODVd###r'   TSc              #  @   #    U H  nU " U5      nUc  M  Uv   M     g 7fNr   )funcxsxrs       r(   mapMayber>   G   s"     G=G s   	c              #  B   #    U H  nU " U5       S h  vN   M     g  N	7fr9   r   )r:   r;   r<   s      r(   	concatMapr@   O   s     7 s   
c              #     #     S v   g ! [          ac  nU " 5       n[        R                  " US5      nUR                  (       a  UR                  S    SU 3OUnU4UR                  SS  -   Ul        e S nAff = f7f)Nz  r   
   )	Exceptiontextwrapindentargs)msg_fnemsgs      r(   contextrK   W   sn      hooc4('(vv2cU#3!&&*$s%   A9	 A9
A6AA11A66A9z*Use typing_extensions.assert_never insteadc                D    [        S[        U 5      R                   35      e)NzUnhandled type: )AssertionErrortyper   )r<   s    r(   r   r   h   s     /Q0@0@/ABCCr'   c                .    [         R                  " U 5      $ r9   )r   	from_file)template_fns    r(   _read_templaterR   m   s    !!+..r'   c                    [         R                  " U R                  S5      SS9R                  5       n[        R                  USS9$ )Nlatin1F)usedforsecuritylittle)	byteorder)hashlibsha1encodedigestint
from_bytes)srY   s     r(   string_stable_hashr_   s   s7    <<*EBIIKD>>$(>33r'   c                  
   \ rS rSr        SS jr\SS j5       rSS jr      SS jr        SS jr	      SS jr
SS	.               SS
 jjrSS	.                 SS jjrSS jrSS jrSrg)FileManager{   c                n    [        U5      U l        [        U5      U l        [        5       U l        X0l        g r9   )r   install_dirtemplate_dirsetfilesdry_run)selfrd   re   rh   s       r(   __init__FileManager.__init__|   s,      , . #
r'   c                r    [        U R                   Vs1 s H  oR                  5       iM     sn5      $ s  snf r9   )	frozensetrg   as_posix)ri   files     r(   	filenamesFileManager.filenames   s'    djjAjd--/jABBAs   4c                    [        U5      nS n UR                  SS9nX$:w  a+  UR                  R	                  SSS9  UR                  USS9  g g ! [         a     N=f = f)Nzutf-8)encodingT)parentsexist_ok)r   	read_textOSErrorparentmkdir
write_text)ri   filenamecontentsro   old_contentss        r(   _write_if_changedFileManager._write_if_changed   sm    H~#'	>>7>;L #KKdT:OOHwO7 $  		s   A 
AAc                   [        U5      R                  5       (       a
   SU 35       eU R                  U-  nU" 5       n[        U[        5      (       a  SU;  a|  [
        S-  n [        [        R                  S   R                  =(       d    U5      R                  5       n UR                  [        5      R                  5       n0 UESSSU SU 3-   0En[#        U5      nUR%                  U5      n	[&        R(                  " SS	U	[&        R*                  S
9$ [        U[,        5      (       a  U$ [/        U5        g ! [        [        4 a    UR                  5       n Nf = f! [         a    UR                   n Nf = f)Nztemplate_fn must be relative: generated_commentzgen.py__main__@zgenerated by z from z
                (""")\n+             # match triple quotes
                (
                    (\s*@.+\n)*     # match decorators if any
                    \s*(class|def)  # match class/function definition
                )
                z\g<1>\n\n\g<2>)flags)r   is_absolutere   
isinstancedictTORCHGEN_ROOTsysmodules__file__absoluteKeyErrorAttributeErrorrelative_to	REPO_ROOTrn   
ValueErrorr2   rR   
substituter+   subVERBOSEstrr   )
ri   rQ   env_callabletemplate_pathenvgenerator_default	generatorgenerator_pathtemplatesubstitute_outs
             r(   substitute_with_template$FileManager.substitute_with_template   s   
 $0022 	
,[M:	
2 ))K7nc4  "#-$1H$<!= $J/88M<M!hj 4%.%:%:9%E%N%N%PN'n-=VK=QQ &m4H%005N 66 "jj  c3JSG !.1 = 1 : : <I=
 " 4%.^^N4s$   $=D: "#E  : EE E98E9c                @   [        U5      nUR                  5       (       a
   SU 35       eU R                  U-  nX@R                  ;  d
   SU 35       eU R                  R	                  U5        U R
                  (       d   U R                  UUS9nU R                  XES9  g g )Nfilename must be relative: zduplicate file write )rQ   r   )r{   r|   )r   r   rd   rg   addrh   r   r~   )ri   r{   rQ   r   ro   r   s         r(   write_with_templateFileManager.write_with_template   s     >''))S-H
+SS)(*::%E)>tf'EE%

t||!::') ; N ""D"J r'   c                (    U R                  XU5        g r9   )r   )ri   r{   r   s      r(   writeFileManager.write   s    
 	  \Br'   N)base_envc               0    U R                  UUUUUUUUS9  g )N)key_fnr   
num_shardsr   sharded_keys)write_sharded_with_template)ri   r{   itemsr   r   r   r   r   s           r(   write_shardedFileManager.write_sharded   s/     	((%!% 	) 		
r'   c               V  ^^ [        U5      n	U	R                  5       (       a
   SU 35       eSS0n
[        U5       Vs/ s H
  nSSU 30PM     nnU
/U-   nUb  U H  mTR                  U5        M     T HN  nU HE  mUT;   a7  [	        TU   [
        5      (       d   S5       eTU   R                  5       TU'   M@  / TU'   MG     MP     S	U4S jjnU R                  (       a  SnU H6  nU" U5      n[        U5      U-  nU" U5      nU" UU   U5        U" U
U5        M8     U H<  mTS   nU R                  U	R                  U	R                   U 35      UU4S j5        M>     U R                  R                  U R                  U	R                  U	R                   S35      -  5        g s  snf )
Nr   shard_id
Everythingr3   z'sharded keys in base_env must be a listc                p   > UR                  5        H!  u  p#UT;   d
   SU 35       eX==   U-  ss'   M#     g )Nzundeclared sharded key )r   )intofrom_kvr   s       r(   	merge_env:FileManager.write_sharded_with_template.<locals>.merge_env  s;    L(G,CA3*GG(1 &r'   r   c                    > T $ r9   r   )shards   r(   <lambda>9FileManager.write_sharded_with_template.<locals>.<lambda>5  s    r'   )r   dict[str, list[str]]r   r   returnNone)r   r   rangeupdater   listcopyrh   r_   r   	with_stemstemrg   discardrd   )ri   r{   rQ   r   r   r   r   r   r   ro   
everythingishards
all_shardskeyr   itemsidr   r   r   s           `           @r(   r   'FileManager.write_sharded_with_template   s    H~##%%O)DXJ'OO%&0,%?
+0+<(
+<aZ1QC!+< 	 (
 !\F*
#X& $  C#%<%eCj$77 A7 "'s!2E#J!#E#J $  	
 <<ED,C$S)J6Ct$CfSk3'j#&   EZ(H$$$))XJ78   	

4++dnn		{*=U.VVW[(
s   F&c                    SR                  SU/S [        U R                  5       5       QSP75      nU R                  X#5        g)zSWrite a file containing the list of all outputs which are generated by this script.rB   zset(c              3  J   #    U  H  nS UR                  5        S3v   M     g7f)z    ""N)rn   ).0ro   s     r(   	<genexpr>,FileManager.write_outputs.<locals>.<genexpr>B  s"     L9KE$--/*!,9Ks   !#)N)joinsortedrg   r~   )ri   variable_namer{   contents       r(   write_outputsFileManager.write_outputs;  sN    )) M

9KL	
 
 	x1r'   c                    [         R                  R                  U R                  [         R                  R	                  [
        5      5      $ )z
This needs to be deterministic. The template dir is an absolute path
that varies across builds. So, just use the path relative to this file,
which will point to the codegen source but will be stable.
)ospathrelpathre   dirnamer   ri   s    r(   template_dir_for_comments%FileManager.template_dir_for_commentsH  s,     wwt00"''//(2KLLr'   )rh   rg   rd   re   )rd   
str | Pathre   r   rh   boolr   r   )r   zfrozenset[str])r{   r   r|   r   r   r   )rQ   r   r   "Callable[[], str | dict[str, Any]]r   r   )r{   r   rQ   r   r   r   r   r   )r{   r   r   r   r   r   )r{   r   r   Iterable[T]r   Callable[[T], str]r   #Callable[[T], dict[str, list[str]]]r   r\   r   dict[str, Any] | Noner   set[str]r   r   )r{   r   rQ   r   r   r   r   r   r   r   r   r\   r   r   r   r   r   r   )r   r   r{   r   r   r   r   r   )r   r   r   r   rj   propertyrp   r~   r   r   r   r   r   r   r   r&   r   r'   r(   ra   ra   {   s   		 !	 		
 
	 C C
844 94 
	4lKK  K 9	K
 
K$CC 9C 
	C +/

 

 #
 :
 
 (
 
 

> +/<X<X  <X 	<X #<X :<X <X (<X <X 
<X|2Mr'   ra   c                    [         R                  R                  U R                  S5      nU(       a  UOU R                  n[        UUU R                  S9$ )N	templates)rd   re   rh   )r   r   r   source_pathrd   ra   rh   )optionsrd   re   s      r(   make_file_managerr   R  sG     77<< 3 3[AL!,+'2E2EK! r'   c                \    [         R                  S:  a  SSKJn  U" XU5      $ [	        XUS9$ )N)   
   r   )pformat)rF   width)r   version_infopprintr   _pformat)objrF   r   r   s       r(   dataclass_reprr   `  s/     7""sE**Ce44r'   c                   [        U 5      (       d   S[        U 5       35       eU R                  R                  nU[	        U5      S-   -  n[        U 5       Vs/ s H6  oUR                  (       d  M  UR                  [        XR                  5      4PM8     nn/ nU H  u  pU[	        U5      -   S-   n
[        U	5      (       a  [        XX*5      nOZ[        U	[        5      (       a  [        XX*5      nO8[        U	[        [        [        45      (       a  [!        XX*5      nO[        U	5      nUR#                  U SU 35        M     US-  nSU 3R%                  U5      nU SU S3$ s  snf )Nz%obj should be a dataclass, received: rC   = z,
(r   )r   rN   	__class__r   lenr   reprr2   getattrr   r   r   _format_dictr   rf   tuple_format_listappendr   )r   rF   r   curr_indent
class_nameffields_list
fields_strr2   attr_curr_indentstr_repr
indent_strbodys                 r(   r   r   n  sM    Q Ed3i[QQ''J3z?Q&&K;A#;Q;a&&1AFFGC01;KQJ!
 #SY.2eBHd###D%FHtS%011#D%FHDzHTF!H:./ " s"J"":.D\4&"") Rs   E#0%E#c           
     
   X1S-   -  n/ nU R                  5        HY  u  pV[        U5      n[        U5      (       a  [        XaX#[	        U5      -   5      O
[        U5      nUR                  U SU 35        M[     [        XAX#SS5      $ )Nr   z: {})r   r  r   r   r  r
  _format)	r  rF   r   r  	dict_reprr   r   k_reprv_strs	            r(   r  r    s     A:KI

a A QS['@Aa 	
 	F82eW-.  9e#sCCr'   c           	         X1S-   -  nU  Vs/ s H*  n[        U5      (       a  [        XAX#5      O
[        U5      PM,     nn[        U [        5      (       a  SOSu  pg[        XQX#Xg5      $ s  snf )NrC   )[])r  r   )r   r   r  r   r   r  )r  rF   r   r  l	list_reprstartends           r(   r	  r	    sv     A:K A 4@??E/QO    *$55:JE9e%EEs   1A'c                    Su  pg[        [        U 5      5      U:  a  SnSU-  nSU-  nSU U 3R                  U 5      n	U U U	 U 3$ )N) r$  rB   r  r*   )r  r  r   )
r  rF   r   r  r!  r"  	delimitercurr_indent_strr  r  s
             r(   r  r    si     "(I
4
%	+vJ	{?+,11*=DWZLse,,r'   c                      \ rS rSrSr  S       SS jjr\ S     SS jj5       r\SS j5       r	\SS j5       r
\SS j5       rSSS jjrS	rg
)NamespaceHelperi  zA helper for constructing the namespace open and close strings for a nested set of namespaces.

e.g. for namespace_str torch::lazy,

prologue:
namespace torch {
namespace lazy {

epilogue:
} // namespace lazy
} // namespace torch
c                T   UR                  S5      n[        U5      U::  d   SU SU S35       eXl        SR                  U Vs/ s H	  nSU S3PM     sn5      U l        SR                  [        U5       Vs/ s H  nSU 3PM
     sn5      U l        X@l        X l        g s  snf s  snf )	N::z"Codegen doesn't support more than z# level(s) of custom namespace. Got .rB   z
namespace z {z} // namespace )	r/   r  cpp_namespace_r   	prologue_reversed	epilogue_namespaces_entity_name_)ri   namespace_strentity_name	max_levelcpp_namespacesns         r(   rj   NamespaceHelper.__init__  s     ',,T2>"i/ 	
0;^_l^mmno	
/ ,#PAj3$7#PQ-5n-EF-Es#-EF
 *' $QFs   B 8B%c                j    U R                  S5      nUS   nSR                  USS 5      n[        XCUS9$ )za
Generate helper from nested namespaces as long as class/function name. E.g.: "torch::lazy::add"
r*  N)r2  r3  r4  )r/   r   r(  )namespaced_entityr4  namesr3  r2  s        r(   from_namespaced_entity&NamespaceHelper.from_namespaced_entity  sC     "''-Bi		%*-'I
 	
r'   c                    U R                   $ r9   )r-  r   s    r(   prologueNamespaceHelper.prologue      ~~r'   c                    U R                   $ r9   )r/  r   s    r(   epilogueNamespaceHelper.epilogue  rA  r'   c                    U R                   $ r9   )r1  r   s    r(   r3  NamespaceHelper.entity_name  s       r'   c                @    U R                   (       a  U R                   $ U$ )z
Return the namespace string from joining all the namespaces by "::" (hence no leading "::").
Return default if namespace string is empty.
)r,  )ri   defaults     r(   get_cpp_namespace!NamespaceHelper.get_cpp_namespace  s    
 '+&9&9t""FwFr'   )r,  r1  r/  r0  r-  N)r$     )r2  r   r3  r   r4  r\   r   r   )rK  )r:  r   r4  r\   r   r(  r   )r$  )rH  r   r   r   )r   r   r   r   __doc__rj   staticmethodr<  r   r?  rC  r3  rI  r&   r   r'   r(   r(  r(    s      	(( ( 	(
 
(&  


 

 
     ! !G Gr'   r(  c                      \ rS rSr% S\S'   SSS jjrSS jrSS jrSS jrSS	 jr	SS
 jr
\SS j5       rSS jrSS jrSS jrSrg)
OrderedSeti  zdict[T, Literal[None]]storageNc                N    Uc  0 U l         g [        R                  U5      U l         g r9   )rP  r   fromkeys)ri   iterables     r(   rj   OrderedSet.__init__  s    DL==2DLr'   c                    XR                   ;   $ r9   rP  ri   r   s     r(   __contains__OrderedSet.__contains__  s    ||##r'   c                H    [        U R                  R                  5       5      $ r9   )iterrP  keysr   s    r(   __iter__OrderedSet.__iter__  s    DLL%%'((r'   c                N    U R                   R                  UR                   5        g r9   )rP  r   )ri   r   s     r(   r   OrderedSet.update  s    EMM*r'   c                "    S U R                   U'   g r9   rV  rW  s     r(   r   OrderedSet.add  s    !Tr'   c                X    [        5       nU R                  R                  5       Ul        U$ r9   )rO  rP  r   )ri   rets     r(   r   OrderedSet.copy!  s"    '\ll'')
r'   c                 f    U S   R                  5       nU SS   H  nUR                  U5        M     U$ )Nr   rC   )r   r   )rG   rd  r^   s      r(   unionOrderedSet.union&  s1    1gllnabAJJqM 
r'   c                ,    [         R                  X5      $ r9   )rO  rg  ri   others     r(   __or__OrderedSet.__or__-  s    ,,r'   c                (    U R                  U5        U $ r9   )r   rj  s     r(   __ior__OrderedSet.__ior__0  s    Er'   c                    [        U[        5      (       a  U R                  UR                  :H  $ [        U R                  R	                  5       5      U:H  $ r9   )r   rO  rP  rf   r\  rj  s     r(   __eq__OrderedSet.__eq__4  s?    eZ((<<5==00t||((*+u44r'   rV  r9   )rS  zIterable[T] | Noner   r   )r   r6   r   r   )r   zIterator[T])r   OrderedSet[T]r   r   )r   r6   r   r   )r   rt  )rG   rt  r   rt  )rk  rt  r   rt  )rk  rt  r   r   )rk  objectr   r   )r   r   r   r   __annotations__rj   rX  r]  r   r   r   rM  rg  rl  ro  rr  r&   r   r'   r(   rO  rO    sI    ##3$)+"
  -5r'   rO  )r0   r   r   ztuple[str, list[str]])r:   zCallable[[T], S | None]r;   r   r   Iterator[S])r:   zCallable[[T], Sequence[S]]r;   r   r   rw  )rH   zCallable[[], str]r   zIterator[None])r<   r   r   r   )rQ   r   r   r   )r^   r   r   r\   r9   )r   r   rd   zstr | Path | Noner   ra   )r   P   )r   r	   rF   r\   r   r\   r   r   )r   )
r   r	   rF   r\   r   r\   r  r\   r   r   )
r  zdict[Any, Any]rF   r\   r   r\   r  r\   r   r   )
r  z&list[Any] | set[Any] | tuple[Any, ...]rF   r\   r   r\   r  r\   r   r   )r  z	list[str]rF   r\   r   r\   r  r\   r!  r   r"  r   r   r   )?
__future__r   
contextlib	functoolsrX   r   r+   r   rE   dataclassesr   r   enumr   r   pathlibr   typingr	   r
   r   r   r   r   r   typing_extensionsr   r   r   torchgen.code_templater   argparser   collections.abcr   r   r   r   r   rx   r   r   r   IDENT_REGEXr5   r6   r7   r>   r@   contextmanagerrK   cacherR   r_   ra   r   r   r   r  r	  r  r(  rO  r   r'   r(   <module>r     sn   "    	 	 
  ,   T T T < < / "<< X'')00  	
$T 
$  $ CLCL 	 	  <=D >D / /
4SM SMr &*

"
 
  5	55 5 		5$ 	 #	 # #  # 	 #
 	 #FD
DD D 	D
 	D(F
0FF F 	F
 	F--- - 	-
 - 
- 	-&BG BGJ,5 ,5r'   