U
    §Ê¹j~­  ã                   @   sÞ  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ZMzd dlNZNdZMW n eOk
�r¢   Y nX dZPdhZQeRejSejT ejU ƒZVdd„ ZWe jXde j$de jde jde j;de j-de jde jYde jZde j[de jde jdiZ\e jXde j$de jde jde j;d e j-d!e jd"e jYd#e jZd$e j[d%e jd&e jd'iZ]e\ ^e j_d(e j`d)e jad*e jbd+e jcd,i¡ e] ^e j_d-e j`d.e jad/e jbd0e jcd1i¡ e\ ^e jdd2i¡ G d3d4„ d4eeƒZfG d5d6„ d6efƒZgG d7d8„ d8egƒZhG d9d:„ d:efƒZid;d<„ Zjd=d>„ Zkd?d@„ ZldAdB„ ZmdCdD„ ZndcdEdF„ZodGdH„ ZpG dIdJ„ dJƒZqdKdL„ ZrdddMdN„ZsdOZtdedPdQ„ZudfdRdS„ZvdTdU„ ZwdVdW„ ZxdXdY„ ZyG dZd[„ d[eqƒZzG d\d]„ d]eqƒZ{G d^d_„ d_eqƒZ|e|ƒ Z}e{ƒ Z~ezƒ Zdgdadb„Z€dS )hé    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_traceFTZ__jitÚprintc                 C   s   |   t¡p| tkS ©N)Ú
startswithÚ_reserved_prefixÚ_reserved_names©Úname© rE   úQ/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/jit/frontend.pyÚis_reserved_name[   s    rG   zfunction definitionsz	for loopszdel statementszclass definitionszwith statementszraise statementsZ
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                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFrontendErrorc                 C   s    || _ || _tj | j ¡| _d S r?   )Úsource_rangeÚmsgÚtorchÚ_CÚErrorReportÚerror_report)ÚselfrW   rX   rE   rE   rF   Ú__init__š   s    zFrontendError.__init__c                 C   s   | j | j ¡  ¡  S r?   )rX   r\   ÚwhatÚlstrip)r]   rE   rE   rF   Ú__str__¢   s    zFrontendError.__str__N)Ú__name__Ú
__module__Ú__qualname__r^   ra   rE   rE   rE   rF   rV   ™   s   rV   c                   @   s   e Zd ZdS )ÚNotSupportedErrorN©rb   rc   rd   rE   rE   rE   rF   re   ¦   s   re   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )ÚUnsupportedNodeErrorÚ c           	         sl   t |ƒ}tt |d¡ƒ}| |j|j|j| ¡}t ||j¡}|› d|rP|d nd› d�}t	ƒ  
||¡ d S )Nú rh   zaren't supported)ÚtypeÚlenÚnode_start_tokensÚgetÚ
make_rangeÚlinenoÚ
col_offsetÚpretty_node_namesrb   Úsuperr^   )	r]   ÚctxZoffending_nodeÚreasonZ	node_typeZ	range_lenrW   Zfeature_namerX   ©Ú	__class__rE   rF   r^   «   s    ýzUnsupportedNodeError.__init__)rh   )rb   rc   rd   r^   Ú__classcell__rE   rE   ru   rF   rg   ª   s   rg   c                   @   s   e Zd ZdS )ÚFrontendTypeErrorNrf   rE   rE   rE   rF   rx   ¹   s   rx   c                    s   ‡ fdd„|D ƒ}t |ƒS )Nc                    s   g | ]}t ˆ |ƒ‘qS rE   )Úbuild_withitem)Ú.0Úi©rs   rE   rF   Ú
<listcomp>¾   s     z#build_withitems.<locals>.<listcomp>)Úlist)rs   ÚitemsrE   r|   rF   Úbuild_withitems½   s    r€   c                    s    ‡ fdd„|D ƒ}t td |ƒƒS )Nc                    s   g | ]}t ˆ |ƒ‘qS rE   )Ú
build_stmt)rz   Úsr|   rE   rF   r}   Ã   s     zbuild_stmts.<locals>.<listcomp>)r~   Úfilter)rs   ZstmtsrE   r|   rF   Úbuild_stmtsÂ   s    r„   c              	   C   s¾   t j| dd„ d�}t| dg ƒ}g }|D ]’}|d |kr&t|d jƒs&t|d jd|d › d�|d	�}|d jrŽt|d jd|d › d
�|d	�nd}| t| 	¡ t
| 	¡ |d ƒ||ƒ¡ q&|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                 S   s
   t | tƒS r?   )Ú
isinstanceÚproperty©ÚmrE   rE   rF   Ú<lambda>Ò   ó    z&get_class_properties.<locals>.<lambda>©Ú	predicateZ__jit_unused_properties__r   é   Ú__Ú_getter)Ú	self_nameÚ_setterN)ÚinspectÚ
getmembersÚgetattrr6   ÚfgetÚget_jit_defÚfsetÚappendr"   Úranger   )Úclsr�   ÚpropsZunused_propertiesÚ
propertiesÚpropÚgetterÚsetterrE   rE   rF   Úget_class_propertiesÇ   s$      ÿÿ"ýÿr    c                    sT   g ‰ ‡ ‡fdd„}|j D ]6}t|tjƒr6|tj|ƒ qt|tjƒr|tj|ƒ qˆ S )Nc                    s.   zˆ   | ˆ|ƒ¡ W n tk
r(   Y nX d S r?   )r˜   re   )ZbuilderÚentry©Úassignsrs   rE   rF   Úmaybe_build_assignì   s    z-get_class_assigns.<locals>.maybe_build_assign)Úbodyr…   Úastr	   ÚStmtBuilderÚbuild_AssignÚ	AnnAssignÚbuild_AnnAssign)rs   Zcls_astr¤   r¡   rE   r¢   rF   Úget_class_assignsé   s    
r«   c                    sV  t jˆ ‡ fdd„d�}‡ fdd„‰tˆ tjj ¡ ƒ\}}}d |¡}t|ƒ}t	 
|¡}|jd }	t|	t	jƒspt‚t ˆ ¡rädd	„ |	jD ƒ}
t|ƒD ]P\}\}}t |¡}|r’||
kr’|ˆ ƒ}||f||< tˆ |ƒ}tj ||j¡ q’‡‡fd
d„|D ƒ}tˆ ˆƒ}t| dd¡d ƒt| dd¡d ƒ }t||||dƒ}t||	ƒ}t||	||ˆ|ƒS )Nc                    s8   t  | ¡st  | ¡o6tˆ | jƒ o6| jˆ jko6t| ƒ S r?   )r’   ÚismethodÚ
isfunctionr5   rb   Ú__dict__r3   r‡   ©rš   rE   rF   r‰      s
   ÿ
þz#get_jit_class_def.<locals>.<lambda>r‹   c                    s   t  | ¡ot| dd ƒˆ kS )NÚ__self__)r’   r¬   r”   )Úfnr¯   rE   rF   Úis_classmethod  s    z)get_jit_class_def.<locals>.is_classmethodrh   r   c                 S   s(   h | ] }t |tjƒr|jtkr|j’qS rE   )r…   r¦   ÚFunctionDefrD   r;   ©rz   ÚmethodrE   rE   rF   Ú	<setcomp>  s   
ýz$get_jit_class_def.<locals>.<setcomp>c                    s$   g | ]\}}t ||ˆˆ |ƒd �‘qS ))r�   r²   )r–   )rz   rD   Úobj)r²   r�   rE   rF   r}   +  s   ÿz%get_jit_class_def.<locals>.<listcomp>Ú
r�   F)r’   r“   r7   rY   rZ   r[   Z
call_stackÚjoinr   r¦   Úparser¥   r…   r   ÚAssertionErrorÚdataclassesÚis_dataclassÚ	enumerater;   rm   r”   r   ÚloaderÚcacheÚsourcer    rk   Úsplitr8   r«   Úbuild_class_def)rš   r�   ÚmethodsÚsourcelinesÚfile_linenoÚfilenamerÁ   Z
dedent_srcZpy_astZ	class_astZ	overridesr{   rD   Ú_Zsynthesizer_fnÚ
parsed_defÚfuncZmethod_defsrœ   Zleading_whitespace_lenrs   r£   rE   )rš   r²   r�   rF   Úget_jit_class_defû   sR    
þ 
ÿ




þ

þ
ÿ    ÿ
rË   c                 C   s`  t | tƒst| ƒn| }tjj |j¡}|jj	d }|rl|j
j
d j}t |› d|› �¡j	d }|j	 d|¡ t| ƒ�rt d¡}	t|	j	ƒdks t |	j	d tjƒs¸td|j› d|j› �ƒ‚|	j	d }
|
j	|_	d |j
_|j
_|j
j
|j
j D ]}|
j
j
d j|_qêt| ƒ�rd|_d|_tjj ¡ }d}t�rJt | tƒ�sJt| ƒ}| |¡}t |j!|||||d�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…   Ú
_ParsedDefr9   rY   ÚjitÚannotationsZget_type_linerÁ   r¦   r¥   ÚargsÚargrº   Úinsertr6   rk   r³   ÚRuntimeErrorrÇ   rÆ   ÚkwargÚvarargÚ
kwonlyargsÚ
annotationr3   ÚreturnsZtype_commentÚ_scriptZ_get_type_trace_dbr=   r<   Zget_args_typesÚ	build_defrs   )r±   Údef_namer�   r²   rÉ   Ú	type_lineZfn_defZarg_nameZassign_stmtZunused_fn_defZ
unused_defrÓ   Ztype_trace_dbrÎ   ÚqualnamerE   rE   rF   r–   <  sN    
ÿ ÿÿ


úr–   c                 C   sz   t | jd jtjƒrv| jd jj}t |tjƒrv|j}|j}|dkrvt |tjƒrv|jdkrvt |jtj	ƒrv|jj
dkrvdS dS )Nr   Z_IgnoreContextManagerrÐ   rY   TF)r…   r   Úcontext_exprr¦   ÚCallrÊ   r
   ÚattrÚvalueÚNameÚid)ÚstmtÚfunctionÚ	attr_nameZ
attr_valuerE   rE   rF   Ú#is_torch_jit_ignore_context_manager  s    
 ÿré   c                   @   s   e Zd Zdd„ ZdS )ÚBuilderc                 C   s0   t | d|jj d ƒ}|d kr&t||ƒ‚|||ƒS )NZbuild_)r”   rv   rb   rg   )r]   rs   Únoderµ   rE   rE   rF   Ú__call__’  s    
zBuilder.__call__N)rb   rc   rd   rì   rE   rE   rE   rF   rê   ‘  s   rê   c                 C   s:   |   |j|j|jtdƒ ¡}tt||ƒdd„ |D ƒ||ƒS )NrK   c                 S   s   g | ]}t |ƒ‘qS rE   )r(   r´   rE   rE   rF   r}   ž  s     z#build_class_def.<locals>.<listcomp>)rn   ro   rp   rk   r   r   )rs   Úpy_defrÄ   rœ   r�   r£   ÚrrE   rE   rF   rÃ   ™  s      ÿ   ÿrÃ   c                 C   s¢   |j }|  |j|j|jtdƒ ¡}t| |j||ƒ}d }	t|dd ƒd k	rRt| |j	ƒ}	t
|||	ƒ}
|d k	}|d k	rŠtj |¡}tj |
||¡}
tt||ƒ|
t| |ƒƒS )NrH   rÚ   )r¥   rn   ro   rp   rk   Úbuild_param_listrÒ   r”   Ú
build_exprrÚ   r   rY   rZ   Zparse_type_commentZmerge_type_from_type_commentr   r   r„   )rs   rí   rÞ   rÝ   r�   rÎ   r¥   rî   Z
param_listÚreturn_typeÚdeclZ	is_methodZtype_comment_declrE   rE   rF   rÜ   ¢  s    rÜ   zfCompiled functions can't take variable number of arguments or use keyword-only arguments with defaultsc           
         s
  |j d k	r<|j }ˆ  |j|jd |jt|jƒ ¡}t|tƒ‚|jd k	rx|j}ˆ  |j|jd |jt|jƒ ¡}t|tƒ‚t|j	ƒdkr²|j	D ]$}|d k	rŒt
ˆ |ƒ ¡ }t|tƒ‚qŒ‡fdd„|jD ƒ}‡fdd„|jD ƒ}‡ ‡fdd„|D ƒ}	|	‡ ‡fdd„|D ƒ7 }	|	S )Nr�   r   c                    s0   g | ](}|ˆ r&t ˆ |j ƒr&ˆ |j nd f‘qS r?   ©ÚboolrÓ   ©rz   rÓ   ©rÎ   rE   rF   r}   Ð  s   ûÿÿüz$build_param_list.<locals>.<listcomp>c                    s0   g | ](}|ˆ r&t ˆ |j ƒr&ˆ |j nd f‘qS r?   ró   rõ   rö   rE   rF   r}   Ù  s   ûÿÿüc              	      s"   g | ]\}}t ˆ |ˆd |d�‘qS )F©Ú
kwarg_onlyÚpdt_arg_type©Úbuild_param©rz   rÓ   Zarg_type©rs   r�   rE   rF   r}   ã  s   ÿc              	      s"   g | ]\}}t ˆ |ˆd |d�‘qS )Tr÷   rú   rü   rý   rE   rF   r}   ç  s   ÿ)rÖ   rn   ro   rp   rk   rÓ   re   Ú_vararg_kwarg_errr×   Úkw_defaultsrð   r™   rÒ   rØ   )
rs   Zpy_argsr�   rÎ   ÚexprZ	ctx_rangerÓ   Zarg_and_typesZarg_and_types_kwonlyargsÚresultrE   )rs   rÎ   r�   rF   rï   º  sD    
  ÿ

  ÿ


ù	
ù
þþrï   c                 C   sŽ   |j }|  |j|j|jt|ƒ ¡}t|dd ƒd k	r@t| |jƒ}n<|rTtt	||ƒƒ}n(|d k	rt|dkrttt	||ƒƒ}nt
|ƒ}t|t	||ƒ|ƒS )NrÙ   r]   )rÓ   rn   ro   rp   rk   r”   rð   rÙ   r/   r   r   r    )rs   Úpy_argr�   rø   rù   rD   rî   Zannotation_exprrE   rE   rF   rû   î  s    rû   c                    sX  t dddgƒ‰ t dddgƒ‰‡ ‡fdd„}dd„ }d	d
„ }dd„ }||jd jjƒ\}}d|| |ƒ }d| }	|	dd dd„ |D ƒ¡ d 7 }	||ƒ\}
}|	|
d 7 }	t |	¡jd }|j|_t |¡jd }|j |¡ dt	 
|¡ }|d|› d|› �7 }t|ƒ ||ƒ}d|› d�||ƒ d }t|ƒdk�r@|d | }n|}t |¡jd }|S )NÚ	InputTyperD   ÚannÚ
OutputTypec                    sf   g }g }| D ]P}|j }|jj}| d¡\}}|dkrD| ˆ ||ƒ¡ |dkr| ˆ||ƒ¡ q||fS )NrÍ   ZinpÚout)rÓ   rã   rÂ   r˜   )rÒ   ÚinputsÚoutputsrÓ   Úvar_nameZvar_annZvar_decl_type©r  r  rE   rF   Úprocess_ins_outs  s    z6build_ignore_context_manager.<locals>.process_ins_outsc                 S   s    t  dd| j¡}|› d|j› �S )Nz[^a-zA-Z0-9_]rÈ   )ÚreÚsubrÇ   ro   )rs   ræ   r±   rE   rE   rF   Úcreate_unique_name_ext  s    z<build_ignore_context_manager.<locals>.create_unique_name_extc                 S   s”   d}d}t | ƒdkr|d7 }t | ƒdkrDd| d j }|| d j7 }t | ƒdkrŒd}|dd	 d
d„ | D ƒ¡ d 7 }|d	 dd„ | D ƒ¡7 }||fS )Nrh   zreturn r   z -> Noner�   z -> z	 -> Tupleú[ú, c                 S   s   g | ]
}|j ‘qS rE   )r  ©rz   ÚvarrE   rE   rF   r}   !  s     zObuild_ignore_context_manager.<locals>.build_return_ann_stmt.<locals>.<listcomp>ú]c                 S   s   g | ]
}|j ‘qS rE   rC   r  rE   rE   rF   r}   "  s     )rk   r  rD   r¹   )r  Zreturn_type_annZreturn_statement_strrE   rE   rF   Úbuild_return_ann_stmt  s     z;build_ignore_context_manager.<locals>.build_return_ann_stmtc                 S   s   d  dd„ | D ƒ¡S )Nr  c                 S   s   g | ]
}|j ‘qS rE   rC   rõ   rE   rE   rF   r}   &  s     zDbuild_ignore_context_manager.<locals>.build_args.<locals>.<listcomp>)r¹   )rÒ   rE   rE   rF   Ú
build_args%  s    z0build_ignore_context_manager.<locals>.build_argsr   Zfunc_ignore_z
def ú(r  c                 S   s   g | ]}|j d  |j ‘qS )z :)rD   r  r  rE   rE   rF   r}   .  s     z0build_ignore_context_manager.<locals>.<listcomp>ú)z: passz@torch.jit.ignore
z
globals()["z"] = ztorch.jit.frontend.rÌ   )r   r   rà   Úkeywordsr¹   r¦   rº   r¥   r˜   Ú
astunparseZunparseÚexecrk   )rs   ræ   r  r  r  r  r  r  Zignore_function_nameZignore_function_strZ
return_annZreturn_stmtZignore_functionZignore_func_strZassign_str_lhsZassign_str_rhsZ
assign_strÚ
assign_astrE   r
  rF   Úbuild_ignore_context_managerý  s:    ÿÿr  c                 C   s*   | d kri S t  | ¡}dd„ |j ¡ D ƒS )Nc                 S   s&   i | ]\}}|j tjjk	r||j “qS rE   )Údefaultr’   Ú	ParameterÚempty)rz   ÚkÚvrE   rE   rF   Ú
<dictcomp>Y  s   þ z$get_default_args.<locals>.<dictcomp>)r’   Ú	signatureÚ
parametersr   )r±   r#  rE   rE   rF   Úget_default_argsS  s    
þr%  c                    s(   t jˆ ‡ fdd„d�}dd„ |D ƒ}|S )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                    s.   t  | ¡st  | ¡o,tˆ | jƒ o,| jˆ jkS r?   )r’   r¬   r­   r5   rb   r®   r‡   r¯   rE   rF   r‰   n  s   ÿz,get_default_args_for_class.<locals>.<lambda>r‹   c                 S   s   i | ]\}}|t |ƒ“qS rE   )r%  )rz   Úmethod_nameZmethod_implrE   rE   rF   r"  u  s   ÿ z.get_default_args_for_class.<locals>.<dictcomp>)r’   r“   )rš   rÄ   ÚdefaultsrE   r¯   rF   Úget_default_args_for_class`  s    
þ	þr(  c                   @   s   e Zd Zedd„ ƒZdS )ÚWithItemBuilderc                 C   sX   |j j}|j j}|tttj ƒ }|j}|  |||¡}t	|t
| |j ƒ|rRt
| |ƒnd ƒS r?   )rà   ro   rp   rk   rq   r¦   r1   Zoptional_varsrn   r2   rð   )rs   Úitemro   ÚstartÚendZop_varsrî   rE   rE   rF   ry   ~  s    
ýzWithItemBuilder.build_withitemN)rb   rc   rd   Ústaticmethodry   rE   rE   rE   rF   r)  }  s   r)  c                   @   s  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d„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZed d!„ ƒZed"d#„ ƒZed$d%„ ƒZed&d'„ ƒZed(d)„ ƒZed*d+„ ƒZ d,S )-r§   ú+ú-Ú*ú/ú%ú|ú&ú^ú<<ú>>ú**c                 C   s(   |j }|jjdkrd S tt| |ƒƒS d S )NÚStr)rã   rv   rb   r   rð   )rs   ræ   rã   rE   rE   rF   Ú
build_Exprœ  s    zStmtBuilder.build_Exprc                    s*   t ˆ |jƒ}‡ fdd„|jD ƒ}t||ƒS )Nc                    s   g | ]}t ˆ |ƒ‘qS rE   ©rð   )rz   Úxr|   rE   rF   r}   ©  s     z,StmtBuilder.build_Assign.<locals>.<listcomp>)rð   rã   Útargetsr	   )rs   ræ   ÚrhsÚlhsrE   r|   rF   r¨   ¦  s    zStmtBuilder.build_Assignc                 C   sÖ   |j d krt| |dd�‚t|jƒtjkr¤|jj jdkr¤| jdkr¤|j}|t	d|jj
› �ƒ }t|jdƒr~|t	d|jj› �ƒ7 }|  |j||¡}td| j› d	|› �ƒ‚t| |j ƒ}t| |jƒ}t| |jƒ}t|g||ƒS )
Nzwithout assigned value)rt   r]   r^   zself.rå   z: zKType annotations on instance attributes must be declared in __init__, not 'z': )rã   rg   rj   Útargetr¦   r
   rå   Úfuncnamerp   rk   râ   ÚhasattrrÙ   rn   ro   Ú
ValueErrorrð   r	   )rs   ræ   r+  r,  Úsrr>  r?  Zthe_typerE   rE   rF   rª   ¬  s(    
ÿþýÿzStmtBuilder.build_AnnAssignc                    s6   ˆ   |j|j|jtdƒ ¡}t|‡ fdd„|jD ƒƒS )NrJ   c                    s   g | ]}t ˆ |ƒ‘qS rE   r;  )rz   r@  r|   rE   rF   r}   Ê  s     z,StmtBuilder.build_Delete.<locals>.<listcomp>)rn   ro   rp   rk   r   r=  ©rs   ræ   rî   rE   r|   rF   Úbuild_DeleteÆ  s    zStmtBuilder.build_Deletec                 C   s<   |   |j|j|jtdƒ ¡}t||jd kr.d n
t| |jƒƒS )NÚreturn)rn   ro   rp   rk   r$   rã   rð   rE  rE   rE   rF   Úbuild_ReturnÌ  s      ÿzStmtBuilder.build_Returnc                 C   s2   |   |j|j|jtdƒ ¡}t| |jƒ}t||ƒS )NrM   )rn   ro   rp   rk   rð   Úexcr#   )rs   ræ   rî   r   rE   rE   rF   Úbuild_RaiseÓ  s    zStmtBuilder.build_Raisec                 C   sN   |   |j|j|jtdƒ ¡}t| |jƒ}|jd k	r>t| |jƒnd }t|||ƒS )NrN   )rn   ro   rp   rk   rð   ÚtestrX   r   )rs   ræ   rî   rK  rX   rE   rE   rF   Úbuild_AssertÙ  s      ÿzStmtBuilder.build_Assertc                 C   sf   t | |jƒ}t | |jƒ}t|jƒ}|tjkr8tj| }n"tt| | 	¡ j
ddd�d|j ƒ‚t|||ƒS )Nú=)éÿÿÿÿr   )Úoffsetsz*unsupported kind of augmented assignment: )rð   r@  rã   rj   Úopr§   Úaugassign_mapre   Úfind_beforer™   r+  rb   r   )rs   ræ   r?  r>  rP  Úop_tokenrE   rE   rF   Úbuild_AugAssignâ  s    

þzStmtBuilder.build_AugAssignc                 C   sH   |j rtd dƒ‚|  |j|j|jtdƒ ¡}t|t| |jƒt	| |j
ƒƒS )Nz-else branches of while loops aren't supportedÚwhile)Úorelsere   rn   ro   rp   rk   r0   rð   rK  r„   r¥   rE  rE   rE   rF   Úbuild_Whileð  s     ÿzStmtBuilder.build_Whilec                 C   sV   |   |j|j|jtdƒ ¡}|jr,t|dƒ‚t|t| |jƒgt| |j	ƒgt
| |jƒƒS )NrI   z+else branches of for loops aren't supported)rn   ro   rp   rk   rV  re   r   rð   r@  Úiterr„   r¥   rE  rE   rE   rF   Ú	build_Forû  s    

üzStmtBuilder.build_Forc                 C   sB   |   |j|j|jtdƒ ¡}t|t| |jƒt| |jƒt| |j	ƒƒS )NÚif)
rn   ro   rp   rk   r   rð   rK  r„   r¥   rV  rE  rE   rE   rF   Úbuild_If  s    


üzStmtBuilder.build_Ifc                    sZ   ˆ   |j|j|jtdƒ ¡}|jr,t|dƒ‚‡ fdd„|jD ƒ}ttt	t
|dƒƒ|g ƒƒS )Nr>   z?print statements with non-default destinations aren't supportedc                    s   g | ]}t ˆ |ƒ‘qS rE   r;  )rz   Úvalr|   rE   rF   r}     s     z+StmtBuilder.build_Print.<locals>.<listcomp>)rn   ro   rp   rk   Údestre   Úvaluesr   r   r/   r   )rs   ræ   rî   rÒ   rE   r|   rF   Úbuild_Print  s     ÿzStmtBuilder.build_Printc                 C   s$   |   |j|j|jtdƒ ¡}t|ƒS )NÚpass)rn   ro   rp   rk   r!   rE  rE   rE   rF   Ú
build_Pass  s    zStmtBuilder.build_Passc                 C   s$   |   |j|j|jtdƒ ¡}t|ƒS )NrR   )rn   ro   rp   rk   r   rE  rE   rE   rF   Úbuild_Break!  s    zStmtBuilder.build_Breakc                 C   s$   |   |j|j|jtdƒ ¡}t|ƒS )NrS   )rn   ro   rp   rk   r   rE  rE   rE   rF   Úbuild_Continue&  s      ÿzStmtBuilder.build_Continuec                 C   s`   |   |j|j|jtdƒ ¡}t|ƒrDts0tdƒ‚t| |ƒ}t| |ƒS t	|t
| |jƒt| |jƒƒS )NrL   zŸtorch.jit._IgnoreContextManager requires installing Python library `astunparse`,                                   please install it in your Python environment)rn   ro   rp   rk   ré   Ú_IS_ASTUNPARSE_INSTALLEDrÕ   r  r�   r1   r€   r   r„   r¥   )rs   ræ   rî   r  rE   rE   rF   Ú
build_With-  s    ÿ

zStmtBuilder.build_WithN)!rb   rc   rd   r¦   ÚAddÚSubÚMultÚDivÚModÚBitOrÚBitAndÚBitXorÚLShiftÚRShiftÚPowrQ  r-  r:  r¨   rª   rF  rH  rJ  rL  rT  rW  rY  r[  r_  ra  rb  rc  re  rE   rE   rE   rF   r§   �  sn              õ
	










	
	


r§   c                   @   sÐ  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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d„ ƒZ%e$dd„ ƒZ&e$d d!„ ƒZ'e$d"d#„ ƒZ(e$d$d%„ ƒZ)e$d&d'„ ƒZ*e$d(d)„ ƒZ+e$d*d+„ ƒZ,e$d,d-„ ƒZ-e$d.d/„ ƒZ.e$d0d1„ ƒZ/e$d2d3„ ƒZ0e$d4d5„ ƒZ1e$d6d7„ ƒZ2e$d8d9„ ƒZ3e$d:d;„ ƒZ4e$d<d=„ ƒZ5e$d>d?„ ƒZ6e$d@dA„ ƒZ7e$dBdC„ ƒZ8e$dDdE„ ƒZ9e$dFdG„ ƒZ:dHS )IÚExprBuilderr.  r/  r0  r1  r8  r2  z//r4  r5  r3  r6  r7  ú@Únotú~ÚandÚorz==z!=z<=ú<z>=ú>Úiszis notÚinznot inc                    sv   t | |jƒ}| j d¡‰ ‡ fdd„}| ¡ jd }||ƒtjkrJ|d7 }q2|t|j	ƒ }|  
||¡}t|t||j	ƒƒS )Nzutf-8c                    s   t ˆ |  ƒS r?   )Úchr)Úindex©rÁ   rE   rF   Úget_charm  s    z-ExprBuilder.build_Attribute.<locals>.get_charr�   )rð   rã   rÁ   Úencoder™   r,  ÚstringÚ
whitespacerk   râ   Úmake_raw_ranger%   r   )rs   r   Úbaser~  Ú	start_posÚend_posZ
name_rangerE   r}  rF   Úbuild_Attributef  s    
zExprBuilder.build_Attributec                    s¨   t ˆ |jƒ}‡ fdd„|jD ƒ}t|dƒrP|jrPt ˆ |jƒ}|t| ¡ |ƒg7 }g }|jD ]@}t ˆ |jƒ}|j	s~t
| ¡ dƒ‚| tt| ¡ |j	ƒ|ƒ¡ qZt|||ƒS )Nc                    s   g | ]}t ˆ |ƒ‘qS rE   r;  )rz   r  r|   rE   rF   r}   z  s     z*ExprBuilder.build_Call.<locals>.<listcomp>Ústarargsz&keyword-arg expansion is not supported)rð   rÊ   rÒ   rB  r‡  r'   r™   r  rã   rÓ   re   r˜   r
   r   r   )rs   r   rÊ   rÒ   Zstararg_exprÚkwargsÚkwZkw_exprrE   r|   rF   Ú
build_Callw  s    
 ÿzExprBuilder.build_Callc                 C   s    |   |j|j|jd ¡}t|ƒS )Né   )rn   ro   rp   r   ©rs   r   rî   rE   rE   rF   Úbuild_Ellipsis‰  s      ÿzExprBuilder.build_Ellipsisc                 C   s�   |   |j|j|jt|jƒ ¡}|j t¡r8t|dt ƒ‚|jdkrJt|ƒS |jdkr\t	|ƒS |jdkrnt
|ƒ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)rn   ro   rp   rk   rå   r@   rA   re   r,   r   r   r   r/   r   rŒ  rE   rE   rF   Ú
build_Name�  s"    ÿþ



zExprBuilder.build_Namec                 C   s€   |   |j|j|jtt|jƒƒ ¡}|jdkr4t|ƒS |jdkrFt|ƒS |jd krXt|ƒS |jt	krjt
|ƒS tdt|jƒ ƒ‚d S )NTFz!Name constant value unsupported: )rn   ro   rp   rk   Ústrrã   r,   r   r   r‘  r   rC  rŒ  rE   rE   rF   Úbuild_NameConstant£  s      ÿ



zExprBuilder.build_NameConstantc                 C   sœ   t | |jƒ}t | |jƒ}t|jƒ}|tjkrT| jsT|  | 	¡ j
| 	¡ j¡}t|dƒ‚tj |¡}|d kr�|  | 	¡ j
| 	¡ j¡}t|d|j ƒ‚t|||ƒS )Nz‹Division 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Úrightrj   rP  r¦   ri  Zuses_true_divisionr‚  r™   r,  r+  rV   rq  Ú	binop_maprm   re   rb   r   )rs   r   r?  r>  rP  Ú	err_rangerS  rE   rE   rF   Úbuild_BinOp³  s"    
þ ÿzExprBuilder.build_BinOpc                 C   sf   t | |jƒ}t|jƒ}tj |¡}|d kr>t| ¡ d|j	 ƒ‚|  
|j|j|jt|ƒ ¡}t|||ƒS )Nzunsupported unary operator: )rð   Úoperandrj   rP  rq  Úunop_maprm   re   r™   rb   rn   ro   rp   rk   r.   )rs   r   Úsub_exprrP  rS  rî   rE   rE   rF   Úbuild_UnaryOpÉ  s    
 ÿ  ÿzExprBuilder.build_UnaryOpc                    s°   t |jƒdk r$tdtt |jƒƒ ƒ‚‡ fdd„|jD ƒ}t|jƒ}tj |¡}|d kr†ˆ  	|d  
¡ j|d  
¡ j¡}t|d|j ƒ‚|d }|dd … D ]}t|||ƒ}qš|S )Né   z.expected at least 2 values in BoolOp, but got c                    s   g | ]}t ˆ |ƒ‘qS rE   r;  )rz   rœ  r|   rE   rF   r}   Ý  s     z,ExprBuilder.build_BoolOp.<locals>.<listcomp>r   r�   zunsupported boolean operator: )rk   r^  r»   r“  rj   rP  rq  Ú
boolop_maprm   r‚  r™   r,  r+  re   rb   r   )rs   r   Ú	sub_exprsrP  rS  r˜  r?  r>  rE   r|   rF   Úbuild_BoolOp×  s(    ÿ
 ÿ ÿzExprBuilder.build_BoolOpc                 C   s$   t t| |jƒt| |jƒt| |jƒƒS r?   )r+   rð   rK  r¥   rV  ©rs   r   rE   rE   rF   Úbuild_IfExpì  s
    


ýzExprBuilder.build_IfExpc                    sØ   ‡ fdd„|j gt|jƒ D ƒ}d }t||j|dd … ƒD ]˜\}}}t|ƒ}tj |¡}ˆ  	| 
¡ j| 
¡ j¡}	|d krˆt|	d|j ƒ‚|tjkr¬td||ƒ}
t|	d|
ƒ}nt|||ƒ}|d krÆ|}q:td||ƒ}q:|S )Nc                    s   g | ]}t ˆ |ƒ‘qS rE   r;  ©rz   Úer|   rE   rF   r}   ö  s     z-ExprBuilder.build_Compare.<locals>.<listcomp>r�   z!unsupported comparison operator: rz  rs  ru  )r•  r~   ZcomparatorsÚzipZopsrj   rq  Ú	cmpop_maprm   r‚  r™   r,  r+  re   rb   r¦   ÚNotInr   r.   )rs   r   Zoperandsr  r?  Zop_r>  rP  rS  rî   Zin_exprZcmp_exprrE   r|   rF   Úbuild_Compareô  s&       ÿ
zExprBuilder.build_Comparec           	         sÆ  dd„ ‰dd„ ‰ ‡ ‡fdd„}t ˆ|jƒ}t|jƒ}|tjkrÂt|jjtjƒr¨‡fdd„|jjjD ƒ}|sžˆ 	|j
|jjj|jjjd	 ¡}t|g ƒ}| |¡ t||ƒS t|t ˆ|jjƒgƒS �n |tjkrât|ˆˆ||jƒgƒS |tjk�rt||ˆ||jƒƒS tjd
k�r´|tjk�r g }|jjD ]8}t|tjƒ�rL| ˆˆ||ƒ¡ n| t ˆ|ƒ¡ �q&|�s–ˆ 	|j
|jj|jjd	 ¡}t|g ƒ}| |¡ t||ƒS t|t ˆ|jƒgƒS t| ¡ dƒ‚d S )Nc                 S   s`   |j d k	rt| |j ƒnd }|jd k	r0t| |jƒnd }|jd k	rJt| |jƒnd }t| ¡ |||ƒS r?   )Úlowerrð   ÚupperÚstepr&   r™   )rs   rƒ  Z
slice_exprrª  r«  r¬  rE   rE   rF   Úbuild_SliceExpr  s    ÿýÿýÿýz4ExprBuilder.build_Subscript.<locals>.build_SliceExprc                 S   s(   t |jtjƒrt| ¡ dƒ‚t| |jƒS )Nz9slicing multiple dimensions with tuples not supported yet)r…   rã   r¦   r   re   r™   rð   )rs   rƒ  Ú
index_exprrE   rE   rF   Úbuild_Index#  s    þz0ExprBuilder.build_Subscript.<locals>.build_Indexc                    sŒ   g }|j D ]|}t|ƒ}|tjkr4| ˆ | ||ƒ¡ q
|tjkrR| ˆ| ||ƒ¡ q
|tjkrp| t| ¡ ƒ¡ q
t	| ¡ d|› d�ƒ‚q
|S )Nz!slicing multiple dimensions with z not supported)
Zdimsrj   r¦   ÚIndexr˜   ÚSlicer‘  r   r™   re   )rs   rƒ  Zextslicer   r   Úsub_type)r¯  r­  rE   rF   Úbuild_ExtSlice+  s    




þz3ExprBuilder.build_Subscript.<locals>.build_ExtSlicec                    s   g | ]}t ˆ |ƒ‘qS rE   r;  )rz   r®  r|   rE   rF   r}   B  s    z/ExprBuilder.build_Subscript.<locals>.<listcomp>rž  )r‹  é	   zellipsis is not supported)rð   rã   rj   Úslicer¦   r°  r…   r   Úeltsrn   ro   rp   r-   r˜   r*   r±  ÚExtSliceÚsysÚversion_infore   r™   )	rs   r   r³  rƒ  r²  Úindicesrî   Útupr®  rE   )r¯  r­  rs   rF   Úbuild_Subscript  sT    


ÿý



  
ÿ


zExprBuilder.build_Subscriptc                    s.   t ˆ  |j|j|jd ¡‡ fdd„|jD ƒƒS )Nr�   c                    s   g | ]}t ˆ |ƒ‘qS rE   r;  r¤  r|   rE   rF   r}   t  s     z*ExprBuilder.build_List.<locals>.<listcomp>)r   rn   ro   rp   r¶  r¢  rE   r|   rF   Ú
build_Listp  s    þzExprBuilder.build_Listc                    s.   t ˆ  |j|j|jd ¡‡ fdd„|jD ƒƒS )Nr�   c                    s   g | ]}t ˆ |ƒ‘qS rE   r;  r¤  r|   rE   rF   r}   {  s     z+ExprBuilder.build_Tuple.<locals>.<listcomp>)r-   rn   ro   rp   r¶  r¢  rE   r|   rF   Úbuild_Tuplew  s    þzExprBuilder.build_Tuplec                    s^   ˆ   |j|j|jd ¡}|jr2|jd s2t|dƒ‚t|‡ fdd„|jD ƒ‡ fdd„|jD ƒƒS )Nr�   r   z1Dict expansion (e.g. `{**dict}`) is not supportedc                    s   g | ]}t ˆ |ƒ‘qS rE   r;  r¤  r|   rE   rF   r}   ‡  s     z*ExprBuilder.build_Dict.<locals>.<listcomp>c                    s   g | ]}t ˆ |ƒ‘qS rE   r;  r¤  r|   rE   rF   r}   ˆ  s     )rn   ro   rp   Úkeysre   r   r^  )rs   r   r™   rE   r|   rF   Ú
build_Dict~  s     ÿýzExprBuilder.build_Dictc                 C   s0   t |jƒ}|  |j|j|jt|ƒ ¡}t||ƒS r?   )r“  Únrn   ro   rp   rk   r   ©rs   r   rã   rî   rE   rE   rF   Ú	build_Num‹  s    
zExprBuilder.build_Numc                 C   sž   |j }|d kst|tƒr$t | |¡S t|tttfƒr@t | |¡S t|t	ƒrVt 
| |¡S t|ttƒƒrpt | |¡S |  |j|j|jtt	|ƒƒ ¡}t|dƒ‚d S )Nz Unknown Constant expression type)rã   r…   rô   rq  r”  ÚintÚfloatÚcomplexrÃ  r“  Ú	build_Strrj   r‘  r�  rn   ro   rp   rk   rV   )rs   r   rã   Zerror_rangerE   rE   rF   Úbuild_Constant‘  s    
  ÿzExprBuilder.build_Constantc                 C   s4   t |jƒ}|  |j|j|jt|ƒ d ¡}t||ƒS ©Nr�   )r“  r‚   rn   ro   rp   rk   r)   rÂ  rE   rE   rF   rÇ  ¤  s    
  ÿzExprBuilder.build_Strc                 C   sÔ   d}g }|j D ]Ž}|  |j|j|jd ¡}t|tjƒrz|jdkrJt|dƒ‚|j	d k	r^t|dƒ‚|d7 }| 
t| |jƒ¡ qt|tjƒr’||j7 }qt|dƒ‚q|  |j|j|jd ¡}ttt||ƒt|dƒƒ|g ƒS )	Nrh   r�   rN  z%Don't support conversion in JoinedStrz%Don't support formatting in JoinedStrz{}zUnsupported value in JoinedStrÚformat)r^  rn   ro   rp   r…   r¦   ÚFormattedValueÚ
conversionre   Úformat_specr˜   rð   rã   r9  r‚   r   r%   r)   r   )rs   r   r‚   rÒ   rã   rî   rE   rE   rF   Úbuild_JoinedStr¬  s     




zExprBuilder.build_JoinedStrc                 C   sˆ   |   |j|j|j¡}t|jƒdkr,t|dƒ‚t|jd jƒdkrJt|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)rn   ro   rp   rk   Ú
generatorsre   Úifsrð   Úeltr@  rX  r   )rs   ræ   rî   Zelt_exprÚtarget_exprÚ	iter_exprrE   rE   rF   Úbuild_ListCompÁ  s    

zExprBuilder.build_ListCompc                 C   s   t  | |¡S r?   )rq  rÕ  )rs   ræ   rE   rE   rF   Úbuild_GeneratorExpÐ  s    zExprBuilder.build_GeneratorExpc                 C   s–   |   |j|j|j¡}t|jƒdkr,t|dƒ‚t|jd jƒdkrJt|dƒ‚t| |jƒ}t| |j	ƒ}t| |jd j
ƒ}t| |jd jƒ}t|||||ƒS rÏ  )rn   ro   rp   rk   rÐ  re   rÑ  rð   Úkeyrã   r@  rX  r   )rs   ræ   rî   Zkey_exprZ
value_exprrÓ  rÔ  rE   rE   rF   Úbuild_DictCompÕ  s    

zExprBuilder.build_DictCompc                 C   s*   |   |j|j|jd ¡}t|t| |jƒƒS rÉ  )rn   ro   rp   r'   rð   rã   rŒ  rE   rE   rF   Úbuild_Starredå  s    zExprBuilder.build_StarredN);rb   rc   rd   r¦   rf  rg  rh  ri  rp  rj  ÚFloorDivrl  rm  rk  rn  ro  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©  r¼  r½  r¾  rÀ  rÃ  rÈ  rÇ  rÎ  rÕ  rÖ  rØ  rÙ  rE   rE   rE   rF   rq  <  sÎ               ô
   ý  þ          ö










`









rq  ©r   r   c                 C   s8   | j d |…  |¡}|  ||d  |t|ƒ |d  ¡S )Nr   r�   )rÁ   Úrindexr‚  rk   )rs   ÚposÚsubstrrO  Únew_posrE   rE   rF   rR  ð  s    rR  )NF)NN)N)N)rê  )�r¦   r¼   r’   r  r€  r¸  Úcollectionsr   Útextwrapr   Útypingr   r   rY   Ztorch.jit.annotationsr   Z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.   r/   r0   r1   r2   Ztorch._jit_internalr3   r4   r5   r6   Ztorch._sourcesr7   r8   r9   r:   rÏ   Ztorch.jit._dataclass_implsr;   Ztorch.jit._monkeytype_configr<   r=   rd  r  ÚImportErrorrA   rB   ÚsetÚascii_lowercaseÚascii_uppercaseÚdigitsZ_identifier_charsrG   r³   ÚImportÚ
ImportFromÚGlobalrq   rl   ÚupdateÚAsyncFunctionDefÚAsyncForÚ	AsyncWithÚTryÚNonlocalr©   Ú	ExceptionrV   re   rg   rx   r€   r„   r    r«   rË   r–   ré   rê   rÃ   rÜ   rþ   rï   rû   r  r%  r(  r)  r§   rq  rð   r�   ry   rR  rE   rE   rE   rF   Ú<module>   s  ¸.            ô            ô     ûÿ
     ûÿ
 ÿÿ"A
C	
ÿ
4
V 0   2