NL i0UdZddlmZddlmZddlmZddlmZddl m Z m Z m Z m Z ddlmZmZmZmZmZmZmZmZddlmZdd lmZmZmZmZmZmZdd 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVdd lWmXZXdd lYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZedd ZfddZgddZh ddZiGddeGdZjiZkdeld<ddZmy)z+Code generation for native function bodies.) annotations)Final)frequently_executed_blocks)c_string_initializer) DEBUG_ERRORSEmitterTracebackAndGotoHandlerc_array_initializer)GENERATOR_ATTRIBUTE_PREFIX HAVE_IMMORTAL MODULE_PREFIX NATIVE_PREFIX REG_PREFIX STATIC_PREFIX TYPE_PREFIXTYPE_VAR_PREFIX)ClassIR)FUNC_CLASSMETHODFUNC_STATICMETHODFuncDeclFuncIR all_valuesget_text_signature)6 ERR_FALSENAMESPACE_MODULENAMESPACE_STATICNAMESPACE_TYPENAMESPACE_TYPE_VARAssign AssignMulti BasicBlockBoxBranchCallCallCCast ComparisonOp ControlOpCStringDecRefExtendFloatFloatComparisonOpFloatNegFloatOpGetAttr GetElementPtrGotoIncRef InitStaticIntegerIntOp KeepAlive LoadAddressLoadErrorValue LoadGlobal LoadLiteralLoadMem LoadStatic MethodCallOp OpVisitor PrimitiveOpRaiseStandardErrorRegisterReturnSetAttr SetElementSetMemTruncateTupleGetTupleSetUnborrowUnboxUndef UnreachableValue)generate_names_for_ir) RArray RInstanceRStructRTupleRTypeis_bool_or_bit_rprimitiveis_int32_rprimitiveis_int64_rprimitiveis_int_rprimitiveis_none_rprimitiveis_pointer_rprimitive is_taggedcdjfd|jDxsd}j|j}|d|dS)N, c3TK|]}j|j!ywN)ctypetype).0argemitters \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypyc/codegen/emitfunc.py z'native_function_type..gs@W]]388,@s%(voidz (*)())joinargsraret_type)fnrerkrets ` rfnative_function_typerofsE 99@@ @ JFD -- $CU%vQ cjg}|jjD]@}|j|j|jt |j Bdj|j|jj|j|dj|xsdS)Nz{ret_type}{name}({args})r^rh)rlnamerk) sigrkappend ctype_spacedrbrrrformatrlnative_function_namerj)rmrerkrds rfnative_function_headerrxls Dvv{{O w++CHH56zl388*MNO & , ,%%bffoo6  ) )" - YYt_ & - rpc`t|}|y|d}t|jddS)NNULLz -- asciibackslashreplace)errors)rrencode)functext_sig docstrings rfnative_function_doc_initializerrxs=!$'H*H%I  0 0AS 0 T UUrpc t|j}t|j|j}t|j|}t ||||}|j t|j|d|jt|j|jD]}t|jtr|j|jt|jtrS||jvrb|j!|j} d} |j dj#| t$||| |j} t'| D] \} } | | _|jD]} | j*}t|t,sJ||j/D]s}|j(| j(dzk(}t|t0xr t3d|j5D}|r|sVd|j|j(_ut9|jd}t;t=| D]} | | } | |v|_d}| dzt=| kr| | dz}|jA| ||_!| jD}||_"d|_#|jFt=|ksw||jFjI||xjFdz c_#|jFt=|krL|j d |jK||jK|y) Nz {z{ctype}{prefix}{name}{init};)raprefixrrinitc3<K|]}t|tywr`) isinstancer0)rcss rfrgz+generate_native_function..sG+, 1g&GsTr})&rcontextrParg_regsblocksFunctionEmitterVisitor emit_linerxdeclindentrrrbrTdeclare_tuple_structrQrurvr enumeratelabel terminatorr(targetsr#anysources referencedrrangelenrare emit_label next_blockopsop_indexacceptemit_from_emitter)rmre source_path module_name declarationsnamesbodyvisitorrrarriblockrtarget is_next_blockis_problematic_opcommonrrs rfgenerate_native_functionrs7??+L !"++ryy 9E 7??E *D$T<kRG4RWWgFGsKLKKM  RYY /  afff %  ( ( 0 afff %    $$QVV, * 1 1JU1XD 2   $YYFf%5  :%% *i0<*<0 ((* :F"LLEKK!O;M!+:v >!3G0:0B0B0DGD !$559 &,,'2 : :&( ! 5F 3v; "q F*  q53v; AJ 'ii S)   ! ( ( 1    ! S)"  NN3 l+ d#rpc.eZdZU dBdZdCdZdDdZdEdZdFdZdGdZdHdZ dIdZ dJd Z dKd Z dLd Z dMd ZdNd ZdNdZdOdZdPdZeeeeeeeeiZded<dQdZdRdZdSdZdTdZ dUdZ!dVdZ"dWdZ#dXdZ$dYdZ%dZdZ&d[dZ'd\dZ(d]dZ)d^d Z*d_d!Z+d`d"Z,dad#Z-dbd$Z.dcd%Z/ddd&Z0ded'Z1dfd(Z2dgd)Z3dhd*Z4did+Z5djd,Z6dkd-Z7dld.Z8dmd/Z9dnd0Z:dod1Z;dpd2Zdrd5Z?drd6Z@d7d8dsd9ZAdtd:ZBdud;ZCdvd<ZDdwd=ZEdFd>ZFdxd?ZGdyd@ZHdydAZIy7)zrc||_|j|_||_||_||_|j j |_d|_d|_g|_ d|_ y)NFr) rerrrrrliteralsrrrr)selfrerrrs rf__init__zFunctionEmitterVisitor.__init__s[ ]] (&&00  -1 rpc6|jjSr`)re temp_name)rs rfrz FunctionEmitterVisitor.temp_names||%%''rpc|j|jur.|jd|j|jzyy)Ngoto %s;)rrrrops rf visit_gotoz!FunctionEmitterVisitor.visit_gotos5 884?? * NN: 288(<< = +rpc|j}t|tr7|jj ||j ||j |S|j |d|d|j |S)N )rbrrTretuple_undefined_check_condreg c_error_value)rvaluecomparetyps rferror_value_checkz(FunctionEmitterVisitor.error_value_checksqjj c6 "<<::TXXe_d&8&8' hhuo&ay$2D2DS2I1JK Krpc.|j|j}}|j}d}||jur|j ||}}| }d}|rdnd}d}|j t jk(r"|j|j}||}nG|j t jk(r#|rdnd} |j|j| }nJd|j |jr|sd|d }nd |d }||jur|j6||jurs|jd |d |j|d y|jd |d|j||j!d|j|zdyy|jd |d|j|||jur#|jd|j|z|j!dd|j|zy)NFT!r!===zInvalid branchz unlikely(rizlikely(if (z) goto ;) {rrz} elsez goto %s;)truefalsenegatedrtraceback_entryrr#BOOLrrIS_ERRORrrrremit_traceback emit_lines) rrrrr negated_rarenegcond expr_resultrs rf visit_branchz#FunctionEmitterVisitor.visit_branchsggrxxe** 4?? "r'9'9'A%D!kGLc" 55FKK ((288,KU;-(D UUfoo %%d4G))"((G|jj|j}t|js2|j d|j ||fz|jy|j d|j ||fz|jy)Nz%s = CPyStatics[%d];annz#%s = (CPyTagged)CPyStatics[%d] | 1;)r literal_indexrrYrbrr)rrindexs rfvisit_load_literalz)FunctionEmitterVisitor.visit_load_literalRs| ++BHH5 ) NN1TXXb\54IIrxxN X NN5"u8MMSUS[S[  rpc d|jj|jjd}|jr'|jj jrt |jj|j}|jj}|jjd|d|jjdj|dj|jj|d||d|d|j|jj!|jd}d|d |d |d S|jj jr7|jrJd|j|jjd}d||d |jj|jS) aGenerate attribute accessor for normal (non-property) access. This either has a form like obj->attr_name for attributes defined in non-trait classes, and *(obj + attr_offset) for attributes defined by traits. We also insert all necessary C casts here. ( *)zsize_t rz{} = {};zCPy_FindAttrOffset({}, {}, {})z )->vtable*z ((char *)z + riz)->) class_type struct_namereris_traitclass_irlist attributesrattrrrrrvtype_struct_namera attr_type)robjrdecl_clcasttrait_attr_indexoffset attr_casts rf get_attr_exprz$FunctionEmitterVisitor.get_attr_expr[s2==,,T\\-?-?@AE    6 6 ? ? $G$6$67==bggF \\++-F    ' ''&(; < LL " "!!4;; 55g>D6#i0( DJJr}}'>'>rww'GHIMIyk3%s6(!< <}}%%.."++++7..t||/A/ABC3GtfSET\\%6%6rww%?$@A Arpcb|jr|j|y|j|}|j|j}|j}|j }|j |j\}}|jxr |j}|j|j|r|j|jr,|j|d|j|jgy|jrdnd} |jd|| ||jj|j |j!|j|j#|j$|j'|j)|j|jfzy|j+|||} |jj|d| d|j-|j} d} | s[|jj/||d||j|d |j1} | | j2|ur| j4t6j8k(r| j:}| j<sq|j?| |j@|j|jd |jC| jDz| } |jjd | sgd }|jjd jG|tI|jjKtLtI|j@|jNrG|jPs;| s| s|jjd|jjS||| r[| jT|jVur-|jd |jC| jTz|xjXdz c_,y| s|jjd yy)N) prefer_methodr_TRAITrz1%s = CPY_GET_ATTR%s(%s, %s, %d, %s, %s); /* %s */rrT)unlikelyrrPyExc_AttributeErrorz4PyErr_SetString({}, "attribute {} of {} undefined");z} else {r)-allow_error_valueget_attr_with_allow_error_valuerrrr attr_detailsrr error_overlap get_methodis_method_finalemit_method_callrrer getter_indexrrrarris_always_definedemit_undefined_attr_check next_branchrrr#rrremit_attribute_errorrrrrrvrepr removeprefixr is_refcounted is_borrowed emit_inc_refrrr)rrrrrtypecl attr_rtyper rversion attr_expralways_defined merged_branchbranch exc_classs rfvisit_get_attrz%FunctionEmitterVisitor.visit_get_attrsA    0 0 4 xx|hhrvv  ^^ oobgg6 G @ (@(@ == = >!!"''*%%clBFFBGGRH&(kk(rG 55ennE**2773))$**5 5??277#;<   **3G &11&"''277KzDJJv{{4K'KL(.  ..s3$ 6ILL**NUU% !5!56P!QR M''$^LL**:6 ))$ ; &&doo=NN: =;N;N0O#OP " # &&s+$rpc4|j|}|j|j}|j}|j}|j |j \}}|j |||}|jj|d|d|jrv|jsi|j|d} |jjd| d|jj|||jjdyyy)zHandle GetAttr with allow_error_value=True. This allows NULL or other error value without raising AttributeError. rrrrrrN) rrrrrrrrerr"r#rr$) rrrrr%r&r'r r)checks rfrz6FunctionEmitterVisitor.get_attr_with_allow_error_values xx|hhrvv  ^^ oobgg6 G&&sB8  $s9+Q78  # #BNN**2t4E LL " "T%#5 6 LL % %dJ 7 LL " "3 ' -; #rpc|jdzt|jkr.|j|jdz}t|tr|Sy)Nr)rrrrr#)rnext_ops rfrz"FunctionEmitterVisitor.next_branchsD ==1 s488} ,hht}}q01G'6*rpc|jtk(r|j|}|j|j}|j|j}|j }|j }|j|j\}}|j|jr|js|jtk(s,Jd|j|j|j|fz|jrdnd} |jd| ||jj|j |j|j||j!|j"|j%|j'|j|jf zy|j)|||} |js|j*r|j-|j} | s*|jj/|| d||j||jj1| || sl|jjdnP|j2rD|j-|js)|jj5|||||j|jj| d|d|jtk(r|jjd yy) Nz %s %d %d %srrz5%s = CPY_SET_ATTR%s(%s, %s, %d, %s, %s, %s); /* %s */rrrrz = 1;) error_kindrrrrrrrrris_initrrrer setter_indexrrrarrr"rr emit_dec_refremit_attr_bitmap_set) rrrrrr%r&r'r r(r)r*s rfvisit_set_attrz%FunctionEmitterVisitor.visit_set_attrs[ ==I %88B%LL::"ItS"''2 )))Z@%LL**3/))"2F2Frww2O 11#sJBGGT LL " "i[C5#: ;}} ) &&$u~6*rpr PREFIX_MAPc0|j|}|j|j}|jj |j |j |}|jtk(rd|z}|j|d|d|jy)Nz(PyObject *)%srrr) rr: namespacere static_name identifierrrrr)rrrrrrs rfvisit_load_staticz(FunctionEmitterVisitor.visit_load_static$sxxx|.||'' r~~vN <<> )#d*D $s4&*7rpcx|j|j}|j|j}|jj |j |j|}|jtk(rd|z}|j|d|d|j||jjy)Nz(PyTypeObject *)%srr) rrr:r<rer=r>rrrr$rb)rrrrrrs rfvisit_init_staticz(FunctionEmitterVisitor.visit_init_static,s".||'' r~~vN <<> )(50E $s5'+, $ .rpc|j|}|j|j}|j|d|d|jd|js|j ||j yy)Nrrr)rrrrr#r$rbrs rfvisit_tuple_getz&FunctionEmitterVisitor.visit_tuple_get5sdxx|hhrvv $s3%r"((156~~   dBGG ,rpcD|js|j|dzSy)Nrr)is_voidr)rrs rfget_dest_assignz&FunctionEmitterVisitor.get_dest_assign<s||88D>E) )rpc Fj|}djfd|jD}jj |j }|j j j}j||t|d|dy)zCall native function.r^c3@K|]}j|ywr`rrcrdrs rfrgz4FunctionEmitterVisitor.visit_call..E:3#:r);N) rFrjrkreget_group_prefixrmcnamerrr)rrrrklibrOs` rf visit_callz!FunctionEmitterVisitor.visit_callBs~##B'yy:"''::ll++BEE2 DJJ' $u]OE7!D6DErpc|j|}|j||j|j|jy)zCall native method.N)rFrrmethodrkrrrs rfvisit_method_callz(FunctionEmitterVisitor.visit_method_callJs2##B' dBFFBIIrww?rpc |j|}|j}t|tsJ||j}|jj |}|J|j |} |jjtk(rgn&|jjtk(rd|dgn|g} dj| |D cgc]} |j| c} z} t||j} |jjrdnd}| r`|jj|j}|j!||t"|j%|j&d| dy|j)|}|j!dj+||||jj-|j||j/|j&| | | ycc} w) Nz(PyObject *)Py_TYPE(rir^rrrrMz4{}CPY_GET_METHOD{}({}, {}, {}, {}, {})({}); /* {} */)rrbrrRrrrrkindrrrjrorerrNrrrOr method_indexrvrr)rrop_objrrop_argsrr%rrS is_directobj_argsrdrkmtyper(rP method_idxs rfrz'FunctionEmitterVisitor.emit_method_callOshhv %+2U2+>>**40!!!,,T2 {{#44 4:KK4D4DHX4X(Q/0_b^c  yyg$FsTXXc]$FFG$VT\\:#nn55(2 ,,// .rKrLrrM)rErFrjrkrer function_name)rrrrks` rf visit_call_cz#FunctionEmitterVisitor.visit_call_csa ::D''+Dyy:"'':: $(8(8'94&CDrpcHtd|jjd)Nzunexpected PrimitiveOp z%: they must be lowered before codegen) RuntimeErrordescrrrs rfvisit_primitive_opz)FunctionEmitterVisitor.visit_primitive_ops$%bggll^3X Y  rpc|j|}|j|j}|j|d|dyNrrrrr)rrrrs rfvisit_truncatez%FunctionEmitterVisitor.visit_truncates:xx|  $s5'+,rpc<|j|}|j|j}|jr&|j|jj}n%|j |jj}|j |d||dyr)rrsignedemit_signed_int_castrbemit_unsigned_int_castr)rrrrsrc_casts rf visit_extendz#FunctionEmitterVisitor.visit_extendsuxx|  9900=H22266;;?H $s8*UG156rpc|j|}|j|d|jd|jy)Nrrr)rrr>rrTs rfvisit_load_globalz(FunctionEmitterVisitor.visit_load_globals4xx| $s2==/3@rpc |j|}|j|j}|j|j}|jtj k(rP|j |jj|z}|j |jj|z}|j|d|d|j|jd|dyNrrr) rlhsrhsrr6 RIGHT_SHIFTrrbrop_strrrrrrs rf visit_int_opz#FunctionEmitterVisitor.visit_int_opsxx|hhrvvhhrvv 55E%% %++BFFKK83>C++BFFKK83>C $s3%q255)9(:!C5BCrpc |j|}|j|j}|j|j}d}d}|jtj tj tjtjfvrL|j|jj}|j|jj}nF|jtjtjtjtjfvrK|j|jj}|j|jj}nt!|jt"r?|jj$dkr&|j|jj}nXt!|jt"r>|jj$dkr%|j|jj}|j'|d||d|j(|jd||d y)Nrrrrr)rrrrr'SLTSGTSLESGErrbULTUGTULEUGErrr5rrr)rrrrrlhs_castrhs_casts rfvisit_comparison_opz*FunctionEmitterVisitor.visit_comparison_opsxx|hhrvvhhrvv 55\%%|'7'79I9IauAF G NNdV8C53%r: ;rpc|j|}|j|j}|j|d|dy)Nz = -rrrs rfvisit_float_negz&FunctionEmitterVisitor.visit_float_negs:xx|hhrvv $tC5*+rpc |j|}|j|j}|j|j}|j|d|d|j|j d|dyr)rrrrrrrs rfvisit_float_comparison_opz0FunctionEmitterVisitor.visit_float_comparison_opsfxx|hhrvvhhrvv $s3%q255)9(:!C5BCrpc|j|}|j|j}|j|j}|j |d|d|d|j s|j ||jyy)Nz = *(rr)rrrarbrr#r$)rrrrrbs rfvisit_load_memz%FunctionEmitterVisitor.visit_load_memsrxx|hhrvvzz"''" $uTF#cU!45~~   dBGG ,rpc |j|j}|j|j}|j|j}||k7r|j d|d|d|dyy)Nz*(rrr)rrrra dest_typer)rrrrrs rf visit_set_memz$FunctionEmitterVisitor.visit_set_mem%sgxx hhrvvJJr||,  3; NNR {#dV3se1= > rpc |j|}|j|j}t|jtsJ|j|j |jj vsJd|jdj||jj|jj||j y)NzInvalid field name.z{} = ({})&(({} *){})->{};) rrrrlrSfieldrrrvrb_ctyperrrs rfvisit_get_element_ptrz,FunctionEmitterVisitor.visit_get_element_ptr.sxx|hhrvv"++w/<</xx2;;,,,C.CC,  ' . .bggnnbkk&6&6RXX  rpc ^|j|}|j|j}|j}t|jt r|j |d|d|dy|j|j}|jj}t|tsJ|g}|jD]/}||k7r|j|d||j|1|j |d|j|ddj|dy)N.rr = (z) { r^z };) rrrrrrMrrbrSrrtrarj) rrrrrrrl init_itemsns rfvisit_set_elementz(FunctionEmitterVisitor.visit_set_element:sxx|xx  bffe $ NNdV1UG3tfA6 7((266"Cvv{{Hh0 :( :0J^^ ,:%%Qqcl3%%d+  , NNdV4 8(<'=U499ZCXBYY]^ _rpc|j}|j|}t|jtr|j|j}nt|jt ri|j |jj}|jj|jj|jj|}n |j}|j|d|jd|dy)Nrz)&r)rbrrrrCr=r:r<rer=r>rrr)rrrrrrs rfvisit_load_addressz)FunctionEmitterVisitor.visit_load_addressSsggxx| bffh '((266"C  +__RVV%5%56F,,**266+<+P>PRXYC&&C $tCJJ|jj||y)Nrrv)rliners rfrz FunctionEmitterVisitor.emit_lines t-rpc6|jj|yr`)rer)rliness rfrz!FunctionEmitterVisitor.emit_liness 'rpcT|jj|||jy)N)r)rer$r)rrr%s rfr$z#FunctionEmitterVisitor.emit_inc_refs !!$DII!>rpcV|jj||||jy)N)rer)rer7r)rrr%res rfr7z#FunctionEmitterVisitor.emit_dec_refs! !!$wTYY!Orpc:|jj|yr`)rr)rrs rfemit_declarationz'FunctionEmitterVisitor.emit_declarations ##D)rpc|j<|jj|j|j|jyyr`)rrerrrrs rfrz%FunctionEmitterVisitor.emit_tracebacks;   ) LL ' '(8(8$:J:JBL^L^ _ *rpc ^|jJ|jjd|j}|j d|j j dd|jd||jt|jd|fztr|j dyy)Nglobalsz3CPy_AttributeError("%s", "%s", "%s", "%s", %d, %s);\\\rrz7assert(PyErr_Occurred() != NULL && "failure w/o err!");) rrer=rrrr|r!r r)rrr}rglobals_statics rfrz+FunctionEmitterVisitor.emit_attribute_errors!!---11)T=M=MN  A  ((v6""1%!!"<=""1%     NNT U rpct|ryy)Nz (Py_ssize_t)r)r\rrbs rfrz+FunctionEmitterVisitor.emit_signed_int_casts T?!rpc4t|ryt|ryy)Nz (uint32_t)z (uint64_t)r)rWrXrs rfrz-FunctionEmitterVisitor.emit_unsigned_int_casts t $  &rp) rerrrrr{rr{returnNone)rr{)rr2rr)rrOrr{rr{)rr#rr)rrDrr)rrJrr)rrrr)rr rr)rr9rr)rr;rr)rr{rzGetAttr | SetAttrr rrr{)rr0rr)rz Branch | None)rrErr)rr=rr)rr4rr)rrIrr)rrOrr{)rr$rr)rr>rr) rr{rYrOrrr{rZz list[Value]rr)rr3rr)rr*rr)rr"rr)rr&rr)rrLrr)rrNrr)rrBrr)rr%rr)rrArr)rrHrr)rr+rr)rr:rr)rr6rr)rr'rr)rr/rr)rr.rr)rr-rr)rr<rr)rrGrr)rr1rr)rrFrr)rr8rr)rr7rr)rrKrr)rr!rr{)rrOrr{)r%rUrr{)rr{robjectrr)rr{rr)rr{r%rUrr)rr{r%rUreboolrr)rr{rr)rr#r}r{rr{rr)rbrUrr{)J__name__ __module__ __qualname__rrrrrrrrrrrrr.rrr9rrrrrr rrr:__annotations__r?rArCrFrQrUrrcrfrjrqrtrwrrrrrrrrrrrrrrrrrrrrrarrrrr$r7rrrrrrrprfrrs.5DGVY "(>L+JZ1C / O"BHH,T(,57p - -O J8/- F@ (T,&@\ 8I57$E - 7ADX,<, D -?  `2 : +))@)1559.(?P*`V" rprNzFinal[dict[int, str]]_translation_tablec tstddtddtddtddtd d i}td D](}||vs|d ks|d k\r d|z||<t|||<*tj t j ||jdjtS)zConvert bytestring to the C string literal syntax (with necessary escaping). For example, b'foo ' gets converted to 'foo\n' (note that double quotes are not added).  z\n z\r z\tryrzrrra z\x%.2xlatin1) rordrchrupdater{ maketransdecode translate)bdrs rfrrs  Iu Iu Iu He Iv  s "Azr6Q#X$q=AaDq6AaD  " !!#--"23 88H  ' '(: ;;rp)rmrrerrr{)rmrrerrr{)rrrr{) rmrrerrr{rr{rr)rbytesrr{)n__doc__ __future__rtypingrmypyc.analysis.blockfreqrmypyc.codegen.cstringrmypyc.codegen.emitrrr r mypyc.commonr r r rrrrrmypyc.ir.class_irrmypyc.ir.func_irrrrrrr mypyc.ir.opsrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrCrDrErFrGrHrIrJrKrLrMrNrOmypyc.ir.pprintrPmypyc.ir.rtypesrQrRrSrTrUrVrWrXrYrZr[r\rorxrrrrrrrrprfr s1"?6bb   &77777777777777p2      VL$L$ L$/2L$ADL$ L$^x Yt_x v-/).