ÿØÿà 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 @sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl ZddlZddlZddlmZmZzddlmZdZWneydZYn0ddlmZddlmZddlmZdd lmZd d Zd d ZddZGdddZ Gddde ej!eddZ"Gddde ej!eddZ#Gdddej!Z$GdddZ%Gddde%ej!eddZ&Gddde%ej!eddZ'Gdd d Z(Gd!d"d"e(ej!eddZ)Gd#d$d$e(ej!eddZ*e+d%kre,dS)&N)mock skipUnless)ProcessPoolExecutorTF)support) script_helper)without_source_date_epoch)SourceDateEpochTestMetacCs|sd}tjj||dS)N optimization) importlibutilcache_from_source)scriptoptr3/opt/python39/lib/python3.9/test/test_compileall.pyget_pycsrcsfdddDS)Ncsg|]}t|qSr)r).0rrrr &zget_pycs..rrrrrrget_pycs%srcCs t|j}t|j}||kSN)osstatst_ino)Z filename1 filename2Zinode1Zinode2rrr is_hardlink)s  r!c@sheZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zed#d$d%Zd&d'Zed#d(d)Zed#ed*d+d,Zejd#d-d.ed*d/d0Zd1d2Zd3d4d5d6Zd7d8Zd9d:Zd;d<Zd=d>Z d?d@Z!dAdBZ"dCdDZ#dEdFZ$dGdHZ%e&j'dIdJZ(d-S)KCompileallTestsBasecCst|_tj|jd|_tj |j|_ t |jd}| dWdn1sX0Ytj|jd|_ tj |j |_t|j|j tj|jd|_t|jtj|jd|_t|j|jdS)N_test.pywzx = 123 z _test2.pyZ_subdirz _test3.py)tempfilemkdtemp directoryrpathjoin source_pathr r rbc_pathopenwrite source_path2bc_path2shutilcopyfileZ subdirectorymkdir source_path3selffilerrrsetUp2s ( zCompileallTestsBase.setUpcCst|jdSrr0rmtreer'r5rrrtearDown@szCompileallTestsBase.tearDowncCsLtj|jd|_t|jd}|dWdn1s>0YdS)Nz _test_bad.pyr$zx ( )rr(r)r'bad_source_pathr,r-r4rrradd_bad_source_fileCsz'CompileallTestsBase.add_bad_source_filecCsht|jd}|d}Wdn1s,0Ytt|jj}t dt j j d|d@}||fS)Nrb <4sLLr) r,r+readintrrr*st_mtimestructpackr r MAGIC_NUMBER)r5r6datamtimeZcomparerrrtimestamp_metadataHs(z&CompileallTestsBase.timestamp_metadatac Csxzt|jdWn ttfy2|dYn0tt "| t |jWdn1sj0YdS)N)rArAz0filesystem doesn't support timestamps near 2**32 rutimer* OverflowErrorOSErrorZskipTest contextlibredirect_stdoutioStringIO assertTrue compileall compile_filer:rrr test_year_2038_mtime_compilationPs z4CompileallTestsBase.test_year_2038_mtime_compilationc Csxzt|jdWn ttfy2|dYn0tt "| t |jWdn1sj0YdS)N) rWz+filesystem doesn't support large timestampsrKr:rrrtest_larger_than_32_bit_timesZs z1CompileallTestsBase.test_larger_than_32_bit_timescCstjdrtdt|j|j| t |j d$}| t |d}Wdn1sf0Yt |j d$}||||Wdn1s0Y|j| tj|jddd|j| dS)NSOURCE_DATE_EPOCHzSOURCE_DATE_EPOCH is setr>wbFTforcequiet)renvirongetunittestZSkipTest py_compilecompiler* assertEqualrJr,r+rBlenr-assertNotEqualrT compile_dirr'rS)r5metadatar6bcrrrrecreation_checkds   2 (z$CompileallTestsBase.recreation_checkcCs|tdtjjdddS)Nr@rr)rirErFr r rGr:rrr test_mtimetszCompileallTestsBase.test_mtimecCs|ddS)Ns)rir:rrrtest_magic_numberysz%CompileallTestsBase.test_magic_numbercCs|j|jfD] }zt|Wq Yq 0q |tj|jddd|tj |joftj |j t|j|tj |j ddd|tj |jotj |jt|jt|j| | tj|jddd| tj |j ddddS)NFTr[r)r+r/runlinkrSrTrUr*r(isfilerfr'r= assertFalser<)r5fnrrrtest_compile_files}s6       z&CompileallTestsBase.test_compile_filescCs||tj|jt(}|t t |j Wdn1sJ0Y| |d|tj|jdS)Nz&Compiling ([^WindowsPath|PosixPath].*))rnrr(rmr+rcaptured_stdoutrSrTrUpathlibPathr* assertRegexgetvalue)r5stdoutrrrtest_compile_file_pathlikes  6z.CompileallTestsBase.test_compile_file_pathlikecCsP|tj|j|tjt |j t ddd|tj|jdS)NZ ddir_pathr)ddirr]) rnrr(rmr+rSrTrUrrrsr*r:rrrtest_compile_file_pathlike_ddirs z3CompileallTestsBase.test_compile_file_pathlike_ddircCstjjj|jgd"|tjddWdn1s<0Ytjjj|jgd.|| tjddddWdn1s0YdS)Nr(rr]FT) skip_curdirr\r]) testtest_importlibr Z import_stater'rSrT compile_pathr=rnr:rrrtest_compile_paths0 z%CompileallTestsBase.test_compile_pathcCs|tj|jd}tj|d}t|t|dWdn1sH0Yt||tj tj|ddS)NrHr6r$ __pycache__) rr(r)r'r2r,rTrUrnexists)r5Zdata_dirZ data_filerrrtest_no_pycache_in_non_packages   z2CompileallTestsBase.test_no_pycache_in_non_packagecCsL|tt"|t|jWdn1s>0YdSr) r=rOrPrQrRrnrTrUr<r:rrr#test_compile_file_encoding_fallbacksz7CompileallTestsBase.test_compile_file_encoding_fallbackcCsdrdnd\}}tj|jd|dtjj|j|d}|tj |tjj|j |d}|tj |tjj|j |d}|tj |dS)NF)rr)rr Tr]optimizer ) rTrfr'r r rr*rSrr(rmr.r3)r5rrcachedZcached2Zcached3rrr test_optimizes   z!CompileallTestsBase.test_optimizecCs|tj|jt"}tt |j Wdn1sD0Y| d}||d|tj|jdS)Nrz$Listing ([^WindowsPath|PosixPath].*))rnrr(rmr+rrqrTrfrrrsr'ru splitlinesrtrS)r5rvlinerrrtest_compile_dir_pathlikes  0 z-CompileallTestsBase.test_compile_dir_pathlikez&concurrent.futures.ProcessPoolExecutorcCs"tj|jddd||jdSNTr]workersrTrfr'rScalledr5 pool_mockrrrtest_compile_pool_calledsz,CompileallTestsBase.test_compile_pool_calledcCs@|td tj|jddWdn1s20YdS)Nz%workers must be greater or equal to 0)r)ZassertRaisesRegex ValueErrorrTrfr'r:rrr!test_compile_workers_non_positivesz5CompileallTestsBase.test_compile_workers_non_positivecCs,tj|jddd||jddddS)NTrrr max_workers)rTrfr'rc call_argsrrrrtest_compile_workers_cpu_countsz2CompileallTestsBase.test_compile_workers_cpu_countzcompileall.compile_filecCs,tj|jdd||j||jdS)NTr{)rTrfr'rnrrS)r5compile_file_mockrrrrtest_compile_one_workers z+CompileallTestsBase.test_compile_one_workerNnewcCs"tj|jddd||jdSrr)r5rrrr$test_compile_missing_multiprocessingsz8CompileallTestsBase.test_compile_missing_multiprocessingcCsd}|j}td|dD]>}tj|d|}tj|d}t|t|j|qt j |}t j |jd|dd|tj|t j |jd|d|tj|dS)NrZdir_z script.pyT)r] maxlevels)r'rangerr(r)r2r0r1r*r r rrTrfrnrmrS)r5depthr(isourceZ pyc_filenamerrrtest_compile_dir_maxlevelss  z.CompileallTestsBase.test_compile_dir_maxlevelsT)parallelcCsddg}|j}g}|D]>}tj||}t|t|dd|t|ddqtj |jd||rjdnd d | ||D]}| | |j|t j |}|t|jtjd} t|\} } } tj|| } tjj |} || j| |d | d t| qdS) Nr}foo__init__r modzdef fn(): 1/0 fn() Trr)r]rxr")r'rr(r)r2r make_scriptappendrTrfrS startswithr r rrdsepassert_python_failurer}r~Zget_code_from_pycrc co_filenameassertInfsdecode)r5rxrfullpathr(ZmodsZsubdirrZmodcodemodpath_err expected_inZ mod_code_objrrr_test_ddir_onlys0     z#CompileallTestsBase._test_ddir_onlycCs|jdddS)N Frxrrr:rrrtest_ddir_only_one_workersz-CompileallTestsBase.test_ddir_only_one_workercCs|jdddS)NrTrrr:rrrtest_ddir_multiple_workers#sz.CompileallTestsBase.test_ddir_multiple_workerscCs|jdddS)Nr Frrr:rrrtest_ddir_empty_only_one_worker'sz3CompileallTestsBase.test_ddir_empty_only_one_workercCs|jdddS)Nr Trrr:rrr test_ddir_empty_multiple_workers+sz4CompileallTestsBase.test_ddir_empty_multiple_workersc Csgd}tjj|jg|R}t|t|dd}tj |}tjj|jg|ddR}t j |d|dt |\}}}tjj|dd} | | t|td||t|tddS)Nr}buildrealr(r}1 / 0rT)r]stripdirencodingrr(r)r'makedirsrrr r rrTrfrrstrsysgetdefaultencoding assertNotIn) r5rr(rrhrrcoutrrrrrtest_strip_only/s"  z#CompileallTestsBase.test_strip_onlyc Csgd}tjj|jg|R}t|t|dd}tj |}d}t j |d|dt |\}}}tjj||jg|R} | | t|tddS)Nrr}r/fooT)r] prependdirr)rr(r)r'rrrr r rrTrfrrrrr) r5rr(rrhrrrrrrrrtest_prepend_onlyBs  z%CompileallTestsBase.test_prepend_onlyc Csgd}tjj|jg|R}t|t|dd}tj |}tjj|jg|ddR}d}t j |d||dt |\}}} tjj|g|ddR} | | t| td||t| tddS) Nrr}rrrT)r]rrrr r5rr(rrhrrrrrrrrrtest_strip_and_prependQs(  z*CompileallTestsBase.test_strip_and_prependcCsxgd}tjj|jg|R}t|t|dd|t$t j |dddddWdn1sj0YdS)N)r}rrr(rxr}rTz/barr)r]rxrr) rr(r)r'rrr assertRaisesrrTrf)r5rr(rrrtest_strip_prepend_and_ddirfs   z/CompileallTestsBase.test_strip_prepend_and_ddirc Cst|jdd}g}dD]}|tjj||dqddgddgddggdg}|D]Z}tj|d |d |D]@}| t j ||zt ||WqltyYql0qlqTdS) Ntest_optimizationa = 0r rrrr rrrrTr)rrr'rr r rrTrUrSrr(rmrl Exception)r5rrh opt_leveltest_combinationsopt_combinationrrr!test_multiple_optimization_levelsos(   z5CompileallTestsBase.test_multiple_optimization_levelsc Cstj|jddd}tj|jddd}tj|jddd}t|t|t|t|dd}t|dd}tj|d }tj|d }t||t||tj |}tj |} t j |d |d | tj||tj| dS) Nr}dirallowedsymlinks prohibited test_allowedrtest_prohibitedtest_allowed.pytest_prohibited.pyT)r] limit_sl_dest)rr(r)r'rrrsymlinkr r rrTrfrSrmrn r5Z allowed_pathZ symlinks_pathZprohibited_pathZallowed_scriptZprohibited_scriptZallowed_symlinkZprohibited_symlinkZ allowed_bcZ prohibited_bcrrrtest_ignore_symlink_destinations"       z3CompileallTestsBase.test_ignore_symlink_destination))__name__ __module__ __qualname__r7r;r=rJrVrXrirjrkrprwryrrrrrrpatchrrrrrrrrrrrrrrrrrskip_unless_symlinkrrrrrr"0sR          r"c@s eZdZdS)CompileallTestsWithSourceEpochNrrrrrrrrsr) metaclassZsource_date_epochc@s eZdZdS)!CompileallTestsWithoutSourceEpochNrrrrrrsrc@s$eZdZddZddZddZdS) EncodingTestcCsdt|_tj|jd|_t|jddd$}|d|dWdn1sV0YdS)Nr#r$utf-8rz# -*- coding: utf-8 -*- u print u"€" ) r%r&r'rr(r)r*r,r-r4rrrr7s   zEncodingTest.setUpcCst|jdSrr8r:rrrr;szEncodingTest.tearDowncCs>z0tj}tjtddt_t|jW|t_n|t_0dS)Nasciir)rrvrQ TextIOWrapperBytesIOrTrfr')r5Z orig_stdoutrrr test_errors zEncodingTest.test_errorN)rrrr7r;rrrrrrsrc@seZdZddZejddZddZddZd d Z d d Z d dZ ddZ e ddZddZddgfdddgfdddgffD]&\ZZZeefddZeede<qd d!Zd"d#Ze d$d%Zd&d'Zd(d)Zejd*d+Zd,d-Zd.d/Zd0d1Zd2d3Z d4d5Z!d6d7Z"d8d9Z#d:d;Z$dd?Z&d@dAZ'dBdCZ(dDdEZ)e*e+dFdGdHZ,e-.dIdJdKZ/dLdMZ0dNdOZ1ejdPdQZ2dRdSZ3dTdUZ4dVS)WCommandLineTestsBasecCsrt|_|tj|jtj|jd|_ t |j tj|j d|_ t |j dd|_t |j dd|_dS)Nrrrr Zbar)r%r&r'Z addCleanupr0r9rr(r)pkgdirr2pkgdir_cachedirrrinitfnbarfnr:rrrr7s  zCommandLineTestsBase.setUpccsBtj}tj|jd}z|t_|j|dVW|t_n|t_0dS)NZ __testcache__) PYTHONPATHZPYTHONPYCACHEPREFIX)rpycache_prefixrr(r)r')r5Z old_prefixZ new_prefixrrrtemporary_pycache_prefixs z-CommandLineTestsBase.temporary_pycache_prefixcCsgtddd|S)Nz-S-mrT)rZ!optim_args_from_interpreter_flags)r5argsrrr _get_run_argss z"CommandLineTestsBase._get_run_argscOs4tj||i|ddi\}}}|d||S)NPYTHONIOENCODINGrr)rassert_python_okrrcr5rZenv_varsrrrrrr assertRunOKs z CommandLineTestsBase.assertRunOKcOs.tj||i|ddi\}}}|||fS)Nrr)rrrrrrrassertRunNotOKsz#CommandLineTestsBase.assertRunNotOKcCs"tj|}|tj|dSr)r r rrSrr(rr5ror(rrrassertCompileds z#CommandLineTestsBase.assertCompiledcCs"tj|}|tj|dSr)r r rrnrr(rr rrrassertNotCompileds z&CommandLineTestsBase.assertNotCompiledcCsnt|jdd}|B}|jfi|||||j||jWdn1s`0YdS)Nbazr ) rrr'rr r r rr)r5bazfnenvrrrtest_no_args_compiles_paths    z/CommandLineTestsBase.test_no_args_compiles_pathcCst|jdd}|,}|jfi|tj|}Wdn1sJ0Yt |t dfdt |j }|jfi|t |j }| |||jdi|t |j }|||dS)Nrr <r-f)r)rrr'rr r r rrrLtimerrDrcre)r5rrpycpathrImtime2rrr test_no_args_respects_force_flags *    z5CommandLineTestsBase.test_no_args_respects_force_flagcCstt|jdd| }|jfi|}Wdn1s>0Y|d||jdi|}|d|dS)Nrr sListing -q)r)rrr'rr rr)r5rnoisyr]rrr test_no_args_respects_quiet_flags  . z5CommandLineTestsBase.test_no_args_respects_quiet_flagZnormalpycrz opt-1.pyc-OZdoubleoptimizez opt-2.pycz-OOcs~tj|ddd|jg|tj|jtfdddD}| tt |j|| fddt |jDdS) NrrTrc3s|]}|tjjVqdSr)formatrimplementation cache_tag)rbaseextrr %sz)CommandLineTestsBase.f..)z__init__.{}.{}z bar.{}.{}csg|]}|r|qSr)endswith)rror!rrr)s z*CommandLineTestsBase.f..) rrrrSrr(rrsortedrclistdirrn)r5r"switchexpectedrr!rf s  zCommandLineTestsBase.fZtest_pep3147_paths_cCsL|dd|j|tj|jtgd}|tt |j|dS)Nz-br) __init__.pyz __init__.pyczbar.pyzbar.pyc) r rrnrr(rrr%rcr&)r5r(rrrtest_legacy_paths-s z&CommandLineTestsBase.test_legacy_pathscCs||d|j|tj|jtj|jd}|tj||d|j|tj|j|tj|dS)Nrr) r rrSrr(rrr)rn)r5Z cachecachedirrrrtest_multiple_runs7sz'CommandLineTestsBase.test_multiple_runscCs|d|jtj|j}t|tdfdt |j }|d|jt |j }| |||dd|jt |j }| ||dS)Nrrrr) r rr r rrrrLrrrDrcre)r5rrIrrrr test_forceDs    zCommandLineTestsBase.test_forcecCstj|jd}t|t|dd}t|dd}|dd|j||| tj tj|d|d|j| || |dS)Nspamrr hamrz-lr) rr(r)rr2rrr r rnrr )r5 subpackage subinitfnhamfnrrrtest_recursion_controlTs   z+CommandLineTestsBase.test_recursion_controlc CsVtj|jd}tj|d}tj|d}|||fD]}t|q6tj|d}t|dd}t|dd}t|dd}|dd|j||| tj tj|d |dd |j| || ||||dd |j| || || ||||dd |j| || || || |dS) Nr.r/Zeggsr*r Zeggrz-r 0rz-r 1z-r 2z-r 5) rr(r)rrmake_pkgrr r rnrr ) r5r0Z subpackage2Z subpackage3pkgr1r2ZspamfnZeggfnrrrtest_recursion_limit`s8            z)CommandLineTestsBase.test_recursion_limitc Csttj|jd}t|tdtj|dtdtj|d|d|j|tj|jdddddS)Nr..ZevilZevil2rr*) rr(r)rrr4rr r )r5r5rrrtest_symlink_loops   z&CommandLineTestsBase.test_symlink_loopcCs6||j}|d|j}|d||d|dS)Nrr)r rrerc)r5rr]rrr test_quiets  zCommandLineTestsBase.test_quietcCsTt|jdd|d|j\}}}|d|j\}}}|d||d|dS)N crunchyfrog bad(syntaxrz-qqr)rrrr rerc)r5rr]Zsilentrrr test_silents  z CommandLineTestsBase.test_silentcCs.|ddd|j||j||jdS)Nrz-xz ba[^\\/]*$)r rr rr rr:rrr test_regexps z CommandLineTestsBase.test_regexpcCsvtj|jd}t|t|dd}t|dd}|d|j|| |j | |j | || |dS)NZfoo2rr bar2r) rr(r)r'r2rrr rr rr)r5Zpkgdir2Zinit2fnbar2fnrrrtest_multiple_dirss    z'CommandLineTestsBase.test_multiple_dirscCs8t|jdd|ddd|j\}}}||ddS)Nr:r;r-ddinsdaleFile "dinsdale)rrrr rtr5rrrrrrtest_d_compile_errorsz)CommandLineTestsBase.test_d_compile_errorcCst|jdd}|ddd|jt|jdd}tj|}t|tj |jdt |tj |d d \}}}| |d dS) Nrzraise ExceptionrrArBbingz import bazzbaz.pycF) __isolatedrC)rrrr r r rrrenamer(r)removerrt)r5rrorrrrrrrtest_d_runtime_errors  z)CommandLineTestsBase.test_d_runtime_errorcCsZ|dtj|jd|j\}}}||d||d|tj t j |j dS)N-i nosuchfilesrror.*nosuchfiles Traceback)r rr(r)r'rrtZassertNotRegexrnrr r rrrDrrrtest_include_bad_files   z*CommandLineTestsBase.test_include_bad_filecCst|jdd}t|jdd}t|jdd}t|jdd}ttj|jddH}|tj|jdtj |tj|jd tj Wdn1s0Y| d tj|jd|| || || || |dS) Nf1r f2f3f4l1r$f1.pyf2.pyrK) rrrr,rr(r)r'r-linesepr r r r5rNrOrPrQrRrrrtest_include_file_with_args:   z/CommandLineTestsBase.test_include_file_with_argcCst|jdd}t|jdd}t|jdd}t|jdd}ttj|jdd,}|tj|jdtj Wdn1s0Y| d tj|jd| || || || |dS) NrNr rOrPrQrRr$rTrK) rrrr,rr(r)r'r-rUr r r rVrrrtest_include_file_no_args:   z-CommandLineTestsBase.test_include_file_no_argcCst|jdd}t|jdd}t|jdd}t|jdd}tj|dddg}|j|tj d t || || || || |dS) NrNr rOrPrQrrK-r) rrrZ spawn_pythonrstdinr-rrUencodeZ kill_pythonr r )r5rNrOrPrQprrrtest_include_on_stdins    z*CommandLineTestsBase.test_include_on_stdincCs\t|jdd}|d|j||j\}}}||d||||j||jdS)NrFz syntax(errorrLsrror) rrrr rrrtr r )r5Zbingfnrrrrrr!test_compiles_as_much_as_possibles     z6CommandLineTestsBase.test_compiles_as_much_as_possiblecCs|d}||ddS)NZ badfilenamesCan't list 'badfilename')r rt)r5rrrr!test_invalid_arg_produces_messages z6CommandLineTestsBase.test_invalid_arg_produces_messagecCst|jddtjtj|jd}| d|jt |d}| }Wdn1s^0Y| t |dddd | d |jt |d}| }Wdn1s0Y| t |dddd dS) NrNr rSz --invalidation-mode=checked-hashr>littlerz"--invalidation-mode=unchecked-hashr)rrrr r rrr(r)r r,rBrcrC from_bytes)r5rfprHrrrtest_pyc_invalidation_modes & &z/CommandLineTestsBase.test_pyc_invalidation_modezrequires multiprocessingcCst|jdd}g}tdD]F}tj|jd|}t|t|dd}| t|ddq| |jdd| ||D]}| |qdS)Nr>r rzfoo{}rz-j0) rrr'rrr(r)rr2rr r )r5r?filessuffixrror6rrr test_workerss   z!CommandLineTestsBase.test_workerszcompileall.compile_dircCsftjdtj|jdgd:t||j| |j dddWdn1sX0YdS)Nzsys.argvz-j0rrrr) rrr executabler'rTmainrSrrcr)r5rfrrrtest_workers_available_coress   z1CommandLineTestsBase.test_workers_available_coresc Csgd}tjj|jg|R}t|t|dd}tj |}tjj|jg|ddR}d}| d|d||t |\}}} tjj|g|ddR} | | t | td||t | tddS) Nrr}rrrz-sz-pr)rr(r)r'rrrr r rr rrrrrrrrrrrs$  z+CommandLineTestsBase.test_strip_and_prependc Cstj|jd}t|t|dd}g}dD]}|tj j ||dq0ddgddgddggd g}|D]j}|j |gd d |DR|D]D}| tj |t|zt||WqtyYq0qqldS) NZ optimizationsrrrr rf12)rfrmrncss|]}dt|VqdS)z-oN)r)rnrrrr#@rzICommandLineTestsBase.test_multiple_optimization_levels..)rr(r)r'rrrrr r rr rSrmrCrlr)r5r(rrhrrrrrrr1s0    z6CommandLineTestsBase.test_multiple_optimization_levelsc Cstj|jddd}tj|jddd}tj|jddd}t|t|t|t|dd}t|dd}tj|d }tj|d }t||t||tj |}tj |} | |d || tj ||tj | dS) Nr}rrrrrrrrrz-e)rr(r)r'rrrrr r rr rSrmrnrrrrrHs"       z4CommandLineTestsBase.test_ignore_symlink_destinationcCs||jdddS)N-o 1--hardlink-dupes)r r'r:rrrtest_hardlink_bad_argsasz+CommandLineTestsBase.test_hardlink_bad_argsc CsdD]}t}|j|dt|dd}t|}gd}|rL|d|j|g|R|t |d|d||t |d|d ||t |d|d |Wdn1s0YWdq1s0YqdS) N)TFdeduprr)rz-o 0rpz-o 2rqrrr) r%TemporaryDirectorysubTestrrrrr rcr!)r5rtr(rpycsrrrr test_hardlinkfs  z"CommandLineTestsBase.test_hardlinkN)5rrrr7rOcontextmanagerrrr r r r rrrrnamer"r'r)localsr+r,r-r3r6rrr8r9r<r=r@rErJrMrWrXr]r^r_rer_have_multiprocessingrirrrlrrrrrrxrrrrrsb            "          rc@s eZdZdS)CommandLineTestsWithSourceEpochNrrrrrr}|sr}c@s eZdZdS)CommandLineTestsNoSourceEpochNrrrrrr~sr~c@seZdZddZejddZd#ddZdd d d d d ZddZ d$ddZ ddZ ddZ d%ddZ ddZddZddZddZd d!Zd"S)&HardlinkDedupTestsBasecCs d|_dSrrzr:rrrr7szHardlinkDedupTestsBase.setUpccs>t"}||_|Vd|_Wdn1s00YdSr)r%rur()r5r(rrrtemporary_directorys z*HardlinkDedupTestsBase.temporary_directoryrcCst|j||Sr)rrr()r5coderzrrrrsz"HardlinkDedupTestsBase.make_scriptTrF)rtrr\cCstj|jd|||ddS)NT)r]rhardlink_dupesr\)rTrfr()r5rtrr\rrrrfs z"HardlinkDedupTestsBase.compile_dirc Cs||d|t$tj|jddddWdn1sH0Y|t(tj|jdddgddWdn1s0YWdn1s0YdS)NpassTr)r]rr)rrrrrTrfr(r:rrr test_bad_argss    $ z$HardlinkDedupTestsBase.test_bad_argscCs4g}|r|d|d|r*|dd|S)Nz'module docstring'zx = 1z assert x == 1 )rr))r5 docstring assertionlinesrrr create_codes   z"HardlinkDedupTestsBase.create_codeccs2dD](}dD]}|j||d}|||fVq qdS)N)FTrr)r)r5rrrrrr iter_codessz!HardlinkDedupTestsBase.iter_codesc Cs|D]\}}}|j||d|v||}t|}|jdd|t|d|d|t|d|d|t|d|dWdn1s0YWdq1s0YqdS)NrFrsrrr)rrvrrrrfrnr!)r5rrrrrwrrr test_disableds   z$HardlinkDedupTestsBase.test_disabledcCsft|}|t|d|d| |t|d|d| oB| |t|d|d| dS)Nrrr)rrcr!)r5rrrrwrrrcheck_hardlinkss z&HardlinkDedupTestsBase.check_hardlinksc Cs|D]\}}}|j||dX|0||}|||||Wdn1s`0YWdq1s~0YqdS)Nr)rrvrrrfr)r5rrrrrrrrxs   z$HardlinkDedupTestsBase.test_hardlinkc CsdD]}|j|d~|V||}|j|dt||d}t||d}|t||Wdn1sz0YWdq1s0YqdS)N))rr)rr)rr)optsrrr)rvrrrrfrrSr!)r5rrpyc1pyc2rrrtest_only_two_levelss  z+HardlinkDedupTestsBase.test_only_two_levelscCsn|R||}|jgddt|d}t|d}|t||Wdn1s`0YdS)N)rrrrrrr)rrrrfrrSr!)r5rrrrrrtest_duplicated_levelss    z-HardlinkDedupTestsBase.test_duplicated_levelscCs||d}|||t|}t|dj}|d}|jddgdd||t|dj| t |d|d| |t|dj| t j|d|dddWdn1s0YdS) Nrrprint(0)rT)rr\rshallow)rrrfrrrrrrcrSr!rernfilecmpcmpr5rrwinoderrrtest_recompilations    z)HardlinkDedupTestsBase.test_recompilationcCs||j|dd}|||t|}t|dj}|jddd}t j dddd|j d | |t|dj| |t|d j| t|d |d | tj|d |d d d Wdn1s0YdS)Nmodule)rzrrrz-cz import moduleF)rGrrrTr)rrrrfrrrrrrrr(rcrnr!rrrrrr test_import s   z"HardlinkDedupTestsBase.test_importN)r)FF)FF)rrrr7rOryrrrfrrrrrrxrrrrrrrrrs       rc@s eZdZdS)!HardlinkDedupTestsWithSourceEpochNrrrrrr(src@s eZdZdS)HardlinkDedupTestsNoSourceEpochNrrrrrr/sr__main__)-rTrOrimportlib.utilr rQrrrrar0rErr%Ztest.test_importlib.utilr}rr`rrconcurrent.futuresrr| ImportErrorrZ test.supportrZtest.test_py_compilerrrrr!r"ZTestCaserrrrr}r~rrrrrkrrrrs       n  >