
    Ogd@                       d dl m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Zd dl	m
Z
mZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ erd d	lmZ d d
lm Z m!Z!m"Z"  ee#      jI                         jJ                  jJ                  Z& G d de      Z'dZ(d#dZ) ed      Z* ed      Z+d$dZ,d%dZ-ej\                  d&d       Z/d'dZ0ejb                  d(d       Z2d)dZ3 G d d      Z4	 d*	 	 	 	 	 d+dZ5	 	 d,	 	 	 	 	 	 	 d-dZ6	 d.	 	 	 	 	 	 	 	 	 d/dZ7	 	 	 	 	 	 	 	 	 	 d0dZ8	 	 	 	 	 	 	 	 	 	 d1dZ9	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2dZ: G d d       Z; G d! d"ee*         Z<y)3    )annotationsN)fieldsis_dataclass)autoEnum)Path)AnyCallableGenericLiteralNoReturnTYPE_CHECKINGTypeVar)Self)CodeTemplate)	Namespace)IterableIteratorSequencec                  `    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     U/var/www/html/suriana-translation/venv/lib/python3.12/site-packages/torchgen/utils.pyr   r   #   s/    J&K6L6 F!Vr"   r   z(^|\W){}($|\W)c                    t        j                  d|       }|t        d|        |j                         \  }}}||j	                  d      fS )Nz(\w+)(\.\w+)?\((.*)\)zUnsupported function schema: , )rematchRuntimeErrorgroupssplit)schemamname_paramss        r#   split_name_paramsr0   6   sP    
)62Ay:6(CDDhhjOD!Vd###r"   TSc              #  8   K   |D ]  } | |      }||  y wNr!   )funcxsxrs       r#   mapMayber9   F   s(      G=Gs   c              #  >   K   |D ]  } | |      E d {     y 7 wr4   r!   )r5   r6   r7   s      r#   	concatMapr;   N   s%      7s   c              #     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)msg_fnemsgs      r#   contextrF   V   so      hooc4('(vv2cU#3!&&*$s%   A2	 A2	A/AA**A//A2c                D    t        dt        |       j                         )NzUnhandled type: )AssertionErrortyper   )r7   s    r#   assert_neverrJ   f   s     
+DG,<,<+=>
??r"   c                ,    t        j                  |       S r4   )r   	from_file)template_fns    r#   _read_templaterN   j   s    !!+..r"   c                    t        j                  | j                  d            j                         }t        j                  |d      S )Nlatin1little)	byteorder)hashlibsha1encodedigestint
from_bytes)srT   s     r#   string_stable_hashrZ   p   s5    <<*+224D>>$(>33r"   c                      e Zd ZU ded<   ded<   ded<   ded<   ddZdd	Z	 	 	 	 	 	 dd
Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZdd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	ddZ
ddZy)FileManagerstrinstall_dirtemplate_dirbooldry_runset[str]	filenamesc                L    || _         || _        t               | _        || _        y r4   )r^   r_   setrc   ra   )selfr^   r_   ra   s       r#   __init__zFileManager.__init__~   s"    &(r"   c                `   	 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)rf   filenamecontents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-c                t   t         j                  j                  | j                  |      } |       }t	        |t
              rd|vrzt        dz  dz  }	 t        t        j                  d   j                  xs |      j                         }	 |j                  t              j                         }i |ddd| d| z   i}t%        |      }|j'                  |      S t	        |t(              r|S t+        |       y # t        t        f$ r |j                         }Y w xY w# t         $ r |j"                  }Y w xY w)Ngenerated_commenttorchgenzgen.py__main__@zgenerated by z from )rn   rp   joinr_   
isinstancedict	REPO_ROOTr   sysmodules__file__absoluteKeyErrorAttributeErrorrelative_toas_posix
ValueErrorr-   rN   
substituter]   rJ   )	rf   rM   env_callabletemplate_pathenvgenerator_default	generatorgenerator_pathtemplates	            r#   substitute_with_templatez$FileManager.substitute_with_template   s4    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$   8C: #D :DDD76D7c                    | j                    d| }|| j                  vsJ d       | j                  j                  |       | j                  s'| j	                  ||      }| j                  ||       y y )N/zduplicate file write {filename})rM   r   )rs   rt   )r^   rc   addra   r   rw   )rf   rs   rM   r   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 r4   )r   )rf   rs   r   s      r#   rr   zFileManager.write   s    
 	  8\Br"   N)base_envc                  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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
Everythingr.   z'sharded keys in base_env must be a listc                l    |j                         D ]   \  }}|v s
J d|        | |xx   |z  cc<   " y )Nzundeclared sharded key )items)intofrom_kvsharded_keyss       r#   	merge_envz,FileManager.write_sharded.<locals>.merge_env   sD     1L(G,CA3*GG(Q1r"   r!   .c                      S r4   r!   )shards   r#   <lambda>z+FileManager.write_sharded.<locals>.<lambda>  s    5 r"   r   )r   dict[str, list[str]]r   r   returnNone)rangeupdater~   listcopyra   rZ   rfindlenr   rc   discardr^   )rf   rs   r   key_fnr   
num_shardsr   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$	$	
 <<E 	'D,C$S)J6Ct$CfSk3'j#&	' ..%b=(mG '*WX&	 	EZ(H$$ /(I;7=	 	 -
9+F	
c(
s   Ec           	         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!   ).0r-   s     r#   	<genexpr>z,FileManager.write_outputs.<locals>.<genexpr>  s     Nt#*s*Ns   N)formatr}   sortedrc   rw   )rf   variable_namers   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.
        )rn   rp   relpathr_   rq   r   rf   s    r#   template_dir_for_commentsz%FileManager.template_dir_for_comments  s,     wwt00"''//(2KLLr"   )r^   r]   r_   r]   ra   r`   r   r   )rs   r]   rt   r]   r   r   )rM   r]   r   "Callable[[], str | dict[str, Any]]r   r]   )rs   r]   rM   r]   r   r   r   r   )rs   r]   r   r   r   r   )rs   r]   r   Iterable[T]r   zCallable[[T], str]r   z#Callable[[T], dict[str, list[str]]]r   rW   r   zdict[str, Any] | Noner   rb   r   r   )r   r]   rs   r]   r   r   r   r]   )r   r   r   __annotations__rg   rw   r   r   rr   r   r   r   r!   r"   r#   r\   r\   x   s    M".P	BOO O 9	O
 
O CC 9C 
	C +/?
?
 ?

 #?
 :?
 ?
 (?
 ?
 
?
B2Mr"   r\   c                    t         j                  j                  | j                  d      }|r|n| j                  }t        ||| j                        S )N	templates)r^   r_   ra   )rn   rp   r}   source_pathr^   r\   ra   )optionsr^   r_   s      r#   make_file_managerr     sE     77<< 3 3[AL!,+'2E2EKlGOO r"   c                d    t         j                  dk\  rddlm}  || ||      S t	        | ||      S )N)   
   r   )pformat)rA   width)r   version_infopprintr   _pformat)objrA   r   r   s       r#   dataclass_reprr   )  s3     7""sFE**Ce44r"   c                   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: r>   = z,
())r   rI   	__class__r   r   r   reprr-   getattrr   r~   r   _format_dictr   re   tuple_format_listappendr}   )r   rA   r   curr_indent
class_nameru   fields_list
fields_strr-   attr_curr_indentstr_repr
indent_strbodys                 r#   r   r   7  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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   rA   r   r   	dict_reprr   r   k_reprv_strs	            r#   r   r   Z  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 )Nr>   )[])r   r   )r   r   r   r~   r   r   )r   rA   r   r   l	list_reprstartends           r#   r   r   n  s|     6A:K  4@?FE;/QOI   *$5:JE39fe[%EEs   +A!c                    d\  }}t        t        |             |k\  rd}d|z  }d|z  }d| | j                  |       }	| | |	 | S )N) r  r=   r   r%   )r   r   r}   )
r   rA   r   r   r  r  	delimitercurr_indent_strr   r   s
             r#   r   r   }  sk     "(I
4
%	+vJ	{?+,11*=DWZLse,,r"   c                      e Zd ZdZ	 d		 	 	 	 	 	 	 d
dZe	 d	 	 	 	 	 dd       Zedd       Zedd       Z	edd       Z
dd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
    c                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   r=   z
namespace z {z} // namespace )	r*   r   cpp_namespace_r}   	prologue_reversed	epilogue_namespaces_entity_name_)rf   namespace_strentity_name	max_levelcpp_namespacesns         r#   rg   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!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
  )namespaced_entityr  namesr  r  s        r#   from_namespaced_entityz&NamespaceHelper.from_namespaced_entity  sE     "''-Bi		%*-'[I
 	
r"   c                    | j                   S r4   )r  r   s    r#   prologuezNamespaceHelper.prologue      ~~r"   c                    | j                   S r4   )r  r   s    r#   epiloguezNamespaceHelper.epilogue  r  r"   c                    | j                   S r4   )r  r   s    r#   r  zNamespaceHelper.entity_name  s       r"   c                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  )rf   defaults     r#   get_cpp_namespacez!NamespaceHelper.get_cpp_namespace  s    
 '+&9&9t""FwFr"   N)r     )r  r]   r  r]   r  rW   r   r   )r%  )r  r]   r  rW   r   r
  r   )r  )r#  r]   r   r]   )r   r   r   __doc__rg   staticmethodr  propertyr  r   r  r$  r!   r"   r#   r
  r
    s     KL( (/2(DG(	(  12

+.
	
 
     ! !Gr"   r
  c                  t    e Zd ZU ded<   dddZddZddZddZddZdd	Z	e
dd
       ZddZddZddZy)
OrderedSetzdict[T, Literal[None]]storageNc                L    |i | _         y t        j                  |      | _         y r4   )r+  r   fromkeys)rf   iterables     r#   rg   zOrderedSet.__init__  s    DL==2DLr"   c                    || j                   v S r4   r+  rf   r   s     r#   __contains__zOrderedSet.__contains__  s    t||##r"   c                H    t        | j                  j                               S r4   )iterr+  keysr   s    r#   __iter__zOrderedSet.__iter__  s    DLL%%'((r"   c                N    | j                   j                  |j                          y r4   )r+  r   )rf   r   s     r#   r   zOrderedSet.update  s    EMM*r"   c                "    d | j                   |<   y r4   r0  r1  s     r#   r   zOrderedSet.add  s    !Tr"   c                X    t               }| j                  j                         |_        |S r4   )r*  r+  r   )rf   rets     r#   r   zOrderedSet.copy  s"    '\ll'')
r"   c                 b    | d   j                         }| dd  D ]  }|j                  |        |S )Nr   r>   )r   r   )rB   r:  rY   s      r#   unionzOrderedSet.union  s6    1gllnab 	AJJqM	
r"   c                .    t         j                  | |      S r4   )r*  r<  rf   others     r#   __or__zOrderedSet.__or__  s    e,,r"   c                (    | j                  |       | S r4   )r   r>  s     r#   __ior__zOrderedSet.__ior__  s    Er"   c                    t        |t              r| j                  |j                  k(  S t        | j                  j	                               |k(  S r4   )r~   r*  r+  re   r5  r>  s     r#   __eq__zOrderedSet.__eq__  s<    eZ(<<5==00t||((*+u44r"   r4   )r.  zIterable[T] | Noner   r   )r   r1   r   r`   )r   zIterator[T])r   OrderedSet[T]r   r   )r   r1   r   r   )r   rE  )rB   rE  r   rE  )r?  rE  r   rE  )r?  rE  r   r   )r?  objectr   r`   )r   r   r   r   rg   r2  r6  r   r   r   r'  r<  r@  rB  rD  r!   r"   r#   r*  r*    sI    ##3$)+"
  -5r"   r*  )r+   r]   r   ztuple[str, list[str]])r5   zCallable[[T], S | None]r6   r   r   Iterator[S])r5   zCallable[[T], Sequence[S]]r6   r   r   rG  )rC   zCallable[[], str]r   zIterator[None])r7   r   r   r   )rM   r]   r   r   )rY   r]   r   rW   r4   )r   r   r^   z
str | Noner   r\   )r   P   )r   r	   rA   rW   r   rW   r   r]   )r   )
r   r	   rA   rW   r   rW   r   rW   r   r]   )
r   zdict[Any, Any]rA   rW   r   rW   r   rW   r   r]   )
r   z&list[Any] | set[Any] | tuple[Any, ...]rA   rW   r   rW   r   rW   r   r]   )r   z	list[str]rA   rW   r   rW   r   rW   r  r]   r  r]   r   r]   )=
__future__r   
contextlib	functoolsrS   rn   r&   r   r@   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_REGEXr0   r1   r2   r9   r;   contextmanagerrF   rJ   cacherN   rZ   r\   r   r   r   r   r   r   r
  r*  r!   r"   r#   <module>rX     sG   "    	 	 
  ,   T T T " / "<< N##%,,33	
$T 
$  $ CLCL 	 	@ / /
4bM bMN 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"   