
    sgE                        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 d dlm	Z	 d dl
mZmZ d dlZd dl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mZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZG d d	lHmIZI d d
lJmKZKmLZL dZM	 d dlNZNdZMdZPdhZQ eRej                  ej                  z   ej                  z         ZVd ZWe j                  de jH                  de j:                  de j0                  de jv                  de jZ                  de j$                  de j                  de j                  de j                  de j.                  de j4                  diZ\e j                  de jH                  de j:                  de j0                  de jv                  de jZ                  d e j$                  d!e j                  d"e j                  d#e j                  d$e j.                  d%e j4                  d&iZ]e\j                  e j                  d'e j                  d(e j                  d)e j                  d*e j                  d+i       e]j                  e j                  d,e j                  d-e j                  d.e j                  d/e j                  d0i       e\j                  e j                  d1i        G d2 d3ee      Zf G d4 d5ef      Zg G d6 d7eg      Zh G d8 d9ef      Zid: Zjd; Zkd< Zld= Zmd> ZndRd?Zod@ Zp G dA dB      ZqdC ZrdSdDZsdEZtdTdFZudTdGZvdH ZwdI ZxdJ Zy G dK dLeq      Zz G dM dNeq      Z{ G dO dPeq      Z| e|       Z} e{       Z~ ez       ZdUdQZy# eO$ r Y w xY w)V    N)
namedtuple)dedent)ListTuple)_jit_internal),ApplyAssertAssign	Attribute	AugAssignBinOpBreakClassDefConstContinueDeclDefDeleteDictCompDictLiteralDotsEmptyTypeAnnotationExprStmtFalseLiteralForIdentIfListCompListLiteralNoneLiteralParamPassPropertyRaiseReturnSelect	SliceExprStarredStmtStringLiteral	Subscript	TernaryIfTrueLiteralTupleLiteralUnaryOpVarWhileWithWithItem)_is_drop_fnFunctionModifiersis_static_fnshould_drop)get_source_lines_and_filemake_source_context	parse_def	ParsedDef)DATACLASS_MAGIC_METHODS)get_qualified_namemonkeytype_traceFT__jitprintc                 @    | j                  t              xs | t        v S N)
startswith_reserved_prefix_reserved_names)names    E/var/www/html/venv/lib/python3.12/site-packages/torch/jit/frontend.pyis_reserved_namerH   ]   s    ??+,G0GG    zfunction definitionsz	for loopszdel statementszclass definitionszwith statementszraise statements
assertionszimport statementszglobal variableszbreak statementszcontinue statementsdeffordelclasswithraiseassertimportfromglobalbreakcontinuezasync function definitionszasync for loopszasync with statementsz
try blocksznonlocal variablesz	async defz	async forz
async withtrynonlocalzannotated assignmentsc                       e Zd Zd Zd Zy)FrontendErrorc                 |    || _         || _        t        j                  j	                  | j                         | _        y rB   )source_rangemsgtorch_CErrorReporterror_report)selfr\   r]   s      rG   __init__zFrontendError.__init__   s0    ( "HH001B1BCrI   c                 l    | j                   | j                  j                         j                         z   S rB   )r]   ra   whatlstrip)rb   s    rG   __str__zFrontendError.__str__   s)    xx$++00299;;;rI   N)__name__
__module____qualname__rc   rg    rI   rG   rZ   rZ      s    D<rI   rZ   c                       e Zd Zy)NotSupportedErrorNrh   ri   rj   rk   rI   rG   rm   rm          rI   rm   c                         e Zd Zd fd	Z xZS )UnsupportedNodeErrorc                 @   t        |      }t        t        j                  |d            }|j	                  |j
                  |j                  |j                  |z         }t        j                  ||j                        }| d|r|dz   nd d}t        	| )  ||       y )N  zaren't supported)typelennode_start_tokensget
make_rangelineno
col_offsetpretty_node_namesrh   superrc   )
rb   ctxoffending_nodereason	node_type	range_lenr\   feature_namer]   	__class__s
            rG   rc   zUnsupportedNodeError.__init__   s    (	)--i=>	~~!!%%%%	1

 ),,Y	8J8JKaB??OPs+rI   )rt   )rh   ri   rj   rc   __classcell__)r   s   @rG   rq   rq      s    , ,rI   rq   c                       e Zd Zy)FrontendTypeErrorNrn   rk   rI   rG   r   r      ro   rI   r   c                 T    |D cg c]  }t        | |       }}t        |      S c c}w rB   )build_withitemlist)r~   itemsis      rG   build_withitemsr      s+    -23^C#3E3; 4s   %c                 h    |D cg c]  }t        | |       }}t        t        d |            S c c}w rB   )
build_stmtr   filter)r~   stmtsss      rG   build_stmtsr      s3    )./AZQ/E/tU#$$ 0s   /c                    t        j                  | d       }t        | dg       }g }|D ]  }|d   |vst        |d   j                        r$t        |d   j                  d|d    d|      }|d   j                  r"t        |d   j                  d|d    d	|      nd
}|j                  t        |j                         t        |j                         |d         ||              |S )aj  
    Get a list of Property objects representing the properties of a class.

    Args:
        cls:  The class to get properties of.
        self_name: The name of the class that the properties should belong to.
    Returns:
        A list of Property objects corresponding to the properties of cls. Property
        here refers to the subclass of TreeView.
    c                 "    t        | t              S rB   )
isinstanceproperty)ms    rG   <lambda>z&get_class_properties.<locals>.<lambda>   s    
1h8O rI   	predicate__jit_unused_properties__r      ___getter)	self_name_setterN)inspect
getmembersgetattrr7   fgetget_jit_deffsetappendr#   ranger   )clsr   propsunused_properties
propertiespropgettersetters           rG   get_class_propertiesr      s     s.OPE%@"E J 7++KQ4M Q47)73yF
 7<< DGLLBtAwiw*?9U 
 v||~tAw)GQWX rI   c                     g  fd}|j                   D ]f  }t        |t        j                        r |t        j
                  |       5t        |t        j                        sP |t        j                  |       h S )Nc                 V    	 j                   | |             y # t        $ r Y y w xY wrB   )r   rm   )builderentryassignsr~   s     rG   maybe_build_assignz-get_class_assigns.<locals>.maybe_build_assign   s-    	NN73./  		s    	(()bodyr   astr
   StmtBuilderbuild_Assign	AnnAssignbuild_AnnAssign)r~   cls_astr   r   r   s   `   @rG   get_class_assignsr      sg    G  CeSZZ({77?s}}-{::EB	C
 NrI   c                 j    t        j                    fd      } fd}t         t        j                  j
                  j                               \  }}}dj                  |      }t        |      }t        j                  |      }	|	j                  d   }
t        |
t        j                        sJ t        j                         r|
j                  D ch c]:  }t        |t        j                         r|j"                  t$        v r|j"                  < }}t'        |      D ]j  \  }\  }}t%        j(                  |      }|s!||vs& |       }||f||<   t+         |      }t,        j.                  j1                  ||j2                         l |D cg c]  \  }}t5        ||| ||             }}}t7         |      }t9        |j;                  dd      d         t9        |j;                  dd      d         z
  }t=        ||||d	      }t?        ||
      }tA        ||
||||      S c c}w c c}}w )
ap  Get definitions for each method within the current class independently.

    Args:
        cls: The class to get definition of.
        self_name: The name of the class that the properties should belong to.

    Returns:
        torch._C._jit_tree_views.ClassDef: A representation of the class,
            the methods in the class and their definition as a tree.
    c                     t        j                  |       xs t        j                  |       xr? t        | j                         xr& | j                  j
                  v xr t        |        S rB   )r   ismethod
isfunctionr6   rh   __dict__r4   r   r   s    rG   r   z#get_jit_class_def.<locals>.<lambda>  sa    W--a0IG4F4Fq4I S!**--JJ#,,& A rI   r   c                 R    t        j                  |       xr t        | dd       k(  S )N__self__)r   r   r   )fnr   s    rG   is_classmethodz)get_jit_class_def.<locals>.is_classmethod  s'    #LJ(E(LLrI   rt   r   )r   r   
r   F)!r   r   r8   r^   r_   r`   
call_stackjoinr   r   parser   r   r   dataclassesis_dataclassFunctionDefrF   r<   	enumeraterx   r   r   loadercachesourcer   r   rv   splitr9   r   build_class_def)r   r   methodsr   sourcelinesfile_linenofilenamer   
dedent_srcpy_ast	class_astmethod	overridesr   rF   _synthesizer_fn
parsed_deffuncobjmethod_defsr   leading_whitespace_lenr~   r   s   `                        rG   get_jit_class_defr      s&      GM *CUXX!!,,.*&Kh WW[!FJYYz"FAIi... $
 $..
&#//266 KK
	 
 &g. 	DLAya488>N$i"7+C0
!:-
sD)$$**41B1BC	D #T3 	C>RUCVWK  &c95J dA!6q!9:Sq!!$>  +'=uC  Y/G3	;
IwWW;
s   ?H*H/c                    t        | t              st        |       n| }t        j                  j
                  j                  |j                        }|j                  j                  d   }|rf|j                  j                  d   j                  }t        j                  | d|       j                  d   }|j                  j                  d|       t        |       r.t        j                  d      }	t        |	j                        dk7  s't        |	j                  d   t        j                         s%t#        d|j$                   d|j&                         |	j                  d   }
|
j                  |_	        dx|j                  _        |j                  _        |j                  j                  |j                  j,                  z   D ]*  }|
j                  j                  d   j.                  |_        , t1        |       rd|_        d|_        t        j                  j6                  j9                         }d}t:        r,t        | t              st=        |       }|j?                  |      }tA        |jB                  |||||      S )	af  
    Build a JIT AST (TreeView) from the given function.

    Args:
        fn: A function object to compile or a pre-parsed ParsedDef object
        def_name: The name to give to the resulting AST object. This is not
            always the same as `fn.__name__`, for example:
                def _forward(self):
                    ...
                forward = _forward
            In this case, the `__name__` attribute of the function object is "_forward",
            but we want the result AST to have the name "forward".
        self_name: If this function is a method, what the type name of `self` is.
    r    = zLdef unused_fn(self: Any):
	raise RuntimeError("Cannot call @unused methods")r   z&Expected a single top-level function: :N)r   pdt_arg_types)"r   
_ParsedDefr:   r^   jitannotationsget_type_liner   r   r   argsargr   insertr7   rv   r   RuntimeErrorr   r   kwargvararg
kwonlyargs
annotationr4   returnstype_comment_script_get_type_trace_dbr>   r=   get_args_types	build_defr~   )r   def_namer   r   r   	type_linefn_defarg_nameassign_stmtunused_fn_def
unused_defr   type_trace_dbr   qualnames                  rG   r   r   G  s    '1Z&@2bJ		%%33J4E4EFI^^  #F;;##A&**ii8*C	{ ;<AA!D1k* 2		\
 }!!"a'zq!3??0
 89L9L8MQzOeOeNfg  #''*
 oo155FKK.;;##fkk&<&<< 	@C'__11!4??CN	@ r?!FN"&F II%%88:MM
2z :%b)%44X># rI   c                    t        | j                  d   j                  t        j                        r| j                  d   j                  j
                  }t        |t        j                        r|j                  }|j                  }|dk(  rgt        |t        j                        rM|j                  dk(  r>t        |j                  t        j                        r|j                  j                  dk(  ryy)Nr   _IgnoreContextManagerr   r^   TF)r   r   context_exprr   Callr   r   attrvalueNameid)stmtfunction	attr_name
attr_values       rG   #is_torch_jit_ignore_context_managerr    s    $**Q-,,chh7::a=--22h. I!J33
CMM9 ??e+
:;K;KSXX0V!''**g5#rI   c                       e Zd Zd Zy)Builderc                 x    t        | d|j                  j                  z   d       }|t        ||       |||      S )Nbuild_)r   r   rh   rq   )rb   r~   noder   s       rG   __call__zBuilder.__call__  s>    x$..*A*AA4H>&sD11c4  rI   N)rh   ri   rj   r  rk   rI   rG   r  r    s    !rI   r  c           	          | j                  |j                  |j                  |j                  t        d      z         }t	        t        ||      |D cg c]  }t        |       c}||      S c c}w )NrN   )ry   rz   r{   rv   r   r   r)   )r~   py_defr   r   r   r   rr   s           rG   r   r     sa    v((&*;*;c'l*J	A aAvd6lA:w As   A-
c                    |j                   }| j                  |j                  |j                  |j                  t	        d      z         }t        | |j                  ||      }d }	t        |dd       t        | |j                        }	t        |||	      }
|d u}|@t        j                  j                  |      }t        j                  j                  |
||      }
t        t!        ||      |
t#        | |            S )NrK   r   )r   ry   rz   r{   rv   build_param_listr   r   
build_exprr   r   r^   r_   parse_type_commentmerge_type_from_type_commentr   r   r   )r~   r  r   r   r   r   r   r  
param_listreturn_typedecl	is_methodtype_comment_decls                rG   r   r     s    ;;Dv}}f&7&79J9JSQVZ9WXA!#v{{I}MJKvy$'3 fnn5:{+D%I!HH77	Bxx44T;LiXuQ!4S$)?@@rI   zfCompiled functions can't take variable number of arguments or use keyword-only arguments with defaultsc                 D   |j                   f|j                   }| j                  |j                  |j                  dz
  |j                  t	        |j
                        z         }t        |t              |j                  f|j                  }| j                  |j                  |j                  dz
  |j                  t	        |j
                        z         }t        |t              t	        |j                        dkD  r=|j                  D ].  }|t        | |      j                         }t        |t               |j                  D cg c]/  }||r't        ||j
                           r||j
                     nd f1 }}|j                  D cg c]/  }||r't        ||j
                           r||j
                     nd f1 }}|D 	cg c]  \  }}	t        | ||d|	       }
}}	|
|D 	cg c]  \  }}	t        | ||d|	       c}	}z  }
|
S c c}w c c}w c c}	}w c c}	}w )Nr   r   F)
kwarg_onlypdt_arg_typeT)r   ry   rz   r{   rv   r   rm   _vararg_kwarg_errr   kw_defaultsr  r   r   boolr   build_param)r~   py_argsr   r   expr	ctx_ranger   arg_and_typesarg_and_types_kwonlyargsarg_typeresults              rG   r  r    s   }} }}NNKK1,dooDHH.M
	  	+<==~~!~~NNKK1,dooDHH.M
	  	+<==
7!# && 	FC&sC0668	'	3DEE	F <<  mCGG&<!= #''"		
M   %%   mCGG&<!= #''"		
    +C 	CiEQF  5C 	CiDxP F M7 s   4H4HH*Hc                    |j                   }| j                  |j                  |j                  |j                  t	        |      z         }t        |dd       t        | |j                        }n@|rt        t        ||            }n(||dk(  rt        t        ||            }nt        |      }t        |t        ||      |      S )Nr   rb   )r   ry   rz   r{   rv   r   r  r   r0   r   r   r!   )r~   py_argr   r(  r)  rF   r  annotation_exprs           rG   r-  r-    s    ::Dv}}f&7&79J9JSQUY9VWAv|T*6$S&*;*;<	eA|45		46>eAy12-a0%4.*==rI   c           	      t   t        dddg      t        dddg      fd}d }d }d } ||j                  d	   j                  j                        \  }}d
 || |      z   }d|z   }	|	ddj	                  |D 
cg c]  }
|
j
                  dz   |
j                  z     c}
      z   dz   z  }	 ||      \  }}|	|dz   z  }	t        j                  |	      j                  d	   }|j                  |_	        t        j                  |      j                  d	   }|j                  j                  |       dt        j                  |      z   }|d| d| z  }t        |        ||      }d| d ||      z   dz   }t        |      d	kD  r	|dz   |z   }n|}t        j                  |      j                  d	   }|S c c}
w )N	InputTyperF   ann
OutputTypec                    g }g }| D ]s  }|j                   }|j                  j                  }|j                  d      \  }}|dk(  r|j                   ||             |dk(  s\|j                   ||             u ||fS )Nr   inpout)r   r  r   r   )	r   inputsoutputsr   var_namevar_annvar_decl_typer9  r;  s	          rG   process_ins_outsz6build_ignore_context_manager.<locals>.process_ins_outs  s      	>CwwHiiooG%,]]3%7"M7%i':;%z(G<=	> wrI   c                 f    t        j                  dd| j                        }| d|j                   S )Nz[^a-zA-Z0-9_]r   )resubr   rz   )r~   r  r   s      rG   create_unique_name_extz<build_ignore_context_manager.<locals>.create_unique_name_ext  s0     VV$c3<<8Qt{{m$$rI   c                    d}d}t        |       dk(  r|dz  }t        |       dk(  r$d| d   j                  z   }|| d   j                  z  }t        |       dkD  r`d}|dd	j                  | D cg c]  }|j                   c}      z   d
z   z  }|d	j                  | D cg c]  }|j                   c}      z  }||fS c c}w c c}w )Nrt   zreturn r   z -> Noner   z -> z	 -> Tuple[, ])rv   r:  rF   r   )r@  return_type_annreturn_statement_strvars       rG   build_return_ann_stmtz;build_ignore_context_manager.<locals>.build_return_ann_stmt"  s    (w<1z)Ow<1$wqz~~5O GAJOO3 w<!)OsTYY7/KC/K%LLsRRO DII7.KCsxx.K$LL  444 0L.Ks   +B<C
c                 ^    dj                  | D cg c]  }|j                   c}      S c c}w )NrK  )r   rF   )r   r   s     rG   
build_argsz0build_ignore_context_manager.<locals>.build_args0  s#    yyd3s#((3443s   *r   func_ignore_z
def (rK  z :)z: passz@torch.jit.ignore
z
globals()["z"] = ztorch.jit.frontend.r   )r   r   r	  keywordsr   rF   r:  r   r   r   r   
astunparseunparseexecrv   )r~   r  rD  rH  rP  rR  r?  r@  ignore_function_nameignore_function_strrO  
return_annreturn_stmtignore_functionignore_func_strassign_str_lhsassign_str_rhs
assign_str
assign_astr9  r;  s                      @@rG   build_ignore_context_managerrd    s   ;8IL65/:J %55 'tzz!}'A'A'J'JKOFG *,B3,MM"%99diifEsD3772EFFL 4G<J:00 ii 3499!<O  99O ))K(--a0K, ,j.@.@.QQO';&<EBVAWXXO  (N 2315
68JJSP  7|a#e+n<
#
:&++A.JE Fs   <#F5c                     | i S t        j                  |       }|j                  j                         D ci c]8  \  }}|j                  t         j
                  j                  ur||j                  : c}}S c c}}w )a   
    Get a dictionary of default arguments for a function.

    Args:
        fn: Callable - The function to inspect for default arguments.
    Returns:
        (Dict[str, Any]): mapping argument names to their default values if
        :attr:`fn` is not None, else empty dictionary.
    )r   	signature
parametersr   default	Parameterempty)r   rf  kvs       rG   get_default_argsrm  ^  ss     
z	!!"%I ((..0Aq99G--333 	
199  s   =A8c                      t        j                    fd      }|D ci c]  \  }}|t        |       }}}|S c c}}w )aC  
    Get default arguments for all methods in a class (except for static methods).

    Args:
        cls: type - The class type to inspect for default arguments.
    Returns:
        A Dict[str, Dict[str, Any]] which maps each method name to a Dict[str, Any]
        that maps each argument name to its default value.
    c                     t        j                  |       xs t        j                  |       xr1 t        | j                         xr | j                  j
                  v S rB   )r   r   r   r6   rh   r   r   s    rG   r   z,get_default_args_for_class.<locals>.<lambda>  sP    W--a0IG4F4Fq4I 'S!**--'JJ#,,& rI   r   )r   r   rm  )r   r   method_namemethod_impldefaultss   `    rG   get_default_args_for_classrs  t  sW       'G )0$K 	%k22H 
 Os   <c                       e Zd Zed        Zy)WithItemBuilderc                 D   |j                   j                  }|j                   j                  }|t        t        t
        j                           z   }|j                  }| j                  |||      }t        |t        | |j                         |rt        | |            S d       S rB   )r	  rz   r{   rv   r|   r   r2   optional_varsry   r3   r  )r~   itemrz   startendop_varsr  s          rG   r   zWithItemBuilder.build_withitem  s    ""))!!,,c+CHH566$$NN65#.sD--.(/JsG$
 	
 6:
 	
rI   N)rh   ri   rj   staticmethodr   rk   rI   rG   ru  ru    s    
 
rI   ru  c                      e Zd Zej                  dej
                  dej                  dej                  dej                  dej                  dej                  dej                  dej                  d	ej                  d
ej                  diZed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Z y)r   +-*/%|&^<<>>**c                 x    |j                   }|j                  j                  dk(  ry t        t	        | |            S )NStr)r  r   rh   r   r  )r~   r  r  s      rG   
build_ExprzStmtBuilder.build_Expr  s4    

??##u, JsE233rI   c                     t        | |j                        }|j                  D cg c]  }t        | |       }}t        ||      S c c}w rB   )r  r  targetsr
   )r~   r  rhsxlhss        rG   r   zStmtBuilder.build_Assign  sB    djj)+/<<8az#q!88c3 9s   Ac                    |j                   t        | |d      t        |j                        t        j
                  k(  r|j                  j                   j                  dk(  r| j                  dk7  r|j                  }|t        d|j                  j                         z   }t        |j                  d      r%|t        d|j                  j                         z  }| j                  |j                  ||      }t        d| j                   d	|       t!        | |j                         }t!        | |j                        }t!        | |j                        }t#        |g||      S )
Nzwithout assigned value)r   rb   rc   zself.r  z: zKType annotations on instance attributes must be declared in __init__, not 'z': )r  rq   ru   targetr   r   r  funcnamer{   rv   r  hasattrr   ry   rz   
ValueErrorr  r
   )r~   r  ry  rz  srr  r  the_types           rG   r   zStmtBuilder.build_AnnAssign  s/   ::&sD9QRR .!!$$.
*OOE#dkk&6&6%7899Ct-sR 2 23455UC8B""%,,s2$8 
 djj)dkk*c4??3seS(++rI   c           
          | j                  |j                  |j                  |j                  t        d      z         }t	        ||j
                  D cg c]  }t        | |       c}      S c c}w )NrM   )ry   rz   r{   rv   r   r  r  )r~   r  r  r  s       rG   build_DeletezStmtBuilder.build_Delete  sO    NN4;;3u:9UVaMf*S&1MNNMs   A,
c                     | j                  |j                  |j                  |j                  t        d      z         }t	        ||j
                  d       S t        | |j
                              S )Nreturn)ry   rz   r{   rv   r%   r  r  r~   r  r  s      rG   build_ReturnzStmtBuilder.build_Return  sW    NNKK$//CM*I
 a!3UUC9TUUrI   c                     | j                  |j                  |j                  |j                  t        d      z         }t	        | |j
                        }t        ||      S )NrP   )ry   rz   r{   rv   r  excr$   )r~   r  r  r/  s       rG   build_RaisezStmtBuilder.build_Raise  sE    NN4;;3w<9WX#txx(Q~rI   c                 
   | j                  |j                  |j                  |j                  t        d      z         }t	        | |j
                        }|j                  t	        | |j                        nd }t        |||      S )NrQ   )ry   rz   r{   rv   r  testr]   r	   )r~   r  r  r  r]   s        rG   build_AssertzStmtBuilder.build_Assert  sh    NNKK$//CM*I
 #tyy)+/88+?jdhh'Tas##rI   c                 f   t        | |j                        }t        | |j                        }t        |j                        }|t
        j                  v rt
        j                  |   }n>t        t        | |j                         j                  dd      d|j                  z         t        |||      S )N=)r   )offsetsz*unsupported kind of augmented assignment: )r  r  r  ru   opr   augassign_maprm   find_beforer   ry  rh   r   )r~   r  r  r  r  op_tokens         rG   build_AugAssignzStmtBuilder.build_AugAssign  s    dkk*djj)$'']***"004H#C!2!2CI<r{{J  h,,rI   c                    |j                   rt        d d      | j                  |j                  |j                  |j                  t        d      z         }t        |t        | |j                        t        | |j                              S )Nz-else branches of while loops aren't supportedwhile)orelserm   ry   rz   r{   rv   r1   r  r  r   r   r  s      rG   build_WhilezStmtBuilder.build_While  sl    ;; $E  NN4;;3w<9WXQ
3		2KTYY4OPPrI   c           	      D   | j                  |j                  |j                  |j                  t        d      z         }|j                  rt        |d      t        |t        | |j                        gt        | |j                        gt        | |j                              S )NrL   z+else branches of for loops aren't supported)ry   rz   r{   rv   r  rm   r   r  r  iterr   r   r  s      rG   	build_ForzStmtBuilder.build_For  s~    NN4;;3u:9UV;;#A'TUUT[[)*TYY'(TYY'	
 	
rI   c           	         | j                  |j                  |j                  |j                  t        d      z         }t	        |t        | |j                        t        | |j                        t        | |j                              S )Nif)
ry   rz   r{   rv   r   r  r  r   r   r  r  s      rG   build_IfzStmtBuilder.build_If  sc    NN4;;3t99TUsDII&TYY'T[[)	
 	
rI   c           
      N   | j                  |j                  |j                  |j                  t        d      z         }|j                  rt        |d      |j                  D cg c]  }t        | |       }}t        t        t        t        |d            |g             S c c}w )Nr@   z?print statements with non-default destinations aren't supported)ry   rz   r{   rv   destrm   valuesr  r   r   r0   r   )r~   r  r  valr   s        rG   build_PrintzStmtBuilder.build_Print&  s    NN4;;3w<9WX99#T  15<
3$<<c%7"34dB?@@ =s   $B"c                     | j                  |j                  |j                  |j                  t        d      z         }t	        |      S )Npass)ry   rz   r{   rv   r"   r  s      rG   
build_PasszStmtBuilder.build_Pass0  s2    NN4;;3v;9VWAwrI   c                     | j                  |j                  |j                  |j                  t        d      z         }t	        |      S )NrU   )ry   rz   r{   rv   r   r  s      rG   build_BreakzStmtBuilder.build_Break5  s2    NN4;;3w<9WXQxrI   c                     | j                  |j                  |j                  |j                  t        d      z         }t	        |      S )NrV   )ry   rz   r{   rv   r   r  s      rG   build_ContinuezStmtBuilder.build_Continue:  s8    NNKK$//C
O*K
 {rI   c                 N   | j                  |j                  |j                  |j                  t        d      z         }t	        |      r)t
        st        d      t        | |      }t        | |      S t        |t        | |j                        t        | |j                              S )NrO   ztorch.jit._IgnoreContextManager requires installing Python library `astunparse`,                                    please install it in your Python environment)ry   rz   r{   rv   r  _IS_ASTUNPARSE_INSTALLEDr   rd  r   r2   r   r   r   r   )r~   r  r  rc  s       rG   
build_WithzStmtBuilder.build_WithA  s    NN4;;3v;9VW.t4+"Q  6c4@Jc:..AsDJJ7S$))9TUUrI   N)!rh   ri   rj   r   AddSubMultDivModBitOrBitAndBitXorLShiftRShiftPowr  r|  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  rk   rI   rG   r   r     s   #		3

C

C

D

DM 4 4    
 , ,2 O O
 V V  
 $ $ - - Q Q 

 

 
 
 A A       V VrI   r   c                   "   e Zd Zej                  dej
                  dej                  dej                  dej                  dej                  dej                  dej                  dej                  d	ej                  d
ej                  dej                  diZdeej"                  <   ej$                  dej&                  dej(                  diZej,                  dej.                  diZej2                  dej4                  dej6                  dej8                  dej:                  dej<                  dej>                  dej@                  dejB                  dejD                  di
Z#e$d        Z%e$d        Z&e$d        Z'e$d        Z(e$d         Z)e$d!        Z*e$d"        Z+e$d#        Z,e$d$        Z-e$d%        Z.e$d&        Z/e$d'        Z0e$d(        Z1e$d)        Z2e$d*        Z3e$d+        Z4e$d,        Z5e$d-        Z6e$d.        Z7e$d/        Z8e$d0        Z9e$d1        Z:y2)3ExprBuilderr~  r  r  r  r  r  z//r  r  r  r  r  @not~andorz==z!=z<=<z>=>iszis notinznot inc                    t        | |j                        }| j                  j                  d      fd}|j	                         j
                  dz   } ||      t        j                  v r|dz  } ||      t        j                  v r|t        |j                        z   }| j                  ||      }t        |t        ||j                              S )Nzutf-8c                      t        |          S rB   )chr)indexr   s    rG   get_charz-ExprBuilder.build_Attribute.<locals>.get_char  s    ve}%%rI   r   )r  r  r   encoder   rz  string
whitespacerv   r  make_raw_ranger&   r   )r~   r/  baser  	start_posend_pos
name_ranger   s          @rG   build_AttributezExprBuilder.build_Attributez  s    #tzz* ""7+	& JJL$$q(	y!V%6%66NI y!V%6%66c$))n,''	7;
dE*dii899rI   c           	      H   t        | |j                        }|j                  D cg c]  }t        | |       }}t        |d      r@|j                  r4t        | |j                        }|t        |j                         |      gz  }g }|j                  D ]{  }t        | |j                        }|j                  st        |j                         d      |j                  t        t        |j                         |j                        |             } t        |||      S c c}w )Nstarargsz&keyword-arg expansion is not supported)r  r   r   r  r  r(   r   rV  r  r   rm   r   r   r   r   )	r~   r/  r   r6  r   stararg_exprkwargskwkw_exprs	            rG   
build_CallzExprBuilder.build_Call  s    #tyy)6:ii@F
3'@@4$%c4==9LW\//1<@AAD-- 	NB bhh/G66'MMO%M  MM)E'--/266$BGLM	N T4(( As   Dc                     | j                  |j                  |j                  |j                  dz         }t        |      S )N   )ry   rz   r{   r   r~   r/  r  s      rG   build_EllipsiszExprBuilder.build_Ellipsis  s3    NNKK$//A*=
 AwrI   c                    | j                  |j                  |j                  |j                  t        |j                        z         }|j                  j                  t              rt        |dt        z         |j                  dk(  rt        |      S |j                  dk(  rt        |      S |j                  dk(  rt        |      S |j                  dk(  rt        |      S t        t        ||j                              S )Nz=names of variables used in JIT-ed functions can't start with TrueFalseNoneEllipsis)ry   rz   r{   rv   r  rC   rD   rm   r-   r   r    r   r0   r   r  s      rG   
build_NamezExprBuilder.build_Name  s    NN4;;3tww<9WX77./#$&67 
 77fq>!WW?"WWq>!WW
"7N5DGG$%%rI   c           
         | j                  |j                  |j                  |j                  t        t	        |j
                              z         }|j
                  du rt        |      S |j
                  du rt        |      S |j
                  t        |      S |j
                  t        k(  rt        |      S t        dt	        |j
                        z         )NTFz!Name constant value unsupported: )ry   rz   r{   rv   strr  r-   r   r    r  r   r  r  s      rG   build_NameConstantzExprBuilder.build_NameConstant  s    NNKK$//CDJJ<P*P
 ::q>!ZZ5 ?"ZZq>!ZZ8#7N@3tzz?RSSrI   c                 p   t        | |j                        }t        | |j                        }t        |j                        }|t
        j                  k(  rZ| j                  sN| j                  |j                         j                  |j                         j                        }t        |d      t        j                  j                  |      }|[| j                  |j                         j                  |j                         j                        }t!        |d|j"                  z         t%        |||      S )NzDivision of ints in TorchScript uses Python 3 true division semantics. Please put `from __future__ import division` at the top of your filezunsupported binary operator: )r  leftrightru   r  r   r  uses_true_divisionr  r   rz  ry  rZ   r  	binop_maprx   rm   rh   r   )r~   r/  r  r  r  	err_ranger  s          rG   build_BinOpzExprBuilder.build_BinOp  s    dii(djj)$'']=!7!7**399;??CIIK<M<MNI;  ((,,R0**399;??CIIK<M<MNI#:R[[H  XsC((rI   c                 |   t        | |j                        }t        |j                        }t        j
                  j                  |      }|'t        |j                         d|j                  z         | j                  |j                  |j                  |j                  t        |      z         }t        |||      S )Nzunsupported unary operator: )r  operandru   r  r  unop_maprx   rm   r   rh   ry   rz   r{   rv   r/   )r~   r/  sub_exprr  r  r  s         rG   build_UnaryOpzExprBuilder.build_UnaryOp  s    c4<<0$'']''++B/#

<r{{J  NNKK$//CM*I
 q(H--rI   c                 @   t        |j                        dk  r*t        dt        t        |j                              z         |j                  D cg c]  }t	        | |       }}t        |j                        }t        j                  j                  |      }|a| j                  |d   j                         j                  |d   j                         j                        }t        |d|j                  z         |d   }|dd  D ]  }t!        |||      } |S c c}w )N   z.expected at least 2 values in BoolOp, but got r   r   zunsupported boolean operator: )rv   r  AssertionErrorr  r  ru   r  r  
boolop_maprx   r  r   rz  ry  rm   rh   r   )	r~   r/  r  	sub_exprsr  r  r  r  r  s	            rG   build_BoolOpzExprBuilder.build_BoolOp  s   t{{a @3s4;;GWCXX  @D{{K8ZX.K	K$'']))--b1**!""$(()A,*<*<*>*D*DI $;bkkI  lQR= 	,C#s+C	,
 Ls   Dc                     t        t        | |j                        t        | |j                        t        | |j                              S rB   )r,   r  r  r   r  )r~   r/  s     rG   build_IfExpzExprBuilder.build_IfExp   s9    sDII&sDII&sDKK(
 	
rI   c                 v   |j                   gt        |j                        z   D cg c]  }t        | |       }}d }t	        ||j
                  |dd        D ]  \  }}}t        |      }t        j                  j                  |      }	| j                  |j                         j                  |j                         j                        }
|	t        |
d|j                  z         |t         j"                  k(  rt%        d||      }t'        |
d|      }nt%        |	||      }||}t%        d||      } |S c c}w )Nr   z!unsupported comparison operator: r  r  r  )r  r   comparatorsr  zipopsru   r  	cmpop_maprx   r  r   rz  ry  rm   rh   r   NotInr   r/   )r~   r/  eoperandsr4  r  op_r  r  r  r  in_exprcmp_exprs                rG   build_ComparezExprBuilder.build_Compare  s&   15d4CSCS>T0TU1JsA&UU 488Xab\B 	8MCccB",,004H""399;??CIIK4E4EFA':R[[H  SYY  c3/"1eW5 34~!ufh7)	8* / Vs   D6c                   	
 d 
d 		
fd}t        | |j                        }t        |j                        }|t        j
                  u rt        |j                  j                  t        j                        r|j                  j                  j                  D cg c]  }t        | |       }}|sy| j                  |j                  |j                  j                  j                  |j                  j                  j                  dz         }t        |g       }|j                  |       t        ||      S t        |t        | |j                  j                        g      S |t        j                  u rt        | 
| ||j                        g      S |t        j                   u rt        | || ||j                              S t"        j$                  dk\  r|t        j                  u rg }|j                  j                  D ]Q  }t        |t        j                        r|j                   
| ||             7|j                  t        | |             S |se| j                  |j                  |j                  j                  |j                  j                  dz         }t        |g       }|j                  |       t        ||      S t        |t        | |j                        g      S t'        |j)                         d      c c}w )Nc                    |j                   t        | |j                         nd }|j                  t        | |j                        nd }|j                  t        | |j                        nd }t	        |j                         |||      S rB   )lowerr  upperstepr'   r   )r~   r  
slice_exprr   r!  r"  s         rG   build_SliceExprz4ExprBuilder.build_Subscript.<locals>.build_SliceExpr%  s     ##/ 3
 0 01  ##/ 3
 0 01  ??. 3
0 
 TZZ\5%>>rI   c                     t        |j                  t        j                        rt	        |j                         d      t        | |j                        S )Nz9slicing multiple dimensions with tuples not supported yet)r   r  r   r   rm   r   r  )r~   r  
index_exprs      rG   build_Indexz0ExprBuilder.build_Subscript.<locals>.build_Index7  sD    ***CII6'JJLO  c:#3#344rI   c                    g }|j                   D ]  }t        |      }|t        j                  u r|j	                   | ||             :|t        j
                  u r|j	                   | ||             f|t        j                  u r;|j                  t        u r)|j	                  t        |j                                      t        |j                         d| d       |S )Nz!slicing multiple dimensions with z not supported)dimsru   r   Indexr   SliceConstantr  r  r   r   rm   )r~   r  extslicer  r/  sub_typer'  r$  s         rG   build_ExtSlicez3ExprBuilder.build_Subscript.<locals>.build_ExtSlice?  s    I  :syy($$[dD%AB*$$_S$%EF-$**2H$$T$**,%78+

;H:^T  rI   r  )r  	   zellipsis is not supported)r  r  ru   slicer   r*  r   r   eltsry   rz   r{   r.   r   r+   r+  ExtSlicesysversion_inform   r   )r~   r/  r/  r  r.  r&  indicesr  tupr'  r$  s            @@rG   build_SubscriptzExprBuilder.build_Subscript#  sr   	?$	5	" #tzz*

#syy $****CII6 CG**BRBRBWBW4>JsJ/   

((33

((33a7A
 'q"-CNN3' w// 
3

8H8H(I'JKK"TOCtzz$J#KLL%T>#tTZZ#HII "
 
 399$"&**// DJ!*cii8sD*'MNz#z'BC	D TZZ%:%:DJJ<Q<QTU<UA 'q"-CNN3' w//TJsDJJ$?#@AA#DJJL2MNNYs   Lc           
          t        | j                  |j                  |j                  |j                  dz         |j                  D cg c]  }t        | |       c}      S c c}w Nr   )r   ry   rz   r{   r2  r  r~   r/  r  s      rG   
build_ListzExprBuilder.build_List  sL    NN4;;19LM)-3AZQ3
 	
3   A!
c           
          t        | j                  |j                  |j                  |j                  dz         |j                  D cg c]  }t        | |       c}      S c c}w r:  )r.   ry   rz   r{   r2  r  r;  s      rG   build_TuplezExprBuilder.build_Tuple  sL    NN4;;19LM)-3AZQ3
 	
3r=  c                 n   | j                  |j                  |j                  |j                  dz         }|j                  r|j                  d   st	        |d      t        ||j                  D cg c]  }t        | |       c}|j                  D cg c]  }t        | |       c}      S c c}w c c}w )Nr   r   z1Dict expansion (e.g. `{**dict}`) is not supported)ry   rz   r{   keysrm   r   r  r  )r~   r/  r   r  s       rG   
build_DictzExprBuilder.build_Dict  s    t{{DOOT__q=PQ99TYYq\#J  )-3AZQ3)-5AZQ5
 	
35s   0B-
B2c                     t        |j                        }| j                  |j                  |j                  |j                  t        |      z         }t        ||      S rB   )r  r  ry   rz   r{   rv   r   r~   r/  r  r  s       rG   	build_NumzExprBuilder.build_Num  sB    DJJNN4;;3u:9UVQrI   c           
         |j                   }|t        |t              rt        j	                  | |      S t        |t
        t        t        f      rt        j                  | |      S t        |t              rt        j                  | |      S t        |t        t                    rt        j                  | |      S | j                  |j                  |j                   |j                   t#        t        |            z         }t%        |d      )Nz Unknown Constant expression type)r  r   r,  r  r  intfloatcomplexrE  r  	build_Strru   r  r  ry   rz   r{   rv   rZ   )r~   r/  r  error_ranges       rG   build_ConstantzExprBuilder.build_Constant  s    

=Jud3 11#t<<ec5'23((d33s#((d33tH~.--c488..T__dooCJ.OK  -OPPrI   c                     t        |j                        }| j                  |j                  |j                  |j                  t        |      z   dz         }t        ||      S r:  )r  r  ry   rz   r{   rv   r*   rD  s       rG   rJ  zExprBuilder.build_Str  sM    DJJNNKK$//CJ*F*J
 Q&&rI   c           	         d}g }|j                   D ]  }| j                  |j                  |j                  |j                  dz         }t	        |t
        j                        r^|j                  dk7  rt        |d      |j                  t        |d      |dz  }|j                  t        | |j                               t	        |t
        j                        r||j                  z  }t        |d       | j                  |j                  |j                  |j                  dz         }t        t        t!        ||      t#        |d            |g       S )	Nrt   r   r  z%Don't support conversion in JoinedStrz%Don't support formatting in JoinedStrz{}zUnsupported value in JoinedStrformat)r  ry   rz   r{   r   r   FormattedValue
conversionrm   format_specr   r  r  r,  r   r&   r*   r   )r~   r/  r   r   r  r  s         rG   build_JoinedStrzExprBuilder.build_JoinedStr  s"   [[ 	MEu||U-=-=u?O?ORS?STA%!3!34##r)+A/VWW$$0+A/VWWT	JsEKK89E3<<0U[[ '+KLL	M NN4;;19LMVM!Q/q(1CDdBOOrI   c                    | j                  |j                  |j                  |j                        }t        |j                        dk7  rt        |d      t        |j                  d   j                        dk7  rt        |d      t        | |j                        }t        | |j                  d   j                        }t        | |j                  d   j                        }t        ||||      S Nr   z.Only a single generator is currently supportedr   z'Comprehension ifs are not supported yet)ry   rz   r{   rv   
generatorsrm   ifsr  eltr  r  r   )r~   r  r  elt_exprtarget_expr	iter_exprs         rG   build_ListCompzExprBuilder.build_ListComp  s    NN4;;It1$#A'WXXtq!%%&!+#A'PQQc488, dooa&8&?&?@sDOOA$6$;$;<	8[)<<rI   c                 .    t         j                  | |      S rB   )r  r\  )r~   r  s     rG   build_GeneratorExpzExprBuilder.build_GeneratorExp  s     ))#t44rI   c                    | j                  |j                  |j                  |j                        }t        |j                        dk7  rt        |d      t        |j                  d   j                        dk7  rt        |d      t        | |j                        }t        | |j                        }t        | |j                  d   j                        }t        | |j                  d   j                        }t        |||||      S rU  )ry   rz   r{   rv   rV  rm   rW  r  keyr  r  r  r   )r~   r  r  key_expr
value_exprrZ  r[  s          rG   build_DictCompzExprBuilder.build_DictComp  s    NN4;;It1$#A'WXXtq!%%&!+#A'PQQc488,TZZ0
 dooa&8&?&?@sDOOA$6$;$;<	8ZiHHrI   c                     | j                  |j                  |j                  |j                  dz         }t        |t	        | |j
                              S r:  )ry   rz   r{   r(   r  r  r  s      rG   build_StarredzExprBuilder.build_Starred  s=    NN4;;19LMq*S$**566rI   N);rh   ri   rj   r   r  r  r  r  r  r  FloorDivr  r  r  r  r  r  MatMultNotUSubInvertr  AndOrr  EqNotEqLtELtGtEGtIsIsNotInr  r  r|  r  r  r  r  r  r  r	  r  r  r  r8  r<  r?  rB  rE  rL  rJ  rS  r\  r^  rc  re  rk   rI   rG   r  r  P  s   #d

C

C		3

D

DI !Ickk 	#

CH 	J 			4		8		8I : :  ) )"   & &$ T T ) )* . .  ( 
 
  4 ^O ^O@ 
 
 
 
 

 

  
 Q Q$ ' ' P P( = = 5 5 I I 7 7rI   r  c                     | j                   d | j                  |      }| j                  ||d   z   |t        |      z   |d   z         S )Nr   r   )r   rindexr  rv   )r~   possubstrr  new_poss        rG   r  r    sL    jj#%%f-Gg
2Gc&k4IGTUJ4VWWrI   )NF)NNrB   ))r   r   )r   r   r   rF  r  r4  collectionsr   textwrapr   typingr   r   r^   torch.jit.annotationsr   torch._C._jit_tree_viewsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   torch._jit_internalr4   r5   r6   r7   torch._sourcesr8   r9   r:   r;   r   torch.jit._dataclass_implsr<   torch.jit._monkeytype_configr=   r>   r  rW  ImportErrorrD   rE   setascii_lowercaseascii_uppercasedigits_identifier_charsrH   r   Import
ImportFromGlobalr|   rw   updateAsyncFunctionDefAsyncFor	AsyncWithTryNonlocalr   	ExceptionrZ   rm   rq   r   r   r   r   r   r   r   r  r  r   r   r*  r  r-  rd  rm  rs  ru  r   r  r  r   r   r  rk   rI   rG   <module>r     sf   
   	  
 "     - - - - - - - - - - - -\   ? M ! 	#  )..1G1GG&--WX H
 OO+GG[JJ LL%HHII!JJJJ#NN'JJ"II!LL'   OOUGGUJJLL'HHfIIwJJJJNNFJJIIwLL*    :'.*   kk|j   .
<I 
<	 	,, ,	 	
%
D$GXT?F$! !A&2 1h>Sl,:
g 
 lV' lV^l7' l7^ ]
]
 "Xe%  		s    M6 6M?>M?