
    rhH                       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%      jM                         jN                  Z(e(jN                  Z) G d de      Z*dZ+d$dZ, ed      Z- ed      Z.d%dZ/d&dZ0ejb                  d'd       Z2er ed      d(d       Zejf                  d)d       Z4d*dZ5 G d d      Z6	 d+	 	 	 	 	 d,dZ7	 	 d-	 	 	 	 	 	 	 d.dZ8	 d/	 	 	 	 	 	 	 	 	 d0dZ9	 	 	 	 	 	 	 	 	 	 d1dZ:	 	 	 	 	 	 	 	 	 	 d2dZ;	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3dZ< G d  d!      Z= G d" d#ee-         Z>y)4    )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	y)TargetN)
__name__
__module____qualname__r   
DEFINITIONDECLARATIONREGISTRATIONANONYMOUS_DEFINITIONNAMESPACED_DEFINITIONNAMESPACED_DECLARATION     a/var/www/html/ai-insurance-compliance-backend/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_paramsr2   7   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%   mapMayber;   G   s(      G=Gs   c              #  >   K   |D ]  } | |      E d {     y 7 wr6   r#   )r7   r8   r9   s      r%   	concatMapr=   O   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%   contextrH   W   so      hooc4('(vv2cU#3!&&*$s%   A2	 A2	A/AA**A//A2z*Use typing_extensions.assert_never insteadc                D    t        dt        |       j                         )NzUnhandled type: )AssertionErrortyper   )r9   s    r%   r   r   h   s     /Q0@0@/ABCCr$   c                ,    t        j                  |       S r6   )r   	from_file)template_fns    r%   _read_templaterO   m   s    !!+..r$   c                    t        j                  | j                  d      d      j                         }t        j                  |d      S )Nlatin1F)usedforsecuritylittle)	byteorder)hashlibsha1encodedigestint
from_bytes)srV   s     r%   string_stable_hashr\   s   s7    <<*EBIIKD>>$(>33r$   c                      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ddZy)FileManagerc                p    t        |      | _        t        |      | _        t               | _        || _        y r6   )r   install_dirtemplate_dirsetfilesdry_run)selfr`   ra   rd   s       r%   __init__zFileManager.__init__|   s.      , . #
r$   c                n    t        | j                  D ch c]  }|j                          c}      S c c}w r6   )	frozensetrc   as_posix)re   files     r%   	filenameszFileManager.filenames   s%    djjAd$--/ABBAs   2c                    t        |      }d }	 |j                  d      }||k7  r1|j                  j	                  dd       |j                  |d       y y # t        $ r Y Bw xY w)Nzutf-8)encodingT)parentsexist_ok)r   	read_textOSErrorparentmkdir
write_text)re   filenamecontentsrj   old_contentss        r%   _write_if_changedzFileManager._write_if_changed   so    H~#'	>>7>;L |#KKdT:OOHwO7 $  		s   A 	A$#A$c                   t        |      j                         r
J d|        | j                  |z  } |       }t        |t              rd|vrwt
        dz  }	 t        t        j                  d   j                  xs |      j                         }	 |j                  t              j                         }i |ddd| d| z   i}t#        |      }|j%                  |      }	t'        j(                  dd	|	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)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_absolutera   
isinstancedictTORCHGEN_ROOTsysmodules__file__absoluteKeyErrorAttributeErrorrelative_to	REPO_ROOTri   
ValueErrorr/   rO   
substituter(   subVERBOSEstrr   )
re   rN   env_callabletemplate_pathenvgenerator_default	generatorgenerator_pathtemplatesubstitute_outs
             r%   substitute_with_templatez$FileManager.substitute_with_template   sx   
 $002 	
,[M:	
2 ))K7nc4 "#-$1H$<!= $J/88M<M!hj 4%.%:%:9%E%N%N%PN'n-=VK=QQ &m4H%005N 66 "jj  c3JSG !.1 = 1 : : <I=
 " 4%.^^N4s$   8D& #E &EEE#"E#c                8   t        |      }|j                         r
J d|        | j                  |z  }|| j                  vs
J d|        | j                  j	                  |       | j
                  s'| j                  ||      }| j                  ||       y y )Nfilename must be relative: zduplicate file write )rN   r   )ru   rv   )r   r~   r`   rc   addrd   r   rx   )re   ru   rN   r   rj   r   s         r%   write_with_templatezFileManager.write_with_template   s     >'')S-H
+SS)(*4::%E)>tf'EE%

t||!::') ; N ""D>"J r$   c                *    | j                  |||       y r6   )r   )re   ru   r   s      r%   writezFileManager.write   s    
 	  8\Br$   N)base_envc          
     6    | j                  ||||||||       y )N)key_fnr   
num_shardsr   sharded_keys)write_sharded_with_template)re   ru   itemsr   r   r   r   r   s           r%   write_shardedzFileManager.write_sharded   s/     	((%!% 	) 		
r$   c                  t        |      }	|	j                         r
J d|        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 |D ]:  d   }| j                  |	j                  |	j                   |       |fd       < | j                  j                  | j                  |	j                  |	j                   d      z         y c c}w )
Nr   shard_id
Everythingr0   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 )r   )intofrom_kvr   s       r%   	merge_envz:FileManager.write_sharded_with_template.<locals>.merge_env  sD     1L(G,CA3*GG(Q1r$   r#   c                      S r6   r#   )shards   r%   <lambda>z9FileManager.write_sharded_with_template.<locals>.<lambda>5  s     r$   )r   dict[str, list[str]]r   r   returnNone)r   r~   rangeupdater   listcopyrd   r\   r   	with_stemstemrc   discardr`   )re   ru   rN   r   r   r   r   r   r   rj   
everythingishards
all_shardskeyr   itemsidr   r   r   s           `           @r%   r   z'FileManager.write_sharded_with_template   s    H~##%O)DXJ'OO%&0,%?
+0+<(
&'Z1QC!(
 (
 !\F*
# 'X&'   	$C# $%<%eCj$7 A7 "'s!2E#J!#E#J$	$	
 <<E 	'D,C$S)J6Ct$CfSk3'j#&	'   	EZ(H$$$))XJ78	 	

4++dnn		{*=U.VVW[(
s   Fc                    dj                  d|gd t        | j                        D        d      }| j                  ||       y)zSWrite a file containing the list of all outputs which are generated by this script.r?   zset(c              3  D   K   | ]  }d |j                          d  yw)z    ""N)ri   ).0rj   s     r%   	<genexpr>z,FileManager.write_outputs.<locals>.<genexpr>B  s      LE$--/*!,Ls    )N)joinsortedrc   rx   )re   variable_nameru   contents       r%   write_outputszFileManager.write_outputs;  sP    )) M

9KL	
 
 	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.
        )ospathrelpathra   dirnamer   re   s    r%   template_dir_for_commentsz%FileManager.template_dir_for_commentsH  s,     wwt00"''//(2KLLr$   )r`   
str | Pathra   r   rd   boolr   r   )r   zfrozenset[str])ru   r   rv   r   r   r   )rN   r   r   "Callable[[], str | dict[str, Any]]r   r   )ru   r   rN   r   r   r   r   r   )ru   r   r   r   r   r   )ru   r   r   Iterable[T]r   Callable[[T], str]r   #Callable[[T], dict[str, list[str]]]r   rY   r   dict[str, Any] | Noner   set[str]r   r   )ru   r   rN   r   r   r   r   r   r   r   r   rY   r   r   r   r   r   r   )r   r   ru   r   r   r   r   r   )r   r   r   rf   propertyrk   rx   r   r   r   r   r   r   r   r#   r$   r%   r^   r^   {   s   		 !	 		
 
	 C C
844 94 
	4lKK  K 9	K
 
K$CC 9C 
	C +/

 

 #
 :
 
 (
 
 

> +/<X<X  <X 	<X #<X :<X <X (<X <X 
<X|2Mr$   r^   c                    t         j                  j                  | j                  d      }|r|n| j                  }t        ||| j                        S )N	templates)r`   ra   rd   )r   r   r   source_pathr`   r^   rd   )optionsr`   ra   s      r%   make_file_managerr   R  sG     77<< 3 3[AL!,+'2E2EK! r$   c                d    t         j                  dk\  rddlm}  || ||      S t	        | ||      S )N)   
   r   )pformat)rC   width)r   version_infopprintr   _pformat)objrC   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   )r   rK   	__class__r   lenr   reprr/   getattrr   r   r   _format_dictr   rb   tuple_format_listappendr   )r   rC   r   curr_indent
class_nameffields_list
fields_strr/   attr_curr_indentstr_repr
indent_strbodys                 r%   r   r   n  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   rC   r   r   	dict_reprr   r   k_reprv_strs	            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 )Nr@   )[])r   r   )r   r   r   r   r   r  )r   rC   r   r   l	list_reprstartends           r%   r   r     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   rC   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?   z
namespace z {z} // namespace )	r,   r   cpp_namespace_r   	prologue_reversed	epilogue_namespaces_entity_name_)re   namespace_strentity_name	max_levelcpp_namespacesns         r%   rf   zNamespaceHelper.__init__  s     ',,T2>"i/ 	
0;^_l^mmn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  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 r6   )r  r   s    r%   prologuezNamespaceHelper.prologue      ~~r$   c                    | j                   S r6   )r  r   s    r%   epiloguezNamespaceHelper.epilogue  r-  r$   c                    | j                   S r6   )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  )re   defaults     r%   get_cpp_namespacez!NamespaceHelper.get_cpp_namespace  s    
 '+&9&9t""FwFr$   N)r     )r!  r   r"  r   r#  rY   r   r   )r4  )r(  r   r#  rY   r   r  r   )r  )r2  r   r   r   )r   r   r   __doc__rf   staticmethodr*  r   r,  r/  r"  r3  r#   r$   r%   r  r    s      	(( ( 	(
 
(&  


 

 
     ! !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 r6   )r9  r   fromkeys)re   iterables     r%   rf   zOrderedSet.__init__  s    DL==2DLr$   c                    || j                   v S r6   r9  re   r   s     r%   __contains__zOrderedSet.__contains__  s    t||##r$   c                H    t        | j                  j                               S r6   )iterr9  keysr   s    r%   __iter__zOrderedSet.__iter__  s    DLL%%'((r$   c                N    | j                   j                  |j                          y r6   )r9  r   )re   r   s     r%   r   zOrderedSet.update  s    EMM*r$   c                "    d | j                   |<   y r6   r>  r?  s     r%   r   zOrderedSet.add  s    !Tr$   c                X    t               }| j                  j                         |_        |S r6   )r8  r9  r   )re   rets     r%   r   zOrderedSet.copy!  s"    '\ll'')
r$   c                 b    | d   j                         }| dd  D ]  }|j                  |        |S )Nr   r@   )r   r   )rD   rH  r[   s      r%   unionzOrderedSet.union&  s6    1gllnab 	AJJqM	
r$   c                .    t         j                  | |      S r6   )r8  rJ  re   others     r%   __or__zOrderedSet.__or__-  s    e,,r$   c                (    | j                  |       | S r6   )r   rL  s     r%   __ior__zOrderedSet.__ior__0  s    Er$   c                    t        |t              r| j                  |j                  k(  S t        | j                  j	                               |k(  S r6   )r   r8  r9  rb   rC  rL  s     r%   __eq__zOrderedSet.__eq__4  s<    eZ(<<5==00t||((*+u44r$   r6   )r<  zIterable[T] | Noner   r   )r   r3   r   r   )r   zIterator[T])r   OrderedSet[T]r   r   )r   r3   r   r   )r   rS  )rD   rS  r   rS  )rM  rS  r   rS  )rM  rS  r   r   )rM  objectr   r   )r   r   r   __annotations__rf   r@  rD  r   r   r   r6  rJ  rN  rP  rR  r#   r$   r%   r8  r8    sI    ##3$)+"
  -5r$   r8  )r-   r   r   ztuple[str, list[str]])r7   zCallable[[T], S | None]r8   r   r   Iterator[S])r7   zCallable[[T], Sequence[S]]r8   r   r   rV  )rE   zCallable[[], str]r   zIterator[None])r9   r   r   r   )rN   r   r   r   )r[   r   r   rY   r6   )r   r   r`   zstr | Path | Noner   r^   )r   P   )r   r	   rC   rY   r   rY   r   r   )r   )
r   r	   rC   rY   r   rY   r   rY   r   r   )
r   zdict[Any, Any]rC   rY   r   rY   r   rY   r   r   )
r   z&list[Any] | set[Any] | tuple[Any, ...]rC   rY   r   rY   r   rY   r   r   )r   z	list[str]rC   rY   r   rY   r   rY   r  r   r  r   r   r   )?
__future__r   
contextlib	functoolsrU   r   r(   r   rB   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   rr   r   r   r   IDENT_REGEXr2   r3   r4   r;   r=   contextmanagerrH   cacherO   r\   r^   r   r   r   r   r   r  r  r8  r#   r$   r%   <module>rf     sn   "    	 	 
  ,   T T T < < / "<< X'')00  	
$T 
$  $ CLCL 	 	  <=D >D / /
4SM SMr &*

"
 
  5	55 5 		5$ 	 #	 # #  # 	 #
 	 #FD
DD D 	D
 	D(F
0FF F 	F
 	F--- - 	-
 - 
- 	-&BG BGJ,5 ,5r$   