a
    HSic4                     @   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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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZBmCZCmDZD d dlEZ d	ZFzd dlGZGd
ZFW n eHyx   Y n0 dZIdhZJeKejLejM ejN ZOdd ZPejQdejdejdejdej6dejdejdejRdejSdejTdej!dej"diZUejQdejdejdejdej6dejdejd ejRd!ejSd"ejTd#ej!d$ej"d%iZVeUWejXd&ejYd'ejZd(ej[d)ej\d*i eVWejXd+ejYd,ejZd-ej[d.ej\d/i ej]d0kreUWej^d1i G d2d3 d3e_Z`G d4d5 d5e`ZaG d6d7 d7eaZbG d8d9 d9e`Zcd:d; Zdd<d= Zed>d? Zfd@dA ZgdBdC ZhdbdDdEZidFdG ZjG dHdI dIekZldJdK ZmdcdLdMZndNZodddOdPZpdedQdRZqdSdT ZrdUdV ZsdWdX ZtG dYdZ dZelZuG d[d\ d\elZvG d]d^ d^elZwew Zxev Zyeu Zzdfd`daZ{dS )g    N)
namedtuple)dedent)ListTuple),ClassDefIdentStmtDeclDefVarEmptyTypeAnnotationParamExprStmtAssignDeleteReturnRaiseAssert	AugAssignWhileForIfPassBreakContinueApplyDotsSelectTrueLiteralFalseLiteralNoneLiteralStarredListLiteralTupleLiteralDictLiteralConstStringLiteralListComp	AttributeBinOpUnaryOp	SliceExpr	Subscript	TernaryIfWithWithItemPropertyDictComp)get_source_lines_and_file	parse_defmake_source_context)monkeytype_traceget_qualified_name)should_dropis_static_fnFunctionModifiersFTZ__jitprintc                 C   s   |  tp| tv S N)
startswith_reserved_prefix_reserved_namesname rA   N/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/jit/frontend.pyis_reserved_name)   s    rC   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nonlocal)      z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)selfrU   rV   rA   rA   rB   __init__c   s    zFrontendError.__init__c                 C   s   | j | j   S r;   )rV   rZ   whatlstrip)r[   rA   rA   rB   __str__k   s    zFrontendError.__str__N)__name__
__module____qualname__r\   r_   rA   rA   rA   rB   rT   b   s   rT   c                   @   s   e Zd ZdS )NotSupportedErrorNr`   ra   rb   rA   rA   rA   rB   rc   o   s   rc   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}t
t| || d S )N z{} {}aren't supportedrf   )typelennode_start_tokensget
make_rangelineno
col_offsetpretty_node_namesr`   formatsuperre   r\   )	r[   ctxZoffending_nodereason	node_typeZ	range_lenrU   Zfeature_namerV   	__class__rA   rB   r\   t   s    zUnsupportedNodeError.__init__)rf   )r`   ra   rb   r\   __classcell__rA   rA   ru   rB   re   s   s   re   c                   @   s   e Zd ZdS )FrontendTypeErrorNrd   rA   rA   rA   rB   rx      s   rx   c                    s    fdd|D }t |S )Nc                    s   g | ]}t  |qS rA   )build_withitem).0irr   rA   rB   
<listcomp>       z#build_withitems.<locals>.<listcomp>)list)rr   itemsrA   r|   rB   build_withitems   s    r   c                    s     fdd|D }t td |S )Nc                    s   g | ]}t  |qS rA   )
build_stmt)rz   sr|   rA   rB   r}      r~   zbuild_stmts.<locals>.<listcomp>)r   filter)rr   stmtsrA   r|   rB   build_stmts   s    r   c              	   C   s   t j| dd d}t| dg }g }|D ]}|d |vr&t|d js&t|d jd|d  d|d	}|d jrt|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mrA   rA   rB   <lambda>   r~   z&get_class_properties.<locals>.<lambda>	predicate__jit_unused_properties__r      ___getter)	self_name_setterN)inspect
getmembersgetattrr7   fgetget_jit_deffsetappendr0   ranger   )clsr   propsZunused_properties
propertiespropgettersetterrA   rA   rB   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y&   Y n0 d S r;   )r   rc   )builderentryassignsrr   rA   rB   maybe_build_assign   s    z-get_class_assigns.<locals>.maybe_build_assign)bodyr   astr   StmtBuilderbuild_Assign	AnnAssignbuild_AnnAssign)rr   Zcls_astr   r   rA   r   rB   get_class_assigns   s    
r   c                    s   t j  fddd} fddfdd|D }t }t tjj \}}}d|}t	|}t
|}	t|d	d
d t|d	d
d  }
t||||
d}|	jd }t|t
jsJ t||}t|||||S )Nc                    s.   t | st | o,t | j o,| j jv S r;   r   ismethod
isfunctionr8   r`   __dict__r   r   rA   rB   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   rA   rB   is_classmethod   s    z)get_jit_class_def.<locals>.is_classmethodc                    s$   g | ]\}}t || |d qS ))r   r   )r   )rz   r@   obj)r   r   rA   rB   r}      s   z%get_jit_class_def.<locals>.<listcomp>rf   
r   r   F)r   r   r   r2   rW   rX   rY   
call_stackjoinr   r   parseri   splitr4   r   r   r   r   build_class_def)r   r   methodsr   sourcelinesfile_linenofilenamesource
dedent_srcpy_astleading_whitespace_lenrr   Z	class_astr   rA   )r   r   r   rB   get_jit_class_def   s&    



(

r   c                 C   s.  t | }tjj|j}|jjd }|r^|jjd j	}t
| d| jd }|jd| t| rt
d}	t|	jdkst|	jd tjstd|j d|j |	jd }
|
j|_d |j_|j_|jj|jj D ]}|
jjd j|_qtjj }d}trt| }||}t|j|||||dS )	aE  
    Build a JIT AST (TreeView) from the given function.

    Args:
        fn: A function object to compile
        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)r3   rW   jitannotationsZget_type_liner   r   r   argsargr   insertr7   ri   r   FunctionDefRuntimeErrorr   r   kwargvararg
kwonlyargs
annotation_script_get_type_trace_dbr5   r6   Zget_args_types	build_defrr   )r   def_namer   r   
parsed_def	type_linefn_defarg_nameZassign_stmtZunused_fn_defZ
unused_defr   type_trace_dbr   qualnamerA   rA   rB   r      s,    
 

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   _IgnoreContextManagerr   rW   TF)r   r   context_exprr   Callfuncr(   attrvalueNameid)stmtfunction	attr_nameZ
attr_valuerA   rA   rB   #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 u r&t|||||S )NZbuild_)r   rv   r`   re   )r[   rr   nodemethodrA   rA   rB   __call__  s    
zBuilder.__call__N)r`   ra   rb   r   rA   rA   rA   rB   r     s   r   c                 C   s:   |  |j|j|jtd }tt||dd |D ||S )NrG   c                 S   s   g | ]}t |qS rA   )r   )rz   r   rA   rA   rB   r}   &  r~   z#build_class_def.<locals>.<listcomp>)rl   rm   rn   ri   r   r   )rr   py_defr   r   r   r   rrA   rA   rB   r   #  s    r   c                 C   s   |j }| |jt|j |j|jtd }t| |j||}d }	t|dd d ur\t	| |j
}	t|||	}
|d u}|d urtj|}tj|
||}
tt|||
t| |S )NrD   returns)r   rl   rm   ri   decorator_listrn   build_param_listr   r   
build_exprr   r	   rW   rX   parse_type_commentmerge_type_from_type_commentr
   r   r   )rr   r   r   r   r   r   r   r   
param_listreturn_typedecl	is_methodZtype_comment_declrA   rA   rB   r   )  s$    
r   zfCompiled functions can't take variable number of arguments or use keyword-only arguments with defaultsc           
         s
  |j d ur<|j } |j|jd |jt|j }t|t|jd urx|j} |j|jd |jt|j }t|tt|j	dkr|j	D ]$}|d urt
 | }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   rA   rB   r}   U  s   z$build_param_list.<locals>.<listcomp>c                    s0   g | ](}| r&t  |j r& |j nd fqS r;   r   r   r   rA   rB   r}   W  s   c              	      s"   g | ]\}}t  |d |dqS )F
kwarg_onlypdt_arg_typebuild_paramrz   r   arg_typerr   r   rA   rB   r}   Z  s   c              	      s"   g | ]\}}t  |d |dqS )Tr   r  r  r  rA   rB   r}   \  s   )r   rl   rm   rn   ri   r   rc   _vararg_kwarg_errr   kw_defaultsr   r   r   r   )
rr   Zpy_argsr   r   exprZ	ctx_ranger   Zarg_and_typesZarg_and_types_kwonlyargsresultrA   )rr   r   r   rB   r   C  s4    
"

"



r   c                 C   s   |j }| |j|j|jt| }t|dd d ur@t| |j}n<|rTtt	||}n(|d urt|dkrttt	||}nt
|}t|t	|||S )Nr   r[   )r   rl   rm   rn   ri   r   r   r   r   r   r   r   )rr   py_argr   r   r  r@   r   Zannotation_exprrA   rA   rB   r  a  s    r  c                    sR  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||7 }t| ||}d||| d }t|dkr:|d | }n|}t|jd }|S )N	InputTyper@   ann
OutputTypec                    sz   g }g }| D ]d}|j }tjdk r*|jj}n|jj}|d\}}|dkrX| || |dkr||| q||fS )N)rR      r   inpout)r   sysversion_infor   r   r   r   )r   inputsoutputsr   var_nameZvar_annZvar_decl_typer  r  rA   rB   process_ins_outss  s    

z6build_ignore_context_manager.<locals>.process_ins_outsc                 S   s    t dd| j}| d|j S )Nz[^a-zA-Z0-9_]_)resubr   rm   )rr   r   r   rA   rA   rB   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rd}|dd	d
d | D  d 7 }|d	dd | D 7 }||fS )Nrf   zreturn r   z -> Noner   z -> z	 -> Tuple[, c                 S   s   g | ]
}|j qS rA   )r  rz   varrA   rA   rB   r}     r~   zObuild_ignore_context_manager.<locals>.build_return_ann_stmt.<locals>.<listcomp>]c                 S   s   g | ]
}|j qS rA   r?   r  rA   rA   rB   r}     r~   )ri   r  r@   r   )r  Zreturn_type_annZreturn_statement_strrA   rA   rB   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 rA   r?   r   rA   rA   rB   r}     r~   zDbuild_ignore_context_manager.<locals>.build_args.<locals>.<listcomp>)r   )r   rA   rA   rB   
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 :)r@   r  r  rA   rA   rB   r}     r~   z0build_ignore_context_manager.<locals>.<listcomp>)z: passz@torch.jit.ignore
z
globals()["{}"] = {}ztorch.jit.frontend.{}(r   )r   r   r   keywordsr   r   r   r   r   
astunparseunparserp   execri   )rr   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_astrA   r  rB   build_ignore_context_managero  s4     r+  c                 C   s*   | d u ri S t | }dd |j D S )Nc                 S   s&   i | ]\}}|j tjjur||j qS rA   )defaultr   	Parameterempty)rz   kvrA   rA   rB   
<dictcomp>  s   z$get_default_args.<locals>.<dictcomp>)r   	signature
parametersr   )r   r2  rA   rA   rB   get_default_args  s    
r4  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v S r;   r   r   r   rA   rB   r     s   z,get_default_args_for_class.<locals>.<lambda>r   c                 S   s   i | ]\}}|t |qS rA   )r4  )rz   method_nameZmethod_implrA   rA   rB   r1    r~   z.get_default_args_for_class.<locals>.<dictcomp>)r   r   )r   r   defaultsrA   r   rB   get_default_args_for_class  s    
	r7  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   rm   rn   ri   ro   r   r.   optional_varsrl   r/   r   )rr   itemrm   startendZop_varsr   rA   rA   rB   ry     s    zWithItemBuilder.build_withitemN)r`   ra   rb   staticmethodry   rA   rA   rA   rB   r8    s   r8  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   r`   r   r   )rr   r   r   rA   rA   rB   
build_Expr  s    zStmtBuilder.build_Exprc                    s*   t  |j} fdd|jD }t||S )Nc                    s   g | ]}t  |qS rA   r   )rz   xr|   rA   rB   r}     r~   z,StmtBuilder.build_Assign.<locals>.<listcomp>)r   r   targetsr   )rr   r   rhslhsrA   r|   rB   r     s    zStmtBuilder.build_Assignc                 C   s   |j d u 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)rs   r[   r\   zself.r   z: zKType annotations on instance attributes must be declared in __init__, not 'z': )r   re   rh   targetr   r(   r   funcnamern   ri   r   hasattrr   rl   rm   
ValueErrorr   r   )rr   r   r;  r<  srrN  rO  the_typerA   rA   rB   r     s*    
zStmtBuilder.build_AnnAssignc                    s6     |j|j|jtd }t| fdd|jD S )NrF   c                    s   g | ]}t  |qS rA   rK  )rz   rP  r|   rA   rB   r}   /  r~   z,StmtBuilder.build_Delete.<locals>.<listcomp>)rl   rm   rn   ri   r   rM  rr   r   r   rA   r|   rB   build_Delete+  s    zStmtBuilder.build_Deletec                 C   s<   |  |j|j|jtd }t||jd u r.d n
t| |jS )Nreturn)rl   rm   rn   ri   r   r   r   rV  rA   rA   rB   build_Return1  s    zStmtBuilder.build_Returnc                 C   s2   |  |j|j|jtd }t| |j}t||S )NrI   )rl   rm   rn   ri   r   excr   )rr   r   r   r	  rA   rA   rB   build_Raise6  s    zStmtBuilder.build_Raisec                 C   sN   |  |j|j|jtd }t| |j}|jd ur>t| |jnd }t|||S )NrJ   )rl   rm   rn   ri   r   testrV   r   )rr   r   r   r\  rV   rA   rA   rB   build_Assert<  s    zStmtBuilder.build_Assertc                 C   sf   t | |j}t | |j}t|j}|tjv r8tj| }n"tt| |	 j
dddd|j t|||S )N=)r   )offsetsz+unsupported kind of augumented assignment: )r   rP  r   rh   opr   augassign_maprc   find_beforer   r;  r`   r   )rr   r   rO  rN  ra  op_tokenrA   rA   rB   build_AugAssignC  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)orelserc   rl   rm   rn   ri   r   r   r\  r   r   rV  rA   rA   rB   build_WhileP  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 )NrE   z+else branches of for loops aren't supported)rl   rm   rn   ri   rg  rc   r   r   rP  iterr   r   rV  rA   rA   rB   	build_ForZ  s    
zStmtBuilder.build_Forc                 C   sB   |  |j|j|jtd }t|t| |jt| |jt| |j	S )Nif)
rl   rm   rn   ri   r   r   r\  r   r   rg  rV  rA   rA   rB   build_Ifd  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 rA   rK  )rz   valr|   rA   rB   r}   p  r~   z+StmtBuilder.build_Print.<locals>.<listcomp>)rl   rm   rn   ri   destrc   valuesr   r   r   r   )rr   r   r   r   rA   r|   rB   build_Printk  s
    
zStmtBuilder.build_Printc                 C   s$   |  |j|j|jtd }t|S )Npass)rl   rm   rn   ri   r   rV  rA   rA   rB   
build_Passs  s    zStmtBuilder.build_Passc                 C   s$   |  |j|j|jtd }t|S )NrN   )rl   rm   rn   ri   r   rV  rA   rA   rB   build_Breakx  s    zStmtBuilder.build_Breakc                 C   s$   |  |j|j|jtd }t|S )NrO   )rl   rm   rn   ri   r   rV  rA   rA   rB   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 )NrH   ztorch.jit._IgnoreContextManager requires installing Python library `astunparse`,                                   please install it in your Python environment)rl   rm   rn   ri   r   _IS_ASTUNPARSE_INSTALLEDr   r+  r   r.   r   r   r   r   )rr   r   r   r*  rA   rA   rB   
build_With  s    

zStmtBuilder.build_WithN)!r`   ra   rb   r   AddSubMultDivModBitOrBitAndBitXorLShiftRShiftPowrb  r=  rJ  r   r   rW  rY  r[  r]  re  rh  rj  rl  rp  rr  rs  rt  rv  rA   rA   rA   rB   r     sX   
	







	
	




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 Z9dFS )GExprBuilderr>  r?  r@  rA  rH  rB  z//rD  rE  rC  rF  rG  @not~andorz==z!=z<=<z>=>iszis notinznot inc                    sv   t | |j}| jd  fdd}| jd }||tjv rJ|d7 }q2|t|j	 }| 
||}t|t||j	S )Nzutf-8c                    s   t  |  S r;   )chr)indexr   rA   rB   get_char  s    z-ExprBuilder.build_Attribute.<locals>.get_charr   )r   r   r   encoder   r<  string
whitespaceri   r   make_raw_ranger   r   )rr   r	  baser  Z	start_posend_posZ
name_rangerA   r  rB   build_Attribute  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 rA   rK  )rz   r  r|   rA   rB   r}     r~   z*ExprBuilder.build_Call.<locals>.<listcomp>starargsz&keyword-arg expansion is not supported)r   r   r   rR  r  r!   r   r&  r   r   rc   r   r(   r   r   )rr   r	  r   r   Zstararg_exprkwargskwZkw_exprrA   r|   rB   
build_Call  s    
zExprBuilder.build_Callc                 C   s    |  |j|j|jd }t|S )NrR   )rl   rm   rn   r   rr   r	  r   rA   rA   rB   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rt|S tt||jS )Nz=names of variables used in JIT-ed functions can't start with TrueFalseNoneEllipsis)rl   rm   rn   ri   r   r<   r=   rc   r   r   r    r   r   r   r  rA   rA   rB   
build_Name  s    



zExprBuilder.build_Namec                 C   s   |  |j|j|jtt|j }|jdu r4t|S |jdu rFt|S |jd u rXt|S |jt	krjt
|S tdt|j d S )NTFz!Name constant value unsupported: )rl   rm   rn   ri   strr   r   r   r    r  r   rS  r  rA   rA   rB   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 u r| |	 j
|	 j}t|d|j 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rightrh   ra  r   rz  uses_true_divisionr  r   r<  r;  rT   r  	binop_maprk   rc   r`   r)   )rr   r	  rO  rN  ra  	err_rangerd  rA   rA   rB   build_BinOp  s    

zExprBuilder.build_BinOpc                 C   sf   t | |j}t|j}tj|}|d u r>t| d|j	 | 
|j|j|jt| }t|||S )Nzunsupported unary operator: )r   operandrh   ra  r  unop_maprk   rc   r   r`   rl   rm   rn   ri   r*   )rr   r	  sub_exprra  rd  r   rA   rA   rB   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 u 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 rA   rK  )rz   r  r|   rA   rB   r}     r~   z,ExprBuilder.build_BoolOp.<locals>.<listcomp>r   r   zunsupported boolean operator: )ri   ro  AssertionErrorr  rh   ra  r  
boolop_maprk   r  r   r<  r;  rc   r`   r)   )rr   r	  	sub_exprsra  rd  r  rO  rN  rA   r|   rB   build_BoolOp  s    
 zExprBuilder.build_BoolOpc                 C   s$   t t| |jt| |jt| |jS r;   )r-   r   r\  r   rg  rr   r	  rA   rA   rB   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 u rt|	d|j |tjkrtd||}
t|	d|
}nt|||}|d u r|}q:td||}q:|S )Nc                    s   g | ]}t  |qS rA   rK  rz   er|   rA   rB   r}   .  r~   z-ExprBuilder.build_Compare.<locals>.<listcomp>r   z!unsupported comparison operator: r  r  r  )r  r   comparatorszipopsrh   r  	cmpop_maprk   r  r   r<  r;  rc   r`   r   NotInr)   r*   )rr   r	  operandsr
  rO  Zop_rN  ra  rd  r   Zin_exprZcmp_exprrA   r|   rB   build_Compare,  s       
zExprBuilder.build_Comparec           	         s  dd dd   fdd}t |j}t|j}|tju rt|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u rt|||jgS |tju rt||||jS tjd
kr|tju rg }|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 urt| |j nd }|jd ur0t| |jnd }|jd urJt| |jnd }t| |||S r;   )lowerr   upperstepr+   r   )rr   r  Z
slice_exprr  r  r  rA   rA   rB   build_SliceExprG  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   rc   r   r   )rr   r  
index_exprrA   rA   rB   build_IndexM  s
    z0ExprBuilder.build_Subscript.<locals>.build_Indexc                    s   g }|j D ]z}t|}|tju r4| | || q
|tju rR|| || q
|tju rp|t|  q
t	| d
|q
|S )Nz1slicing multiple dimensions with {} not supported)dimsrh   r   Indexr   Slicer  r   r   rc   rp   )rr   r  Zextslicer  r	  sub_type)r  r  rA   rB   build_ExtSliceT  s    



z3ExprBuilder.build_Subscript.<locals>.build_ExtSlicec                    s   g | ]}t  |qS rA   rK  )rz   r  r|   rA   rB   r}   i  r~   z/ExprBuilder.build_Subscript.<locals>.<listcomp>r  )rR   	   zellipsis is not supported)r   r   rh   slicer   r  r   r   eltsrl   rm   rn   r#   r   r,   r  ExtSlicer  r  rc   r   )	rr   r	  r  r  r  indicesr   tupr  rA   )r  r  rr   rB   build_SubscriptE  sL    









zExprBuilder.build_Subscriptc                    s.   t  |j|j|jd  fdd|jD S )Nr   c                    s   g | ]}t  |qS rA   rK  r  r|   rA   rB   r}     r~   z*ExprBuilder.build_List.<locals>.<listcomp>)r"   rl   rm   rn   r  r  rA   r|   rB   
build_List  s    zExprBuilder.build_Listc                    s.   t  |j|j|jd  fdd|jD S )Nr   c                    s   g | ]}t  |qS rA   rK  r  r|   rA   rB   r}     r~   z+ExprBuilder.build_Tuple.<locals>.<listcomp>)r#   rl   rm   rn   r  r  rA   r|   rB   build_Tuple  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 rA   rK  r  r|   rA   rB   r}     r~   z*ExprBuilder.build_Dict.<locals>.<listcomp>c                    s   g | ]}t  |qS rA   rK  r  r|   rA   rB   r}     r~   )rl   rm   rn   keysrc   r$   ro  )rr   r	  r   rA   r|   rB   
build_Dict  s    
zExprBuilder.build_Dictc                 C   s0   t |j}| |j|j|jt| }t||S r;   )r  nrl   rm   rn   ri   r%   rr   r	  r   r   rA   rA   rB   	build_Num  s    
zExprBuilder.build_Numc                 C   s   |j }|d u 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   r  r  intfloatcomplexr  r  	build_Strrh   r  r  rl   rm   rn   ri   rT   )rr   r	  r   Zerror_rangerA   rA   rB   build_Constant  s    
 zExprBuilder.build_Constantc                 C   s4   t |j}| |j|j|jt| d }t||S Nr   )r  r   rl   rm   rn   ri   r&   r  rA   rA   rB   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 u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 )	Nrf   r   r_  z%Don't support conversion in JoinedStrz%Don't support formatting in JoinedStrz{}zUnsupported value in JoinedStrrp   )ro  rl   rm   rn   r   r   FormattedValue
conversionrc   format_specr   r   r   rI  r   r   r   r&   r   )rr   r	  r   r   r   r   rA   rA   rB   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)rl   rm   rn   ri   
generatorsrc   ifsr   eltrP  ri  r'   )rr   r   r   Zelt_exprtarget_expr	iter_exprrA   rA   rB   build_ListComp  s    

zExprBuilder.build_ListCompc                 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  )rl   rm   rn   ri   r  rc   r  r   keyr   rP  ri  r1   )rr   r   r   Zkey_exprZ
value_exprr  r  rA   rA   rB   build_DictComp  s    

zExprBuilder.build_DictCompc                 C   s*   |  |j|j|jd }t|t| |jS r  )rl   rm   rn   r!   r   r   r  rA   rA   rB   build_Starred  s    zExprBuilder.build_StarredN):r`   ra   rb   r   rw  rx  ry  rz  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  r  r  r  r  r  r  r  r  r  r  r  rA   rA   rA   rB   r    s   







	



J








r  r   r   c                 C   s8   | j d | |}| ||d  |t| |d  S )Nr   r   )r   rindexr  ri   )rr   possubstrr`  new_posrA   rA   rB   rc    s    rc  )NF)NN)N)N)r  )|rW   r  r   r   r  r  collectionsr   textwrapr   typingr   r   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.   r/   r0   r1   torch._sourcesr2   r3   r4   torch.jit._monkeytype_configr5   r6   torch._jit_internalr7   r8   r9   Ztorch.jit.annotationsru  r'  ImportErrorr=   r>   setascii_lowercaseascii_uppercasedigitsZ_identifier_charsrC   r   Import
ImportFromGlobalro   rj   updateAsyncFunctionDefAsyncFor	AsyncWithTryNonlocalr  r   	ExceptionrT   rc   re   rx   r   r   r   r   r   r   r   objectr   r   r   r  r   r  r+  r4  r7  r8  r   r  r   r   ry   rc  rA   rA   rA   rB   <module>   s   !
1


U   l