ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3g<]@s ddlZddlZddlZddlmZmZmZmZddl m Z ddl m Z gdZ gdZgdZgdZd d d d Zgd ZeedddZeeeeeeeffeeeeefdddZee \ZZee\ZZee\ZZee\ZZGdddejZdS)N)AnyUnionIterableTuple)dedent)support()Zannotated_assignmentz x: int = 42)Zannotated_assignment_with_tuplezx: tuple = 1, 2)Z annotated_assignment_with_parensz(paren): int = 3+2)Zannotated_assignment_with_yieldzx: int = yield 42)Zannotated_no_assignmentzx: int)Zannotation_with_multiple_parensz((parens)): int)Zannotation_with_parensz (parens): int)Zannotated_assignment_with_attrza.b: int)Z#annotated_assignment_with_subscriptz a[b]: int)Z)annotated_assignment_with_attr_and_parensz (a.b): int)Z.annotated_assignment_with_subscript_and_parensz (a[b]): int)assertzassert a)Zassert_messagez assert a, b)Zassignment_falsez a = False)Zassignment_noneza = None)Zassignment_trueza = True)Zassignment_parenz(a) = 42)Zassignment_paren_multiplez(a, b) = (0, 1))Zasyncforz1 async for i in a: pass )Zattribute_callza.b())Zattribute_multiple_namesz abcd.efg.hij)Zattribute_simpleza.b)Zattributes_subscriptza.b[0])Zaugmented_assignmentzx += 42)Zaugmented_assignment_attributez a.b.c += 42)Zaugmented_assignment_parenz (x) += 42)Z$augmented_assignment_paren_subscriptz (x[0]) -= 42)Z binop_addz1 + 1)Zbinop_add_multiplez 1 + 1 + 1 + 1)Z binop_allz1 + 2 * 5 + 3 ** 2 - -3)Zbinop_boolop_compz"1 + 1 == 2 or 1 + 1 == 3 and not b)Z boolop_orza or b)Zboolop_or_multiplez a or b or c)Zclass_def_basesz. class C(A, B): pass )Zclass_def_decoratorsz3 @a class C: pass )Z#class_def_decorator_with_expressionz> @lambda x: 42 class C: pass )Z.class_def_decorator_with_expression_and_walruszA @x:=lambda x: 42 class C: pass )Zclass_def_keywordsz: class C(keyword=a+b, **c): pass )Zclass_def_mixedz> class C(A, B, keyword=0, **a): pass )Zclass_def_simplez( class C: pass )Zclass_def_starred_and_kwargz7 class C(A, B, *x, **y): pass )Zclass_def_starred_in_kwargsz> class C(A, x=2, *[B, C], y=3): pass )Zcall_attributezf().b)Z call_genexpzf(i for i in a))Zcall_mixed_argszf(a, b, *c, **d))Zcall_mixed_args_namedzf(a, b, *c, d=4, **v))Z call_one_argzf(a))Zcall_posarg_genexpzf(a, (i for i in a)))Z call_simplezf())Zcall_subscriptzf()[0])compza == b)Z comp_multiplez a == b == c)Zcomp_paren_endz a == (b-1))Zcomp_paren_startz (a-1) == b) decoratorz3 @a def f(): pass )Zdecorator_asyncz9 @a async def d(): pass )Zdecorator_with_expressionz> @lambda x: 42 def f(): pass )Z$decorator_with_expression_and_walruszA @x:=lambda x: 42 def f(): pass )Z del_attributezdel a.b)Zdel_call_attributez del a().c)Zdel_call_genexp_attributezdel a(i for i in b).c)Z del_emptyzdel())Zdel_listz del a, [b, c])Z del_mixedzdel a[0].b().c)Z del_multiplezdel a, b)Zdel_multiple_calls_attributez del a()().b)Z del_parenzdel(a,b))Zdel_paren_single_targetzdel(a))Zdel_subscript_attributez del a[0].b)Z del_tuplez del a, (b, c))deletezdel a)dictzO { a: 1, b: 2, c: 3 } )Z dict_compz{x:1 for x in a})Z dict_comp_ifz{x:1+2 for x in a if b})Z dict_emptyz{})Zempty_line_after_linecontz+ pass \ pass )forz+ for i in a: pass )Zfor_elsezJ for i in a: pass else: pass )Zfor_star_target_in_parenzfor (a) in b: pass)Zfor_star_targets_attributezfor a.b in c: pass)Zfor_star_targets_call_attributezfor a().c in b: pass)Zfor_star_targets_emptyzfor () in a: pass)Zfor_star_targets_mixedzfor a[0].b().c in d: pass)Zfor_star_targets_mixed_starredz7 for a, *b, (c, d) in e: pass )Zfor_star_targets_multiplezfor a, b in c: pass)Zfor_star_targets_nested_starredzfor *[*a] in b: pass)Zfor_star_targets_starredzfor *a in b: pass)Z$for_star_targets_subscript_attributezfor a[0].b in c: pass)Zfor_star_targets_trailing_commaz4 for a, (b, c), in d: pass )Zfor_star_targets_tuplezfor a, (b, c) in d: pass)Zfor_underscorez+ for _ in a: pass )Zfunction_return_typez/ def f() -> Any: pass )zf-string_slicez f'{x[2]}')zf-string_slice_upperz f'{x[2:3]}')zf-string_slice_stepzf'{x[2:3:-2]}')zf-string_constantzf'{42}')zf-string_boolopz f'{x and y}')zf-string_named_exprz f'{(x:=42)}')zf-string_binopzf'{x+y}')zf-string_unaryopz f'{not x}')f-string_lambdaz6f'{(lambda x, /, y, y2=42 , *z, k1, k2=34, **k3: 42)}')zf-string_lambda_callzf'{(lambda: 2)(2)}')zf-string_ifexprzf'{x if y else z}')z f-string_dictzf'{ {2:34, 3:34} }')z f-string_setzf'{ {2,-45} }')z f-string_listzf'{ [2,-45] }')zf-string_tuplezf'{ (2,-45) }')zf-string_listcompzf'{[x for x in y if z]}')zf-string_setcompzf'{ {x for x in y if z} }')zf-string_dictcompzf'{ {x:x for x in y if z} }')zf-string_genexprzf'{ (x for x in y if z) }')zf-string_yieldzf'{ (yield x) }')zf-string_yieldfromzf'{ (yield from x) }')zf-string_awaitzf'{ await x }')zf-string_comparez f'{ x == y }')z f-string_callzf'{ f(x,y,z) }')zf-string_attributezf'{ f.x.y.z }')zf-string_starredz f'{ *x, }')zf-string_doublestarredz f'{ {**x} }')zf-string_escape_bracez f'{{Escape')zf-string_escape_closing_bracez f'Escape}}')zf-string_multilinez/ f''' {hello} ''' )zf-string_multiline_in_exprzA f''' { hello } ''' )zf-string_multiline_in_callzJ f''' {f( a, b, c )} ''' )globalz global a, b)groupz (yield a))Zif_elifzF if a: pass elif b: pass )Z if_elif_elifzg if a: pass elif b: pass elif c: pass )Z if_elif_elsezd if a: pass elif b: pass else: pass )Zif_elsezD if a: pass else: pass )Z if_simplez if a: pass)importzimport a)Z import_aliasz import a as b)Z import_dottedz import a.b)Zimport_dotted_aliaszimport a.b as c)Zimport_dotted_multicharz import ab.cd)Z import_fromzfrom a import b)Zimport_from_aliaszfrom a import b as c)Zimport_from_dottedzfrom a.b import c)Zimport_from_dotted_aliaszfrom a.b import c as d)Zimport_from_multiple_aliaseszfrom a import b as c, d as e)Zimport_from_one_dotzfrom .a import b)Zimport_from_one_dot_aliaszfrom .a import b as c)Zimport_from_starzfrom a import *)Zimport_from_three_dotszfrom ...a import b)Zimport_from_trailing_commazfrom a import (b,))kwargz+ def f(**a): pass )Z kwonly_argsz/ def f(*, a, b): pass )Zkwonly_args_with_defaultz1 def f(*, a=2, b): pass )Z lambda_kwargzlambda **a: 42)Zlambda_kwonly_argszlambda *, a, b: 42)Zlambda_kwonly_args_with_defaultzlambda *, a=2, b: 42)Zlambda_mixed_argszlambda a, /, b, *, c: 42)Zlambda_mixed_args_with_defaultz%lambda a, b=2, /, c=3, *e, f, **g: 42)Zlambda_no_argsz lambda: 42)Zlambda_pos_argszlambda a,b: 42)Zlambda_pos_args_with_defaultzlambda a, b=2: 42)Zlambda_pos_only_argszlambda a, /: 42)Z!lambda_pos_only_args_with_defaultzlambda a=0, /: 42)Zlambda_pos_posonly_argszlambda a, b, /, c, d: 42)Z$lambda_pos_posonly_args_with_defaultzlambda a, b=0, /, c=2: 42)Z lambda_varargz lambda *a: 42)Zlambda_vararg_kwonly_argszlambda *a, b: 42)listz [1, 2, a])Z list_compz[i for i in a])Z list_comp_ifz[i for i in a if b])Zlist_trailing_commaz[1+2, a, 3+4,])Z mixed_argsz5 def f(a, /, b, *, c): pass )Zmixed_args_with_defaultzB def f(a, b=2, /, c=3, *e, f, **g): pass )Zmultipart_string_byteszb"Hola" b"Hello" b"Bye")Zmultipart_string_triplez"""Something here""" "and now")Z#multipart_string_different_prefixesz(u"Something" "Other thing" r"last thing")Zmultiple_assignmentszx = y = z = 42)Zmultiple_assignments_with_yieldzx = y = z = yield 42)Z multiple_passz& pass; pass pass )Z namedexprz(x := [1, 2, 3]))Znamedexpr_falsez (x := False))Znamedexpr_nonez (x := None))Znamedexpr_truez (x := True))nonlocalz nonlocal a, b)Znumber_complexz -2.234+1j)Z number_floatz-34.2333)Znumber_imaginary_literalz1.1234j)Znumber_integerz-234)Znumber_underscoresZ 1_234_567)passr)Zpos_argsz, def f(a, b): pass )Zpos_args_with_defaultz. def f(a, b=2): pass )Z pos_only_argsz, def f(a, /): pass )Zpos_only_args_with_defaultz. def f(a=0, /): pass )Zpos_posonly_argsz5 def f(a, b, /, c, d): pass )Zpos_posonly_args_with_defaultz6 def f(a, b=0, /, c=2): pass )Z primary_mixedz a.b.c().d[0])raiser)Zraise_ellipsisz raise ...)Z raise_exprzraise a)Z raise_fromzraise a from b)returnr)Z return_exprzreturn a)setz {1, 2+4, 3+5})Zset_compz{i for i in a})Zset_trailing_commaz {1, 2, 3,})Zsimple_assignmentzx = 42)Zsimple_assignment_with_yieldz x = yield 42)Z string_byteszb"hello")Zstring_concatenation_byteszb"hello" b"world")Zstring_concatenation_simplez "abcd" "efgh")Zstring_format_simplezf"hello")Z"string_format_with_formatted_valuezf"hello {world}")Z string_simplez"hello")Zstring_unicodezu"hello")Zsubscript_attributeza[0].b)Zsubscript_callza[b]())Zsubscript_multiple_slicesz a[0:a:2, 1])Zsubscript_simpleza[0])Zsubscript_single_element_tupleza[0,])Zsubscript_trailing_commaz a[0, 1, 2,])Zsubscript_tuplez a[0, 1, 2])Zsubscript_whole_slicez a[0+1:b:c])Z try_exceptzE try: pass except: pass )Ztry_except_elsezd try: pass except: pass else: pass )Ztry_except_else_finallyz try: pass except: pass else: pass finally: pass )Ztry_except_exprzG try: pass except a: pass )Ztry_except_expr_targetzL try: pass except a as b: pass )Ztry_except_finallyzg try: pass except: pass finally: pass )Z try_finallyzF try: pass finally: pass )Zunpacking_binopz[*([1, 2, 3] + [3, 4, 5])])Zunpacking_callz[*b()])Zunpacking_comparez [*(x < y)])Zunpacking_constantz[*3])Zunpacking_dictz[*{1: 2, 3: 4}])Zunpacking_dict_comprehensionz[*{x:y for x,y in z}])Zunpacking_ifexprz[*([1, 2, 3] if x else y)])Zunpacking_listz [*[1,2,3]])Zunpacking_list_comprehensionz[*[x for x in y]])Zunpacking_namedexprz[*(x:=[1, 2, 3])])Z unpacking_setz [*{1,2,3}])Zunpacking_set_comprehensionz[*{x for x in y}])Zunpacking_stringz [*"myvalue"])Zunpacking_tuplez [*(1,2,3)])Zunpacking_unaryopz[*(not [1, 2, 3])])Zunpacking_yieldz [*(yield 42)])Zunpacking_yieldfromz[*(yield from x)])tuplez (1, 2, 3))varargz* def f(*a): pass )Zvararg_kwonly_argsz- def f(*a, b): pass )whilez( while a: pass )Z while_elsezG while a: pass else: pass )withz' with a: pass )Zwith_asz, with a as b: pass )Z with_as_parenz. with a as (b): pass )Z with_as_emptyzwith a as (): pass)Zwith_list_recursivez6 with a as [x, [y, z]]: pass )Zwith_tuple_recursivez6 with a as ((x, y), z): pass )Zwith_tuple_targetz1 with a as (x, y): pass )Zwith_list_targetz1 with a as [x, y]: pass )yieldr)Z yield_exprzyield a)Z yield_fromz yield from a)#)Zannotation_multiple_targetsz(a, b): int = 42)Zannotation_nested_tuplez ((a, b)): int)Zannotation_listz[a]: int)Zannotation_lambdazlambda: int = 42)Zannotation_tuplez (a,): int)Zannotation_tuple_without_parenza,: int)Zassignment_keywordza = if)Zaugmented_assignment_listz [a, b] += 1)Zaugmented_assignment_tuplez a, b += 1)Z augmented_assignment_tuple_parenz(a, b) += (1, 2))Zcomprehension_lambdaz(a for a in lambda: b))Zcomprehension_elsez(a for a in b if c else d)Zdel_callzdel a())Zdel_call_genexpzdel a(i for i in b))Zdel_subscript_callz del a[b]())Zdel_attribute_callz del a.b())Zdel_mixed_callzdel a[0].b().c.d())Zfor_star_targets_callzfor a() in b: pass)Zfor_star_targets_subscript_callzfor a[b]() in c: pass)Zfor_star_targets_attribute_callzfor a.b() in c: pass)Zfor_star_targets_mixed_callzfor a[0].b().c.d() in e: pass)Zfor_star_targets_inzfor a, in in b: pass)zf-string_assignmentz f'{x = 42}')zf-string_emptyzf'{}')zf-string_function_defzf'{def f(): pass}')rzf'{lambda x: 42}')zf-string_singe_bracezf'{')zf-string_single_closing_bracezf'}')Zfrom_import_invalidzfrom import import a)Zfrom_import_trailing_commazfrom a import b,)Zimport_non_ascii_syntax_erroru import ä £)zinvalid indentationz. def f(): a a )Znot_terminated_stringz a = 'example)Ztry_except_attribute_targetzJ try: pass except Exception as a.b: pass )Ztry_except_subscript_targetzK try: pass except Exception as a[0]: pass ))zf(x, y, z=1, **b, *az>iterable argument unpacking follows keyword argument unpacking)zf(x, y=1, *z, **a, bz6positional argument follows keyword argument unpacking)zf(x, y, z=1, a=2, bz,positional argument follows keyword argument)zTrue = 1zcannot assign to True)za() = 1zcannot assign to function call)z (a, b): intz/only single target (not tuple) can be annotated)z [a, b]: intz.only single target (not list) can be annotated)za(): intzillegal target for annotation)z1 += 1z;'literal' is an illegal expression for augmented assignment)z pass passzunexpected indent)z def f(): passzexpected an indented block)zdef f(*): pass"named arguments must follow bare *)zdef f(*,): passr)zdef f(*, **a): passr)zlambda *: passr)zlambda *,: passr)zlambda *, **a: passr)zf(g()=2=expression cannot contain assignment, perhaps you meant "=="?)zf(a, b, *c, d.e=2r)zf(*a, **b, c=0, d[1]=3)r))Zstring_concatenation_formatz%f"{hello} world" f"again {and_again}")Zstring_concatenation_multiplez5 f"hello" f"{world} again" f"and_again" )zf-string_multiline_compzI f''' {(i for i in a if b)} ''' )z< f''' {a$b} ''' z(a$b) )z< f''' {a$b }''' z(a$b )z< f''' { a$b}''' za$b) )Z'multiline_fstrings_same_line_with_braceZ$multiline_fstring_brace_on_next_lineZ(multiline_fstring_brace_on_previous_line))Zexpression_addz1+1)Zexpression_add_2za+b)Zexpression_callzf(a, b=2, **kw))Zexpression_tuplez1, 2, 3)Zexpression_tuple_one_valuez1,)sourcercCs@t|trt|}n(t|ttfs.d|}ntd||S)N zInvalid type for test source: ) isinstancestrrrrjoin TypeError)r resultr'3/opt/python39/lib/python3.9/test/test_peg_parser.pycleanup_sources    r)) test_casesrcCs>t|\}}t|}t|D]\}}t|}|||<q||fSN)zipr enumerater))r*Ztest_idsZ _test_sourcesZ test_sourcesindexr r&r'r'r(prepare_test_casess   r/c@seZdZddddZddddZddddZejddd d Zddd d Z ddd dZ ddddZ ddddZ dS)ASTGenerationTestN)rcCsTd|_tD]D}t|}tj|dd}|tj|ddtj|ddd|q dSNT oldparserZinclude_attributes!Wrong AST generation for source: )ZmaxDiff TEST_SOURCES peg_parser parse_string assertEqualastdumpselfr Z actual_astZ expected_astr'r'r(+test_correct_ast_generation_on_source_filess   z=ASTGenerationTest.test_correct_ast_generation_on_source_filesc CsNtD]D}|jtd|ddt|Wdq1s>0YqdS)NzParsing z did not raise an exception)msg) FAIL_SOURCES assertRaises SyntaxErrorr7r8)r=r r'r'r(-test_incorrect_ast_generation_on_source_filessz?ASTGenerationTest.test_incorrect_ast_generation_on_source_filesc CsptD]f\}}d|vrtnt}||}t|Wdn1sF0Y|||jjvd|qdS)Nindentz1Actual error message does not match expexted for ) FAIL_SPECIALIZED_MESSAGE_CASESIndentationErrorrBrAr7r8Z assertTrue exceptionr?)r=r error_textexcser'r'r(5test_incorrect_ast_generation_with_specialized_errorss  ( zGASTGenerationTest.test_incorrect_ast_generation_with_specialized_errorscCsNtD]D}t|}tj|dd}|tj|ddtj|ddd|qdSr1GOOD_BUT_FAIL_SOURCESr7r8r9r:r;r<r'r'r(=test_correct_but_known_to_fail_ast_generation_on_source_filess   zOASTGenerationTest.test_correct_but_known_to_fail_ast_generation_on_source_filescCsFtD]<}t|}tj|dd}|t|t|d|qdS)NTr2r5rLr<r'r'r(,test_correct_ast_generation_without_pos_infos z>ASTGenerationTest.test_correct_ast_generation_without_pos_infoc Cs^tD]P\}}|t}tt|Wdn1s>0Y|||jj qdSr+) FSTRINGS_TRACEBACKSvaluesrArBr7r8rr9rGtext)r=r rHrJr'r'r(#test_fstring_parse_error_tracebacks s ,z5ASTGenerationTest.test_fstring_parse_error_tracebackscCsTtD]J}tj|dd}tj|ddd}|tj|ddtj|ddd|qdS)Neval)modeT)rUr3r4r5)EXPRESSIONS_TEST_SOURCESr7r8r9r:r;r<r'r'r(!test_correct_ast_generatrion_evals  z3ASTGenerationTest.test_correct_ast_generatrion_evalcCsJd}|td&t|dd|Wdn1s<0YdS)Nztoo many nested parentheses())ZassertRaisesRegexrBr7r8)r=nr'r'r($test_tokenizer_errors_are_propagatedsz6ASTGenerationTest.test_tokenizer_errors_are_propagated) __name__ __module__ __qualname__r>rCrKunittestZexpectedFailurerNrOrSrWr\r'r'r'r(r0s     r0) r:Z _peg_parserr7r`typingrrrrtextwraprtestrZ TEST_CASESZFAIL_TEST_CASESrEZGOOD_BUT_FAIL_TEST_CASESrPZEXPRESSIONS_TEST_CASESr#r)r/ZTEST_IDSr6ZGOOD_BUT_FAIL_TEST_IDSrMZ FAIL_TEST_IDSr@ZEXPRESSIONS_TEST_IDSrVZTestCaser0r'r'r'r(s>  09