ÿØÿà 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ÿÙ (irdZddgZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl m ZddlZdZGddZd Zd ZGd dZd Zd ZddZdZGddZdZedkr edSdS)aprogram/module to trace Python program or function execution Sample use, command line: trace.py -c -f counts --ignore-dir '$prefix' spam.py eggs trace.py -t --ignore-dir '$prefix' spam.py eggs trace.py --trackcalls spam.py eggs Sample use, programmatically import sys # create a Trace object, telling it what to ignore, and whether to # do tracing or line-counting or both. tracer = trace.Trace(ignoredirs=[sys.base_prefix, sys.base_exec_prefix,], trace=0, count=1) # run the new command using the given tracer tracer.run('main()') # make a report, placing output in /tmp r = tracer.results() r.write_results(show_missing=True, coverdir="/tmp") TraceCoverageResultsN) monotonicz#pragma NO COVERceZdZddZdZdS)_IgnoreNc|stnt||_|sgn d|D|_ddi|_dS)NcLg|]!}tj|"S)ospathnormpath.0ds /usr/lib/python3.11/trace.py z$_Ignore.__init__..Gs8*9*9*9./+-'*:*:1*=*=*9*9*9z)set_mods_dirs_ignore)selfmodulesdirss r__init__z_Ignore.__init__EsX");SUUUs7|| #9RR*9*937*9*9*9 #Q( rc\||jvr |j|S||jvr d|j|<dS|jD]'}||dzr d|j|<dS(| d|j|<dS|jD]1}||tjzr d|j|<dS2d|j|<dS)Nr.r)rr startswithrr sep)rfilename modulenamemodrs rnamesz _Ignore.namesKs  % %< + +  # #'(DL $1:  C$$S3Y// +, Z(qq   '(DL $1  A""1rv:.. +, Z(qq  $% Z qrNN)__name__ __module__ __qualname__rr$r rrrrDs7)))) )))))rrctj|}tj|\}}|S),Return a plausible module name for the path.)r r basenamesplitext)r baser!exts r_modnamer/vs7 7  D ! !DG$$T**MHc Orctj|}d}tjD]{}tj|}||rE|t |tjkr"t |t |kr|}||r|t |dzd}n|}tj|\}}|tjd}tj r |tj d}tj |\}}| dS)r*rNr) r r normcasesysrlenr splitdrivereplacealtsepr,lstrip)r comparepathlongestdirr-driver!r.s r _fullmodnamer=}s0'""4((KGxgs##  ! !# & & ;s3xx+@BF+J+J3xx#g,,&&CLL1$%%&'$$T**KE4 << $ $D y,||BIs++G$$T**MHc ??3  rc6eZdZ d dZdZdZd dZd dZdS) rNc||_|ji|_|j|_||_|ji|_|j|_||_|ji|_|j|_||_||_|jr t|jd5}tj |\}}}dddn #1swxYwY| | |||dS#tttf$r1}td|jd|t jYd}~dSd}~wwxYwdS)Nrb)callerszSkipping counts file : file)countscopycounter calledfuncsrAinfileoutfileopenpickleloadupdate __class__OSErrorEOFError ValueErrorprintr3stderr)rrErHrIrArJferrs rrzCoverageResults.__init__s ; DK{'')) &   #!D +0022 < DL|((**   ; N N$+t,,B39;q>>0FKBBBBBBBBBBBBBBB DNN6;NPPQQQQQXz2 N N N)-cc;BE*NNNNNNNNNN N  N Ns<0D"C* D"*C..D"1C.2.D""E*9&E%%E*cV|do|dS)z_Return True if the filename does not refer to a file we want to have reported. <>)rendswith)rr!s ris_ignored_filenamez#CoverageResults.is_ignored_filenames+""3''BH,=,=c,B,BBrc|j}|j}|j}|j}|j}|j}|D]$}||d||z||<%|D]}d||<|D]}d||<dS)z.Merge in the data from another CoverageResultsrrN)rErHrAget) rotherrErHrA other_countsother_calledfuncs other_callerskeys rrNzCoverageResults.updates& ,| !-  A AC **S!,,|C/@@F3KK$ ! !C K     CGCLL  rTFc |jrRttd|j}t|D]\}}}td|d|d||jrttddx}} t|jD]o\\} } } \} }}| |kr#ttd| d| }d} | | kr| | krtd| | } td | d | d |d |pi}|jD]2\}}||ix}||<|j||f||<3i}|D]\}}||r|d r |d d}|Ltj tj |}t|}nD|}tj |stj|t!|}|rt#|}ni}t%j|}tj ||dz}t+|d5}t-j|j\}}d d d n #1swxYwY||||||\}}|r |rt5d|z|z }||||f||<|rH|rFtdt|D]'}||\}}}}td||z(|jr t+|jd5} t9j|j|j|jf| dd d d d S#1swxYwYd S#t<$r)}!td|!zt>j Yd }!~!d Sd }!~!wwxYwd S)af Write the coverage results. :param show_missing: Show lines that had no hits. :param summary: Include coverage summary per module. :param coverdir: If None, the results of each module are placed in its directory, otherwise it is included in the directory specified. zfunctions called:z filename: z, modulename: , funcname: zcalling relationships:r1z***z -->z rz -> z.pycNz.coverr@dzlines cov% module (path)z%5d %3d%% %s (%s)wbrz"Can't save counts files because %srC)!rHrSsortedrArEr]itemsr[rZr r dirnameabspathr/existsmakedirsr=_find_executable_linenos linecachegetlinesjoinrKtokenizedetect_encodingreadlinewrite_results_fileintrJrLdumprPr3rT)"r show_missingsummarycoverdircallsr!r"funcnamelastfile lastcfilepfilepmodpfunccfilecmodcfuncper_filelineno lines_hitsumscountr;lnotabsource coverpathfpencoding_n_hitsn_linespercentmrUrVs" r write_resultszCoverageResults.write_resultss   < GGG % & & &$E28-- < <.*h"((JJJ:<<<< < I GGG * + + +#% %Hydl++ I I<%%u';tUH$$GGG%...$H "IE>>i5&8&8'5))) %IdddEEE444GHHHH $  @ @ Hf-5\\(B-G-G GI* $ Xv,> ?If  '~~// J JOHe''11   (( )#CRC=goobgooh&?&?@@%h// w~~c**%K$$$)(33  1(;;'11F S*x*?@@Ih%% D&6r{CC ! D D D D D D D D D D D D D D D"55i6 M !1&&&&&&&&&&&&&&&&&&&&& S S S:S@szRRRRRRRRRR S  S SsNJ))J- 0J- N)N NNNNN O(O  Oc4 t|d|}n:#t$r-}td|d|dtjYd}~dSd}~wwxYwd }d } |5t |d D]\} } | |vr)|d || z| d z } |d z }n=| |vr$t| vr|d |d z }n|d || d dddn #1swxYwY| |fS)z'Return a coverage results file in path.wrztrace: Could not open z for writing: z - skippingrCN)rrrrz%5d: z>>>>>> z ) rKrPrSr3rT enumeratewritePRAGMA_NOCOVER expandtabs) rr linesrrrrJrVrrrlines rruz"CoverageResults.write_results_file(s 4x888GG    E26$$=DGJ P P P P44444    2 2 )% 3 3 2 2 Y&&MM'If,="=>>>aKFqLGGv%%n.D.DMM),,,qLGGMM),,, dooa001111 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2"ws' A "AA B)D  DD)NNNNN)TFNN)r&r'r(rr[rNrrur rrrrs=A'+NNNN4CCC $ZSZSZSZSxrcPi}tj|D]\}}||vrd||<|S)z:Return dict where keys are lines in the line number table.r)disfindlinestarts)codestrslinenosrrs r_find_lines_from_coderHs?G'--  6   GFO Nrct||}|jD]9}tj|r#|t ||:|S)z!   1 NN;q$// 0 0 0 NrcLi}tj}t||5}tj|j}|D]O\}}}} } |tjkr5|tjkr%|\} } | \} }t| | dzD]}d||<|}P dddn #1swxYwY|S)zReturn a dict of possible docstring positions. The dict maps line numbers to strings. There is an entry for line that contains only a string or a part of a triple-quoted string. rrN)tokenINDENTrKrrgenerate_tokensrtSTRINGrange)r!rr prev_ttyperUtokttypetstrstartendrslinescolelineecolis r _find_stringsr^s  AJ h * * * a&qz22-0   )E4T $$--"'KE4"%KE4"5%!)44!! !JJ                 HsA,BB Bcj tj|5}|}|j}dddn #1swxYwYn:#t$r-}t d|d|t jicYd}~Sd}~wwxYwt||d}t||}t||S)zAReturn dict where keys are line numbers in the line number table.NzNot printing coverage data for rBrCexec) rrrKreadrrPrSr3rTcompilerr)r!rUprogrrVrrs rrnrnus ]8 $ $ "6688DzH " " " " " " " " " " " " " " "  !)3307:z C C C C  46 * *D 8 , ,D tT " ""s=A > A AA AA B"A<6B<Bc`eZdZ ddZdZddZd Zd Zd Zd Z d Z dZ dZ dZ dZdS)rrrr NFc ||_||_t|||_i|_i|_d|_||_i|_i|_ i|_ d|_ | rt|_ |r|j |_dS|r|j|_dS|r|r|j|_|j|_dS|r|j|_|j|_dS|r|j|_|j|_dSd|_dS)ax @param count true iff it should count number of times each line is executed @param trace true iff it should print out each line that is being counted @param countfuncs true iff it should just output a list of (filename, modulename, funcname,) for functions that were called at least once; This overrides `count' and `trace' @param ignoremods a list of the names of modules to ignore @param ignoredirs a list of the names of directories to ignore all of the (recursive) contents of @param infile file from which to read stored counts to be added into the results @param outfile file in which to write the results @param timing true iff timing information be displayed rNr)rIrJrignorerEpathtobasename donothingtrace _calledfuncs_callers _caller_cache start_time_timeglobaltrace_trackcallers globaltraceglobaltrace_countfuncsglobaltrace_ltlocaltrace_trace_and_count localtracelocaltrace_tracelocaltrace_count) rrr countfuncs countcallers ignoremods ignoredirsrIrJtimings rrzTrace.__init__s(  j*55       &#ggDO  #B6~ +  t/ 0 0 0 L) * * * ) gv & & &> ) T""""4((((( ) )4> ) T""""4(((( )s B2B9cd}|jstj|j ||i|}|jstjdn!#|jstjdwwxYw|Sr)rr3rr)rfuncargskwresults rrunfuncz Trace.runfuncs~ + L) * * * #T4&2&&F> # T"""> # T"""" # s AA&c<|j}|j}|rt|}nd}|j}d}||jvr|j| |j|}nd|j|<dt j|D}t|dkrdt j|dD}t|dkrNdt j|dD} t| dkr| dj}||j|<||d|}|||fS)Nc:g|]}tj||Sr )r isfunction)rrUs rrz1Trace.file_module_function_of..s73331#.q113Q333rrc<g|]}t|t|Sr ) isinstancerrs rrz1Trace.file_module_function_of..s6555q *1d 3 35555rrc2g|]}t|d|S) __bases__)hasattr)rrs rrz1Trace.file_module_function_of..s6???Q&-a&=&=?q???rr) f_code co_filenamer/co_namergc get_referrersr4r&) rframerr!r"r|clsnamefuncsdictsclassess rfile_module_function_ofzTrace.file_module_function_ofs_|#  !(++JJJ< 4% % %!$'3,T2'+D t $33 0 6 6333E 5zzQ55B$4U1X$>$>555u::????"*:58*D*D???G7||q((")!*"5 4;*40  ")''884HX--rc|dkr=||}||j}d|j||f<dSdS)zkHandler for call events. Adds information about who called who to the self._callers dict. callrN)rf_backr)rrwhyarg this_func parent_funcs rrzTrace.globaltrace_trackcallerssS &==44U;;I66u|DDK67DM; 2 3 3 3 =rcT|dkr!||}d|j|<dSdS)zoHandler for call events. Adds (filename, modulename, funcname) to the self._calledfuncs dict. rrN)rr)rrrrrs rrzTrace.globaltrace_countfuncss: &==44U;;I+,D i ( ( ( =rc|dkr|j}|jdd}|rZt|}|E|j||}|s*|jrtd|d|j|j SdSdSdSdS)zHandler for call events. If the code block being entered is to be ignored, returns `None', else returns self.localtrace. r__file__Nz --- modulename: rd) r f_globalsr]r/rr$rrSrr)rrrrrr!r" ignore_its rrzTrace.globaltrace_lts &==tj d?fd@dA|j D|_ fdB|jD|_|j r]|j s| dCt|j |j D}||j|j|jSt'|j|j|j|jgs| dE|jr#|js|jr| dF|jr|js| dG|j| dHt3|j|j|j|j|j |j|j |j |jI } |jrVddl}|j}||\} } } | jg|jt@_!dJ| j| j"| j#| ddK} n|jg|jt@_!tHj%&|jt@j%d<tO|jdL5} tQ| )|jdM} dddn #1swxYwY|jdJdddN} |*| | | nL#tV$r4}tAj,dOt@j!ddP|Yd}~nd}~wtZ$rYnwxYw|.}|j/s(||j|j|jdSdS)QNrz --versionversionz trace 2.0)actionrz Main optionsz(One of these (or --report) must be givenz-cz--count store_truezCount the number of times each line is executed and write the counts to .cover for each module executed, in the module's directory. See also --coverdir, --file, --no-report below.)rhelpz-tz--tracez3Print each line to sys.stdout before it is executedz-lz --listfuncszKeep track of which functions are executed at least once and write the results to sys.stdout after the program exits. Cannot be specified alongside --trace or --count.z-Tz --trackcallsz^Keep track of caller/called pairs and write the results to sys.stdout after the program exits. Modifiersz-rz--reportzGenerate a report from a counts file; does not execute any code. --file must specify the results file to read, which must have been created in a previous run with --count --file=FILEz-Rz --no-reportz^Do not generate the coverage report files. Useful if you want to accumulate over several runs.z-fz--filez+File to accumulate counts over several runs)rz-Cz --coverdirzDirectory where the report files go. The coverage report for . will be written to file //.coverz-mz --missingz?Annotate executable lines that were not executed with ">>>>>> "z-sz --summaryz\Write a brief summary for each file to sys.stdout. Can only be used with --count or --reportz-gz--timingzQPrefix each line with the time since the program started. Only used while tracingFilterszCan be specified multiple timesz--ignore-moduleappendzqIgnore the given module(s) and its submodules (if it is a package). Accepts comma separated list of module names.)rdefaultrz --ignore-dirzWIgnore files in the given directory (multiple directories can be joined by os.pathsep).z--moduleFzTrace a module. progname?zfile to run as main program)nargsr argumentszarguments to the programstdlib platstdlibctjtj|}|dd}tj|S)Nz$prefixz $exec_prefix)r r expanduser expandvarsr6r )s _exec_prefix_prefixs rparse_ignore_dirzmain..parse_ignore_dirsa G  rw11!44 5 5 IIi ) ) 1 1., O Ow"""rcfg|].}|dD]}|/S),)splitstrip)rrr#s rrzmain..sWOOOOO:=))++OOOOrcjg|]/}|tjD] }|0Sr )r1r pathsep)rrr+r.s rrzmain..s_NNN9L9LNN45('**NNNNrz-r/--report requires -f/--file)rIrJzLmust specify one of --trace, --count, --report, --listfuncs, or --trackcallsz8cannot specify both --listfuncs and (--trace or --count)z3--summary can only be used with --count or --reportz3progname is missing: required with the main options)rrrrrIrJrr)r&r  __package__ __loader____spec__ __cached__r@r)r r&r5r8zCannot run file z because: )0argparseArgumentParser add_argumentadd_argument_groupadd_mutually_exclusive_group REMAINDER parse_args ignore_dir sysconfigget_path ignore_modulereportrDerrorrrmissingryrzanyrr listfuncs trackcallsr"rrmodulerunpy_get_module_detailsrr%r3argvparentloaderr r rjrKrrrrPexit SystemExitr no_report)r9parsergrp_grpoptsrtrK module_namemod_namemod_specrglobsrrVr,r-r.s @@@rmainr\QsQOOO  $ $ & &F  I{KKK  # #N 6 8 8CT9\&''' T9\FHHHT=EFFFT>,7888  # #K 0 0C  + + - -DdJ|    dM,GHHHT8>@@@T<2333T;|T;|=>>>T:l+,,,  # #I - / /C&x!"""^HbGHHH  </111  #.000  8+=+---     D 8$X.. ),77 ###### OO#'#5OOODNNNN $NNNDO {Py ; LL9 : : :!DIFFF$$T\4<OOO  DJH I I5 4 5 5 5 ~Q4:QQ OPPP |LDJL JKKK } JKKK dj$*?t7Ii  5 5 5A ;  LLL-K','@'@'M'M $Hh(:4>:CH& ,'&o$" EE 77CH'//$-88CHQKdmT** Abrwwyy$-@@ A A A A A A A A A A A A A A A!M&#" E ue$$$$ HHH SXa[[[##FGGGGGGGG      iikkG >IdlDL$-HHHHHIIsC Br`s<( % &   #######00000000d   8mmmmmmmm^       . # # #L6L6L6L6L6L6L6L6\PIPIPId ZDFFFFFr