ÿØÿà 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 3gU@sddlZddlmZddlZddlZddlZGdddejZGdddejZGdddejZ d Z d Z d Z d Z d ZdZdZdZGdddejZGdddejZGdddejZGdddejZGdddejZddZddZedkredS) N)findfilec@s$eZdZddZddZddZdS) TestWithAsciicCstddd}|j|ddd|t|ddg||jttddd}|j|ddd|t|gd ||jtdS) NZdbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZeabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgףp= ?Zplaces)insertrrr)equalrdreZebbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb))rr2rr )rr r r 3)rr r r r ) difflibSequenceMatcherassertAlmostEqualratio assertEquallist get_opcodesbpopularsetselfsmr0/opt/python39/lib/python3.9/test/test_difflib.pytest_one_insert szTestWithAscii.test_one_insertcCs>tddd}|j|ddd|t|gddS)NZQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg+?rr))rr(rr)deleter)rr)rrQrP)r rrrrrrrrrrtest_one_deletes zTestWithAscii.test_one_deletecCsrtjddddd}||jttjddddd}||jdhtjd dddd}||jdd hdS) NcSs|dkSN rxrrr!z*TestWithAscii.test_bjunk..rZTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)ZisjunkabcSs|dkSr#rr%rrrr'%r(zhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb r$cSs|dvS)N)r$r*rr%rrrr')r(r*)r rrZbjunkrrrrr test_bjunk s   zTestWithAscii.test_bjunkN)__name__ __module__ __qualname__rr"r+rrrrrsrc@seZdZdZddZdS) TestAutojunkz-Tests for the autojunk parameter added in 2.7cCstd}d}td||}|j|ddd||jdhtjd||dd}|j|d dd||jtdS) NZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbrrrr*F)ZautojunkgQ?)r rrrrrr)rZseq1Zseq2rrrr#test_one_insert_homogenous_sequence0sz0TestAutojunk.test_one_insert_homogenous_sequenceN)r,r-r.__doc__r0rrrrr/.sr/c@s<eZdZddZddZddZddZd d Zd d Zd S) TestSFbugscCsBtdgg}||d||d||ddS)Nr)r rrrZ quick_ratioZreal_quick_ratio)rsrrrtest_ratio_for_null_seqnAsz#TestSFbugs.test_ratio_for_null_seqncCs>tdgg}|tt|tgg}|tt|dSN)r rZget_grouped_opcodes assertRaises StopIterationnext unified_diff)rZ group_genZdiff_genrrrtest_comparing_empty_listsHs z%TestSFbugs.test_comparing_empty_listscCsXtddd}|}|}||djd||djd||djddS)NZabxcdZabcdrr)r rZget_matching_blocksrsize)rr3firstsecondrrrtest_matching_blocks_cacheOs z%TestSFbugs.test_matching_blocks_cachecCs\ttdgdg}|d|d|d|d|d|d|d |d dS) Nz I am a buggyz I am a bugz- I am a buggyrz? -- rz+ I am a bugr;z? + rrr ZDifferZcomparerrdiffrrrtest_added_tab_hintXs zTestSFbugs.test_added_tab_hintcCsLttdgdg}|d|d|d|d|d|ddS) Nz ^z ^ z- ^rz + ^ rz ? + r;r@rArrr%test_hint_indented_properly_with_tabs`sz0TestSFbugs.test_hint_indented_properly_with_tabscCs$|ttdgdgddgdS)N23r))rz-2)rz+3T)rrr Z_mdiffrrrrtest_mdiff_catch_stop_iterationfsz*TestSFbugs.test_mdiff_catch_stop_iterationN) r,r-r.r4r:r?rCrDrHrrrrr2@s  r2z 1. Beautiful is beTTer than ugly. 2. Explicit is better than implicit. 3. Simple is better than complex. 4. Complex is better than complicated. z 1. Beautiful is better than ugly. 3. Simple is better than complex. 4. Complicated is better than complex. 5. Flat is better than nested. u 1. Beautiful is beTTer than ugly. 2. Explicit is better than ımplıcıt. 3. Simple is better than complex. 4. Complex is better than complicated. u 1. Beautiful is better than ügly. 3. Sımple is better than complex. 4. Complicated is better than cömplex. 5. Flat is better than nested. z Line 1: preceded by from:[tt] to:[ssss] Line 2: preceded by from:[sstt] to:[sssst] Line 3: preceded by from:[sstst] to:[ssssss] Line 4: has from:[sst] to:[sss] after : Line 5: has from:[t] to:[ss] at end z Line 1: preceded by from:[tt] to:[ssss] Line 2: preceded by from:[sstt] to:[sssst] Line 3: preceded by from:[sstst] to:[ssssss] Line 4: has from:[sst] to:[sss] after : Line 5: has from:[t] to:[ss] at end zline 0 1234567890123456789012345689012345 line 1 line 2 line 3 line 4 changed line 5 changed line 6 changed line 7 line 8 subtracted line 9 1234567890123456789012345689012345 short line just fits in!! just fits in two lines yup!! the endzline 0 1234567890123456789012345689012345 line 1 line 2 added line 3 line 4 chanGEd line 5a chanGed line 6a changEd line 7 line 8 line 9 1234567890 another long line that needs to be wrapped just fitS in!! just fits in two lineS yup!! the endc@s4eZdZddZddZddZddZd d Zd S) TestSFpatchesc!Cstdd}tdd}d|}d|}|}|}|}|}t}t}t}t}t} tjdd} tjdd} | j ||dd d d d } d d| j ||dd ddd| j ||dd ddd| j ||dd ddd d| j ||dd ddd d| j ||dd ddd| j ||dd d dd| j ggdd ddd| j ggdd d dd| ||d| ||d| j ||ddd d| ||d| |d|dg} | dd | }t td! }|||Wdn1s0YdS)"Nz(123 123 123 123 123 123 123 123 123 123 rz(456 456 456 456 456 456 456 456 456 456 r;)tabsize)Z wrapcolumnfromtoF)contextZnumlines z8

Context (first diff within numlines=5(default))

T)rOz7

Context (first diff after numlines=5(default))

z

Context (numlines=6)

z

Context (numlines=0)

rz

Same Context

z

Same Full

z

Empty Context

z

Empty Full

z

tabsize=2

z

tabsize=default

z+

Context (wrapcolumn=14,numlines=0)

z#

wrapcolumn=14,splitlines()

z'

wrapcolumn=14,splitlines(True)

zz %s ztest_difflib_expect.html)patch914575_from1patch914575_to1 splitlinespatch914575_from2patch914575_to2patch914575_from3patch914575_to3r HtmlDiff make_filejoinZ make_tablereplaceopenrrread)rZf1aZt1aZf1bZt1bf2t2Zf3Zt3ijkfullZtablesactualfprrrtest_html_diffs`      zTestSFpatches.test_html_diffcCsJt}ddt|dD}ddt|dD}td||dS)NcSs g|]}|drdpd|qS)r;K:%dzV:A:%dr.0rarrr r(z6TestSFpatches.test_recursion_limit..r;cSs g|]}|drdpd|qS)r;rhzV:B:%drrirrrrkr()sysgetrecursionlimitranger rr)rlimitoldnewrrrtest_recursion_limitsz"TestSFpatches.test_recursion_limitcCs,t}|tt}|d|dS)Nz"content="text/html; charset=utf-8"r rYrZrRrTrSassertInrZ html_diffoutputrrrtest_make_file_default_charsets  z,TestSFpatches.test_make_file_default_charsetcCs0t}|jttdd}|d|dS)Nz iso-8859-1charsetz'content="text/html; charset=iso-8859-1"rsrurrrtest_make_file_iso88591_charsets  z-TestSFpatches.test_make_file_iso88591_charsetcCs<t}|jttdd}|d||d|dS)Nzus-asciirxz%content="text/html; charset=us-ascii"zımplıcıt)r rYrZpatch914575_nonascii_from1rTpatch914575_nonascii_to1rtrurrr2test_make_file_usascii_charset_with_nonascii_input s  z@TestSFpatches.test_make_file_usascii_charset_with_nonascii_inputN)r,r-r.rgrrrwrzr}rrrrrIs 9rIc@s,eZdZddZddZddZddZd S) TestOutputFormatcCsdgd}tj|ddi}|t|ddddgtj|ddi}|t|dddd gdS) N)onetwoOriginalCurrentz2005-01-26 23:30:50z2010-04-02 10:20:52linetermrr;z --- Original 2005-01-26 23:30:50z+++ Current 2010-04-02 10:20:52z *** Original 2005-01-26 23:30:50z--- Current 2010-04-02 10:20:52r r9rr context_diffrargsZudZcdrrrtest_tab_delimitersz#TestOutputFormat.test_tab_delimitercCsdgd}tj|ddi}|t|ddddgtj|ddi}|t|dddd gdS) N)rrrrrrrr;z --- Originalz +++ Currentz *** Originalz --- Currentrrrrr&test_no_trailing_tab_on_empty_filedate!s z7TestOutputFormat.test_no_trailing_tab_on_empty_filedatecCshd}tj}||ddd||ddd||ddd||ddd ||d d d dS) Na Each field shall be of the form: %1d", if the range contains exactly one line, and: "%1d,%1d", , otherwise. If a range is empty, its beginning line number shall be the number of the line just before the range, or 0 if the empty range starts the file. rz3,04rNz4,2rQz4,3rz0,0)r Z_format_range_unifiedrrspecfmtrrrtest_range_format_unified)sz*TestOutputFormat.test_range_format_unifiedcCshd}tj}||ddd||ddd||ddd||ddd ||d d d dS) Na The range of lines in file1 shall be written in the following format if the range contains two or more lines: "*** %d,%d **** ", , and the following format otherwise: "*** %d **** ", The ending line number of an empty range shall be the number of the preceding line, or 0 if the range is at the start of the file. Next, the range of lines in file2 shall be written in the following format if the range contains two or more lines: "--- %d,%d ---- ", , and the following format otherwise: "--- %d ---- ", rrFrrrNz4,5rQz4,6r0)r Z_format_range_contextrrrrrtest_range_format_context:sz*TestOutputFormat.test_range_format_contextN)r,r-r.rrrrrrrrr~s r~c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS) TestBytescCs(t|}|D]}||td|q dS)Nz.all lines of diff should be bytes, but got: %r)rZassertIsInstancebytes)rrBlinerrrcheckVs zTestBytes.checkc Cs.ddg}ddg}tj}tj}|j}|t||||t||||t|||dd|t|||dd|t|||dddd|t|||dddd|t||||t||||t|||dd|t|||dd|t|||dddd|t|||dddddS)Nhellosandrsandréabs2005s2013)r r9rr diff_bytes)rr)r*unifiedrOrrrrtest_byte_content]s"zTestBytes.test_byte_contentc sd}d}dg}dg}j}tj}tj}|t||||||t|||||fdd}gd} tj|||||dd } || | d } d } |t|||||| | |t|||||| | gd } tj|||||| | dd } || | dS) Nsodz.txts łodz.txtsodz is a city in Poland.sŁodz is a city in Poland.cs@t|}t|t|t||D]\}}||q&dSr5)rrlenzip)expectreer)rGrr assertDiffsz1TestBytes.test_byte_filenames..assertDiff)s --- odz.txts +++ łodz.txt @@ -1 +1 @@-odz is a city in Poland.+Łodz is a city in Poland.r()rs 2005-03-18s 2005-03-19)s--- odz.txt 2005-03-18s+++ łodz.txt 2005-03-19rrr)rr r9rr) rfnafnbr)r*rrrOrrredateadatebrrGrtest_byte_filenamesys,   zTestBytes.test_byte_filenamescCsdg}dg}tj}tj}d}||||||||||||||||||||d}||tj|||||tj|||||tj|||||tj|||dS)NrZhelloz2lines to compare must be str, not bytes (b'hello')z.all arguments must be bytes, not str ('hello'))r r9r_assert_type_errorr)rr)r*rrOrrrrtest_mixed_types_contentsz"TestBytes.test_mixed_types_contentcCs.dg}dg}d}d}|dtj||||dS)Nzhello zohell sol.txts ola9.txtz-all arguments must be str, not: b'ol\xe9.txt')rr r9)rr)r*rrrrrtest_mixed_types_filenamess z$TestBytes.test_mixed_types_filenamesc CsZdg}dg}d}d}|dtjtj||dd|| dg}d g}tt||d d ||dS) Nsfoo sbar u1 févu3 févu/all arguments must be bytes, not str ('1 fév')rrzfoo zbar r)r*)rr rr9r)rr)r*rrrrrtest_mixed_types_datess z TestBytes.test_mixed_types_datescGsL|t}t||Wdn1s,0Y||t|jdSr5)r6 TypeErrorrrstr exception)rmsg generatorrctxrrrrs *zTestBytes._assert_type_errorN) r,r-r.rrrrrrrrrrrrSs5 rc@s4eZdZddZddZddZddZd d Zd S) TestJunkAPIscCs$dD]}|t|t|qdS)N)#z z #z# z # r) assertTruer IS_LINE_JUNKreprrrrrrtest_is_line_junk_truesz#TestJunkAPIs.test_is_line_junk_truecCs$dD]}|t|t|qdS)N)##z ##z## zabc zabc #zMr. Moose is up!) assertFalser rrrrrrtest_is_line_junk_falsesz$TestJunkAPIs.test_is_line_junk_falsecCs ddd}|t|dS)N i@Br)rr r)rZ evil_inputrrrtest_is_line_junk_REDOSs z$TestJunkAPIs.test_is_line_junk_REDOScCs$dD]}|t|t|qdS)N)r$r)rr IS_CHARACTER_JUNKrrcharrrrtest_is_character_junk_truesz(TestJunkAPIs.test_is_character_junk_truecCs$dD]}|t|t|qdS)N)r)rrP   )rr rrrrrrtest_is_character_junk_falsesz)TestJunkAPIs.test_is_character_junk_falseN)r,r-r.rrrrrrrrrrs rc@s$eZdZddZddZddZdS)TestFindLongestcs8tfddfddtdtdDDS)Nc3s|]}|vVqdSr5r)rjZb_part)r)rr r(z6TestFindLongest.longer_match_exists..cs g|]}||dqS)rrri)r*nrrrkr(z7TestFindLongest.longer_match_exists..rr)anyrnr)rr)r*rr)r)r*rrlonger_match_existss $z#TestFindLongest.longer_match_existscCsd}d}tj||d}|}||jd||jd||jd|||j|j|j||j|j|j|||||j|jddd}||jd ||jd ||jd|||j|j|j||j|j|j|||dd|dd|j|jd d d }||jd ||jd ||jd|||j|j|j||j|j|j||||d d |jdS)Nzfoo barz foo baz barr)r*rrQr;r)ZaloblorrNr)Zbhir) r rfind_longest_matchrr)r*r<rrrr)r*rmatchrrrtest_default_argss6&z!TestFindLongest.test_default_argscCsd}d}tj||d}|dt|dt|}||jd||jd||jd|||j|j|j||j|j|j|| |||jdS)NZdabcdZddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddabcddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddrrcrN) r rrrrr)r*r<rrrrrr%test_longest_match_with_popular_charssz5TestFindLongest.test_longest_match_with_popular_charsN)r,r-r.rrrrrrrrsrcCs dtj_dS)Nr)r rYZ_default_prefixrrrr setUpModule&srcCs|tt|Sr5)ZaddTestdoctestZ DocTestSuiter )loaderZtestspatternrrr load_tests*sr__main__)r Z test.supportrZunittestrrlZTestCaserr/r2rRrSr{r|rUrVrWrXrIr~rrrrrr,mainrrrrs2 &.X?.