
    '}h>                     J   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  d dl!m"Z"  G d d	e      Z#d
Z$de%dee%ee%   f   fdZ& ed      Z' ed      Z(dee'gee(   f   dee'   dee(   fdZ)dee'gee(   f   dee'   dee(   fdZ*e jV                  deg e%f   ded   fd       Z,dedefdZ- ej\                  d      de%de"fd       Z/de%de0fdZ1 G d d      Z2	 d4ded ee%   de2fd!Z3	 	 d5d"ed#e0d$e0de%fd%Z4	 d6d"ed#e0d$e0d&e0de%f
d'Z5d(eeef   d#e0d$e0d&e0de%f
d)Z6d(eee   ee   eed*f   f   d#e0d$e0d&e0de%f
d+Z7d,ee%   d#e0d$e0d&e0d-e%d.e%de%fd/Z8 G d0 d1      Z9 G d2 d3ee'         Z:y)7    N)	Namespace)fieldsis_dataclass)autoEnum)AnyCallableDictGenericIterableIteratorListLiteralNoReturnOptionalSequenceSetTupleTypeVarUnion)Self)CodeTemplatec                   `    e Zd Z e       Z e       Z e       Z e       Z e       Z e       Z	y)TargetN)
__name__
__module____qualname__r   
DEFINITIONDECLARATIONREGISTRATIONANONYMOUS_DEFINITIONNAMESPACED_DEFINITIONNAMESPACED_DECLARATION     M/var/www/html/test/engine/venv/lib/python3.12/site-packages/torchgen/utils.pyr   r   *   s/    J&K6L6 F!Vr%   r   z(^|\W){}($|\W)schemareturnc                     t        j                  d|       }|t        d|        |j                         \  }}}||j	                  d      fS )Nz(\w+)(\.\w+)?\((.*)\)zUnsupported function schema: , )rematchRuntimeErrorgroupssplit)r'   mname_paramss        r&   split_name_paramsr4   =   sP    
)62Ay:6(CDDhhjOD!Vd###r%   TSfuncxsc              #   8   K   |D ]  } | |      }||  y wNr$   )r7   r8   xrs       r&   mapMayber=   M   s(      G=Gs   c              #   >   K   |D ]  } | |      E d {     y 7 wr:   r$   )r7   r8   r;   s      r&   	concatMapr?   U   s%      7s   msg_fnc              #      K   	 d  y # t         $ r]} |        }t        j                  |d      }|j                  r|j                  d    d| n|}|f|j                  dd  z   |_         d }~ww xY ww)Nz  r   
   )	Exceptiontextwrapindentargs)r@   emsgs      r&   contextrJ   ]   so      hooc4('(vv2cU#3!&&*$s%   A2	 A2	A/AA**A//A2r;   c                 D    t        dt        |       j                         )NzUnhandled type: )AssertionErrortyper   )r;   s    r&   assert_neverrN   m   s     
+DG,<,<+=>
??r%   )maxsizetemplate_fnc                 ,    t        j                  |       S r:   )r   	from_file)rP   s    r&   _read_templaterS   q   s    !!+..r%   sc                     t        j                  | j                  d            j                         }t        j                  |d      S )Nlatin1little)	byteorder)hashlibsha1encodedigestint
from_bytes)rT   rZ   s     r&   string_stable_hashr_   w   s5    <<*+224D>>$(>33r%   c                      e Zd ZU eed<   eed<   eed<   ee   ed<   dedededdfdZded	eddfd
Zdede	g e
eeeef   f   f   defdZdedede	g e
eeeef   f   f   ddfdZdede	g e
eeeef   f   f   ddfdZdddedee   de	egef   de	egeeee   f   f   dedeeeef      dee   ddfdZdededdfdZdefdZy)FileManagerinstall_dirtemplate_dirdry_run	filenamesr(   Nc                 L    || _         || _        t               | _        || _        y r:   )rb   rc   setre   rd   )selfrb   rc   rd   s       r&   __init__zFileManager.__init__   s"    &(r%   filenamecontentsc                 `   	 t        |      5 }|j                         }d d d        |k7  r[t        j                  t        j
                  j                  |      d       t        |d      5 }|j                  |       d d d        y y # 1 sw Y   jxY w# t        $ r d }Y zw xY w# 1 sw Y   y xY w)NT)exist_okw)openreadOSErrorosmakedirspathdirnamewrite)rh   rj   rk   fold_contentss        r&   _write_if_changedzFileManager._write_if_changed   s    	 h (1 vvx( |#KK1DAh$ "!" " $	( ( 	 L	 
" "s3   B BB +B$BB B! B!$B-rP   env_callablec                 X   t         j                  j                  | j                  |      } |       }t	        |t
              rLd|vr,d}|dt         j                  j                  |       z  }||d<   t        |      }|j                  |      S t	        |t              r|S t        |       y )Ngenerated_commentz@generated by torchgen/gen.pyz from )rr   rt   joinrc   
isinstancedictbasenamerS   
substitutestrrN   )rh   rP   rz   template_pathenvcommenttemplates          r&   substitute_with_templatez$FileManager.substitute_with_template   s     T%6%6Dnc4 "#->VBGG$4$4]$C#DEE+2'(%m4H&&s++S!Jr%   c                     | j                    d| }|| j                  vsJ d       | j                  j                  |       | j                  s'| j	                  ||      }| j                  ||       y y )N/zduplicate file write {filename})rP   rz   )rj   rk   )rb   re   addrd   r   ry   )rh   rj   rP   rz   substitute_outs        r&   write_with_templatezFileManager.write_with_template   s     &&'q
3t~~-P/PP-8$||!::') ; N ""H~"N r%   c                 *    | j                  |||       y r:   )r   )rh   rj   rz   s      r&   rv   zFileManager.write   s    
 	  8\Br%   )base_envitemskey_fn
num_shardsr   sharded_keysc                ,   ddi}t        |      D 	cg c]	  }	dd|	 i }
}	|g|
z   }||D ]  j                  |        D ]C  }|D ]<  |v r1t        |   t              sJ d       |   j	                         |<   8g |<   > E dt
        t        t        t           f   dt
        t        t        t           f   dd ffd}| j                  rd	}|D ]5  } ||      }t        |      |z  } ||      } ||
|   |        |||       7 |j                  d
      }|dk(  rt        |      }|d | }||d  }|D ]#  d   }| j                  | | | |fd       % | j                  j                  | j                   d| d|        y c c}	w )Nshard_id
Everythingr2   z'sharded keys in base_env must be a listintofrom_r(   c                 l    |j                         D ]   \  }}|v s
J d|        | |xx   |z  cc<   " y )Nzundeclared sharded key )r   )r   r   kvr   s       r&   	merge_envz,FileManager.write_sharded.<locals>.merge_env   sD     1L(G,CA3*GG(Q1r%   r$   .c                       S r:   r$   )shards   r&   <lambda>z+FileManager.write_sharded.<locals>.<lambda>   s    5 r%   r   )rangeupdater~   listcopyr
   r   r   rd   r_   rfindlenr   re   discardrb   )rh   rj   r   r   rz   r   r   r   
everythingishards
all_shardskeyr   itemsidr   dot_posbase_filename	extensionr   r   s          `             @r&   write_shardedzFileManager.write_sharded   s    '1,%?
+0+<(
&'Z1QC!(
 (
 !\F*
# 'X&'   	$C# $%<%c
D A@A  "'s!2E#J!#E#J$	$	Dd3i0 	c49n9M 	RV 	
 <<E 	'D,C$S)J6Ct$CfSk3'j#&	' ..%b=(mG '*WX&	 	EZ(H$$ /(I;7=	 	 -
9+F	
c(
s   Fvariable_namec           	          dj                  |dj                  d t        | j                        D                    }| j	                  ||       y)z[Write a file containing the list of all outputs which are
        generated by this script.zset({}
    {})z
    c              3   ,   K   | ]  }d |z   d z     yw)"Nr$   ).0r1   s     r&   	<genexpr>z,FileManager.write_outputs.<locals>.<genexpr>  s     Nt#*s*Ns   N)formatr}   sortedre   ry   )rh   r   rj   contents       r&   write_outputszFileManager.write_outputs  sD     $**MMNvdnn7MNN
 	x1r%   c                     t         j                  j                  | j                  t         j                  j	                  t
                    S )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.
        )rr   rt   relpathrc   ru   __file__rh   s    r&   template_dir_for_commentsz%FileManager.template_dir_for_comments  s,     wwt00"''//(2KLLr%   )r   r   r   r   __annotations__boolr   ri   ry   r	   r   r
   r   r   r   rv   r   r5   r   r]   r   r   r   r   r$   r%   r&   ra   ra      s   M3xC s T d "# " " ".6r5d3PS8nAT;U7U.V	$OO O r5d38n)<#==>	O
 
O CC r5d38n)<#==>C 
	C .2?
?
 {?

 !c"?
 sDd3i$889?
 ?
 4S>*?
 #h?
 
?
B23 2# 2$ 2M3 Mr%   ra   optionsrb   c                     t         j                  j                  | j                  d      }|r|n| j                  }t        ||| j                        S )N	templates)rb   rc   rd   )rr   rt   r}   source_pathrb   ra   rd   )r   rb   rc   s      r&   make_file_managerr     sE     77<< 3 3[AL!,+'2E2EKlGOO r%   objrF   widthc                 d    t         j                  dk\  rddlm}  || ||      S t	        | ||      S )N)   
   r   )pformat)rF   r   )sysversion_infopprintr   _pformat)r   rF   r   r   s       r&   dataclass_reprr   !  s3     7""sFE**Ce44r%   curr_indentc                    t        |       sJ dt        |               | j                  j                  }|t	        |      dz   z  }t        |       D cg c]1  }|j                  s|j                  t        | |j                        f3 }}g }|D ]  \  }}	|t	        |      z   dz   }
t        |	      rt        |	|||
      }nTt        |	t              rt        |	|||
      }n5t        |	t        t        t        f      rt!        |	|||
      }nt        |	      }|j#                  | d|         |dz  }d| j%                  |      }| d| dS c c}w )Nz%obj should be a dataclass, received: rC   = z,
())r   rM   	__class__r   r   r   reprr1   getattrr   r~   r   _format_dictr   rg   tuple_format_listappendr}   )r   rF   r   r   
class_namerw   fields_list
fields_strr1   attr_curr_indentstr_repr
indent_strbodys                 r&   r   r   /  sT    Q Ed3i[QQ''J3z?Q&&K;A#;Qa!&&AFFGC01QKQJ! 0
d #SY.2fe\BHd##D&%FHtS%01#D&%FHDzHTF!H:./0 s"J"":.D\4&"") Rs   E%$Er   c           
         ||dz   z  }g }| j                         D ]V  \  }}t        |      }t        |      rt        ||||t	        |      z         n
t        |      }|j                  | d|        X t        ||||dd      S )Nr   z: {})r   r   r   r   r   r   _format)	r   rF   r   r   	dict_reprr   r   k_reprv_strs	            r&   r   r   R  s     6A:KI

 /1a A Q{S['@Aa 	
 	F82eW-./ 9fe[#sCCr%   .c           	          ||dz   z  }| D cg c]&  }t        |      rt        ||||      n
t        |      ( }}t        | t              rdnd\  }}t        ||||||      S c c}w )NrC   )[])r   r   )r   r   r   r~   r   r   )r   rF   r   r   l	list_reprstartends           r&   r   r   f  s|     6A:K  4@?FE;/QOI   *$5:JE39fe[%EEs   +A!r   r   r   c                     d\  }}t        t        |             |k\  rd}d|z  }d|z  }d| | j                  |       }	| | |	 | S )N) r   rB   r   r*   )r   r   r}   )
r   rF   r   r   r   r   	delimitercurr_indent_strr   r   s
             r&   r   r   u  sk     "(I
4
%	+vJ	{?+,11*=DWZLse,,r%   c                       e Zd ZdZddededefdZe	 ddededd fd       Ze	defd	       Z
e	defd
       Ze	defd       ZddedefdZy)NamespaceHelpera  A 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
    namespace_strentity_name	max_levelc                 L   |j                  d      }t        |      |k  sJ d| d| d       || _        dj                  |D cg c]  }d| d
 c}      | _        dj                  t        |      D cg c]  }d| 	 c}      | _        || _        || _        y c c}w c c}w )	N::z"Codegen doesn't support more than z# level(s) of custom namespace. Got r   rB   z
namespace z {z} // namespace )	r/   r   cpp_namespace_r}   	prologue_reversed	epilogue_namespaces_entity_name_)rh   r   r   r   cpp_namespacesns         r&   ri   zNamespaceHelper.__init__  s    &,,T29,	o/	{:]^k]llmn	o,+#PAj3$7#PQ-5n-EFs#F
 *' $QFs   B5B!namespaced_entityr(   c                 r    | j                  d      }|d   }dj                  |dd       }t        |||      S )zq
        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   )r
  r   namesr   r   s        r&   from_namespaced_entityz&NamespaceHelper.from_namespaced_entity  sE     "''-Bi		%*-'[I
 	
r%   c                     | j                   S r:   )r  r   s    r&   prologuezNamespaceHelper.prologue      ~~r%   c                     | j                   S r:   )r  r   s    r&   epiloguezNamespaceHelper.epilogue  r  r%   c                     | j                   S r:   )r  r   s    r&   r   zNamespaceHelper.entity_name  s       r%   defaultc                 6    | j                   r| j                   S |S )z
        Return the namespace string from joining all the namespaces by "::" (hence no leading "::").
        Return default if namespace string is empty.
        )r  )rh   r  s     r&   get_cpp_namespacez!NamespaceHelper.get_cpp_namespace  s    
 '+&9&9t""FwFr%   N)r      )r  )r   )r   r   r   __doc__r   r]   ri   staticmethodr  propertyr  r  r   r  r$   r%   r&   r   r     s    (c ( (S ( 12

+.
	
 
 #   #   !S ! !G Gc Gr%   r   c                       e Zd ZU eeed   f   ed<   ddeee      fdZ	dede
fdZdee   fdZdd
ZdeddfdZddZedd       ZddZdd	defdZdede
fdZy)
OrderedSetNstorageiterablec                 L    |i | _         y t        j                  |      | _         y r:   )r  r   fromkeys)rh   r  s     r&   ri   zOrderedSet.__init__  s    DL==2DLr%   r   r(   c                     || j                   v S r:   r  rh   r   s     r&   __contains__zOrderedSet.__contains__  s    t||##r%   c                 H    t        | j                  j                               S r:   )iterr  keysr   s    r&   __iter__zOrderedSet.__iter__  s    DLL%%'((r%   OrderedSet[T]c                 N    | j                   j                  |j                          y r:   )r  r   )rh   r   s     r&   r   zOrderedSet.update  s    EMM*r%   c                 "    d | j                   |<   y r:   r"  r#  s     r&   r   zOrderedSet.add  s    !Tr%   c                 X    t               }| j                  j                         |_        |S r:   )r  r  r   )rh   rets     r&   r   zOrderedSet.copy  s"    '\ll'')
r%   c                  b    | d   j                         }| dd  D ]  }|j                  |        |S )Nr   rC   )r   r   )rG   r-  rT   s      r&   unionzOrderedSet.union  s6    1gllnab 	AJJqM	
r%   otherc                 .    t         j                  | |      S r:   )r  r/  rh   r0  s     r&   __or__zOrderedSet.__or__  s    e,,r%   c                 (    | j                  |       | S r:   )r   r2  s     r&   __ior__zOrderedSet.__ior__  s    Er%   c                     t        |t              r| j                  |j                  k(  S t        | j                  j	                               |k(  S r:   )r~   r  r  rg   r'  r2  s     r&   __eq__zOrderedSet.__eq__  s<    eZ(<<5==00t||((*+u44r%   r:   )r   r)  r(   N)r(   r)  )rG   r)  r(   r)  )r0  r)  r(   r)  )r   r   r   r
   r5   r   r   r   r   ri   r   r$  r   r(  r   r   r   r  r/  r3  r   r5  objectr7  r$   r%   r&   r  r    s    !WT]"##3(1+!6 3$ $t $)(1+ )+" "d "
  -_  5F 5t 5r%   r  r:   )r   P   )r   );
contextlib	functoolsrY   rr   r+   r   rE   argparser   dataclassesr   r   enumr   r   typingr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   typing_extensionsr   torchgen.code_templater   r   IDENT_REGEXr   r4   r5   r6   r=   r?   contextmanagerrJ   rN   	lru_cacherS   r]   r_   ra   r   r   r   r   r   r   r   r  r$   r%   r&   <module>rE     s      	 	 
   ,     $ # /
$T 
$  $c $eCcN&; $ CLCL8QC!,- 8A; 8A; HaS(1+-. HQK HQK  	HRW% 	(4. 	 	@H @ @ T"/ / / #/
4# 4# 4SM SMp 6:%-c] 5	55 5 		5$ 	 #	 # #  # 	 #
 	 #FD
sCx.DD D 	D
 	D(F
S	3s8U38_4
5FF F 	F
 	F-S	-- - 	-
 - 
- 	-&<G <G~,5 ,5r%   