
    YhH                       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mZ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%          &                                j'        Z(e(j'        Z) G d de          Z*dZ+dHdZ, ed          Z- ed          Z.dIdZ/dJdZ0ej1        dKd             Z2er ed!          dLd$            Zej3        dMd'            Z4dNd*Z5 G d+ d,          Z6	 dOdPd1Z7	 	 dQdRd7Z8	 dSdTd9Z9dUd<Z:dVd>Z;dWdCZ< G dD dE          Z= G dF dGee-                   Z>dS )X    )annotationsN)fieldsis_dataclass)autoEnum)Path)AnyCallableGenericLiteralNoReturnTYPE_CHECKINGTypeVar)assert_never
deprecatedSelf)CodeTemplate)	Namespace)IterableIteratorSequencec                      e Zd Z e            Z e            Z e            Z e            Z e            Z e            Z	dS )TargetN)
__name__
__module____qualname__r   
DEFINITIONDECLARATIONREGISTRATIONANONYMOUS_DEFINITIONNAMESPACED_DEFINITIONNAMESPACED_DECLARATION     `/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/torchgen/utils.pyr   r   $   sU        J$&&K466L466 DFF!TVVr$   r   z(^|\W){}($|\W)schemastrreturntuple[str, list[str]]c                    t          j        d|           }|t          d|            |                                \  }}}||                    d          fS )Nz(\w+)(\.\w+)?\((.*)\)zUnsupported function schema: , )rematchRuntimeErrorgroupssplit)r&   mname_paramss        r%   split_name_paramsr5   7   sZ    
)622AyC6CCDDDhhjjOD!Vd####r$   TSfuncCallable[[T], S | None]xsIterable[T]Iterator[S]c              #  6   K   |D ]} | |          }||V  d S Nr#   )r8   r:   xrs       r%   mapMayberA   G   s;        DGG=GGG r$   Callable[[T], Sequence[S]]c              #  6   K   |D ]} | |          E d {V  d S r>   r#   )r8   r:   r?   s      r%   	concatMaprD   O   sB        477 r$   msg_fnCallable[[], str]Iterator[None]c              #     K   	 d V  d S # t           $ rX} |             }t          j        |d          }|j        r|j        d          d| n|}|f|j        dd          z   |_         d }~ww xY w)Nz  r   
   )	Exceptiontextwrapindentargs)rE   emsgs      r%   contextrQ   W   s         fhhoc4(('(v6##c###3!&*$s   
 
A,AA''A,z*Use typing_extensions.assert_never insteadr?   r   c                J    t          dt          |           j                   )NzUnhandled type: )AssertionErrortyper   )r?   s    r%   r   r   h   s"    BQ0@BBCCCr$   template_fnr   c                *    t          j        |           S r>   )r   	from_file)rU   s    r%   _read_templaterX   m   s    !+...r$   sintc                    t          j        |                     d          d                                          }t                              |d          S )Nlatin1F)usedforsecuritylittle)	byteorder)hashlibsha1encodedigestrZ   
from_bytes)rY   ra   s     r%   string_stable_hashre   s   sD    <**EBBBIIKKD>>$(>333r$   c                  z    e Zd Zd'dZed(d
            Zd)dZd*dZd+dZd,dZ	ddd-d"Z
ddd.d#Zd/d%Zd0d&ZdS )1FileManagerinstall_dir
str | Pathtemplate_dirdry_runboolr(   Nonec                    t          |          | _        t          |          | _        t                      | _        || _        d S r>   )r   rh   rj   setfilesrk   )selfrh   rj   rk   s       r%   __init__zFileManager.__init__|   s:      ,, .. #
r$   frozenset[str]c                >    t          d | j        D                       S )Nc                6    h | ]}|                                 S r#   as_posix.0files     r%   	<setcomp>z(FileManager.filenames.<locals>.<setcomp>   s     AAAd$--//AAAr$   )	frozensetrp   rq   s    r%   	filenameszFileManager.filenames   s!    AAdjAAABBBr$   filenamecontentsr'   c                    t          |          }d }	 |                    d          }n# t          $ r Y nw xY w||k    r5|j                            dd           |                    |d           d S d S )Nzutf-8)encodingT)parentsexist_ok)r   	read_textOSErrorparentmkdir
write_text)rq   r   r   rz   old_contentss        r%   _write_if_changedzFileManager._write_if_changed   s    H~~#'	>>7>;;LL 	 	 	D	|##KdT:::OOHwO77777 $#s   * 
77rU   env_callable"Callable[[], str | dict[str, Any]]c                    t          |                                          rJ d|             | j        |z  } |            }t          |t                    rd|vrt
          dz  }	 t          t          j        d         j        p|          	                                }n+# t          t          f$ r |	                                }Y nw xY w	 |                    t                                                    }n# t          $ r
 |j        }Y nw xY wi |ddd| d| z   i}t#          |          }|                    |          }	t'          j        dd	|	t&          j        
          S t          |t,                    r|S t/          |           d S )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_absoluterj   
isinstancedictTORCHGEN_ROOTsysmodules__file__absoluteKeyErrorAttributeErrorrelative_to	REPO_ROOTrw   
ValueErrorr2   rX   
substituter,   subVERBOSEr'   r   )
rq   rU   r   template_pathenvgenerator_default	generatorgenerator_pathtemplatesubstitute_outs
             r%   substitute_with_templatez$FileManager.substitute_with_template   s   
 $$0022 	
 	
:[::	
 	
 	
 )K7lnnc4   '	"#--$1H$<!= $J/8M<M! !hjj I !.1 = = = 1 : : < <III=4%.%:%:9%E%E%N%N%P%PNN! 4 4 4%.^NNN4'QnQQKQQQ  &m44H%0055N 6 "j    c3 	JSs$   (8B! !%C	C	,C: :DDc                H   t          |          }|                                rJ d|             | j        |z  }|| j        vsJ d|             | j                            |           | j        s0|                     ||          }|                     ||           d S d S )Nfilename must be relative: zduplicate file write )rU   r   )r   r   )r   r   rh   rp   addrk   r   r   )rq   r   rU   r   rz   r   s         r%   write_with_templatezFileManager.write_with_template   s     >>''))SS+S+S+SSSS(*4:%%%'Et'E'E%%%
t| 	K!::') ;  N ""D>"JJJJJ	K 	Kr$   c                4    |                      |||           d S r>   )r   )rq   r   r   s      r%   writezFileManager.write   s"    
 	  8\BBBBBr$   N)base_envitemsr;   key_fnCallable[[T], str]#Callable[[T], dict[str, list[str]]]
num_shardsrZ   r   dict[str, Any] | Nonesharded_keysset[str]c          
     @    |                      ||||||||           d S )N)r   r   r   r   r   )write_sharded_with_template)rq   r   r   r   r   r   r   r   s           r%   write_shardedzFileManager.write_sharded   sC     	((%!% 	) 		
 		
 		
 		
 		
r$   c               H   t          |          }	|	                                rJ d|             ddi}
d t          |          D             }|
g|z   }||D ]                    |           D ]S}|D ]N|v rCt	          |         t
                    s
J d            |                                         |<   Ig |<   OTdfd}| j        rd}|D ]H} ||          }t          |          |z  } ||          } |||         |            ||
|           I|D ]@d         }| 	                    |	
                    |	j         |           |fd           A| j                            | j        |	
                    |	j         d          z             d S )Nr   shard_id
Everythingc                    g | ]	}d d| i
S )r   r3   r#   )ry   is     r%   
<listcomp>z;FileManager.write_sharded_with_template.<locals>.<listcomp>  s0     (
 (
 (
&'ZQ!(
 (
 (
r$   z'sharded keys in base_env must be a listintodict[str, list[str]]from_r(   rm   c                ~    |                                 D ]&\  }}|v sJ d|             | |xx         |z  cc<   'd S )Nzundeclared sharded key )r   )r   r   kvr   s       r%   	merge_envz:FileManager.write_sharded_with_template.<locals>.merge_env  sa      1L(((*GA*G*G(((Q1 r$   r#   c                      S r>   r#   )shards   r%   <lambda>z9FileManager.write_sharded_with_template.<locals>.<lambda>5  s     r$   )r   r   r   r   r(   rm   )r   r   rangeupdater   listcopyrk   re   r   	with_stemstemrp   discardrh   )rq   r   rU   r   r   r   r   r   r   rz   
everythingshards
all_shardskeyr   itemsidr   r   r   s           `          @r%   r   z'FileManager.write_sharded_with_template   sS    H~~##%%OO'OX'O'OOOO&0,%?
(
 (
+0+<+<(
 (
 (
 !\F*
# ' 'X&&&& 	$ 	$C# $ $%<<%eCj$77  A   "'s!2!2E#JJ!#E#JJ$	 	 	 	 	 	
 < 	E 	' 	'D&,,C$S))J6C,t$$CIfSk3'''Ij#&&&& 	 	EZ(H$$$)7X7788    	
4+dnn	=U=U=U.V.VVWWWWWr$   variable_namec                    d                     d|gd t          | j                  D             dR           }|                     ||           dS )zSWrite a file containing the list of all outputs which are generated by this script.rI   zset(c              3  F   K   | ]}d |                                  dV  dS )z    ""Nrv   rx   s     r%   	<genexpr>z,FileManager.write_outputs.<locals>.<genexpr>B  s6      LL,$--//,,,LLLLLLr$   )N)joinsortedrp   r   )rq   r   r   contents       r%   write_outputszFileManager.write_outputs;  sp    )) ML
9K9KLLL	
  
 
 	x11111r$   c                    t           j                            | j        t           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.
        )ospathrelpathrj   dirnamer   r}   s    r%   template_dir_for_commentsz%FileManager.template_dir_for_commentsH  s+     wt0"'//(2K2KLLLr$   )rh   ri   rj   ri   rk   rl   r(   rm   )r(   rs   )r   ri   r   r'   r(   rm   )rU   ri   r   r   r(   r'   )r   ri   rU   ri   r   r   r(   rm   )r   ri   r   r   r(   rm   )r   ri   r   r;   r   r   r   r   r   rZ   r   r   r   r   r(   rm   )r   ri   rU   ri   r   r;   r   r   r   r   r   rZ   r   r   r   r   r(   rm   )r   r'   r   ri   r(   rm   r(   r'   )r   r   r   rr   propertyr~   r   r   r   r   r   r   r   r   r#   r$   r%   rg   rg   {   s        	 	 	 	 C C C XC
8 
8 
8 
84 4 4 4lK K K K$C C C C +/
 
 
 
 
 
> +/<X <X <X <X <X <X|2 2 2 2M M M M M Mr$   rg   optionsr   rh   str | Path | Nonec                    t           j                            | j        d          }|r|n| j        }t          ||| j                  S )N	templates)rh   rj   rk   )r   r   r   source_pathrh   rg   rk   )r   rh   rj   s      r%   make_file_managerr   R  sO     7<< 3[AAL!,E++'2EK!   r$   P   objr	   rM   widthc                l    t           j        dk    rddlm}  || ||          S t	          | ||          S )N)   
   r   )pformat)rM   r   )r   version_infopprintr   _pformat)r   rM   r   r   s       r%   dataclass_reprr   `  sM     7""""""""wsFE***Ce4444r$   curr_indentc                    t                     sJ dt                                   j        j        }|t	          |          dz   z  } fdt                     D             }g }|D ]\  }}|t	          |          z   dz   }	t          |          rt          ||||	          }
nlt          |t                    rt          ||||	          }
nDt          |t          t          t          f          rt          ||||	          }
nt          |          }
|                    | d|
            |dz  }d|                     |          }| d| dS )	Nz%obj should be a dataclass, received: rJ   c                V    g | ]%}|j         	|j        t          |j                  f&S r#   )reprr2   getattr)ry   fr   s     r%   r   z_pformat.<locals>.<listcomp>z  s3    QQQa!&QAFGC001QQQr$   = z,
(r   )r   rT   	__class__r   lenr   r   r   r   _format_dictr   ro   tuple_format_listr   appendr   )r   rM   r   r   
class_namefields_list
fields_strr2   attr_curr_indentstr_repr
indent_strbodys   `            r%   r   r   n  s    QQQd3iiQQQQQ'J3z??Q&&KQQQQ6#;;QQQKJ! 0 0
d #SYY.2 	"fe\BBHHd## 	"#D&%FFHHtS%011 	"#D&%FFHHDzzHT..H..////s"J"":..D""4""""r$   r  dict[Any, Any]c           
     D   ||dz   z  }g }|                                  D ]n\  }}t          |          }t          |          r"t          ||||t	          |          z             nt          |          }|                    | d|            ot          ||||dd          S )Nr   z: {})r   r   r   r   r  r  _format)	r  rM   r   r   	dict_reprr   r   k_reprv_strs	            r%   r  r    s     6A:KI

 / /1a AHQ{S[['@AAAa 	
 	F--e--....9fe[#sCCCr$   &list[Any] | set[Any] | tuple[Any, ...]c                    dz   z  fd| D             }t          | t                    rdnd\  }}t          |||          S )NrJ   c                p    g | ]2}t          |          rt          |          nt          |          3S r#   )r   r   r   )ry   lr   rM   r   s     r%   r   z _format_list.<locals>.<listcomp>  sN        4@??OFE;///Q  r$   )[])r  r   )r   r   r  )r  rM   r   r   	list_reprstartends    ```   r%   r
  r
    s}     6A:K       I  *$55E:JE39fe[%EEEr$   r  	list[str]r#  r$  c                    d\  }}t          t          |                     |k    rd}d|z  }d|z  }d| |                     |           }	| | |	 | S )N) r'  rI   r  r+   )r  r   r   )
r  rM   r   r   r#  r$  	delimitercurr_indent_strr  r  s
             r%   r  r    s|     "(I
4
%%	+vJ,	,?,,11*==D,Z,,s,,,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dS )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
    r'     namespace_strr'   entity_name	max_levelrZ   r(   rm   c                L   |                     d          }t          |          |k    sJ d| d| d            || _        d                    d |D                       | _        d                    d t          |          D                       | _        || _        || _        d S )N::z"Codegen doesn't support more than z# level(s) of custom namespace. Got .rI   c                    g | ]}d | d	S )z
namespace z {r#   ry   ns     r%   r   z,NamespaceHelper.__init__.<locals>.<listcomp>  s$    #P#P#PA$7$7$7$7#P#P#Pr$   c                    g | ]}d | S )z} // namespace r#   r4  s     r%   r   z,NamespaceHelper.__init__.<locals>.<listcomp>  s!    FFF###FFFr$   )	r0   r  cpp_namespace_r   	prologue_reversed	epilogue_namespaces_entity_name_)rq   r-  r.  r/  cpp_namespacess        r%   rr   zNamespaceHelper.__init__  s     ',,T22>""i///ooo_looo 0// ,#P#P#P#P#PQQFFXn-E-EFFF
 
 *'r$   namespaced_entityc                    |                      d          }|d         }d                    |dd                   }t          |||          S )zq
        Generate helper from nested namespaces as long as class/function name. E.g.: "torch::lazy::add"
        r1  N)r-  r.  r/  )r0   r   r+  )r>  r/  namesr.  r-  s        r%   from_namespaced_entityz&NamespaceHelper.from_namespaced_entity  sW     "''--Bi		%*--'[I
 
 
 	
r$   c                    | j         S r>   )r8  r}   s    r%   prologuezNamespaceHelper.prologue  
    ~r$   c                    | j         S r>   )r:  r}   s    r%   epiloguezNamespaceHelper.epilogue  rE  r$   c                    | j         S r>   )r<  r}   s    r%   r.  zNamespaceHelper.entity_name  s      r$   defaultc                "    | j         r| j         n|S )z
        Return the namespace string from joining all the namespaces by "::" (hence no leading "::").
        Return default if namespace string is empty.
        )r7  )rq   rI  s     r%   get_cpp_namespacez!NamespaceHelper.get_cpp_namespace  s    
 '+&9Ft""wFr$   N)r'  r,  )r-  r'   r.  r'   r/  rZ   r(   rm   )r,  )r>  r'   r/  rZ   r(   r+  r   )r'  )rI  r'   r(   r'   )r   r   r   __doc__rr   staticmethodrB  r   rD  rG  r.  rK  r#   r$   r%   r+  r+    s           	( ( ( ( (&  
 
 
 
 \
    X    X ! ! ! X!G G G G G G Gr$   r+  c                  |    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dS )'
OrderedSetzdict[T, Literal[None]]storageNiterableIterable[T] | Noner(   rm   c                Z    |	i | _         d S t                              |          | _         d S r>   )rP  r   fromkeys)rq   rQ  s     r%   rr   zOrderedSet.__init__  s*    DLLL==22DLLLr$   r   r6   rl   c                    || j         v S r>   rP  rq   r   s     r%   __contains__zOrderedSet.__contains__  s    t|##r$   Iterator[T]c                N    t          | j                                                  S r>   )iterrP  keysr}   s    r%   __iter__zOrderedSet.__iter__  s    DL%%''(((r$   r   OrderedSet[T]c                D    | j                             |j                    d S r>   )rP  r   )rq   r   s     r%   r   zOrderedSet.update  s     EM*****r$   c                    d | j         |<   d S r>   rV  rW  s     r%   r   zOrderedSet.add  s    !Tr$   c                ^    t                      }| j                                        |_        |S r>   )rO  rP  r   )rq   rets     r%   r   zOrderedSet.copy!  s%    '\\l''))
r$   rN   c                 ~    | d                                          }| dd          D ]}|                    |           |S )Nr   rJ   )r   r   )rN   rb  rY   s      r%   unionzOrderedSet.union&  s@    1gllnnabb 	 	AJJqMMMM
r$   otherc                8    t                               | |          S r>   )rO  rd  rq   re  s     r%   __or__zOrderedSet.__or__-  s    e,,,r$   r   c                0    |                      |           | S r>   )r   rg  s     r%   __ior__zOrderedSet.__ior__0  s    Er$   objectc                    t          |t                    r| j        |j        k    S t          | j                                                  |k    S r>   )r   rO  rP  ro   r\  rg  s     r%   __eq__zOrderedSet.__eq__4  sD    eZ(( 	5<5=00t|((**++u44r$   r>   )rQ  rR  r(   rm   )r   r6   r(   rl   )r(   rY  )r   r^  r(   rm   )r   r6   r(   rm   )r(   r^  )rN   r^  r(   r^  )re  r^  r(   r^  )re  r^  r(   r   )re  rk  r(   rl   )r   r   r   __annotations__rr   rX  r]  r   r   r   rM  rd  rh  rj  rm  r#   r$   r%   rO  rO    s         ####3 3 3 3 3$ $ $ $) ) ) )+ + + +" " " "   
    \- - - -   5 5 5 5 5 5r$   rO  )r&   r'   r(   r)   )r8   r9   r:   r;   r(   r<   )r8   rB   r:   r;   r(   r<   )rE   rF   r(   rG   )r?   r   r(   r   )rU   r'   r(   r   )rY   r'   r(   rZ   r>   )r   r   rh   r   r(   rg   )r   r   )r   r	   rM   rZ   r   rZ   r(   r'   )r   )
r   r	   rM   rZ   r   rZ   r   rZ   r(   r'   )
r  r  rM   rZ   r   rZ   r   rZ   r(   r'   )
r  r  rM   rZ   r   rZ   r   rZ   r(   r'   )r  r%  rM   rZ   r   rZ   r   rZ   r#  r'   r$  r'   r(   r'   )?
__future__r   
contextlib	functoolsr`   r   r,   r   rL   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   r   r   r   r   IDENT_REGEXr5   r6   r7   rA   rD   contextmanagerrQ   cacherX   re   rg   r   r   r   r  r
  r  r+  rO  r#   r$   r%   <module>r}     s   " " " " " "          				 				 



  , , , , , , , ,               T T T T T T T T T T T T T T T T T T < < < < < < < < < < / / / / / /  =""""""<<<<<<<<<< X''))0 	
$ 
$ 
$ 
$ 
$T 
$ 
$ 
$  $ $ $ $ GCLLGCLL       	 	 	 	  D Z<==D D D >=D / / / /
4 4 4 4SM SM SM SM SM SM SM SMr &*
 
 
 
 
  5 5 5 5 5$ 	 #  #  #  #  #FD D D D(F F F F- - - -&BG BG BG BG BG BG BG BGJ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5r$   