
    JTh"C                       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  S SKJr  \(       a  S S	KJr  S S
KJ r J!r!J"r"  \" \#5      RI                  5       RJ                  RJ                  r& " S S\5      r'Sr(S#S jr)\" S5      r*\" S5      r+S$S jr,S%S jr-\R\                  S&S j5       r/S'S jr0\Rb                  S(S j5       r2S)S jr3 " S S5      r4 S*     S+S jjr5  S,       S-S jjr6 S.         S/S jjr7          S0S jr8          S1S jr9              S2S jr: " S S 5      r; " S! S"\\*   5      r<g)3    )annotationsN)fieldsis_dataclass)autoEnum)Path)AnyCallableGenericLiteralNoReturnTYPE_CHECKINGTypeVar)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       F/var/www/auris/envauris/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_paramsr3   6   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<   F   s"     G=G s   	c              #  B   #    U H  nU " U5       S h  vN   M     g  N	7fr7   r   )r8   r9   r:   s      r&   	concatMapr>   N   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&   contextrI   V   sn      hooc4('(vv2cU#3!&&*$s%   A9	 A9
A6AA11A66A9c                D    [        S[        U 5      R                   35      e)NzUnhandled type: )AssertionErrortyper   )r:   s    r&   assert_neverrM   f   s     
+DG,<,<+=>
??r%   c                .    [         R                  " U 5      $ r7   )r   	from_file)template_fns    r&   _read_templaterQ   j   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)srX   s     r&   string_stable_hashr^   p   s7    <<*EBIIKD>>$(>33r%   c                     \ rS rSr% S\S'   S\S'   S\S'   S\S'   SS	 j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)FileManagerx   strinstall_dirtemplate_dirbooldry_runset[str]	filenamesc                F    Xl         X l        [        5       U l        X0l        g r7   )rc   rd   setrh   rf   )selfrc   rd   rf   s       r&   __init__FileManager.__init__~   s    &(r%   c                t    [        U5       nUR                  5       nS S S 5        UW:w  aY  [        R                  " [        R
                  R                  U5      SS9  [        US5       nUR                  U5        S S S 5        g g ! , (       d  f       Nn= f! [         a    S n Nf = f! , (       d  f       g = f)NT)exist_okw)openreadOSErrorosmakedirspathdirnamewrite)rk   filenamecontentsfold_contentss        r&   _write_if_changedFileManager._write_if_changed   s    	 h1 vvx   |#KK1DAh$! %$ $	   	 L	 
 %$s9   B BB *B)
BB B B&%B&)
B7c                   [         R                  R                  U R                  U5      nU" 5       n[	        U[
        5      (       a  SU;  a  [        S-  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      $ [	        U[(        5      (       a  U$ [+        U5        g ! [        [        4 a    UR                  5       n Nf = f! [          a    UR"                  n Nf = f)Ngenerated_commenttorchgenzgen.py__main__@zgenerated by z from )rt   rv   joinrd   
isinstancedict	REPO_ROOTr   sysmodules__file__absoluteKeyErrorAttributeErrorrelative_toas_posix
ValueErrorr0   rQ   
substituterb   rM   )	rk   rP   env_callabletemplate_pathenvgenerator_default	generatorgenerator_pathtemplates	            r&   substitute_with_template$FileManager.substitute_with_template   s:    T%6%6Dnc4  "#-$-
$:X$E!= $J/88M<M!hj 4%.%:%:9%E%N%N%PN'n-=VK=QQ &m4H&&s++S!!J' !.1 = 1 : : <I=
 " 4%.^^N4s$   =D #D1  D.-D.1E
	E
c                    U R                    SU 3nXR                  ;  d   S5       eU R                  R                  U5        U R                  (       d   U R	                  UUS9nU R                  XS9  g g )N/zduplicate file write {filename})rP   r   )ry   rz   )rc   rh   addrf   r   r}   )rk   ry   rP   r   substitute_outs        r&   write_with_templateFileManager.write_with_template   s}     &&'q
3~~-P/PP-8$||!::') ; N ""H"N r%   c                (    U R                  XU5        g r7   )r   )rk   ry   r   s      r&   rx   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)rk   ry   itemsr   r   r   r   r   s           r&   write_shardedFileManager.write_sharded   s/     	((%!% 	) 		
r%   c                 ^^ 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R                  S5      nUS:X  a  [        U5      nUS U nUUS  nU H%  mTS   nU R                  U U U 3UU4S	 j5        M'     U R                  R                  U R                   S
U SU 35        g s  sn
f )Nshard_id
Everythingr1   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 $ r7   r   )shards   r&   <lambda>9FileManager.write_sharded_with_template.<locals>.<lambda>  s    r%   r   )r   dict[str, list[str]]r   r   returnNone)rangeupdater   listcopyrf   r^   rfindlenr   rh   discardrc   )rk   ry   rP   r   r   r   r   r   r   
everythingishards
all_shardskeyr   itemsidr   dot_posbase_filename	extensionr   r   s           `             @r&   r   'FileManager.write_sharded_with_template   s    '1,%?
+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#&  ..%b=(mG '*WX&	EZ(H$$ /(I;7   	 -
9+F	
g(
s   E:c           	         SR                  USR                  S [        U R                  5       5       5      5      nU R	                  X#5        g)zSWrite a file containing the list of all outputs which are
generated by this script.zset({}
    {})z
    c              3  2   #    U  H  nS U-   S -   v   M     g7f)"Nr   ).0r0   s     r&   	<genexpr>,FileManager.write_outputs.<locals>.<genexpr>)  s     N7Mt#*s*7Ms   N)formatr   sortedrh   r}   )rk   variable_namery   contents       r&   write_outputsFileManager.write_outputs$  sB     $**MMNvdnn7MNN
 	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.
)rt   rv   relpathrd   rw   r   rk   s    r&   template_dir_for_comments%FileManager.template_dir_for_comments-  s,     wwt00"''//(2KLLr%   )rf   rh   rc   rd   )rc   rb   rd   rb   rf   re   r   r   )ry   rb   rz   rb   r   r   )rP   rb   r   "Callable[[], str | dict[str, Any]]r   rb   )ry   rb   rP   rb   r   r   r   r   )ry   rb   r   r   r   r   )ry   rb   r   Iterable[T]r   Callable[[T], str]r   #Callable[[T], dict[str, list[str]]]r   r[   r   dict[str, Any] | Noner   rg   r   r   )ry   rb   rP   rb   r   r   r   r   r   r   r   r[   r   r   r   rg   r   r   )r   rb   ry   rb   r   r   r   rb   )r   r   r   r   __annotations__rl   r}   r   r   rx   r   r   r   r   r$   r   r%   r&   r`   r`   x   sf   M".P	BOO O 9	O
 
O CC 9C 
	C +/

 

 #
 :
 
 (
 
 

> +/B
B
 B
 	B
 #B
 :B
 B
 (B
 B
 
B
H2Mr%   r`   c                    [         R                  R                  U R                  S5      nU(       a  UOU R                  n[        XU R                  S9$ )N	templates)rc   rd   rf   )rt   rv   r   source_pathrc   r`   rf   )optionsrc   rd   s      r&   make_file_managerr   7  sC     77<< 3 3[AL!,+'2E2EKGOO r%   c                \    [         R                  S:  a  SSKJn  U" XU5      $ [	        XUS9$ )N)   
   r   )pformat)rD   width)r   version_infopprintr   _pformat)objrD   r   r   s       r&   dataclass_reprr   B  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: rA   = z,
())r   rL   	__class__r   r   r   reprr0   getattrr   r   r   _format_dictr   rj   tuple_format_listappendr   )r   rD   r   curr_indent
class_namer{   fields_list
fields_strr0   attr_curr_indentstr_repr
indent_strbodys                 r&   r   r   P  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  rD   r   r  	dict_reprr   r   k_reprv_strs	            r&   r   r   s  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 )NrA   )[])r   r   )r   r   r   r   r   r  )r  rD   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  r@   r   r(   )r   r   r   )
r  rD   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 r   r@   z
namespace z {z} // namespace )	r-   r   cpp_namespace_r   	prologue_reversed	epilogue_namespaces_entity_name_)rk   namespace_strentity_name	max_levelcpp_namespacesns         r&   rl   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"  r   N)r)  r*  r+  )r-   r   r   )namespaced_entityr+  namesr*  r)  s        r&   from_namespaced_entity&NamespaceHelper.from_namespaced_entity  sC     "''-Bi		%*-'I
 	
r%   c                    U R                   $ r7   )r$  r   s    r&   prologueNamespaceHelper.prologue      ~~r%   c                    U R                   $ r7   )r&  r   s    r&   epilogueNamespaceHelper.epilogue  r7  r%   c                    U R                   $ r7   )r(  r   s    r&   r*  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#  )rk   defaults     r&   get_cpp_namespace!NamespaceHelper.get_cpp_namespace  s    
 '+&9&9t""FwFr%   )r#  r(  r&  r'  r$  N)r     )r)  rb   r*  rb   r+  r[   r   r   )rA  )r0  rb   r+  r[   r   r   r   )r  )r>  rb   r   rb   )r   r   r   r   __doc__rl   staticmethodr2  propertyr5  r9  r*  r?  r$   r   r%   r&   r   r     s     KL( (/2(DG(	(  12

+.
	
 
     ! !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 r7   )rG  r   fromkeys)rk   iterables     r&   rl   OrderedSet.__init__  s    DL==2DLr%   c                    XR                   ;   $ r7   rG  rk   r   s     r&   __contains__OrderedSet.__contains__  s    ||##r%   c                H    [        U R                  R                  5       5      $ r7   )iterrG  keysr   s    r&   __iter__OrderedSet.__iter__  s    DLL%%'((r%   c                N    U R                   R                  UR                   5        g r7   )rG  r   )rk   r   s     r&   r   OrderedSet.update  s    EMM*r%   c                "    S U R                   U'   g r7   rM  rN  s     r&   r   OrderedSet.add  s    !Tr%   c                X    [        5       nU R                  R                  5       Ul        U$ r7   )rF  rG  r   )rk   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   rA   )r   r   )rE   r[  r]   s      r&   unionOrderedSet.union  s1    1gllnabAJJqM 
r%   c                ,    [         R                  X5      $ r7   )rF  r^  rk   others     r&   __or__OrderedSet.__or__  s    ,,r%   c                (    U R                  U5        U $ r7   )r   ra  s     r&   __ior__OrderedSet.__ior__  s    Er%   c                    [        U[        5      (       a  U R                  UR                  :H  $ [        U R                  R	                  5       5      U:H  $ r7   )r   rF  rG  rj   rS  ra  s     r&   __eq__OrderedSet.__eq__  s?    eZ((<<5==00t||((*+u44r%   rM  r7   )rJ  zIterable[T] | Noner   r   )r   r4   r   re   )r   zIterator[T])r   OrderedSet[T]r   r   )r   r4   r   r   )r   rk  )rE   rk  r   rk  )rb  rk  r   rk  )rb  rk  r   r   )rb  objectr   re   )r   r   r   r   r   rl   rO  rT  r   r   r   rC  r^  rc  rf  ri  r$   r   r%   r&   rF  rF    sI    ##3$)+"
  -5r%   rF  )r.   rb   r   ztuple[str, list[str]])r8   zCallable[[T], S | None]r9   r   r   Iterator[S])r8   zCallable[[T], Sequence[S]]r9   r   r   rm  )rF   zCallable[[], str]r   zIterator[None])r:   r   r   r   )rP   rb   r   r   )r]   rb   r   r[   r7   )r   r   rc   z
str | Noner   r`   )r   P   )r   r	   rD   r[   r   r[   r   rb   )r   )
r   r	   rD   r[   r   r[   r  r[   r   rb   )
r  zdict[Any, Any]rD   r[   r   r[   r  r[   r   rb   )
r  z&list[Any] | set[Any] | tuple[Any, ...]rD   r[   r   r[   r  r[   r   rb   )r  z	list[str]rD   r[   r   r[   r  r[   r  rb   r  rb   r   rb   )=
__future__r   
contextlib	functoolsrW   rt   r)   r   rC   dataclassesr   r   enumr   r   pathlibr   typingr	   r
   r   r   r   r   r   typing_extensionsr   torchgen.code_templater   argparser   collections.abcr   r   r   r   r   parentr   r   IDENT_REGEXr3   r4   r5   r<   r>   contextmanagerrI   rM   cacherQ   r^   r`   r   r   r   r   r  r  r   rF  r   r%   r&   <module>r~     sG   "    	 	 
  ,   T T T " / "<< N##%,,33	
$T 
$  $ CLCL 	 	@ / /
4{M {M@ 37%/ 5	55 5 		5$ 	 #	 # #  # 	 #
 	 #FD
DD D 	D
 	D(F
0FF F 	F
 	F--- - 	-
 - 
- 	-&>G >GB,5 ,5r%   