ÿØÿà 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ÿÙ (i^VldZddlZddlZddlZddlZddlZddlZddlZddlmZm Z ddl m Z m Z m Z dZejdejZGdd e jZd Zd Zd Zd ZdZGddeZeZddZe jdfdZde je jfdZ de je jfdZ!dS)zLoading unittests.N)fnmatch fnmatchcase)casesuiteutilTz[_a-z]\w*\.py$c,eZdZdZfdZfdZxZS) _FailedTestNcf||_tt||dSN) _exceptionsuperr __init__)self method_name exception __class__s &/usr/lib/python3.11/unittest/loader.pyrz_FailedTest.__init__s.# k4  ))+66666cz|jkr(tt|Sfd}|S)Ncjr )r rsr testFailurez,_FailedTest.__getattr__..testFailure!s / !r)_testMethodNamerr __getattr__)rnamerrs` rrz_FailedTest.__getattr__sO 4' ' 'd++77== = " " " " "r)__name__ __module__ __qualname__rrr __classcell__rs@rr r sVO77777rr crd|dtj}t|t|||S)NzFailed to import test module:  ) traceback format_exc_make_failed_test ImportError)r suiteClassmessages r_make_failed_import_testr*&s< i"$$$&G T;w#7#7W M MMrcRdtj}t||||S)NzFailed to call load_tests: )r$r%r&)rrr(r)s r_make_failed_load_testsr,+s32;2F2H2H2HJG  iW . ..rc>t||}||f|fSr )r ) methodnamerr(r)tests rr&r&0s( z9 - -D :tg   ''rctjt|d}||i}tdtjf|}|||fS)NcdSr rs r testSkippedz'_make_skipped_test..testSkipped5s r ModuleSkipped)rskipstrtypeTestCase)r.rr(r3attrs TestClasss r_make_skipped_testr;4si Ys9~~    %E_t}&6>>I :yy,,. / //rc|dr |ddStj|dS)Nz $py.classir)lowerendswithospathsplitext)r@s r_jython_aware_splitextrB<sI zz||[))CRCy 7  D ! !! $$rceZdZdZdZeejZdZ e j Z dZ fdZdZdddZddZdd Zd Zdd Zd ZdZdZdZdZdZxZS) TestLoaderz This class is responsible for loading tests according to various criteria and returning them wrapped in a TestSuite r/Nctt|g|_t |_dSr )rrDrerrorsset_loading_packages)rrs rrzTestLoader.__init__Ms: j$((*** "%rct|tjrtd||}|st |drdg}|t||}|S)z;Return a suite of all test cases contained in testCaseClasszYTest cases should not be derived from TestSuite. Maybe you meant to derive from TestCase?runTest) issubclassr TestSuite TypeErrorgetTestCaseNameshasattrr(map)r testCaseClass testCaseNames loaded_suites rloadTestsFromTestCasez TestLoader.loadTestsFromTestCaseTs mU_ 5 5 )()) )--m<<  ( !B!B (&KMs=-'H'HII rpatternct|dksd|vr0tjdt|ddt|dkr4t|dz}t d|t|dkr7t|d}t d|g}t|D]i}t||}t|trBt|tjr(|||jt|dd} ||}| _ | |||S#t$$rD} t'|j| |j\} } |j| | cYd} ~ Sd} ~ wwxYw|S) z>Return a suite of all test cases contained in the given moduleruse_load_testsz(use_load_tests is deprecated and ignoredNrzCloadTestsFromModule() takes 1 positional argument but {} were givenz=loadTestsFromModule() got an unexpected keyword argument '{}' load_tests)lenwarningswarnDeprecationWarningpoprMformatsorteddirgetattr isinstancer7rKrr8appendrTr( Exceptionr,rrF) rmodulerVargskws complainttestsrobjrYe error_case error_messages rloadTestsFromModulezTestLoader.loadTestsFromModulebs t99q==,33 MD, . . . GG$d + + + t99q==D A Iahhirsstt t s88q== s AI[bbclmmnn nKK > >D&$''C#t$$ >C)G)G > T77<<===V\488 &&  ! "!z$w777 " " ",COQ-9-9) M ""=111!!!!!!!  "  s= F G9G GGc B|d}d\}}||dd}|r d|}t|}n^#t$rO|}t ||j\}}|s|j||cYSYnwxYw||dd}|} |D]} | t| | } } #t$r} t| dd%|#|j||cYd} ~ cSt| | |jdtj \}}|j||cYd} ~ cSd} ~ wwxYwt| tjr|| St| t$r/t'| t(jr|| St| tjrt| t$rlt'| t(jrR|d}| |} tt| |tjs|| gSnt| t0jr| St5| rl| }t|t0jr|St|t(jr||gSt7d| d |d t7d | z) aSReturn a suite of all test cases given a string specifier. The name may resolve either to a module, a test case class, a test method within a test case class, or a callable object which returns a TestCase or TestSuite instance. The method optionally resolves the names relative to a given module. .NNNr__path__zFailed to access attribute: zcalling z returned z , not a testz$don't know how to make test from: %s)splitjoin __import__r'r^r*r(rFrdrbAttributeErrorr&r$r%rctypes ModuleTyperor7rKrr8rT FunctionTyperrLcallablerM)rrrfpartsrmrn parts_copy module_namenext_attributerkpartparentrlinstr/s rloadTestsFromNamezTestLoader.loadTestsFromNames 3$.! M >qqqJ * *"%((:"6"6K' 44F"***%/^^%5%5N0H&1919-J %* **=999))))** *  *!""IE & &D &!73#5#5! & & &CT22>". K&&}555%%%%%%%%%1Ba%022251616-J K&&}555%%%%%%%%%% &( c5+ , , ++C00 0 T " " z#t}'E'E --c22 2e011 && // 9D6$<C E'.E" E'A E"E'"E'cNfd|D}|S)zReturn a suite of all test cases found using the given sequence of string specifiers. See 'loadTestsFromName()'. c<g|]}|Sr2)r).0rrfrs r z1TestLoader.loadTestsFromNames..s)III4$((v66IIIr)r()rnamesrfsuitess` ` rloadTestsFromNameszTestLoader.loadTestsFromNamess5JIIII5IIIv&&&rcfd}tt|t}jr-|t jj|S)zLReturn a sorted sequence of method names found within testCaseClass c|jsdSt|}t|sdSdjj|fzjduptfdjDS)NFz%s.%s.%sc38K|]}t|VdSr )r)rrVfullNames r zKTestLoader.getTestCaseNames..shouldIncludeMethod..s-XXwK'22XXXXXXr) startswithtestMethodPrefixrbr|rrtestNamePatternsany)attrnametestFuncrrrQs @rshouldIncludeMethodz8TestLoader.getTestCaseNames..shouldIncludeMethods&&t'<== u}h77HH%% u"(-*Dh&H(D0YXXXX$BWXXXXX Yr)key)listfilterrasortTestMethodsUsingsort functools cmp_to_key)rrQr testFnNamess`` rrNzTestLoader.getTestCaseNamess Y Y Y Y Y Y6"5s=7I7IJJKK  $ R   !5d6O!P!P  Q Q Qrtest*.pycd}||j|j}n|d}|}tj|}|tjvr tjd|||_d}tjtj|retj|}||kr>tjtj|d }n t|tj |}| dd} tjtj |j }nD#t$r7|jtjvrt#ddt#d|dwxYw|r9|||_tj|n#t($rd}YnwxYw|rt)d |zt+|||}||S) a%Find and return all test modules from the specified start directory, recursing into subdirectories to find them and return all tests found within them. Only test files that match the pattern will be loaded. (Using shell style pattern matching.) All test modules must be importable from the top level of the project. If the start directory is not the top level directory then the top level directory must be specified separately. If a test package name (directory with '__init__.py') matches the pattern then the package will be checked for a 'load_tests' function. If this exists then it will be called with (loader, tests, pattern) unless the package has already had load_tests called from the same discovery invocation, in which case the package module object is not scanned for tests - this ensures that when a package uses discover to further discover child tests that infinite recursion does not happen. If load_tests exists then discovery does *not* recurse into the package, load_tests is responsible for loading all tests in the package. The pattern is deliberately not stored as a loader attribute so that packages can continue discovery themselves. top_level_dir is stored so load_tests does not need to pass this argument in to loader.discover(). Paths are sorted before being imported to ensure reproducible execution order even on filesystems with non-alphabetical ordering like ext3/4. FNTr __init__.pyrqz2Can not use builtin modules as dotted module namesz don't know how to discover from z%Start directory is not importable: %r)_top_level_dirr?r@abspathsysinsertisdirisfilervrwmodulesrudirname__file__rxrbuiltin_module_namesrM _get_directory_containing_moduleremover'r _find_testsr() r start_dirrV top_level_dirset_implicit_topis_not_importable the_moduletop_partrjs rdiscoverzTestLoader.discoverse8!  T%8%D /MM  "# %M 66 (( HOOA} - - -+! 7==33 4 4 3 22IM))(*rw||I}7]7](^(^$^! 39%%%![3 $??3//2 ( ")<>>!@!@II%(((!*c.FFF')ABBGKL(MzMM#'( ($3*.*O*OPX*Y*YD'HOOM222) ) ) )$(!!! ),  SE QRR RT%%i99::u%%%s HAFAG H H ctj|}tj|j}tj|dr> > 7??9-- -rc||jkrdSttj|}tj||j}tj|r Jd|dr Jd|tjj d}|S)NrqzPath must be within the projectz..) rrBr?r@normpathrelpathisabsrreplacesep)rr@_relpathrs r_get_name_from_pathzTestLoader._get_name_from_pathQs 4& & &3%bg&6&6t&<&<==7??4)<==7==**MM,MMMM&&t,,OO.OOOO S11 rcDt|tj|Sr )rwrr)rrs r_get_module_from_namez TestLoader._get_module_from_name]s4{4  rc"t||Sr )r)rr@rrVs r _match_pathzTestLoader._match_pathastW%%%rc#rK||}|dkr,||jvr#|||\}}||V|sdStt j|}|D]}tj||}|||\}}||V|r||}|j| | ||Ed{V|j |#|j |wxYwdS)z/Used by discovery. Yields test suites it loads.rqN) rrH_find_test_pathr`r?listdirr@rvaddrdiscard) rrrVrrjshould_recursepathsr@rs rrzTestLoader._find_testsesv'' 22 3;;4t'===%)$8$8G$L$L !E>  ! rz),,-- 9 9D Y55I$($8$8G$L$L !E>   9// ::&**40009#// 7CCCCCCCCC*2248888D*2248888 9 9 9s DD3ctj|}tj|rt|sdS||||sdS||} ||}tj t|d|}ttj |}ttj |}| | krtj|} ttj|} tj|} d} t| | | | fz|||dfS#t"j$r"} t'|| |jdfcYd} ~ Sd} ~ wt+||j\}}|j||dfcYSxYwtj|rztjtj|dsdSd}d}||} ||}t|dd}|j| |||}||df|j|S|d f|j|S#|j|wxYw#t"j$r"} t'|| |jdfcYd} ~ Sd} ~ wt+||j\}}|j||dfcYSxYwdS) zUsed by discovery. Loads tests from a single file, or a directories' __init__.py when passed the directory. Returns a tuple (None_or_tests_from_file, should_recurse). )NFrzW%r module incorrectly imported from %r. Expected %r. Is this module globally installed?rUFNrrYT)r?r@rrVALID_MODULE_NAMEmatchrrrrrbrBrealpathr=rr'rorSkipTestr;r(r*rFrdrrvrHrr)rrrVrrrfmod_filerfullpath_noext module_dirmod_name expected_dirmsgrlrmrnrYrjpackages rrzTestLoader._find_test_paths7##I.. 7>>) $ $? $**844 #"{##HiAA #"{++I66D P33D997??FJ ::<<1G$$X..00!7G$$Y//"1"1>>##~';';'='===!#!:!:J5((33 5 5H#%7??9#=#=LDC%x\BBDDD///HH%OO/= K K K)$4?CCUJJJJJJJ ),T4?CC* M ""=111!5(((($W]]9 % % 7>>"',,y-"H"HII #"{JE++I66D 944T::%WlDAA &**40009 44Wg4NNE!-$e|*2248888!$;*2248888D*2248888%= K K K)$4?CCUJJJJJJJ ),T4?CC* M ""=111!5((((;sN G**I9HI;INM%M%%NO-N0*O-0;O-r )rN)rrr__doc__r staticmethodr three_way_cmprrrrLr(rrrTrorrrNrrrrrrrr r!s@rrDrDBsX'<(:;;JN'''''   :>&&&&&PLJLJLJLJ\''''&Q&Q&Q&Q&f . . .   !!!&&&999@HHHHHHHrrDc^t}||_||_||_|r||_|Sr )rDrrrr()prefix sortUsingr(rloaders r _makeLoaderrs8 \\F"+F$F.F'& Mrcddl}|jdtdt||||S)Nrzunittest.getTestCaseNames() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.getTestCaseNames() instead. stacklevel)r)r[r\r]rrN)rQrrrr[s rrNrNsXOOOHM Eq vy;K L L L ] ]^k l llrr/cddl}|jdtdt||||S)Nrzunittest.makeSuite() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.loadTestsFromTestCase() instead.rr)r[r\r]rrT)rQrrr(r[s r makeSuitersZOOOHM Jq vy* 5 5 K K  rcddl}|jdtdt||||S)Nrzunittest.findTestCases() is deprecated and will be removed in Python 3.13. Please use unittest.TestLoader.loadTestsFromModule() instead.rr)r[r\r]rro)rfrrr(r[s r findTestCasesrsZOOOHM Hq vy* 5 5 I I  rrr)"rr?rerr$ryrr[rrrrr __unittestcompile IGNORECASErr8r r*r,r&r;rBobjectrDdefaultTestLoaderrrrNrLrrr2rrrs  ((((((((  BJ0"-@@     $-   NNN ... (((000%%% KKKKKKKK\ JLL 7;6H[_mmmm%+d6H    "(43E"_      r