
    Χg@                       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mZmZmZ d dlmZ d dlmZ erd d	l m!Z!  ee"          #                                j$        j$        Z% G d
 de          Z&dZ'dGdZ( ed          Z) ed          Z*dHdZ+dIdZ,ej-        dJd            Z.dKd"Z/ ej0        d#          dLd&            Z1dMd)Z2 G d* d+          Z3	 dNdOd0Z4	 	 dPdQd6Z5	 dRdSd8Z6dTd;Z7dUd=Z8dVdBZ9 G dC dD          Z: G dE dFee)                   Z;dS )W    )annotationsN)fieldsis_dataclass)autoEnum)Path)
AnyCallableGenericIterableIteratorLiteralNoReturnSequenceTYPE_CHECKINGTypeVar)Self)CodeTemplate)	Namespacec                      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     J/var/www/html/ai-engine/env/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_paramsr3   @   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!   )r6   r8   xrs       r#   mapMayber?   P   s;        DGG=GGG r"   Callable[[T], Sequence[S]]c              #  6   K   |D ]} | |          E d {V  d S r<   r!   )r6   r8   r=   s      r#   	concatMaprB   X   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)rC   emsgs      r#   contextrO   `   s         fhhoc4(('(v6##c###3!&*$s   
 
A,AA''A,r=   r   c                J    t          dt          |           j                   )NzUnhandled type: )AssertionErrortyper   )r=   s    r#   assert_neverrS   p   s"    
>DGG,<>>
?
??r"   )maxsizetemplate_fnr   c                *    t          j        |           S r<   )r   	from_file)rU   s    r#   _read_templaterX   t   s    !+...r"   sintc                    t          j        |                     d                                                    }t                              |d          S )Nlatin1little)	byteorder)hashlibsha1encodedigestrZ   
from_bytes)rY   r`   s     r#   string_stable_hashrd   z   s?    <**++2244D>>$(>3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dS ),FileManagerr%   install_dirtemplate_dirbooldry_runset[str]	filenamesr&   Nonec                V    || _         || _        t                      | _        || _        d S r<   )rg   rh   setrl   rj   )selfrg   rh   rj   s       r#   __init__zFileManager.__init__   s(    &(r"   filenamecontentsc                   	 t          |          5 }|                                }d d d            n# 1 swxY w Y   n# t          $ r d }Y nw xY w||k    rst          j        t          j                            |          d           t          |d          5 }|                    |           d d d            d S # 1 swxY w Y   d S d S )NT)exist_okw)openreadOSErrorosmakedirspathdirnamewrite)rp   rr   rs   fold_contentss        r#   _write_if_changedzFileManager._write_if_changed   sP   	 h (1 vvxx( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 	  	  	 LLL	 |##K11DAAAAh$$ "!!!" " " " " " " " " " " " " " " " " " $#s9   > 2> 6> 6> AAB<<C C rU   env_callable"Callable[[], str | dict[str, Any]]c                   t           j                            | j        |          } |            }t	          |t
                    rd|vrt          dz  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%          |          }|                    |          S t	          |t(                    r|S t+          |           d S )Ngenerated_commenttorchgenzgen.py__main__@zgenerated by z from )rz   r|   joinrh   
isinstancedict	REPO_ROOTr   sysmodules__file__absoluteKeyErrorAttributeErrorrelative_toas_posix
ValueErrorr0   rX   
substituter%   rS   )	rp   rU   r   template_pathenvgenerator_default	generatorgenerator_pathtemplates	            r#   substitute_with_templatez$FileManager.substitute_with_template   s    T%6DDlnnc4   	"#--$-
$:X$E!= $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&&s+++S!! 	Js$   8B %B87B8<,C) )C=<C=c                    | j          d| }|| j        vs
J d            | j                            |           | j        s0|                     ||          }|                     ||           d S d S )N/zduplicate file write {filename})rU   r   )rr   rs   )rg   rl   addrj   r   r   )rp   rr   rU   r   substitute_outs        r#   write_with_templatezFileManager.write_with_template   s     &3333t~---/P---8$$$| 	O!::') ;  N ""H~"NNNNN	O 	Or"   c                4    |                      |||           d S r<   )r   )rp   rr   r   s      r#   r~   zFileManager.write   s"    
 	  8\BBBBBr"   N)base_envitemsr9   key_fnCallable[[T], str]#Callable[[T], dict[str, list[str]]]
num_shardsrZ   r   dict[str, Any] | Nonesharded_keysc                  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k    rt          |          }|d |         }||d          }|
D ]*d         }| 	                    | | | |fd           +| j
                            | j         d| d|            d S )Nshard_id
Everythingc                    g | ]	}d d| i
S )r   r1   r!   ).0is     r#   
<listcomp>z-FileManager.write_sharded.<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.<locals>.merge_env   sa      1L(((*GA*G*G(((Q1 r"   r!   .c                      S r<   r!   )shards   r#   <lambda>z+FileManager.write_sharded.<locals>.<lambda>  s    5 r"   r   )r   r   r   r   r&   rm   )rangeupdater   listcopyrj   rd   rfindlenr   rl   discardrg   )rp   rr   r   r   r   r   r   r   
everythingshards
all_shardskeyr   itemsidr   dot_posbase_filename	extensionr   r   s          `            @r#   write_shardedzFileManager.write_sharded   sd    '1,%?
(
 (
+0+<+<(
 (
 (
 !\F*
# ' 'X&&&& 	$ 	$C# $ $%<<%c
D  A A@A A A "'s!2!2E#JJ!#E#JJ$	 	 	 	 	 	
 < 	E 	' 	'D&,,C$S))J6C,t$$CIfSk3'''Ij#&&&&..%%b==(mmG '*WXX&	 	 	EZ(H$$ 7(7I77====   
 	FF-FF9FF	
 	
 	
 	
 	
r"   variable_namec           	         d                     |d                    d t          | j                  D                                 }|                     ||           dS )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   V  dS )"Nr!   )r   r0   s     r#   	<genexpr>z,FileManager.write_outputs.<locals>.<genexpr>  s+      NNt#*s*NNNNNNr"   N)formatr   sortedrl   r   )rp   r   rr   contents       r#   write_outputszFileManager.write_outputs  sb     $**MMNNvdn7M7MNNNNN
 
 	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.
        )rz   r|   relpathrh   r}   r   rp   s    r#   template_dir_for_commentsz%FileManager.template_dir_for_comments  s+     wt0"'//(2K2KLLLr"   )rg   r%   rh   r%   rj   ri   r&   rm   )rr   r%   rs   r%   r&   rm   )rU   r%   r   r   r&   r%   )rr   r%   rU   r%   r   r   r&   rm   )rr   r%   r   r   r&   rm   )rr   r%   r   r9   r   r   r   r   r   rZ   r   r   r   rk   r&   rm   )r   r%   rr   r%   r&   rm   r&   r%   )r   r   r   __annotations__rq   r   r   r   r~   r   r   r   r!   r"   r#   rf   rf      s        MMM   " " " "   BO O O O C C C C +/?
 ?
 ?
 ?
 ?
 ?
B2 2 2 2M M M M M Mr"   rf   optionsr   rg   
str | Nonec                    t           j                            | j        d          }|r|n| j        }t          ||| j                  S )N	templates)rg   rh   rj   )rz   r|   r   source_pathrg   rf   rj   )r   rg   rh   s      r#   make_file_managerr   (  sM     7<< 3[AAL!,E++'2EKlGO   r"   P   objr	   rK   widthc                l    t           j        dk    rddlm}  || ||          S t	          | ||          S )N)   
   r   )pformat)rK   r   )r   version_infopprintr   _pformat)r   rK   r   r   s       r#   dataclass_reprr   3  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: rH   c                V    g | ]%}|j         	|j        t          |j                  f&S r!   )reprr0   getattr)r   r   r   s     r#   r   z_pformat.<locals>.<listcomp>M  s3    QQQa!&QAFGC001QQQr"   = z,
())r   rR   	__class__r   r   r   r   r   r   _format_dictr   ro   tuple_format_listr   appendr   )r   rK   r   r   
class_namefields_list
fields_strr0   attr_curr_indentstr_repr
indent_strbodys   `            r#   r   r   A  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  rK   r   r   	dict_reprr   r   k_reprv_strs	            r#   r   r   d  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 )NrH   c                p    g | ]2}t          |          rt          |          nt          |          3S r!   )r   r   r   )r   lr   rK   r   s     r#   r   z _format_list.<locals>.<listcomp>  sN        4@??OFE;///Q  r"   )[])r   r   )r   r   r
  )r  rK   r   r   	list_reprstartends    ```   r#   r   r   x  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  rG   r   r)   )r   r   r   )
r   rK   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 r   rG   c                    g | ]}d | d	S )z
namespace z {r!   r   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!   r%  s     r#   r   z,NamespaceHelper.__init__.<locals>.<listcomp>  s!    FFF###FFFr"   )	r.   r   cpp_namespace_r   	prologue_reversed	epilogue_namespaces_entity_name_)rp   r  r   r!  cpp_namespacess        r#   rq   zNamespaceHelper.__init__  s     ',,T229,,,n	nn^knnn -,,+#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"
        r#  r   N)r  r   r!  )r.   r   r  )r/  r!  namesr   r  s        r#   from_namespaced_entityz&NamespaceHelper.from_namespaced_entity  sW     "''--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  r5  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.
        )r(  )rp   r9  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  )r9  r%   r&   r%   )r   r   r   __doc__rq   staticmethodr2  propertyr4  r7  r   r;  r!   r"   r#   r  r    s          KL( ( ( ( (  12
 
 
 
 \
    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<   )rA  r   fromkeys)rp   rB  s     r#   rq   zOrderedSet.__init__  s*    DLLL==22DLLLr"   r   r4   ri   c                    || j         v S r<   rA  rp   r   s     r#   __contains__zOrderedSet.__contains__  s    t|##r"   Iterator[T]c                N    t          | j                                                  S r<   )iterrA  keysr   s    r#   __iter__zOrderedSet.__iter__  s    DL%%''(((r"   r   OrderedSet[T]c                D    | j                             |j                    d S r<   )rA  r   )rp   r   s     r#   r   zOrderedSet.update  s     EM*****r"   c                    d | j         |<   d S r<   rG  rH  s     r#   r   zOrderedSet.add  s    !Tr"   c                ^    t                      }| j                                        |_        |S r<   )r@  rA  r   )rp   rets     r#   r   zOrderedSet.copy  s%    '\\l''))
r"   rL   c                 ~    | d                                          }| dd          D ]}|                    |           |S )Nr   rH   )r   r   )rL   rS  rY   s      r#   unionzOrderedSet.union  s@    1gllnnabb 	 	AJJqMMMM
r"   otherc                8    t                               | |          S r<   )r@  rU  rp   rV  s     r#   __or__zOrderedSet.__or__  s    e,,,r"   r   c                0    |                      |           | S r<   )r   rX  s     r#   __ior__zOrderedSet.__ior__  s    Er"   objectc                    t          |t                    r| j        |j        k    S t          | j                                                  |k    S r<   )r   r@  rA  ro   rM  rX  s     r#   __eq__zOrderedSet.__eq__  sD    eZ(( 	5<5=00t|((**++u44r"   r<   )rB  rC  r&   rm   )r   r4   r&   ri   )r&   rJ  )r   rO  r&   rm   )r   r4   r&   rm   )r&   rO  )rL   rO  r&   rO  )rV  rO  r&   rO  )rV  rO  r&   r   )rV  r\  r&   ri   )r   r   r   r   rq   rI  rN  r   r   r   r=  rU  rY  r[  r^  r!   r"   r#   r@  r@    s         ####3 3 3 3 3$ $ $ $) ) ) )+ + + +" " " "   
    \- - - -   5 5 5 5 5 5r"   r@  )r$   r%   r&   r'   )r6   r7   r8   r9   r&   r:   )r6   r@   r8   r9   r&   r:   )rC   rD   r&   rE   )r=   r   r&   r   )rU   r%   r&   r   )rY   r%   r&   rZ   r<   )r   r   rg   r   r&   rf   )r   r   )r   r	   rK   rZ   r   rZ   r&   r%   )r   )
r   r	   rK   rZ   r   rZ   r   rZ   r&   r%   )
r  r  rK   rZ   r   rZ   r   rZ   r&   r%   )
r  r  rK   rZ   r   rZ   r   rZ   r&   r%   )r   r  rK   rZ   r   rZ   r   rZ   r  r%   r  r%   r&   r%   )<
__future__r   
contextlib	functoolsr_   rz   r*   r   rJ   dataclassesr   r   enumr   r   pathlibr   typingr	   r
   r   r   r   r   r   r   r   r   typing_extensionsr   torchgen.code_templater   argparser   r   r   parentr   r   IDENT_REGEXr3   r4   r5   r?   rB   contextmanagerrO   rS   	lru_cacherX   rd   rf   r   r   r   r   r   r
  r  r@  r!   r"   r#   <module>rm     s   " " " " " "          				 				 



  , , , , , , , ,                                      # " " " " " / / / / / /  #"""""" DNN##%%,3	
$ 
$ 
$ 
$ 
$T 
$ 
$ 
$  $ $ $ $ GCLLGCLL       	 	 	 	@ @ @ @ T"""/ / / #"/
4 4 4 4bM bM bM bM bM bM bM bMN 37     5 5 5 5 5$ 	 #  #  #  #  #FD D D D(F F F F- - - -&>G >G >G >G >G >G >G >GB,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5r"   