
    wid@                    v   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#          $                                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#Z0ej1        dLd&            Z2dMd)Z3 G d* d+          Z4	 dNdOd0Z5	 	 dPdQd6Z6	 dRdSd8Z7dTd;Z8dUd=Z9dVdBZ: G dC dD          Z; G dE dFee*                   Z<dS )W    )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	dS )TargetN)
__name__
__module____qualname__r   
DEFINITIONDECLARATIONREGISTRATIONANONYMOUS_DEFINITIONNAMESPACED_DEFINITIONNAMESPACED_DECLARATION     ^/root/.openclaw/workspace/chatterbox_venv_py311/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   6   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?   F   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   N   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   V   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   f   s"    
>DGG,<>>
?
??r"   template_fnr   c                *    t          j        |           S r<   )r   	from_file)rT   s    r#   _read_templaterW   j   s    !+...r"   sintc                    t          j        |                     d                                                    }t                              |d          S )Nlatin1little)	byteorder)hashlibsha1encodedigestrY   
from_bytes)rX   r_   s     r#   string_stable_hashrc   p   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<   )rf   rg   setrk   ri   )selfrf   rg   ri   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)ro   rq   rr   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 rT   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 )ry   r{   joinrg   
isinstancedict	REPO_ROOTr   sysmodules__file__absoluteKeyErrorAttributeErrorrelative_toas_posix
ValueErrorr0   rW   
substituter%   rS   )	ro   rT   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})rT   r   )rq   rr   )rf   rk   addri   r   r   )ro   rq   rT   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   )ro   rq   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_shardsrY   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&   rl   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&   rl   )rangeupdater   listcopyri   rc   rfindlenr   rk   discardrf   )ro   rq   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   sc    '1,%?
(
 (
+0+<+<(
 (
 (
 !\F*
# ' 'X&&&& 	$ 	$C# $ $%<<%c
D  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   sortedrk   r   )ro   r   rq   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.
        )ry   r{   relpathrg   r|   r   ro   s    r#   template_dir_for_commentsz%FileManager.template_dir_for_comments  s+     wt0"'//(2K2KLLLr"   )rf   r%   rg   r%   ri   rh   r&   rl   )rq   r%   rr   r%   r&   rl   )rT   r%   r   r   r&   r%   )rq   r%   rT   r%   r   r   r&   rl   )rq   r%   r   r   r&   rl   )rq   r%   r   r9   r   r   r   r   r   rY   r   r   r   rj   r&   rl   )r   r%   rq   r%   r&   rl   r&   r%   )r   r   r   __annotations__rp   r   r   r   r}   r   r   r   r!   r"   r#   re   re   x   s        MMM   " " " "   BO O O O C C C C +/?
 ?
 ?
 ?
 ?
 ?
B2 2 2 2M M M M M Mr"   re   optionsr   rf   
str | Nonec                    t           j                            | j        d          }|r|n| j        }t          ||| j                  S )N	templates)rf   rg   ri   )ry   r{   r   source_pathrf   re   ri   )r   rf   rg   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   )  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>C  s3    QQQa!&QAFGC001QQQr"   = z,
())r   rR   	__class__r   r   r   r   r   r   _format_dictr   rn   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   7  s    QQQd3ii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   Z  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>u  sN        4@??OFE;///Q  r"   )[])r   r   )r   r   r	  )r   rK   r   r   	list_reprstartends    ```   r#   r   r   n  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_levelrY   r&   rl   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_)ro   r  r  r   cpp_namespacess        r#   rp   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  r4  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'  )ro   r8  s     r#   get_cpp_namespacez!NamespaceHelper.get_cpp_namespace  s    
 '+&9Ft""wFr"   N)r  r  )r  r%   r  r%   r   rY   r&   rl   )r  )r.  r%   r   rY   r&   r  r   )r  )r8  r%   r&   r%   )r   r   r   __doc__rp   staticmethodr1  propertyr3  r6  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&   rl   c                Z    |	i | _         d S t                              |          | _         d S r<   )r@  r   fromkeys)ro   rA  s     r#   rp   zOrderedSet.__init__  s*    DLLL==22DLLLr"   r   r4   rh   c                    || j         v S r<   r@  ro   r   s     r#   __contains__zOrderedSet.__contains__  s    t|##r"   Iterator[T]c                N    t          | j                                                  S r<   )iterr@  keysr   s    r#   __iter__zOrderedSet.__iter__  s    DL%%''(((r"   r   OrderedSet[T]c                D    | j                             |j                    d S r<   )r@  r   )ro   r   s     r#   r   zOrderedSet.update  s     EM*****r"   c                    d | j         |<   d S r<   rF  rG  s     r#   r   zOrderedSet.add  s    !Tr"   c                ^    t                      }| j                                        |_        |S r<   )r?  r@  r   )ro   rets     r#   r   zOrderedSet.copy  s%    '\\l''))
r"   rL   c                 ~    | d                                          }| dd          D ]}|                    |           |S )Nr   rH   )r   r   )rL   rR  rX   s      r#   unionzOrderedSet.union  s@    1gllnnabb 	 	AJJqMMMM
r"   otherc                8    t                               | |          S r<   )r?  rT  ro   rU  s     r#   __or__zOrderedSet.__or__  s    e,,,r"   r   c                0    |                      |           | S r<   )r   rW  s     r#   __ior__zOrderedSet.__ior__  s    Er"   objectc                    t          |t                    r| j        |j        k    S t          | j                                                  |k    S r<   )r   r?  r@  rn   rL  rW  s     r#   __eq__zOrderedSet.__eq__  sD    eZ(( 	5<5=00t|((**++u44r"   r<   )rA  rB  r&   rl   )r   r4   r&   rh   )r&   rI  )r   rN  r&   rl   )r   r4   r&   rl   )r&   rN  )rL   rN  r&   rN  )rU  rN  r&   rN  )rU  rN  r&   r   )rU  r[  r&   rh   )r   r   r   r   rp   rH  rM  r   r   r   r<  rT  rX  rZ  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   )rT   r%   r&   r   )rX   r%   r&   rY   r<   )r   r   rf   r   r&   re   )r   r   )r   r	   rK   rY   r   rY   r&   r%   )r   )
r   r	   rK   rY   r   rY   r   rY   r&   r%   )
r   r  rK   rY   r   rY   r   rY   r&   r%   )
r   r  rK   rY   r   rY   r   rY   r&   r%   )r   r  rK   rY   r   rY   r   rY   r  r%   r  r%   r&   r%   )=
__future__r   
contextlib	functoolsr^   ry   r*   r   rJ   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?   rB   contextmanagerrO   rS   cacherW   rc   re   r   r   r   r   r   r	  r  r?  r!   r"   r#   <module>rm     s   " " " " " "          				 				 



  , , , , , , , ,               T T T T T T T T T T T T T T T T T T " " " " " " / / / / / /  =""""""<<<<<<<<<< DNN##%%,3	
$ 
$ 
$ 
$ 
$T 
$ 
$ 
$  $ $ $ $ GCLLGCLL       	 	 	 	@ @ @ @ / / / /
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"   