
    ֧gE                        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ZMn# eO$ r Y nw xY wdZPdhZQ eRejS        ejT        z   ejU        z             ZVd ZWe jX        de j$        de j        de j        de j;        de j-        de j        de jY        de jZ        de j[        de j        de j        diZ\e jX        de j$        de j        de j        de j;        de j-        d e j        d!e jY        d"e jZ        d#e j[        d$e j        d%e j        d&iZ]e\^                    e j_        d'e j`        d(e ja        d)e jb        d*e jc        d+i           e]^                    e j_        d,e j`        d-e ja        d.e jb        d/e jc        d0i           e\^                    e jd        d1i            G d2 d3ee          Zf G d4 d5ef          Zg G d6 d7eg          Zh G d8 d9ef          Zid: Zjd; Zkd< Zld= Zmd> ZndSd?Zod@ Zp G dA dB          ZqdC ZrdTdDZsdEZtdUdFZudUdGZvdH ZwdI ZxdJ Zy G dK dLeq          Zz G dM dNeq          Z{ G dO dPeq          Z| e|            Z} e{            Z~ ez            ZdVdRZdS )W    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                 H    |                      t                    p| t          v S N)
startswith_reserved_prefix_reserved_namesnames    N/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/jit/frontend.pyis_reserved_namerI   ]   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dS )FrontendErrorc                 t    || _         || _        t          j                            | j                   | _        d S rB   )source_rangemsgtorch_CErrorReporterror_report)selfr]   r^   s      rH   __init__zFrontendError.__init__   s4    ( "H001BCCrJ   c                 h    | j         | j                                                                        z   S rB   )r^   rb   whatlstrip)rc   s    rH   __str__zFrontendError.__str__   s*    x$+002299;;;;rJ   N)__name__
__module____qualname__rd   rh    rJ   rH   r[   r[      s5        D D D< < < < <rJ   r[   c                       e Zd ZdS )NotSupportedErrorNri   rj   rk   rl   rJ   rH   rn   rn              DrJ   rn   c                         e Zd Zd fd	Z xZS )UnsupportedNodeError c                 j   t          |          }t          t                              |d                    }|                    |j        |j        |j        |z             }t                              ||j                  }| d|r|dz   nd d}t                      
                    ||           d S )N rs   zaren't supported)typelennode_start_tokensget
make_rangelineno
col_offsetpretty_node_namesri   superrd   )
rc   ctxoffending_nodereason	node_type	range_lenr]   feature_namer^   	__class__s
            rH   rd   zUnsupportedNodeError.__init__   s    ((	)--i==>>	~~!%%	1
 

 ),,Y	8JKKPP >BPPPs+++++rJ   )rs   )ri   rj   rk   rd   __classcell__)r   s   @rH   rr   rr      s=        , , , , , , , , , ,rJ   rr   c                       e Zd ZdS )FrontendTypeErrorNro   rl   rJ   rH   r   r      rp   rJ   r   c                 >      fd|D             }t          |          S )Nc                 0    g | ]}t          |          S rl   )build_withitem).0ir   s     rH   
<listcomp>z#build_withitems.<locals>.<listcomp>   s#    333^C##333rJ   )list)r   itemss   ` rH   build_withitemsr      s(    3333U333E;;rJ   c                 Z      fd|D             }t          t          d |                    S )Nc                 0    g | ]}t          |          S rl   )
build_stmt)r   sr   s     rH   r   zbuild_stmts.<locals>.<listcomp>   s#    ///AZQ///rJ   )r   filter)r   stmtss   ` rH   build_stmtsr      s4    ///////EtU##$$$rJ   c                     t          j        | d           }t          | dg           }g }|D ]}|d         |vrt          |d         j                  st          |d         j        d|d          d|          }|d         j        r't          |d         j        d|d          d	|          nd
}|                    t          |	                                t          |	                                |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    rH   <lambda>z&get_class_properties.<locals>.<lambda>   s    
1h8O8O rJ   	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           rH   get_class_propertiesr      s/    s.O.OPPPE%@"EE J  7+++KQ4M4M+ Q347333y  F
 7<DGL*?tAw*?*?*?9UUUU 
 v||~~tAw)G)GQWXX   rJ   c                      g  fd}|j         D ]c}t          |t          j                  r |t          j        |           3t          |t          j                  r |t          j        |           dS )Nc                 j    	                       | |                     d S # t          $ r Y d S w xY wrB   )r   rn   )builderentryassignsr   s     rH   maybe_build_assignz-get_class_assigns.<locals>.maybe_build_assign   sN    	NN773../////  	 	 	DD	s   $ 
22)bodyr   astr
   StmtBuilderbuild_Assign	AnnAssignbuild_AnnAssign)r   cls_astr   r   r   s   `   @rH   get_class_assignsr      s    G       C CeSZ(( 	C{7????s}-- 	C{:EBBBNrJ   c                     t          j          fd          } fdt           t          j        j                                                  \  }}}d                    |          }t          |          }t          j
        |          }|j        d         }	t          |	t          j                  sJ t          j                   rd |	j        D             }
t!          |          D ]i\  }\  }}t#          j        |          }|rK||
vrG |           }||f||<   t'           |          }t(          j                            ||j                   jfd|D             }t1                     }t3          |                    dd	          d                   t3          |                    dd	          d                   z
  }t7          ||||d
          }t9          ||	          }t;          ||	|||          S )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        |           st          j        |           o3t          | j                   o| j        j        v ot          |            S rB   )r   ismethod
isfunctionr6   ri   __dict__r4   r   r   s    rH   r   z#get_jit_class_def.<locals>.<lambda>  s`    W-a00IG4Fq4I4I S!*---J#,& A rJ   r   c                 V    t          j        |           ot          | dd           k    S )N__self__)r   r   r   )fnr   s    rH   is_classmethodz)get_jit_class_def.<locals>.is_classmethod  s*    ##LJ(E(E(LLrJ   rs   r   c                 l    h | ]1}t          |t          j                  r|j        t          v *|j        2S rl   )r   r   FunctionDefrG   r<   r   methods     rH   	<setcomp>z$get_jit_class_def.<locals>.<setcomp>'  sJ     
 
 
&#/22
 666 K 766rJ   c           
      N    g | ]!\  }}t          || |                     "S ))r   r   )r   )r   rG   objr   r   s      rH   r   z%get_jit_class_def.<locals>.<listcomp>6  sI       T3 	C>>RUCVCVWWW  rJ   
r   F)r   r   r8   r_   r`   ra   
call_stackjoinr   r   parser   r   r   dataclassesis_dataclass	enumerater<   ry   r   r   loadercachesourcer   rw   splitr9   r   build_class_def)r   r   methodssourcelinesfile_linenofilenamer   
dedent_srcpy_ast	class_ast	overridesr   rG   _synthesizer_fn
parsed_deffuncmethod_defsr   leading_whitespace_lenr   r   r   s   ``                    @rH   get_jit_class_defr      se          GM M M M M *CUX!,,..* *&Kh WW[!!FJYz""FAIi..... $$ D
 
#.
 
 
	 &g.. 	D 	DLAya48>>N D$i"7"7+^C00
!:-
sD))$**41BCCC    "  K &c955J dA!6!6q!9::Sq!!!$> >  +'=u C  Y//G3	;
IwWWWrJ   c                 |   t          | t                    st          |           n| }t          j        j                            |j                  }|j        j	        d         }|rV|j
        j
        d         j        }t          j        | d|           j	        d         }|j	                            d|           t          |           rt          j        d          }	t          |	j	                  dk    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        j                                        }d}t:          r9t          | t                    s$t=          |           }|                    |          }tA          |j!        |||||          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   rw   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                  rH   r   r   G  s*    '1Z&@&@H2bJ	%33J4EFFI^ #F +;#A&*i8 ; ;	 ; ;<<A!D1k*** 2 '	\
 
 }!""a''zq!3?0
 0
' g9LggzOegg   #'*
 o155FK.;#fk&<< 	@ 	@C'_1!4?CNNr?? 	'!FN"&F I%88::MM ?
2z : : ?%b))%44X>>#   rJ   c                    t          | j        d         j        t          j                  r| j        d         j        j        }t          |t          j                  rj|j        }|j        }|dk    rVt          |t          j                  r<|j        dk    r1t          |j        t          j	                  r|j        j
        dk    rdS dS )Nr   _IgnoreContextManagerr   r_   TF)r   r   context_exprr   Callr   r   attrvalueNameid)stmtfunction	attr_name
attr_values       rH   #is_torch_jit_ignore_context_managerr    s    $*Q-,ch77 $:a=-2h.. 		$ I!J333
CM9 93 ?e++
:;KSX0V0V+!'*g55#t5rJ   c                       e Zd Zd ZdS )Builderc                 z    t          | d|j        j        z   d           }|t          ||           |||          S )Nbuild_)r   r   ri   rr   )rc   r   noder   s       rH   __call__zBuilder.__call__  sD    x$.*AA4HH>&sD111vc4   rJ   N)ri   rj   rk   r"  rl   rJ   rH   r  r    s#        ! ! ! ! !rJ   r  c                     |                      |j        |j        |j        t          d          z             }t	          t          ||          d |D             ||          S )NrO   c                 ,    g | ]}t          |          S rl   )r)   r   s     rH   r   z#build_class_def.<locals>.<listcomp>  s    AAAvd6llAAArJ   )rz   r{   r|   rw   r   r   )r   py_defr   r   r   r   rs          rH   r   r     se    v(&*;c'll*J	 	A aAAAAA:w  rJ   c                    |j         }|                     |j        |j        |j        t	          d          z             }t          | |j        ||          }d }	t          |dd           t          | |j	                  }	t          |||	          }
|d u}|@t          j                            |          }t          j                            |
||          }
t          t!          ||          |
t#          | |                    S )NrL   r  )r   rz   r{   r|   rw   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                rH   r  r    s    ;Dv}f&79JSQVZZ9WXXA!#v{I}MMJKvy$''3 fn55:{++D%I!H77	BBx44T;LiXXuQ!!4S$)?)?@@@rJ   zfCompiled functions can't take variable number of arguments or use keyword-only arguments with defaultsc                     |j         Z|j         }                     |j        |j        dz
  |j        t	          |j                  z             }t          |t                    |j        Z|j        }                     |j        |j        dz
  |j        t	          |j                  z             }t          |t                    t	          |j	                  dk    rC|j	        D ];}|7t           |                                          }t          |t                    <fd|j        D             }fd|j        D             } fd|D             }	|	 fd|D             z  }	|	S )Nr   r   c                 j    g | ]/}|r't          |j                           r|j                 nd f0S rB   boolr   r   r   r   s     rH   r   z$build_param_list.<locals>.<listcomp>  s^         !%mCG&<!=!=M#'""		
  rJ   c                 j    g | ]/}|r't          |j                           r|j                 nd f0S rB   r3  r5  s     rH   r   z$build_param_list.<locals>.<listcomp>  s^            !%mCG&<!=!=M#'""		
     rJ   c           	      >    g | ]\  }}t          |d |          S )F
kwarg_onlypdt_arg_typebuild_paramr   r   arg_typer   r   s      rH   r   z$build_param_list.<locals>.<listcomp>  s@       C 	CiEQQQ  rJ   c           	      >    g | ]\  }}t          |d |          S )Tr8  r;  r=  s      rH   r   z$build_param_list.<locals>.<listcomp>  s@       C 	CiDxPPP  rJ   )r   rz   r{   r|   rw   r   rn   _vararg_kwarg_errr   kw_defaultsr)  r   r   r   )
r   py_argsr   r   expr	ctx_ranger   arg_and_typesarg_and_types_kwonlyargsresults
   ` ``      rH   r(  r(    s   } }NNK1,doDH.M
 
	  	+<===~!~NNK1,doDH.M
 
	  	+<===
7!## & 	F 	FC&sC006688	'	3DEEE 
    <  M        %         *  F      5   F MrJ   c                    |j         }|                     |j        |j        |j        t	          |          z             }t          |dd           t          | |j                  }nU|rt          t          ||                    }n5|$|dk    rt          t          ||                    }nt          |          }t          |t          ||          |          S )Nr   rc   )r   rz   r{   r|   rw   r   r)  r   r0   r   r   r!   )r   py_argr   r9  r:  rG   r&  annotation_exprs           rH   r<  r<    s    :Dv}f&79JSQUYY9VWWAv|T**6$S&*;<<	 1eA|4455		46>>eAy1122-a00%4..*===rJ   c                 >   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                    d |D                       z   dz   z  }	 ||          \  }
}|	|
dz   z  }	t          j        |	          j        d	         }|j        |_        t          j        |          j        d	         }|j                            |           dt          j
        |          z   }|d| d| z  }t          |            ||          }d| d ||          z   dz   }t          |          d	k    r	|dz   |z   }n|}t          j        |          j        d	         }|S )N	InputTyperG   ann
OutputTypec                    g }g }| D ]w}|j         }|j        j        }|                    d          \  }}|dk    r|                     ||                     |dk    r|                     ||                     x||fS )Nr   inpout)r   r  r   r   )	r   inputsoutputsr   var_namevar_annvar_decl_typerL  rN  s	          rH   process_ins_outsz6build_ignore_context_manager.<locals>.process_ins_outs  s      	> 	>CwHioG%,]]3%7%7"M7%%ii'::;;;%%zz(G<<===wrJ   c                 P    t          j        dd| j                  }| d|j         S )Nz[^a-zA-Z0-9_]r   )resubr   r{   )r   r  r   s      rH   create_unique_name_extz<build_ignore_context_manager.<locals>.create_unique_name_ext  s0     V$c3<88$$t{$$$rJ   c                 f   d}d}t          |           dk    r|dz  }t          |           dk    r d| d         j        z   }|| d         j        z  }t          |           dk    rLd}|dd	                    d
 | D                       z   dz   z  }|d	                    d | D                       z  }||fS )Nrs   zreturn r   z -> Noner   z -> z	 -> Tuple[, c                     g | ]	}|j         
S rl   )rM  r   vars     rH   r   zObuild_ignore_context_manager.<locals>.build_return_ann_stmt.<locals>.<listcomp>,  s    /K/K/KC/K/K/KrJ   ]c                     g | ]	}|j         
S rl   rF   r`  s     rH   r   zObuild_ignore_context_manager.<locals>.build_return_ann_stmt.<locals>.<listcomp>-  s    .K.K.KCsx.K.K.KrJ   )rw   rM  rG   r   )rS  return_type_annreturn_statement_strs      rH   build_return_ann_stmtz;build_ignore_context_manager.<locals>.build_return_ann_stmt"  s    (w<<1z)Ow<<1$wqz~5O GAJO3 w<<!)OsTYY/K/K7/K/K/K%L%LLsRRO DII.K.K7.K.K.K$L$LL  444rJ   c                 @    d                     d | D                       S )Nr^  c                     g | ]	}|j         
S rl   rF   )r   r   s     rH   r   zDbuild_ignore_context_manager.<locals>.build_args.<locals>.<listcomp>1  s    333s#(333rJ   )r   )r   s    rH   
build_argsz0build_ignore_context_manager.<locals>.build_args0  s#    yy33d333444rJ   r   func_ignore_z
def (r^  c                 2    g | ]}|j         d z   |j        z   S )z :)rG   rM  r`  s     rH   r   z0build_ignore_context_manager.<locals>.<listcomp>9  s%    EEEsD372EEErJ   )z: passz@torch.jit.ignore
z
globals()["z"] = ztorch.jit.frontend.r   )r   r   r  keywordsr   r   r   r   r   
astunparseunparseexecrw   )r   r  rW  r[  rf  ri  rR  rS  ignore_function_nameignore_function_str
return_annreturn_stmtignore_functionignore_func_strassign_str_lhsassign_str_rhs
assign_str
assign_astrL  rN  s                     @@rH   build_ignore_context_managerr|    s1   ;88IL65/::J      % % %5 5 55 5 5 '&tz!}'A'JKKOFG *,B,B3,M,MM"%99diiEEfEEEFFFL 43G<<J:00 i 3449!<O  9O )K((-a0K,,, ,j.@.Q.QQOX';XXBVXXXO  Z((N 	62555

68J8JJSP  7||a#e+n<

#
:&&+A.JrJ   c                 x    | i S t          j        |           }d |j                                        D             S )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.
    Nc                 T    i | ]%\  }}|j         t          j        j        u||j         &S rl   )defaultr   	Parameterempty)r   kvs      rH   
<dictcomp>z$get_default_args.<locals>.<dictcomp>m  s=       Aq9G-333 	
19333rJ   )r   	signature
parametersr   )r   r  s     rH   get_default_argsr  ^  sN     
z	!"%%I (..00   rJ   c                 R     t          j          f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                     t          j        |           st          j        |           o#t          | j                   o| j        j        v S rB   )r   r   r   r6   ri   r   r   s    rH   r   z,get_default_args_for_class.<locals>.<lambda>  sM    W-a00IG4Fq4I4I 'S!*---'J#,& rJ   r   c                 4    i | ]\  }}|t          |          S rl   )r  )r   method_namemethod_impls      rH   r  z.get_default_args_for_class.<locals>.<dictcomp>  s7       $K 	%k22  rJ   )r   r   )r   r   defaultss   `  rH   get_default_args_for_classr  t  sX      ' ' ' '  G (/  H
 OrJ   c                   $    e Zd Zed             ZdS )WithItemBuilderc                 (   |j         j        }|j         j        }|t          t          t
          j                           z   }|j        }|                     |||          }t          |t          | |j                   |rt          | |          nd           S rB   )r  r{   r|   rw   r}   r   r2   optional_varsrz   r3   r)  )r   itemr{   startendop_varsr&  s          rH   r   zWithItemBuilder.build_withitem  s    ")!,c+CH5666$NN65#..sD-..(/9JsG$$$T
 
 	
rJ   N)ri   rj   rk   staticmethodr   rl   rJ   rH   r  r    s-        
 
 \
 
 
rJ   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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 dS )r   +-*/%|&^<<>>**c                 n    |j         }|j        j        dk    rd S t          t	          | |                    S )NStr)r  r   ri   r   r)  )r   r  r  s      rH   
build_ExprzStmtBuilder.build_Expr  s8    
?#u,, 4JsE22333rJ   c                 t     t           |j                  } fd|j        D             }t          ||          S )Nc                 0    g | ]}t          |          S rl   r)  )r   xr   s     rH   r   z,StmtBuilder.build_Assign.<locals>.<listcomp>  s#    888az#q!!888rJ   )r)  r  targetsr
   )r   r  rhslhss   `   rH   r   zStmtBuilder.build_Assign  s?    dj))88884<888c3rJ   c                 z   |j         t          | |d          t          |j                  t          j        k    r|j        j         j        dk    r| j        dk    r|j        }|t          d|j        j
                   z   }t          |j        d          r|t          d|j        j                   z  }|                     |j        ||          }t          d| j         d	|           t!          | |j                   }t!          | |j                  }t!          | |j                  }t#          |g||          S )
Nzwithout assigned value)r   rc   rd   zself.r  z: zKType annotations on instance attributes must be declared in __init__, not 'z': )r  rr   rv   targetr   r   r  funcnamer|   rw   r  hasattrr   rz   r{   
ValueErrorr)  r
   )r   r  r  r  srr  r  the_types           rH   r   zStmtBuilder.build_AnnAssign  sG   :&sD9QRRRR ..!$..
**OE#8dk&688999Ct-- 6s4 244555UC88B8"%,8 8358 8  
 dj))dk**c4?33seS(+++rJ   c                                            |j        |j        |j        t          d          z             }t	          | fd|j        D                       S )NrN   c                 0    g | ]}t          |          S rl   r  )r   r  r   s     rH   r   z,StmtBuilder.build_Delete.<locals>.<listcomp>  s#    MMMf*S&11MMMrJ   )rz   r{   r|   rw   r   r  r   r  r&  s   `  rH   build_DeletezStmtBuilder.build_Delete  sP    NN4;3u::9UVVaMMMMMMMNNNrJ   c                     |                      |j        |j        |j        t          d          z             }t	          ||j        d nt          | |j                            S )Nreturn)rz   r{   r|   rw   r%   r  r)  r  s      rH   build_ReturnzStmtBuilder.build_Return  sV    NNK$/CMM*I
 
 a!3C9T9TUUUrJ   c                     |                      |j        |j        |j        t          d          z             }t	          | |j                  }t          ||          S )NrQ   )rz   r{   r|   rw   r)  excr$   )r   r  r&  rC  s       rH   build_RaisezStmtBuilder.build_Raise  sG    NN4;3w<<9WXX#tx((Q~~rJ   c                     |                      |j        |j        |j        t          d          z             }t	          | |j                  }|j        t	          | |j                  nd }t          |||          S )NrR   )rz   r{   r|   rw   r)  testr^   r	   )r   r  r&  r  r^   s        rH   build_AssertzStmtBuilder.build_Assert  so    NNK$/CMM*I
 
 #ty))+/8+?jdh'''Tas###rJ   c                 b   t          | |j                  }t          | |j                  }t          |j                  }|t
          j        v rt
          j        |         }n@t          t          | |	                                j
        dd          d|j        z             t          |||          S )N=)r   )offsetsz*unsupported kind of augmented assignment: )r)  r  r  rv   opr   augassign_maprn   find_beforer   r  ri   r   )r   r  r  r  r  op_tokens         rH   build_AugAssignzStmtBuilder.build_AugAssign  s    dk**dj))$']]***"04HH#C!2CIII<r{J   h,,,rJ   c                 
   |j         rt          d d          |                     |j        |j        |j        t          d          z             }t          |t          | |j                  t          | |j
                            S )Nz-else branches of while loops aren't supportedwhile)orelsern   rz   r{   r|   rw   r1   r)  r  r   r   r  s      rH   build_WhilezStmtBuilder.build_While  sx    ; 	 $E   NN4;3w<<9WXXQ
3	22KTY4O4OPPPrJ   c           	      6   |                      |j        |j        |j        t          d          z             }|j        rt          |d          t          |t          | |j                  gt          | |j	                  gt          | |j                            S )NrM   z+else branches of for loops aren't supported)rz   r{   r|   rw   r  rn   r   r)  r  iterr   r   r  s      rH   	build_ForzStmtBuilder.build_For  s    NN4;3u::9UVV; 	V#A'TUUUT[))*TY''(TY''	
 
 	
rJ   c           	         |                      |j        |j        |j        t          d          z             }t	          |t          | |j                  t          | |j                  t          | |j	                            S )Nif)
rz   r{   r|   rw   r   r)  r  r   r   r  r  s      rH   build_IfzStmtBuilder.build_If  sj    NN4;3t999TUUsDI&&TY''T[))	
 
 	
rJ   c           
      6                          |j        |j        |j        t          d          z             }|j        rt          |d           fd|j        D             }t          t          t          t          |d                    |g                     S )Nr@   z?print statements with non-default destinations aren't supportedc                 0    g | ]}t          |          S rl   r  )r   valr   s     rH   r   z+StmtBuilder.build_Print.<locals>.<listcomp>-  s#    <<<
3$$<<<rJ   )rz   r{   r|   rw   destrn   valuesr   r   r0   r   )r   r  r&  r   s   `   rH   build_PrintzStmtBuilder.build_Print&  s    NN4;3w<<9WXX9 	#T   =<<<<<<c%7"3"344dB??@@@rJ   c                     |                      |j        |j        |j        t          d          z             }t	          |          S )Npass)rz   r{   r|   rw   r"   r  s      rH   
build_PasszStmtBuilder.build_Pass0  s3    NN4;3v;;9VWWAwwrJ   c                     |                      |j        |j        |j        t          d          z             }t	          |          S )NrV   )rz   r{   r|   rw   r   r  s      rH   build_BreakzStmtBuilder.build_Break5  s3    NN4;3w<<9WXXQxxrJ   c                     |                      |j        |j        |j        t          d          z             }t	          |          S )NrW   )rz   r{   r|   rw   r   r  s      rH   build_ContinuezStmtBuilder.build_Continue:  s;    NNK$/C
OO*K
 
 {{rJ   c                 f   |                      |j        |j        |j        t          d          z             }t	          |          r6t
          st          d          t          | |          }t          | |          S t          |t          | |j                  t          | |j                            S )NrP   ztorch.jit._IgnoreContextManager requires installing Python library `astunparse`,                                    please install it in your Python environment)rz   r{   r|   rw   r  _IS_ASTUNPARSE_INSTALLEDr   r|  r   r2   r   r   r   r   )r   r  r&  r{  s       rH   
build_WithzStmtBuilder.build_WithA  s    NN4;3v;;9VWW.t44 	/+ "Q   6c4@@Jc:...AsDJ77S$)9T9TUUUrJ   N)!ri   rj   rk   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  rl   rJ   rH   r   r     s)       #	3
C
C
D
DM 4 4 \4     \ 
 , , \,2 O O \O
 V V \V   \
 $ $ \$ - - \- Q Q \Q 

 

 \

 
 
 \
 A A \A   \   \   \ V V \V V VrJ   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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'             Z0e$d(             Z1e$d)             Z2e$d*             Z3e$d+             Z4e$d,             Z5e$d-             Z6e$d.             Z7e$d/             Z8e$d0             Z9e$d1             Z:d2S )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                            d          fd}|                                j        dz   } ||          t          j        v r|dz  } ||          t          j        v |t          |j	                  z   }| 
                    ||          }t          |t          ||j	                            S )Nzutf-8c                 .    t          |                    S rB   )chr)indexr   s    rH   get_charz-ExprBuilder.build_Attribute.<locals>.get_char  s    ve}%%%rJ   r   )r)  r  r   encoder   r  string
whitespacerw   r  make_raw_ranger&   r   )r   rC  baser  	start_posend_pos
name_ranger   s          @rH   build_AttributezExprBuilder.build_Attributez  s    #tz** ""7++	& 	& 	& 	& 	& JJLL$q(	hy!!V%666NI hy!!V%666c$)nn,''	7;;
dE*di88999rJ   c           	      >    t           |j                  } fd|j        D             }t          |d          rB|j        r;t           |j                  }|t          |                                |          gz  }g }|j        D ]}t           |j                  }|j	        s"t          |                                d          |                    t          t          |                                |j	                  |                     t          |||          S )Nc                 0    g | ]}t          |          S rl   r  )r   rI  r   s     rH   r   z*ExprBuilder.build_Call.<locals>.<listcomp>  s#    @@@F
3''@@@rJ   starargsz&keyword-arg expansion is not supported)r)  r   r   r  r  r(   r   rn  r  r   rn   r   r   r   r   )r   rC  r   r   stararg_exprkwargskwkw_exprs   `       rH   
build_CallzExprBuilder.build_Call  s   #ty))@@@@di@@@4$$ 	B 	B%c4=99LW\//11<@@AAD- 	N 	NB bh//G6 'MMOO%M   MM)E'--//26$B$BGLLMMMMT4(((rJ   c                 r    |                      |j        |j        |j        dz             }t          |          S )N   )rz   r{   r|   r   r   rC  r&  s      rH   build_EllipsiszExprBuilder.build_Ellipsis  s4    NNK$/A*=
 
 AwwrJ   c                    |                      |j        |j        |j        t          |j                  z             }|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)rz   r{   r|   rw   r  rC   rD   rn   r-   r   r    r   r0   r   r  s      rH   
build_NamezExprBuilder.build_Name  s    NN4;3tw<<9WXX7.// 	#$&67  
 7fq>>!W??"Wq>>!W
""77N5DG$$%%%rJ   c           
         |                      |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: )rz   r{   r|   rw   strr  r-   r   r    r  r   r  r  s      rH   build_NameConstantzExprBuilder.build_NameConstant  s    NNK$/CDJ<P<P*P
 
 :q>>!Z5  ??"Zq>>!Z8##77N@3tz??RSSSrJ   c                 p   t          | |j                  }t          | |j                  }t          |j                  }|t
          j        k    r[| j        sT|                     |	                                j
        |	                                j                  }t          |d          t          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rightrv   r  r   r  uses_true_divisionr  r   r  r  r[   r  	binop_mapry   rn   ri   r   )r   rC  r  r  r  	err_ranger  s          rH   build_BinOpzExprBuilder.build_BinOp  s   di((dj))$']]==!7=**399;;?CIIKK<MNNI;   (,,R00**399;;?CIIKK<MNNI#:R[H   XsC(((rJ   c                 x   t          | |j                  }t          |j                  }t          j                            |          }|*t          |                                d|j	        z             | 
                    |j        |j        |j        t          |          z             }t          |||          S )Nzunsupported unary operator: )r)  operandrv   r  r  unop_mapry   rn   r   ri   rz   r{   r|   rw   r/   )r   rC  sub_exprr  r  r&  s         rH   build_UnaryOpzExprBuilder.build_UnaryOp  s    c4<00$']]'++B//#

<r{J   NNK$/CMM*I
 
 q(H---rJ   c                 F    t          |j                  dk     r1t          dt          t          |j                            z              fd|j        D             }t	          |j                  }t          j                            |          }|h 	                    |d         
                                j        |d         
                                j                  }t          |d|j        z             |d         }|dd          D ]}t          |||          }|S )N   z.expected at least 2 values in BoolOp, but got c                 0    g | ]}t          |          S rl   r  )r   r(  r   s     rH   r   z,ExprBuilder.build_BoolOp.<locals>.<listcomp>  s#    KKK8ZX..KKKrJ   r   r   zunsupported boolean operator: )rw   r  AssertionErrorr  rv   r  r  
boolop_mapry   r  r   r  r  rn   ri   r   )r   rC  	sub_exprsr  r  r#  r  r  s   `       rH   build_BoolOpzExprBuilder.build_BoolOp  s&   t{a @3s4;GWGWCXCXX   LKKKt{KKK	$']])--b11**!""$$()A,*<*<*>*>*D I $;bkI   lQRR= 	, 	,C#s++CC
rJ   c                     t          t          | |j                  t          | |j                  t          | |j                            S rB   )r,   r)  r  r   r  r   rC  s     rH   build_IfExpzExprBuilder.build_IfExp   sA    sDI&&sDI&&sDK((
 
 	
rJ   c                 t     fd|j         gt          |j                  z   D             }d }t          ||j        |dd                    D ]\  }}}t          |          }t          j                            |          } 	                    |
                                j        |
                                j                  }	|t          |	d|j        z             |t          j        k    r#t#          d||          }
t%          |	d|
          }nt#          |||          }||}t#          d||          }|S )Nc                 0    g | ]}t          |          S rl   r  r   er   s     rH   r   z-ExprBuilder.build_Compare.<locals>.<listcomp>
  s#    UUU1JsA&&UUUrJ   r   z!unsupported comparison operator: r  r  r  )r  r   comparatorszipopsrv   r  	cmpop_mapry   r  r   r  r  rn   ri   r   NotInr   r/   )r   rC  operandsrG  r  op_r  r  r  r&  in_exprcmp_exprs   `           rH   build_ComparezExprBuilder.build_Compare  s8   UUUUd4CS>T>T0TUUU 48Xabb\BB 	8 	8MCccB",0044H""399;;?CIIKK4EFFA':R[H   SY  c3//"1eW55 344~!ufh77rJ   c                    	
 d 
d 		
fd}t           |j                  }t          |j                  }|t          j        u rt          |j        j        t          j                  r fd|j        j        j        D             }|sb 	                    |j
        |j        j        j        |j        j        j        dz             }t          |g           }|                    |           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 ]`}t          |t          j                  r!|                     
 ||                     =|                    t           |                     a|sX 	                    |j
        |j        j        |j        j        dz             }t          |g           }|                    |           t          ||          S t          |t           |j                  g          S t'          |                                d          )Nc                     |j         t          | |j                   nd }|j        t          | |j                  nd }|j        t          | |j                  nd }t	          |                                |||          S rB   )lowerr)  upperstepr'   r   )r   r  
slice_exprrD  rE  rF  s         rH   build_SliceExprz4ExprBuilder.build_Subscript.<locals>.build_SliceExpr%  s     #/ 3
 0111  #/ 3
 0111  ?. 3
000 
 TZZ\\5%>>>rJ   c                     t          |j        t          j                  r"t	          |                                d          t          | |j                  S )Nz9slicing multiple dimensions with tuples not supported yet)r   r  r   r   rn   r   r)  )r   r  
index_exprs      rH   build_Indexz0ExprBuilder.build_Subscript.<locals>.build_Index7  sN    **CI66 'JJLLO   c:#3444rJ   c                    g }|j         D ]}t          |          }|t          j        u r!|                     | ||                     @|t          j        u r!|                     | ||                     o|t          j        u rC|j        t          u r5|                    t          |
                                                     t          |
                                d| d          |S )Nz!slicing multiple dimensions with z not supported)dimsrv   r   Indexr   SliceConstantr  r  r   r   rn   )r   r  extslicer/  rC  sub_typerK  rH  s         rH   build_ExtSlicez3ExprBuilder.build_Subscript.<locals>.build_ExtSlice?  s    I   ::sy(($$[[dD%A%ABBBB**$$__S$%E%EFFFF--$*2H2H$$T$**,,%7%78888+

THTTT   rJ   c                 0    g | ]}t          |          S rl   r  )r   rJ  r   s     rH   r   z/ExprBuilder.build_Subscript.<locals>.<listcomp>V  s0       4>JsJ//  rJ   r+  )r  	   zellipsis is not supported)r)  r  rv   slicer   rN  r   r   eltsrz   r{   r|   r.   r   r+   rO  ExtSlicesysversion_inforn   r   )r   rC  rS  r  rR  indicesr&  tuprJ  rK  rH  s   `        @@rH   build_SubscriptzExprBuilder.build_Subscript#  s   	? 	? 	?$	5 	5 	5	 	 	 	 	 	" #tz**
##sy  $**CI66 L   BF*BRBW    
( 
(3
(3a7 A
 'q"--CNN3''' w/// 
3
8H(I(I'JKKK""TOOCtz$J$J#KLLL%%T>>#tTZ#H#HIII "
 
 
 39$$"&*/ D DJ!*ci88 DsD*'M'MNNNNz#z'B'BCCCC (TZ%:DJ<QTU<U A 'q"--CNN3''' w///TJsDJ$?$?#@AAA#DJJLL2MNNNrJ   c                      t                               |j        |j        |j        dz              fd|j        D                       S )Nr   c                 0    g | ]}t          |          S rl   r  r6  s     rH   r   z*ExprBuilder.build_List.<locals>.<listcomp>  #    333AZQ333rJ   )r   rz   r{   r|   rW  r2  s   ` rH   
build_ListzExprBuilder.build_List  sL    NN4;19LMM3333333
 
 	
rJ   c                      t                               |j        |j        |j        dz              fd|j        D                       S )Nr   c                 0    g | ]}t          |          S rl   r  r6  s     rH   r   z+ExprBuilder.build_Tuple.<locals>.<listcomp>  r`  rJ   )r.   rz   r{   r|   rW  r2  s   ` rH   build_TuplezExprBuilder.build_Tuple  sL    NN4;19LMM3333333
 
 	
rJ   c                                           |j        |j        |j        dz             }|j        r|j        d         st	          |d          t          | fd|j        D              fd|j        D                       S )Nr   r   z1Dict expansion (e.g. `{**dict}`) is not supportedc                 0    g | ]}t          |          S rl   r  r6  s     rH   r   z*ExprBuilder.build_Dict.<locals>.<listcomp>  r`  rJ   c                 0    g | ]}t          |          S rl   r  r6  s     rH   r   z*ExprBuilder.build_Dict.<locals>.<listcomp>  s#    555AZQ555rJ   )rz   r{   r|   keysrn   r   r  )r   rC  r   s   `  rH   
build_DictzExprBuilder.build_Dict  s    t{DOT_q=PQQ9 	TYq\ 	#J   33333335555555
 
 	
rJ   c                     t          |j                  }|                     |j        |j        |j        t          |          z             }t          ||          S rB   )r  r  rz   r{   r|   rw   r   r   rC  r  r&  s       rH   	build_NumzExprBuilder.build_Num  sC    DJNN4;3u::9UVVQrJ   c           
      n   |j         }|t          |t                    rt                              | |          S t          |t
          t          t          f          rt                              | |          S t          |t                    rt          
                    | |          S t          |t          t                              rt                              | |          S |                     |j        |j        |j        t#          t          |                    z             }t%          |d          )Nz Unknown Constant expression type)r  r   r4  r  r  intfloatcomplexrl  r  	build_Strrv   r  r  rz   r{   r|   rw   r[   )r   rC  r  error_ranges       rH   build_ConstantzExprBuilder.build_Constant  s    
=Jud33= 11#t<<<ec5'233 
	Q((d333s## 	Q((d333tH~~.. 	Q--c4888..T_doCJJ.O K  -OPPPrJ   c                     t          |j                  }|                     |j        |j        |j        t          |          z   dz             }t          ||          S Nr   )r  r  rz   r{   r|   rw   r*   rk  s       rH   rq  zExprBuilder.build_Str  sQ    DJNNK$/CJJ*F*J
 
 Q&&&rJ   c           	         d}g }|j         D ]}|                     |j        |j        |j        dz             }t	          |t
          j                  r`|j        dk    rt          |d          |j	        t          |d          |dz  }|
                    t          | |j                             t	          |t
          j                  r||j        z  }t          |d          |                     |j        |j        |j        dz             }t          t          t!          ||          t#          |d                    |g           S )	Nrs   r   r  z%Don't support conversion in JoinedStrz%Don't support formatting in JoinedStrz{}zUnsupported value in JoinedStrformat)r  rz   r{   r|   r   r   FormattedValue
conversionrn   format_specr   r)  r  rP  r   r&   r*   r   )r   rC  r   r   r  r&  s         rH   build_JoinedStrzExprBuilder.build_JoinedStr  s?   [ 	M 	MEu|U-=u?ORS?STTA%!344 
M#r))+A/VWWW$0+A/VWWWT	JsEK889999E3<00 MU[ '+KLLLNN4;19LMMVM!Q//q(1C1CDDdBOOOrJ   c                    |                      |j        |j        |j                  }t          |j                  dk    rt          |d          t          |j        d         j                  dk    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)rz   r{   r|   rw   
generatorsrn   ifsr)  eltr  r  r   )r   r  r&  elt_exprtarget_expr	iter_exprs         rH   build_ListCompzExprBuilder.build_ListComp  s    NN4;IIt1$$#A'WXXXtq!%&&!++#A'PQQQc48,, doa&8&?@@sDOA$6$;<<	8[)<<<rJ   c                 8    t                               | |          S rB   )r  r  )r   r  s     rH   build_GeneratorExpzExprBuilder.build_GeneratorExp  s     ))#t444rJ   c                    |                      |j        |j        |j                  }t          |j                  dk    rt          |d          t          |j        d         j                  dk    rt          |d          t          | |j                  }t          | |j	                  }t          | |j        d         j
                  }t          | |j        d         j                  }t          |||||          S r}  )rz   r{   r|   rw   r~  rn   r  r)  keyr  r  r  r   )r   r  r&  key_expr
value_exprr  r  s          rH   build_DictCompzExprBuilder.build_DictComp  s    NN4;IIt1$$#A'WXXXtq!%&&!++#A'PQQQc48,,TZ00
 doa&8&?@@sDOA$6$;<<	8ZiHHHrJ   c                     |                      |j        |j        |j        dz             }t          |t	          | |j                            S ru  )rz   r{   r|   r(   r)  r  r  s      rH   build_StarredzExprBuilder.build_Starred  s>    NN4;19LMMq*S$*55666rJ   N);ri   rj   rk   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)  r0  r3  rA  r]  ra  rd  ri  rl  rs  rq  r{  r  r  r  r  rl   rJ   rH   r  r  P  sf       #d
C
C	3
D
DI !Ick 	#
CH 	J 		4	8	8I : : \:  ) ) \)"   \ & & \&$ T T \T ) ) \)* . . \.   \( 
 
 \
   \4 ^O ^O \^O@ 
 
 \
 
 
 \
 

 

 \

   \
 Q Q \Q$ ' ' \' P P \P( = = \= 5 5 \5 I I \I 7 7 \7 7 7rJ   r  r   r   c                     | j         d |                             |          }|                     ||d         z   |t          |          z   |d         z             S )Nr   r   )r   rindexr  rw   )r   possubstrr  new_poss        rH   r  r    sT    j#%%f--Gg
2Gc&kk4IGTUJ4VWWWrJ   )NF)NNrB   )r  )r   r   r   rY  r  rY  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  ro  ImportErrorrD   rE   setascii_lowercaseascii_uppercasedigits_identifier_charsrI   r   Import
ImportFromGlobalr}   rx   updateAsyncFunctionDefAsyncFor	AsyncWithTryNonlocalr   	Exceptionr[   rn   rr   r   r   r   r   r   r   r   r  r  r   r  r@  r(  r<  r|  r  r  r  r   r  r)  r   r   r  rl   rJ   rH   <module>r     s   



      				  



 " " " " " "                         - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\                       ? > > > > > M M M M M M M M ! 	# 	 	 	D	  )C.1GG&-WXX H H H
 O+G[J L%HI!JJ#N'J"I!L'   OUGUJL'HfIwJJNFJIwL*    :'.*     kk|j     .  
< 
< 
< 
< 
<I 
< 
< 
<	 	 	 	 	 	 	 	, , , , ,, , , ,	 	 	 	 	 	 	 	  
% % %
  D  $GX GX GXT? ? ? ?F  $! ! ! ! ! ! ! !  A A A A&2 1 1 1 1h> > > >S S Sl  ,  :
 
 
 
 
g 
 
 
 lV lV lV lV lV' lV lV lV^l7 l7 l7 l7 l7' l7 l7 l7^ []]
[]]
 ""X X X X X Xs    C CC