pytest-mpl-0.9/0000755000077000000240000000000013167753712013432 5ustar tomstaff00000000000000pytest-mpl-0.9/CHANGES.md0000644000077000000240000000340313167753631015024 0ustar tomstaff000000000000000.9 (2017-10-12) ---------------- - Fix compatibility with Matplotlib 2.1. [#54] - Allow baseline_dir to be comma-separated URL list to allow mirrors to be specified. [#59] - Make sure figures get closed even if not running with the --mpl option, and only close actual Matplotlib Figure objects. [#60] 0.8 (2017-07-19) ---------------- - Fixed use of mpl_image_compare on methods of test classes that also use setup_method. [#51] - Make it possible to specify the directory in which to put the results from the tests using --mpl-results-path. [#39] - Only import Matplotlib if the plugin is actually used. [#47] - Make sure figures are closed after saving. [#46] - Allow the backend to be set on a per-test basis. [#38] - If test name contains slashes (normally from parameters in parametrized tests), replace with _. [#50] 0.7 (2016-11-26) ---------------- - Properly define dependencies in setup.py. [#32] 0.6 (2016-11-22) ---------------- - Added ``style`` and ``remove_text`` options. [#20] - Properly support parametrized tests. [#24] 0.5 (2016-05-06) ---------------- - Minor fixes to detection of remote baseline directories. - Minor improvements to documentation. 0.4 (2016-05-04) ---------------- - Add support for remote baseline images. [#18] - When providing two conflicting options, warn instead of raising an exception. [#19] 0.3 (2015-06-26) ---------------- - Changed default tolerance from 10 to 2. [#9] - Added ``tox.ini``. - Improvements to documentation 0.2 (2015-06-25) ---------------- - Added globally-configurable baseline directory with the ``--mpl-baseline-dir`` option. [#8] - Added ``baseline_dir`` and ``filename`` options in decorator. - Improvements to documentation 0.1 (2015-06-25) ---------------- - Initial version pytest-mpl-0.9/images/0000755000077000000240000000000013167753712014677 5ustar tomstaff00000000000000pytest-mpl-0.9/images/baseline-coords_overlay_auto_coord_meta.png0000644000077000000240000006476013133617760025453 0ustar tomstaff00000000000000PNG  IHDR6sBIT|d pHYsaa?i IDATxyTT? "Ȫ F&.(/m~OMM&i~k4""hWdEAesYDe`>?ҙ2 3sgu';pg|x1B!DF| (B %B!rB!D.@!ȅ!P!"J BB B\(B %B!rB!D.@!ȅ!P!"J BB B\(B %B!rB!D.@!ȅ!P!"J BB B\(B %B!rB!D.@!ȅ!P!"J BB B\(B %B!rB!D.@!ȅ!P!"J d/_ҥKajj '''ڵ 2׿+V1 cܹ¢E`dd<}wpuu-Ic/###xxxO?tܽ{ӟ055ELL ***&sqq(29>??9sN,??|>:::6s\@ρPXXxD@@#)))я~^z ;w҂P|>/_~/)ƍQ]]} }P^^WWW%DV8`ݺuя~$mŊR?cᥗ^)&}\9FC.\BԶfhhȞz)ɶT؉' 60WWW3/ٳG[o~mσښmٲEy{ecKOOld,11Q{Qes<KsnƆk系wJ=m"CWW lӟիWc˖-`gΜ}0| ctttұlcc~ϟGww7~I=^@?N<)_c…غud5v܉'N@( sn! O9;~ssIm%2co߆5())U_055+Ҥ'`ccX7nDSS`|WFYY<0{ɁR ϗ\QQ AAAx%x< Q&y9$HII0Qo ;;;?2^;績"_x,))1XEExښٱ/`ٳg%}W$c7n͛Ա^z%gwz_dzzzhkk+u+Ԕ=Ɲ:u|v9_|9c,,,qMFWW/"z{{QVV6ιT?~dv4^2>.\(y` ϳP(͛7X>+++8&;;;KroB!޽+9xl{{}Kԃι8::SٷoÎ;;9{- s@Ȥڵk̄vvvXp!Z[['<7r`` c Btuufq-_1\x=d{ii)D"/_.56??>`ll ("Ϲ\~d:皛qa$''Ox, ˗/Gyy9-<績F۲e ggΜrܫ|E~nnn6o,6<<,Xd_||>g T$55usNsss+Ps2'NL|>KNNfْvc$F˫O>[l$&&5Ɋ+000^{ fff/҂",]T_x駱rJI{0SSS:&QEslޞ0KKKa٘jcu!4^B!rB!D.@!ȅ!P!"Dٳg쬒4===Pq撚x{{s4<7EshlleZ@Ξ={r!d;t萤qӪ 64GJ=ցPRR4qpD~i "pIlٲ:tttTv|Ƙd}ڨ#uz]yܸqcҞUDx _|QŞjjjw^q!J1lI(Jss3311rmu_ff\ q-ŜYSSʎLMMٽ{kNuihh`Ƭ[}\~0WWWj3%2U'H@TΝ;'][̌#jjjpuTWWk׮Ҏ9<<'xw`ffŋk6ﭖ,Y7nO#BBBTzi4ފimmE?pʜM6!00_5***}'-- طoRO:::e˖!!!fffHNNƭ[߹566os+qÇqV~r1pzxTUUÃz@+峢ݻwMMMJۿs´|>yf!##cme! v)Ǩk_ )햣q,_ǎCeeҮ5V&-7+eΝC\\\38O?u3bff۷))) SS)hkj\.r VZc9::"11<@JJ ~LM Daii)Rdvܰg#-- 2uuu TBDbccU6M^GGشiΟ?TB[]QQP . ""PӧO#??ccc3~~FFbcc5Q[566B__*?9`ɒ%Sy "$$zzz\f455=97n܀1T!QQ ::8+`ƍشi߿i<\2Kסh=̙;wʕ+o1000Q!**JAY+,,ʕ+ahhu(xڊ:2 1ddd`ݺu\B144ƍtO9SPPUV(<C033Cnn.>sCQ9J P]] '''s vD(ø}6uttE_2s1;w֭Sהּ|V&rBeetT|>W222`bbNlڴI-]z:ot",DFFR 1o>>011:"v EM\;bnnCͨvH$Bff&L Q__C!2òe˰k.\r'Nv^ii)}`Sc@dk SVVOOikGV\tї>2C7n܀.\u(D6K׎"99YR;BT/##C[k}m/H,Q׎"jtJHvLMM`C!Ӡ+ޡ͛022Yv)Z*  QPP@}4%GQ;FGGH\HKKCOO"$SCpp0OQY"݇e aAQQ"""̒&1{{{8;;#$$ɸq!CNNB%rڑCRBOOP,i}ł lTVV"..:<2BАP&;bll9lHݝPhȍ7`bb"Yׯǚ5kp C$q%yXoo/ZZZtRCQSSSlݺ8r^:'oknMM U'[fHLL:H&5c\d$&&Gs#puu"9Dk,Y2ر188(`cc3g["22qqqڑQÚAAA\BH+_ΝclFڍyf#-- s&AqqVطԎ$''k|@ @LLO&|2qtt޽{188ÇOZNKb_[fkGPSSǏkdHSSttth"C! $2?#$$7oF^^222022ôž6l؀ ŋs,nMEsV%v~̰}vPU;?׎D"pVXӭԴD|ա"|TUUaݺu~[Dq*++=\;bddhEss"UW vZ={sb֌ޡĵ#jY;2[ ⎫VVVE233i4ԵvdO&?wx<"!! HOOKc577Gxv`tpb A D -QBCC%D"-u*#q툥%qMNFXX'kբD .(rN3vǏGʎс~옄;@l|Krj2}}}y&-u: ڑիWoQI:MOc˖-e222vZvvvHLLc hooWڱN hJ *F-Qsssrʜj*<(**™3g0<LjHOOk777$%%aƍFhh(رc8x ~m\rO>$%HNNNX|9=!KIOA(HNNFtth0ֆ8;;s yvuGQRRD -P f@JJJ?੧ҥKo>=`͚5(((4ųGGGlmmQVV#]]]޽(^^^DllD֭[LO>$n޼#G`ʕhnnf ;]]]Ib~3… hmm-U666R_\e,wD(eee򂉉 סpqqAbb"p9Zy!TVVRۃCee% $$Gmm-ӑ5<aee_|[XYx15%J?jkku(D:::ǫ `tlf| ;; /[@GG?{{{Ǿ}H3g>CUU%m0'BBB닌 !22R+֮]Km/4Yŋ舚$9P,Yf@a``0aqqr666&ڿ;w;~m;v ;w{s%ʵkא xyyUYcc# fu^7KLLL\CBp.]B\\܄;dnG@##I;x IxS^{ <o {AGGZDCNNH  66vU{1?v=3N vvvo6 aee5psղ%Jaa!텆ijj޴#^wlK]aJ aꂍ9p@j[pp0~YF>b W//zzU$Imafx<K 3www:Hx"xdž'l/|>;q+++cXrūؙ3gXzz:zJ!55uuu)mJF屪Lܸq%%%j&z})+:HPPoےJ&)i/AoovoEss3_Ƽyс+V`9sOƍe-Q:::p xxx`ʕ*%i{aeEss3֬Y#]\\Bb `k IDATuTpSdao>fooόիYFFYٙI5551e?я355eFFFlٲelttTc2W D"VVVƾ+">e$622}]D]5u{.;rfBPy}}}8p@V3Ys?gu2d-Qbbb%''Л粺:^5ZZZbΝ?Ԏ$'#<b $Cvv6bbbeRkGvDP!2OArr2Z[[% "VdjEEEWZ'Es %"@l۶ 'ODuu5͹޽{hjjס^KinP!b``޽[i-Qrddd ..Nx)--ӧ%+բBf+W%JJJ :;;LZk&&&x'T%"Zlڴ 999nBO(… :pvv޽{ӃTܽ{됴%"Ν;7-sssرNNN(D}"$$dNAxx8֯_@lQJ D.X`EorQ0B2NÃPB\;bkkd\~4J Df###())AXX#ǎoriallLQ1$_ekG]tܿ$J Df9992aeeXXXСC3Z(žL׎ĉT;@Lܹ>֋iKxbjGG9K9I| dͳڏ%JGG?\R-UZb_\;@===А4cɌ]t ... [ep(DZZZO툏RSSQ]]M#@ ~ d|UqYYN:AC[rZ׎ȑ#T;"'EfD٫ `˖-hjjBZZqm6MII .]J-'!AFFlmm&mGW TʠDQ>\~Z?`%2-.V(A-g ~:Վ%2/LJ[ E~ׯ_),Xu(֭ڑBߏzp%J[[DQ#**P4Վ }[D6@pi,ZZ[0|A__P4Վ<]IݼyFFFXp!סH(Ӹ{.n߾ ///C3ĵ#8z(ՎC L066\DGGsʤ-QvڅZ?~Z?֭[Wsx{p\|8G סL6l@{{;Dp‚P,pvv:4Nh;L---:Cbb"|~9<<2rV?>_m۶?r%"ܹsy aʕضmJKKq) qʜ?TEB<ԄJL@D][]eP=gUU՜³pqq:dmm 8pPTB]pCQߟ-Qc̜ j`CP9%\COOPFGGk֬ҥK#22rN?\B]tvvvv\(/ÇQWWuH 100r R@c ֭:={ڊ4o"Ӗ |2annu(*pKGGGh\K&ޞP.Zlhh :D177ǡCuH3666lp r@qaٲeصkjjj4%ʅ @M(hv km -QV^oj[Uۋf,]PD"233Uʠ&޽{Զ%JFF4SKt-T^^NSD^ \B:T;03ZܺiK͙Ndne233C3$i28tuuqG^^BBBT=,<3􄉉 \]]sϡcQ{puu!\]]~MЀ̛7?ϥ> / ֯_{{{! 2?K,)h[nAGG\Qttt6mBvv6233! UvNCe$o ''۶m{n=zsDwڵk' 22^xq1ر-7O?<~ _㏱dg?3<3!Ʒz կ~z|prr)++cX\r'{ԃV]@fkSWWǒXmm+Xrr2UB猄KY˛-77x<;H2~J}יlc/f"1ٳgYXX.v O~|>~d[kk+g/X󃑑סh}ރ!\tI+ۄ@ԬaAݙżp-|v~_ORǭ RT;C|K=fdd$}6%9V>סh;;;$&&ŋ񁉉"$P__1---Ǜn:XXXɓި˗6<{wRR~_g?| MZŪݍDDDpVDyD~#11QEEs=q˗/@ ڶpB?g׭[QdggOxgP:u "qqq2~ {饗k ˗/m/4Ymm-,XKKKC!䄽{GA\\܄7oބ) 555p)DEEɵ={< \+WH355O###Xj@پ}=322bWf԰3SSSfiiɞz))5x<31W߾}E˗/OP $& e2}_^vQ&$B!KJJbCCC ;J9\\\o~YU;;;3>??~!aʊmݺUUU|){79 344d˖-c%x Y鱂ɘfmm٧~YZZ+VHllld|>_"βYJJ R;w544dc05%6(uuu,77W s3fDSqr kz),]C~~>`DeeU$<쳒}29_p!.\dddaaaΝ;냛ס N:,:$"P\|P84cǎAWWWjւy\pARM\{lll,<<<&ܯ- ܹvvv8|2atuu1<<^xAi-Qr!88Xs@*++1%((1TVV wʕ+'.b|}a._j9UQEQTT$XVNˑ~/ҋb /^,_\w[r=w!=Pu5#"(w,Q~"<<`2oޭ}5 zm.]aCh茟c IHAҥXtz%L[[pz >o&n߾ 777$%% ?$z-;v QQQxWp}|GvGkk+k @% 333-4",DEEjƒۋ XYY!<<\#_5؟g}W_šC+`ll 'OĚ5k$c-Z7G}ΝS7166IQ[nAGGG?*/Vϟx888hd񫦸>u(jn8p @ я\AVcccF||BKKmoOOO,Yt֭[G $7`x'퍣GJ XO%S(ԩS(((PWMq S)PQggg$&&HIIAggׇ7n_U2[ yСChjjR1QɽƇ6ЪTMGGk֬ҥK!`ffHѥfUMYYYڵk ``ժUsn9E+077ₔ\zUZׯ_#I&͛044o/RKFGGԺd"J *DܹsGEww7::|DFF*9BHccc% cL%5ft?=bBww7222`AWw_Eaa!V\I '>UV[炚,\\ #عs',Xd444L:mmmQqd6z{{___C2~`jj*:KP TLx<{n455رcwq\{(FxxwЫvZtvvɓprrBpp0]kkkXYYq"A]]`mmu(z%%"""Ԫ˃*utt```K,:AW jwƼy󐔔\Ed  QTTQ7qKEimK2(#J jF<fffiYS ={yԹ7oסhJ j xǏ𫹮.twwÃP&n'OjEK\zfqzcbb"p!p!n:CQStKZA~􊩙+W`ѢE?dC@@v؁ |w*_LpttS]pŷSw܉+Wĉ:,fFYYBX7oƊ+p1~5044 pRLe.wbbbEcQQ#9ZnѢEػw/B!ѡdΟ?Y2 ZK"@ DMttt3zj<䓸pΜ9!%GIގa8;;sJ[<(..J<ݻ&qFcڵke~)n OOOjMbi:qK/{{<ԽS*++:9...ZL 055:θj\KzXXXƆP4% AAAޗ5ŦM@DI600r ݆ ,BÚP(ą u(s%eee!**Jsͱc899!%%u{APDΝ;࠶-Qrssjmm/^cϞ=i+2='vލ[nUKqOOOC3/GD"m6GOOOj b͚5ԮZNځxCQkSujS 89\EW )++7LLLTr<V666HNNƵkTrܹjd.-Qĝwx G S<>>>ؽ{7n޼Zmn/h>466R퀌n2449)K@8 t}}}!<<'ODaa︪Xv-(eee*ܑ9) @T zzz:b055šCD#S333rDSzK6Bj@Thll 999: ]vjk+?N X=dtt:9#((?-QNVxKHT O-544Ć˱zj?~%%%տ \2HZxy!55/_Vm-UOTF@T7n܀?סLKuHFGG\&nӃ#Gݻ$ IDAT_?'U %,C`` oߎ2|:,:&4ñadffΪ%@ @ll,ޔ ܸq&&&X`ס[l?PQQU-Qjkk`XZZrVDÇ a``;;;%EH(((u(rstt޽{1<<ÇkV###())AXXסh-///޽MMM3nU2gd.\@`` eV|> @cccDEEiTrrrx%3V^=eMGaa!`hhH](Qoo/ZZZu( 3o>>011՜~#Qm[l#>:C .]իWs $&&bhhӟuHZcI\سgpQpLΟ?OM4 y\xgΜ0ai J v]tvvˋP8hٳ(a=鞓סtvv˗/֭[9g'w#J 4rYYYYa׮]Brr2_uHS{i LDW‚Pǃ/ܐJũ{ NNN077ڮp ##666 Ӻ[ʪ@W 222RYPԎ֭[p|wjjjj鞆Dee%caax<%GŞ={$`\=OoMryDEE=rǓ% z(@gg'ݻG30S!3A%""qV J D_Hj}R.`EM4l'۷o+lׯ_Ǽy`kk}S*|>AAAx'qj2C@e%AHH6oތ={voQkHLMMz7D Dpuużye333öm#Gʕ+r j*+8JL.\P*K,Abb"J-Q@ DFFPPסhݻr{zzooo%EH͜2_8rrr&=nTT[l#f|>555M;`e?r8qt0(;}4{W٭[9(_H>,I<ߗ2CQ]|Xp!n*fmm;wĉR3a`ccb0 K711eJrccclvƔT >(\\pA+o/h˗/Q 44TnF l [oׯ?G[[&&&7oJS-,Hk祩7ܴi###:tZw9jNyf|^{{;"##'likk/wELL adddbbbl2 رcЀɸH,SZZKX&p;Ln3a DPTDШ94 1vTd7V*IU6MoS{Y+lva$(j8DQPa͔0 3zzy~ iӐӧO#!!0AGE\\MN* Z%hL666`L关gٳH$pvv9oFwL_qFĕ+W OR1u۷gb֬Y4D444P(taQghh'qjEy,--6$ce(p\*fA.ވMMN*X*W %%%q`8\v hhhP{b1kJ{{{ZZZ COM #Nr) T'Jppp;2J* $$$D!!!(**R{sii)b܉I/]a&O*"##kaphEEHbJJ@gݽ8wbcZc`fڿ3}}SƠx\zzpIbbM m6,k6}XͳL$ݻw+)Ɓ p@Yood&Xee8bvQo{\Xi+..fr566 ccPc<.i&U֭/CCCG)k;l߾ǎpꐔ<={pq ~GmùucM]bDGGcƄ 0|b@7n܀X,1VBm>[~=sssclԩS:e-H$Ru]ƒO?옃 g|Ndl+ݻw;w}Y ۾};vkjjضmعsА Qx\w}Ǻ dNNNغu+n:椥ͨ`D~aVmm-a}+//GPPL:())Aff&vt&ן'N`̙tx8cǨVtvvgItSE:=Qt #J xXsy֬Y:'0XI&!)2RYѩ{BAf@p-T,DHw'"ë#'l$&&ِ F߷ 2x400ba2rL8qL)nĉVy+**œ9sqlJJJ0oҋQ!=z |bV-`UPPQCYYbcc %J z=G/MAGG^3g DEEA*R)gD@@襟222ptkэsQLrpB#)) /^޽{ QA D@!p]dff޽{|4k׮O=ߡQx|KEݻj%J caayaCnn.K w(dqy\zzzB&QD D&NիW;v@uuIuk?~aaa;2 Nrh͛J8u&5c@N*"55 #(66ܸqӧO;2 +)SL__ԜQ,--Q|Q^#ƹp !//oԓ\z -- f992(F{zzbǎ|c܌o'Ob:Mr)e˖8|E<%q8<3HMM͛7k.ܿ(Zى+W 44tLۙ0a^~eL6m̢@G dDBBqaMo%%%T+[rrr.G???, ?޽C dsuuErr2\\\&ӧVSl~:>VG1’%KpQ n22J f8<*嵵u999t\`QPP`б:>narbfD1Q^ss3<DEEA,i/_3\\\)1RJCQQpBL4%EW f )))prrBzz:]qq̛7OCkkkC]]f̘a}*7OHH#G4"B Lq3f`͚5|2كQo4@PdA.իF%3gmm{111JJJ088{[ZZԄiӦ8JO0V8!%%W^ݻ[>>|IsdeeiSヴ4HR0ưw^' hڵkUfmC]]-Z@[7!1,[ /w8z#PSS5k 22Wn-ԩSsŋ̨#Q.#--0!Xzz:d2aY%wȑ#H$;B8\~=\]](*BN!D'@!!P!J Bt"ׇ'O"##ަMg}VmpӅ S...\.׸j,^&L ֮]w窱SWWHB}X={,Y...Dؾ}z֭H$Ry|>!|fmiۮL-h۶ ֭0k,deei1uTkl[***H$X,FKKk}b1TæM9<Ā1W_Ş={qFc۶mXt) _|?ϟqexى^{ ^^^ݻ+|roܹs1i$DGGܹs(++Sa޽O? A~~׵~2IzMB[Q4Z nIDATM;@LL o;wDRRv؁5k(׽}6RSSa8::bÆ 9s&fΜ'c oեpO?Deĉu94И;q8oS.a,&&F,%%mݺU{tt4vCCC,$$,7=urYNN8}7eׯ_gDZ]?Fc8wߩk &=!|fmhۮ4mm?L$|͙3yyy~*؇~q׿۸q#D޽{*o۶D"VQQ1b}'#G 仰`aa+Y[[?,2ե2aۈ09Ze={^ɓ JsN}|,DzCCC0`DAv%Զ  qqq*KJJ;wPPP\]kk+>#|jiVfӧ!J࠲|Μ9`(@uu5كs9rz455aj3g*++Uqtt\\\ojjYv%0RV3w۫q;;;0PQQ\۷#??/?կ~5g`aptt-[>!OOOez ? exyyw_ -[TBT>[ZZKKK˽{!,, CCC8|0KTUU!??"siWFj~ӦMCnn.n޼ ooo qJi٨(d2,X!99+WT [nÇoggu!>>͛SN\֎`mdSNe?Zq۲er;s .]rssϖ,Yb=cǎ1خ]D"6Oŏhg1H233 iӮFjۚh`%%%ի>c666L$׫m]xQ>زe˔hRTTD"{7F\waڢWmyOOuQA*bHKK?$$$V۞k5=*tڴ+ڶ&3f ##?`˖-`uԩS3Ϩ-Dii)6oެgADDĸl'OOOeң4uSƪUֆjtvv)666pqqQ{^<Ц] -<޶5ywb ף J[V^ ա7nh<mp<0{ *g>8!!!cھz nnn(//W[lNܽ{nnn|w#P۶&}5klpDcy&vءqnXXBBBFhX[[;.wHo޼YhԤ1WWW600\>ܳ5'ajL$}+DѶ] -hӶ_|9::ƾ}~֬YD"*cMAq۸qKCw^CLLVXb1o>>(++3n M}6+X_hiiAhh(RRR؇ơCtR8p Fv%MۮwbAmm-+899h{Oi&477Y\*"44gφ***'OFYY]"36z{{{Ǽ-`٣Fff&[hdVVVՕ-]j\… l9;;kj<DD"Ɵ:v}vZ&Je3f`ӟTmەmhTlllؔ)S؆ 4^!IOa}G,,,M4Y[[3D|M:D @! BiB!D'@!!P!J BtB BN(B %B!:B!D'@!!P!J BtB BN(B %B!:B!D'@!!P!J BtB BN(B %B!:B!D'@!!P!J BtB BN(B %B!:B!D'@!!P!J BtFH*…IENDB`pytest-mpl-0.9/images/coords_overlay_auto_coord_meta-failed-diff.png0000644000077000000240000002221113133617760026004 0ustar tomstaff00000000000000PNG  IHDR6sBIT|d IDATx=W_=<Ĩ;YV`mAdNf-8e6$X4-3 c Hl6$6‰,` d ְt ޠvuWWSSN{nNx"Pq"@F #`0B!@F #`0B!@F #`0B!@F #`0B!@F #`-|Ӥlֲ&*SV6JQ>|߯TNe畽|ϝ;WkcFA0 %m7a-e㿓e՛U"EA,n_[ڌaHodWWW[?9|G}3va+4 0dPIõ{nyȒ'-S\|=ˌ[md|Q/+}ɳAPZqDUee:+ŬJת1dOd;؞] vb>zhc믥3l PQcx suNWmS?<[8-ORe&ڷgϞg2l>1h)k!R e+d&277iX,Mfӟɓ'O·!}7olu}=#ynyF5 $]W&W[U޽[+(+״xZ]d ȕuoDx2Z(rӣ=( @.ǂxs_zTGR󝯷/fZ@F #`i׺2a#Nf ‚E>vE~]s-#صT\{oæѣa/KԱpD/g~3&{Kaw폟.Is[ܹޗw_r+ V%}lIfi^IҐ.\0O~ێ׊?׍uxllGvMIJ_}7F^0=XӁ$/Q= MIJ{?.ݐ cB2F?F7s< +V6$K7iƹZtR]M{W-dihH-I϶R{FKd١$]\V!Z qc>}pd< I 6cб{~.ڊCwZPzU7ZL ?xHh,w;kc#FN*'dC}sl+5ZӓtF>D'Z蜜@kvyڱqы4q:H:Ԙ&γ.YWCXHL~J@ dGm1 $VwaGl+}7A+]27ՉS U zw#$\P&6ұ1IzFCX)eGfM)Hrk^!,}TڱAArVnڠFJfA\GD9@ $TR/\N%;dit[>M%:`kg3RfC~f@d  .9!K@wʋH.[8) @˥꙾`@j׭d؜@Cd (tH#\\"d \ps W6 HC.o8ACd 8ػ ž` ]XГO>iʋڵ`:u}:>/雾 kCXNؓjީ_/˹Zqr+FgnA!iA,@ d h\ hn i~I_~8a@qVo~\p}w c}7GJ뫉4WE!9}yM1|-ž kCXNX)v+:PµHCv1 LqĹ Ak"I~ߍ| 2LmŹ A릶] HON^zAo4#8" ps =҈pÚSS^:E2So; t Xr L}wvW.݈~:A2`%v@F`]r\0`k!۷3tφpkV}ϲE咯畫|Ѣf⇒NhHzml=o0~$ů'/sd=Փ6!EI4 |xi9*7Y8@ďz6UT9x7k?C͂ߑ$z6$OYlǤ1e ~M?#{3d 9#{eY&)Jo=I;~_t@GaAи`w% Ha  % (/!Tf@YG݄@P"S>CIү%(,; !^m\; c}U14`rrK]!A#}oIbH@ހsy?d -d >7}_p@B+ؐGAk"na*|_T)YlU+OA.`$0TΎ)L> MtAd,3up^970 VWW%Kit$z!oH*yJMeM絇 fGJu,Co 颀S4)e%{>GQ"]fUG?^lOg9#-*A$5#9:.}~v̀9Gd0=$\ eM }O n;rH@/HLKK%U>2eѶJ4I?ow^oys[^L#8O>^o|rra%S=Y6=~ 5<] em\νcq(:&$Ee8 bWh_$+$#x0.1V5laj;̷\?އL%3[n\3҄}{M@%m~NlamW4; X_+nze_JZ^Ǎ'Ϟ_w饗f?SO݊V,#$}Rpٳ}0{=PʾVVYWlDy2m>}y  y׿/)>jkCvKHDqa-[\[ɺX^`H_f ߴT/Y`˹G/? h#;@k\!Vh u.p3ѳG d \\~. h-Jf>zr-!`e;$w.1l"82-6 4Zagsϕz@00EIKpv:P dN:wF儥zFP CXK:dŵ!,&ט^\ aallP0eLV{jt@0YaWm4(@0y& *@Ym$눨&UtI#Q$ep~&\W|Vr#ύꈃO\oz%{ ZN;zh+5V y( DIU 1 '@%.e2CXyzx>Z`rЮ]$I$m۶(hs{o sd 9w"] PHEu떞}قEsm $ ECΟ?Es`T@vޭ۷okqqQ׮]{oz@qU%xHu (d+iii=A"ro~ݻwZHE;v螃WP̵Q '3o[j  /;vŋkH Γt1k~~^W\ѝ;wyr2D}}NL"$2'@b=I%\: Hصky_C)KWR`dXzW786Akŗ:HO쫯f`P@Jܽ{WO=$iΝ*T[ RɰApk! aK'O.ZG2<O6Vdf֍ ;wNRG}a!!Ç_=$KKEu떞}uU\b`.\`B⡫΂dw0`|@F|H^Re׮]}u5z|_F=}?ݾ}[hw1#Hf j\tI?0l6c5:=ZB̲@(իWK/Ɋ AĽ@0 g/E(Z?ᯉ8=xY=}ٳgnܸݼyJ[+yO Fi/5Eэnܸ!I %= hDy߿H._,ijwl/ CXD(jYI/Rz[3^gG(hΝF^tIjؿY6wz| $oyL|:tP&=z\4??I?oFw֝;w,Ľ@&Ȭo7MSOE\6e\U~5Po}9oUse*}z˯f>׏ѝn@q$U;\r\&E3~5Po @QOoY&>AU9`XFH(yϋ: J̬/Cz}ʂjRa)(Wc e}33e yuUSHɂn(NTX;gސEնL6&1dgtfVA7lpqxCeJg=S%jh}J߮gEgW*. ER9toR$du'؆7٥ (}\E3N~nwE\Y$zYtpLm¼ӾAMCz&Ef']=̔M}Ŧc x(*}DW:]1FǶ>eu3eD}YC^usaןa@5eem\1) \ԯ&t}M?c\ްWք{cC~]696KXSVfmL_ /TYUg\.DxRŔ"79aE:d\4o/JGNx!yoKuǞH/W8T(dopy8#P(@C!@F #`0B!@F #`0B!@F #`0B!@F #`0B!@F #xqW>IENDB`pytest-mpl-0.9/images/coords_overlay_auto_coord_meta.png0000644000077000000240000005661013133617760023666 0ustar tomstaff00000000000000PNG  IHDR6sBIT|d pHYsaa?i IDATxy|u?3i}XPN/A]Uş(x(x-Z\]U",r+¢PJZz7ifG;q&M2+3KN'd|<σ  " "6!BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r A$ȁA BAHA! r D'vڅ[nvлwo̞=t.qXz5 LL8?Cs+**p7"??}_O>Cvv6z뭀6XlY qZ@'|۷oǬY0tPaժU>|8;visw5\ECeeߘǏ9epBĉصky%%%;w..\,\CEaa_~7tfΜ [lEt:dyaڴiddddॗ^¸q{n 0w.0`F O?{<cv;?o<߱{g裏By竫&0@"ԣG̙3.ϟ;? ~;< gB|||@;m6\.Ͱlγ-a]R^^iӦ!-- EEEA1< 11\r v ν+ƞ9s&}N߿jii hksso.\<]AH:\|Ũ?~޽{eggεX,HOOGMMM6xKK }s 犗"B@477cO?CNNN8鵥p8HNNk6TUUe]bذaЩ~q~"سgO ;v 11aKDgȁz={6v؁>F xٳQ\\˲*|Ǿ 87xwx pI&mۄ իW_z51m4߱3g~}|OAt)ߎ^xӧOǬY:~޼y'Obذahllw܁Y'Nqg^ok#0o<^1ciӦhW^o3gɓ?{wq8s?U`׮]8p`ATNtbܸq<˲<0~X;/r[n|BB}q׭[v-Z766JW_ l6~?𼚚333D~ݻ%I?@ IP 9 B@ I! $A )VUU/D>}TTSS416v17˅G⢋.-ڨʁ|嗾"8 %_Jk3TTO>-\z晊LI ;X~K/h*ؑ h Nɯy%n7N"jEؕxs3\hinF'k2'%igL;pr~vZg̀l՛a0џ47j5 )qOM_2 rea B=qwSNߪ#VNIA^ .dC7^3 xCŢUa Q9f 4Ιic=~WE,"atJJcXg''D, fyDC5#q^J ޫSADf7;W/-LJOFԃ`Sqq`|k4i^wsFvwc&ȁLN|75%%Yb\L@, 33CŎBDĘWǐzb!ѣcPL@ /8,RY!Đe (.w L?'zdq RN*d_c#EhWȁ8tbI3l,(#1DNS|mlt'OQCv>FǣpCnjs D^'F 9?WR)FBD9ϟ8a, +VaB*:v"N'J{QuNjM6wY76edб\](ح 97za(eci:R@=WK+)1MfR!"4T!DXC HP@ +KK͒qE*U2ڿļdڴ^n1\%B"~6_q~vxPjBPׁQVl6Axł*`Bf՞0U!4bolM{ôO>Q͵(1S#}6BDPŋ4biC3c*֞U{[n2324gYP;B:A,ČK[Z>w;a*"0f|駟FXT`%\  i5xy(Z8.L`͆)$''cꫣV!۝ij,RIP,*q#5OTP+ݤDKdSdG,S1B*D B@ χ%ss3LRX ;2ݍWc $TV(B9Qbp3v76UhT[* [U T`ުEY"t+0n]oF!0,)1lfVj\JJRe.B*Do`##[dz70Yf ;.7M.FZJ*D^3zpq#KL+ϛRݔdϞ=`YIeR!A۝[BBfEWNIP!e^ҁ;wn_ʨB[[A۝ܯ ,2q~)!bFL@ X}ȸZ0ͰZ12AXك灐 1f8p0rȮORY},~;½z6BDP^} ʁ <1O0nb8BA"nR!]c*2ՅyԀNN _t+Yf`0*U{Ky-.Bԇar"3!H9r@lǏMM%jBY"Xg_Y1wQHW,=:RTYz;IDu(QF(T=SGFyz}CqŊ lI2HhU4S,$ @Ba(Bcef[B@ W%+t0ebC.-Ull,PAiN 8 +K+ZZ 3V ,z_EE?ȁɊ eM zdiD*DA$rG?@jULee =>^5Ba>SʠF¤IA#K#P!o-[cX^R!x ;[)P\邹6B ylT @$r.P9 =B ">㍊FR!ȁD *dK]x(0dٳwMMMx1eeYkl-ѣG,lۑĉO^e%bgO梌,TxYTn|ޘ_n6"k~z,^ڵk1uTlڴ s/x߿]v:iBee%/_޽{7of_;֭[Hߧl@@EŪzaNNJ 8H~%?hzM@~l+**B\\,X;f0|l߾'N8Nd%$zGv{ !<8C}}}BTnwkur~HTH]#sI?ۻw/ a AA۷0f<8x >Clܸ1 Ӊ"##rCjxU)mi.9hNPEqX*a/a!77qXiSފ2dX?$+Sm.9m Q/m51v/HnnoJLYYH^ݎtTWW2_Xt,)Qu>BTX5OT3ְaðyf444 99w|ǎB @CC2"_3~e 46J}c+3^[=@Dbڮ@,@[߆۶k8t 0l2sL\ Nmk׮ѣ/an---~ /_.g/cvF9R\ܕ^,剅x|F&oP"&t@i9&p*l2rH̚5 wN<7Dqq1֮]ѤVBmmoI;[/Z)))(++ða0w\/_|/]vYDs**ls$I1%b!V:qU\bυƃ>/g˗cRdڃBZ!` zꅺ:zPZZ ׋⪫]wKፄ={ଳ‚  RUZ_\.\2㢯NQR+ZbIW^bVtDP wõ6G"r JU"kNn9|XYpޖtq8i{<ϣ=;6FWaF;yi2۳b2̺0hyZ )UB$7B,DenmhP}^OH`rNmyݵvvU}ַ@@#S1M) /hT!t%)D#R].ݎA*<,^DZ)D*r J 1aޣ*sYVqhMY|T!t)ݮ UA |TH3ãRtB(!$*lHU%GkSAmYF7f RuIQBWJK4?3%&bA257nSA*r JsNVEl+BnR)١BFYH &IQ@Wh G'B8#)IR!Р.V~ *#Ki *,$B =)Z1r IDAT8?5/6#K!@,Y'F?eRӦimAP^++K'NWYZgv`qj:R!~liAmjGBWЩ 'ŗedJ H@݉Pu y6-1BDoX dfݠR,mC+R!~tCx<*Z[6Guj#:V!ɓZQ*֨7CR#B`9HeL@D\t?N6Xת&aͺu Bb5&t%L-蒿<ٶ!t*:y`﫰Cr zK $/8q *`Z?a[ %0B@UoFN*Ĕ%b$njKy/DO C?<駻=*Y 8-|8֬Ywxꩧзo_8yG"۷oǃ>b˾8̙3QPPy駟F>}h"#Gh"\xᅸ;Xp!;~6x'`1}^lguYX`rUj.;|:H>y'|/V]8/ϣRmN=ŝga|[ffyyݻwcv֭8s} tR,_k.5 =y߹w}7}Y۷gq?&MGeY|WxGuVSpI <̙3'"lق+ƍ;. V/ sa̘1 4*J&M}Wk+$IIpv+ |¦WBFVKcȕ}XM5tu:h`$:櫮 v{߿.99]vW\q1x`3=>,W0;K/,bƌ~5$pgq駟gm%C=~:t(VXI8p/ƶmiӦgQ>z(͛7:=%%_xpM7)>Uρ'B2Tr<c'E%zNF(my$D]ޱ=9v ^/ ݑHD۷/vܧOϾ?Xv-= Á?˖-СC#s͘0av0 ~/y/UWKS!ҍe%5:"BXAP9MEEE |l6ϟ۷)ׯ_K.<`ĉ(((￯ݺfD-Up1Ԍ,-RgdC4q {EAAAt~߾}8q*++qgwz#w^cTM0?98t*:u99(qFEtCbq]ch@SX󪫫x^o1#Gj1 Yw$N]eUUԦ-Z|1=K1T!f]4r 9].K0l0I=6RA%Ӊp+1\%I^;y]v' 1 5q זXPp8|PIe_k (.Ve1U*D/7fW`#嘅F,\v:.,[cFʤI`Z6W2dN*i<]aP=z)2l|qvz^vIIzC{Bzc:.y_Cvm64q Æ ͛ЀdQ;vh,ڵw܉B>|86oތ͛7KG[Q8|~"j!bP9 .DNG l}X8]V`*gΜ ׋W^ywvcڵ=z43f~׭rƍ8|0f͚>nTUiv64$2\tN+ވa*vTth@FYf=܃W^y&L@qq1z)y?0~xZ O<f͚C뮓Ŗ &20s| O$>n BB[ޞ[P""|2^ͮ׷z ~;~mvmzO6ѣ{/V\K._GGM9v @ tH1L, SUcX?URzai nC~~p88u)t(dUI Vv$ FY~]s{l{1#q@ey4rzaM1BSSN'N'MnpJy]n.F;B>6gXyu 00TƤ DCS$bbYz2rPIB 7r D~~~ŘBV=y52;)/kBP} (c*x YADDJ[yim<Zd|r,.HMmgd޳Y1BfV9? 1 enwrG8C%!k_DE2bLNzPXn-@b@)0 v&x]0 ĉEu7T8dm$bU={7^o$Z[UulѣjYFޑ~ and o %U!GLNƲ"X5nD#*bbU êݐ*^)+CLNnS!"n숍쫮}#* Ȋ=Ił.J j0 3lAu7O9 .nz xQYYԣ T!͢RN#~[tBFWmUMPQJ# 15. ]W;ѩ 扝!ݻwﺮہ=B1v762+%\nD읮gdmw3"1Z` Z 眣򗊊IZ1\ HD*Dp!wi4@Bf͐ݐb-)z[qM[{BQT c-h8Wjm2\p(cQ2VqKIH*!3KG*C$ rrr. BҨ^SZj$Ȕ1ժ U!;=/8S!DeAnDLc2tBjr aF͐xS-uu(m))Qr'YY24T!-_XWkm2@R4zmԍe1:Jn*BXPypȁD@^^1c!;=+SR0j }b70bB24R!<18ƻJưu!&hmj,$e12>#s% 9 !!ݻwGSSfȏ hm*8uJkoOI` *E:U*U`zƘW.Pk TcGC~$bYTI0𩗇Ġ*DU`ȁH ##Ø*$.4*ު@))8-B".Ao\QUR+ 9"L;IXP <FU!Ġ*D?'D233QWWcݻkmHiw(%CT!(B(ڝB]jr Q` ࢋ@u^// BEŨYTPPe~dggZ"/,ۦB**D5Jnl-oNNn7Ex: :=f| =J$EumjY!u ξJ Ш+j@ $J BLZTD$/.#Bz_Ѵ0z VD3a({ g{re_u 9(޽1c! dgkm.-(3d UyU9Ŋ"NUH :aZOG BNMx:v'qqD5Oڪ6bl4|AuTU96nxرϽ19MQ nhzdV!8~L 1atmP} aL7 b1|d"33ӸNeeim&l0ܐ4"5}7)&q#Q B#4ƿUİ2ӦimfQ^[8B 0}|]" i6Yn:TnݺJk3!3Sk 4ɪ^/'*Hlԇ4|=dP!I0ʓdb1h%hm ;.UHϣ,'3KXYAHKKCeef(UFII+T̢B2P!⦚]r U\ڊZ 5C]P(UI)@FFB Wͨ QIJ`Yr00C]af(3ܓ]9"2LBņ8xNcY,p0K!fm ];B8>=UDMMf(CFhSƲRb!@N"T!~D9ጚS>}'4傓ci{G0۳ˠJ璠OKA222pIPR!p<6u;O{IDK o|t޴twթL|{gB47iW"zUs?sDB }r RPt-nl(eiyPI$ٍQB|F-Vr * pZ[OEUk1mDI>r *L*xy[na5E*DQlw҅ r * @*qmAQ+lu!bffP!ˍv&!}j*ѭ[7im2PFJoD.@OnRf t#J4SSá `B Us\},*2c,b#*DCDERSSBX=G(󔑥<Y)JvL6:@T`lCpZ[?g_u|=b*DF}(!Kϣ>9IKKÉ'6C~,ӪywX:qj=J+ub'AeԆFD 5eЄ:H֋-7l;bfjW!By4+ZZPv:8+ ,@VV0aݻyr 0zh/~///ǽދ#99,o 8ql;,l޼,ˢ8ܷ)8vfO\TH-cI*D5.rBy4Wy6,eOX#0m4Xd 222K/aܸqؽ{7 ;ǧ~{ 7nĬY~A@[~?>} =n߿*xxWxb5J G#<"y 9HJJ/}jjـAwdjwU8vA5ǡ;ˢb! ?~ 񠼼phfݻIDATsv{˗>nh6[qdYp V+ !Ar|6 7w}7>#\.9+W $ e0oIL0ax۟={vByy9XŐ!Cp 7nxNسg:,޽;. O>*/bWF ǡN%*Ȋ*E,q(xǁm ׬Yet:܊*D@x<8B56A3ǩfqѯLjj?XxH|?ft M肜_GmpaMV0 6 1nryڪoȁ3ΈK4.d8-RsmK菰z$r ]pWj2oBB<܊bZ ܛyhC]iLBd(y$,ȁ@޽{S.@U?_k $s_%b6 *D]mDא ŋ>gBB~'U#fUeK"NG"Z+id"y<6 q,dө >:(*DTdP! L@"M /%q8ػw*su7z Q{o,wӡ&+;Xd*viT!:4:ItT!@[zAua` }.yb8Q!ۈ0!" XhvcBtBrՑ@*P&Ѻ%}o.98Nz%673x`*G6An 8XS!-_ P@I+ɁLaaY:,ቲFF;5"Ky(|M:Rj[WGp饗*A I@ۓI rcw)H,Cх 1#@Vt|Á]v):&lKs$y A~`R"{E]}z2eǏbʈQ*,,WOQqZ[@KaZƂ QE*9IHH7ި6 }bkͦ~!ڛ'Vy|1c!hPWb2Bdjw0n" BDM.]ȸV!99Ny}J/! kwW"㴰/QaՊO]tI ŋUFˢc\IO9 2 mKczAtkAEr *cp^}ܭ[u\]p ^h8TP9Q]&s,C KUAkz 7 !=zɓW_:nSS<V')Sf{}=β/N@hHeY|%zR!WBP!FSa`wƎ+^$ydSsv3fCMs(I ˢJ71=V+>($&T! LR]1T6O?19vjs!.!B}'O>cjN|<0tb c5U U>' 16M%^޲쳊 nEbcXTBoHHOOnj3d󩧞u<]X,ĩh馦 ƭnfN830rHYlnnu<]٩QKphDhJ{ȁ舩S"cA!c!peg_"eRqV*DЌtu< X^Ԏ(96@t0fD]pi 1P#ijh"a .mr 1jŒ%Kg"QT0i UR!J.ɱ5/!@b̟??q  BFC>cTR! (BOH ѳgOj B X} 5URBBWHqgO>QQ߾X&QPDA$kz Eה-=*fdɭBxPQmwRWW'%:W:mX*ڗr 1 0$0T>EV >'@b4\}Ւ__[[+5:!LbvΊ1B1N1bI}dF' W'^1Bh(}BL6 ^[ctW_ :!FM Ӳ-_ r ;"VTl~V.$ T@ ˲x%֐*$@]H CV]0UUr bouT!,Il4 YjȒ@|tZ@ Fjj*͛***Fc:ǤP:=RBƔ'E0`<̈^zjz YqqY(oDNStIf*pOHU|EĔdÆ Z8R.[.9~:cx<' puqBHBUS:iz!"==wL$><WVjmflnn 1}@ 0#zMemuu5?ᣏ>;~sAw3jۖ0pqs1'D0 F }lٲp>BAbkxb 8k׮ԩSi&s9" x~\ve8t萯ޣkӉ"\}8z(.]ꛯ>O+WĿoܹVkVYY˗w(,,͛+m֭fjB8U,\ \q碲vrrr{+;#9s-))ܹspB`…:t( ;qnV$&&v۷o62 C^رgg|ǚcǎ+W^y1c_uc{^իnOLL?;aa9~aov<3 ÿ曝λk{pX]z)a~ӦMc#Gsss5ks.]pիW󙙙3 ß:uk׮w>}˖- y,_***B\\,X;f0|l߾'NжOa^vv6eYѣSq%Gc'NDAA}9ޖj#;;@xqW4M k!صoEvv6ƍ;0 f͚r|7wYYYh cuu5|A,_\/Λ7X,x%pBycǎa#-- AAAjXv-ܦ~{ tn6طoݻxT*A׻wA&Nsιvtt,:7jDFFyKz=> ш?d2󨫫b 0^YN]M>ݥmtV ն>l4g-++ LdddlW}}=JJJ`2ǯjm6!008}4ϟ_KczMYfիW777 IDQQǏNl?.AfQZZ*VX!&L ^ÇB$q-y$I/jlX?񤰰PH$-}rjaS ???,NHH@YYhٳv~M<}NROHNN8ƞNs^RT#^}ֹߗ?x^1ts4h4x{SW^ kۓ?qFFl6V+={6ژې 6@Vk>,<<?N=^`0bn# s8|$Gg3,, ӦMjuŋ>_b2fSWzާkapm{2Tj$&&:v,]T6 eeenF̙3gط{n\0ІIgc~JJ|ɭׯh4S߿;w%=t={/|6}^^$ITTT&u E@@˽ 9***ݻw]~6m$$Iׯ_e$FOP*33wAnn.p5TWWl6cn:v,Zz?~č7؈+W`֭ia0nĉj6 /^GGww7  dʕ+QYY9SWP rjuD}7b̙hii ǏyQ;v ]]] qGGGh4"11AAA˗ʳo4 &G:Nh4,߿?ee˖3fZ-BCCŪUă޼y&MbݢloAAPTn9" ~~~"22Rٳǫkrg DD}~y')!""E DDa" ""RBDD0@H)!""E DDa" ""RBDD0@H)!""E DDa" ""RBDD0@H)!""E DDa" ""RBDD0@H)!""E DDa"!UQwIENDB`pytest-mpl-0.9/LICENSE0000644000077000000240000000267713133617760014446 0ustar tomstaff00000000000000Copyright (c) 2015, Thomas P. Robitaille All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The code in this package includes code adapted from WCSAxes, which is released under a 3-clause BSD license and can be found here: https://github.com/astrofrog/wcsaxes pytest-mpl-0.9/MANIFEST.in0000644000077000000240000000021113133617760015155 0ustar tomstaff00000000000000include LICENSE include README.rst include CHANGES.md include tox.ini recursive-include tests *.py *.png recursive-include images *.png pytest-mpl-0.9/PKG-INFO0000644000077000000240000002635613167753712014543 0ustar tomstaff00000000000000Metadata-Version: 1.1 Name: pytest-mpl Version: 0.9 Summary: pytest plugin to help with testing figures output from Matplotlib Home-page: https://github.com/matplotlib/pytest-mpl Author: Thomas Robitaille Author-email: thomas.robitaille@gmail.com License: BSD Description: |Travis Build Status| |AppVeyor Build status| |Coveralls coverage| About ----- This is a plugin to facilitate image comparison for `Matplotlib `__ figures in pytest. Matplotlib includes a number of test utilities and decorators, but these are geared towards the `nose `__ testing framework. Pytest-mpl makes it easy to compare figures produced by tests to reference images when using `pytest `__. For each figure to test, the reference image is subtracted from the generated image, and the RMS of the residual is compared to a user-specified tolerance. If the residual is too large, the test will fail (this is implemented using helper functions from ``matplotlib.testing``). For more information on how to write tests to do this, see the **Using** section below. Installing ---------- This plugin is compatible with Python 2.6, 2.7, and 3.3 and later, and requires `pytest `__, `matplotlib `__ and `nose `__ to be installed (nose is required by Matplotlib). To install, you can do: :: pip install pytest-mpl You can check that the plugin is registered with pytest by doing: :: py.test --version which will show a list of plugins: :: This is pytest version 2.7.1, imported from ... setuptools registered plugins: pytest-mpl-0.1 at ... Using ----- To use, you simply need to mark the function where you want to compare images using ``@pytest.mark.mpl_image_compare``, and make sure that the function returns a Matplotlib figure (or any figure object that has a ``savefig`` method): .. code:: python import pytest import matplotlib.pyplot as plt @pytest.mark.mpl_image_compare def test_succeeds(): fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot([1,2,3]) return fig To generate the baseline images, run the tests with the ``--mpl-generate-path`` option with the name of the directory where the generated images should be placed: :: py.test --mpl-generate-path=baseline If the directory does not exist, it will be created. The directory will be interpreted as being relative to where you are running ``py.test``. Once you are happy with the generated images, you should move them to a sub-directory called ``baseline`` relative to the test files (this name is configurable, see below). You can also generate the baseline images directly in the right directory. You can then run the tests simply with: :: py.test --mpl and the tests will pass if the images are the same. If you omit the ``--mpl`` option, the tests will run but will only check that the code runs without checking the output images. Options ------- Tolerance ^^^^^^^^^ The RMS tolerance for the image comparison (which defaults to 2) can be specified in the ``mpl_image_compare`` decorator with the ``tolerance`` argument: .. code:: python @pytest.mark.mpl_image_compare(tolerance=20) def test_image(): ... Savefig options ^^^^^^^^^^^^^^^ You can pass keyword arguments to ``savefig`` by using ``savefig_kwargs`` in the ``mpl_image_compare`` decorator: .. code:: python @pytest.mark.mpl_image_compare(savefig_kwargs={'dpi':300}) def test_image(): ... Baseline images ^^^^^^^^^^^^^^^ The baseline directory (which defaults to ``baseline`` ) and the filename of the plot (which defaults to the name of the test with a ``.png`` suffix) can be customized with the ``baseline_dir`` and ``filename`` arguments in the ``mpl_image_compare`` decorator: .. code:: python @pytest.mark.mpl_image_compare(baseline_dir='baseline_images', filename='other_name.png') def test_image(): ... The baseline directory in the decorator above will be interpreted as being relative to the test file. Note that the baseline directory can also be a URL (which should start with ``http://`` or ``https://`` and end in a slash). If you want to specify mirrors, set ``baseline_dir`` to a comma-separated list of URLs (real commas in the URL should be encoded as ``%2C``). Finally, you can also set a custom baseline directory globally when running tests by running ``py.test`` with: :: py.test --mpl --mpl-baseline-path=baseline_images This directory will be interpreted as being relative to where the tests are run. In addition, if both this option and the ``baseline_dir`` option in the ``mpl_image_compare`` decorator are used, the one in the decorator takes precedence. Base style ^^^^^^^^^^ By default, tests will be run using the Matplotlib 'classic' style (ignoring any locally defined RC parameters). This can be overriden by using the ``style`` argument: .. code:: python @pytest.mark.mpl_image_compare(style='fivethirtyeight') def test_image(): ... Removing text ^^^^^^^^^^^^^ If you are running a test for which you are not interested in comparing the text labels, you can use the ``remove_text`` argument to the decorator: .. code:: python @pytest.mark.mpl_image_compare(remove_text=True) def test_image(): ... This will make the test insensitive to changes in e.g. the freetype library. Test failure example -------------------- If the images produced by the tests are correct, then the test will pass, but if they are not, the test will fail with a message similar to the following: :: E Exception: Error: Image files did not match. E RMS Value: 142.2287807767823 E Expected: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/baseline-coords_overlay_auto_coord_meta.png E Actual: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/coords_overlay_auto_coord_meta.png E Difference: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/coords_overlay_auto_coord_meta-failed-diff.png E Tolerance: E 10 The image paths included in the exception are then available for inspection: +----------------+----------------+-------------+ | Expected | Actual | Difference | +================+================+=============+ | |expected| | |actual| | |diff| | +----------------+----------------+-------------+ In this case, the differences are very clear, while in some cases it may be necessary to use the difference image, or blink the expected and actual images, in order to see what changed. The default tolerance is 2, which is very strict. In some cases, you may want to relax this to account for differences in fonts across different systems. By default, the expected, actual and difference files are written to a temporary directory with a non-deterministic path. If you want to instead write them to a specific directory, you can use:: py.test --mpl --mpl-results-path=results The ``results`` directory will then contain one sub-directory per test, and each sub-directory will contain the three files mentioned above. If you are using a continuous integration service, you can then use the option to upload artifacts to upload these results to somewhere where you can view them. For more information, see: * `Uploading artifacts on Travis-CI `_ * `Build Artifacts (CircleCI) `_ * `Packaging Artifacts (AppVeyor) `_ Running the tests for pytest-mpl -------------------------------- If you are contributing some changes and want to run the tests, first install the latest version of the plugin then do: :: cd tests py.test --mpl The reason for having to install the plugin first is to ensure that the plugin is correctly loaded as part of the test suite. .. |Travis Build Status| image:: https://travis-ci.org/matplotlib/pytest-mpl.svg?branch=master :target: https://travis-ci.org/matplotlib/pytest-mpl .. |AppVeyor Build status| image:: https://ci.appveyor.com/api/projects/status/mf7hs44scg5mvcyo?svg=true :target: https://ci.appveyor.com/project/astrofrog/pytest-mpl .. |Coveralls coverage| image:: https://coveralls.io/repos/matplotlib/pytest-mpl/badge.svg :target: https://coveralls.io/r/matplotlib/pytest-mpl .. |expected| image:: images/baseline-coords_overlay_auto_coord_meta.png .. |actual| image:: images/coords_overlay_auto_coord_meta.png .. |diff| image:: images/coords_overlay_auto_coord_meta-failed-diff.png Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Framework :: Pytest Classifier: Intended Audience :: Developers Classifier: Topic :: Software Development :: Testing Classifier: Topic :: Scientific/Engineering :: Visualization Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Operating System :: OS Independent Classifier: License :: OSI Approved :: BSD License pytest-mpl-0.9/pytest_mpl/0000755000077000000240000000000013167753712015632 5ustar tomstaff00000000000000pytest-mpl-0.9/pytest_mpl/__init__.py0000644000077000000240000000002413167753645017744 0ustar tomstaff00000000000000__version__ = '0.9' pytest-mpl-0.9/pytest_mpl/classic.mplstyle0000644000077000000240000005356113133617760021053 0ustar tomstaff00000000000000### Classic matplotlib plotting style as of v1.5 ### LINES # See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more # information on line properties. lines.linewidth : 1.0 # line width in points lines.linestyle : - # solid line lines.color : b # has no affect on plot(); see axes.prop_cycle lines.marker : None # the default marker lines.markeredgewidth : 0.5 # the line width around the marker symbol lines.markersize : 6 # markersize, in points lines.dash_joinstyle : round # miter|round|bevel lines.dash_capstyle : butt # butt|round|projecting lines.solid_joinstyle : round # miter|round|bevel lines.solid_capstyle : projecting # butt|round|projecting lines.antialiased : True # render lines in antialiased (no jaggies) ### PATCHES # Patches are graphical objects that fill 2D space, like polygons or # circles. See # http://matplotlib.org/api/artist_api.html#module-matplotlib.patches # information on patch properties patch.linewidth : 1.0 # edge width in points patch.facecolor : b patch.edgecolor : k patch.antialiased : True # render patches in antialiased (no jaggies) ### FONT # # font properties used by text.Text. See # http://matplotlib.org/api/font_manager_api.html for more # information on font properties. The 6 font properties used for font # matching are given below with their default values. # # The font.family property has five values: 'serif' (e.g., Times), # 'sans-serif' (e.g., Helvetica), 'cursive' (e.g., Zapf-Chancery), # 'fantasy' (e.g., Western), and 'monospace' (e.g., Courier). Each of # these font families has a default list of font names in decreasing # order of priority associated with them. When text.usetex is False, # font.family may also be one or more concrete font names. # # The font.style property has three values: normal (or roman), italic # or oblique. The oblique style will be used for italic, if it is not # present. # # The font.variant property has two values: normal or small-caps. For # TrueType fonts, which are scalable fonts, small-caps is equivalent # to using a font size of 'smaller', or about 83% of the current font # size. # # The font.weight property has effectively 13 values: normal, bold, # bolder, lighter, 100, 200, 300, ..., 900. Normal is the same as # 400, and bold is 700. bolder and lighter are relative values with # respect to the current weight. # # The font.stretch property has 11 values: ultra-condensed, # extra-condensed, condensed, semi-condensed, normal, semi-expanded, # expanded, extra-expanded, ultra-expanded, wider, and narrower. This # property is not currently implemented. # # The font.size property is the default font size for text, given in pts. # 12pt is the standard value. # font.family : sans-serif font.style : normal font.variant : normal font.weight : normal font.stretch : normal # note that font.size controls default text sizes. To configure # special text sizes tick labels, axes, labels, title, etc, see the rc # settings for axes and ticks. Special text sizes can be defined # relative to font.size, using the following values: xx-small, x-small, # small, medium, large, x-large, xx-large, larger, or smaller font.size : 12.0 font.serif : DejaVu Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif font.sans-serif: DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, fantasy font.monospace : DejaVu Sans Mono, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace ### TEXT # text properties used by text.Text. See # http://matplotlib.org/api/artist_api.html#module-matplotlib.text for more # information on text properties text.color : k ### LaTeX customizations. See http://www.scipy.org/Wiki/Cookbook/Matplotlib/UsingTex text.usetex : False # use latex for all text handling. The following fonts # are supported through the usual rc parameter settings: # new century schoolbook, bookman, times, palatino, # zapf chancery, charter, serif, sans-serif, helvetica, # avant garde, courier, monospace, computer modern roman, # computer modern sans serif, computer modern typewriter # If another font is desired which can loaded using the # LaTeX \usepackage command, please inquire at the # matplotlib mailing list text.latex.unicode : False # use "ucs" and "inputenc" LaTeX packages for handling # unicode strings. text.latex.preamble : # IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES # AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP # IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO. # preamble is a comma separated list of LaTeX statements # that are included in the LaTeX document preamble. # An example: # text.latex.preamble : \usepackage{bm},\usepackage{euler} # The following packages are always loaded with usetex, so # beware of package collisions: color, geometry, graphicx, # type1cm, textcomp. Adobe Postscript (PSSNFS) font packages # may also be loaded, depending on your font settings text.latex.preview : False text.dvipnghack : None # some versions of dvipng don't handle alpha # channel properly. Use True to correct # and flush ~/.matplotlib/tex.cache # before testing and False to force # correction off. None will try and # guess based on your dvipng version text.hinting : auto # May be one of the following: # 'none': Perform no hinting # 'auto': Use freetype's autohinter # 'native': Use the hinting information in the # font file, if available, and if your # freetype library supports it # 'either': Use the native hinting information, # or the autohinter if none is available. # For backward compatibility, this value may also be # True === 'auto' or False === 'none'. text.hinting_factor : 8 # Specifies the amount of softness for hinting in the # horizontal direction. A value of 1 will hint to full # pixels. A value of 2 will hint to half pixels etc. text.antialiased : True # If True (default), the text will be antialiased. # This only affects the Agg backend. # The following settings allow you to select the fonts in math mode. # They map from a TeX font name to a fontconfig font pattern. # These settings are only used if mathtext.fontset is 'custom'. # Note that this "custom" mode is unsupported and may go away in the # future. mathtext.cal : cursive mathtext.rm : serif mathtext.tt : monospace mathtext.it : serif:italic mathtext.bf : serif:bold mathtext.sf : sans\-serif mathtext.fontset : cm # Should be 'cm' (Computer Modern), 'stix', # 'stixsans' or 'custom' mathtext.fallback_to_cm : True # When True, use symbols from the Computer Modern # fonts when a symbol can not be found in one of # the custom math fonts. mathtext.default : it # The default font to use for math. # Can be any of the LaTeX font names, including # the special name "regular" for the same font # used in regular text. ### AXES # default face and edge color, default tick sizes, # default fontsizes for ticklabels, and so on. See # http://matplotlib.org/api/axes_api.html#module-matplotlib.axes axes.hold : True # whether to clear the axes by default on axes.facecolor : w # axes background color axes.edgecolor : k # axes edge color axes.linewidth : 1.0 # edge linewidth axes.grid : False # display grid or not axes.grid.which : major axes.titlesize : large # fontsize of the axes title axes.titleweight : normal # font weight for axes title axes.labelsize : medium # fontsize of the x any y labels axes.labelweight : normal # weight of the x and y labels axes.labelcolor : k axes.axisbelow : False # whether axis gridlines and ticks are below # the axes elements (lines, text, etc) axes.formatter.limits : -7, 7 # use scientific notation if log10 # of the axis range is smaller than the # first or larger than the second axes.formatter.use_locale : False # When True, format tick labels # according to the user's locale. # For example, use ',' as a decimal # separator in the fr_FR locale. axes.formatter.use_mathtext : False # When True, use mathtext for scientific # notation. axes.formatter.useoffset : True # If True, the tick label formatter # will default to labeling ticks relative # to an offset when the data range is very # small compared to the minimum absolute # value of the data. axes.unicode_minus : True # use unicode for the minus symbol # rather than hyphen. See # http://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes axes.xmargin : 0 # x margin. See `axes.Axes.margins` axes.ymargin : 0 # y margin See `axes.Axes.margins` polaraxes.grid : True # display grid on polar axes axes3d.grid : True # display grid on 3d axes ### TICKS # see http://matplotlib.org/api/axis_api.html#matplotlib.axis.Tick xtick.major.size : 4 # major tick size in points xtick.minor.size : 2 # minor tick size in points xtick.major.width : 0.5 # major tick width in points xtick.minor.width : 0.5 # minor tick width in points xtick.major.pad : 4 # distance to major tick label in points xtick.minor.pad : 4 # distance to the minor tick label in points xtick.color : k # color of the tick labels xtick.labelsize : medium # fontsize of the tick labels xtick.direction : in # direction: in, out, or inout ytick.major.size : 4 # major tick size in points ytick.minor.size : 2 # minor tick size in points ytick.major.width : 0.5 # major tick width in points ytick.minor.width : 0.5 # minor tick width in points ytick.major.pad : 4 # distance to major tick label in points ytick.minor.pad : 4 # distance to the minor tick label in points ytick.color : k # color of the tick labels ytick.labelsize : medium # fontsize of the tick labels ytick.direction : in # direction: in, out, or inout ### GRIDS grid.color : k # grid color grid.linestyle : : # dotted grid.linewidth : 0.5 # in points grid.alpha : 1.0 # transparency, between 0.0 and 1.0 ### Legend legend.fancybox : False # if True, use a rounded box for the # legend, else a rectangle legend.loc : upper right legend.numpoints : 2 # the number of points in the legend line legend.fontsize : large legend.borderpad : 0.4 # border whitespace in fontsize units legend.markerscale : 1.0 # the relative size of legend markers vs. original # the following dimensions are in axes coords legend.labelspacing : 0.5 # the vertical space between the legend entries in fraction of fontsize legend.handlelength : 2. # the length of the legend lines in fraction of fontsize legend.handleheight : 0.7 # the height of the legend handle in fraction of fontsize legend.handletextpad : 0.8 # the space between the legend line and legend text in fraction of fontsize legend.borderaxespad : 0.5 # the border between the axes and legend edge in fraction of fontsize legend.columnspacing : 2. # the border between the axes and legend edge in fraction of fontsize legend.shadow : False legend.frameon : True # whether or not to draw a frame around legend legend.framealpha : 1.0 # opacity of of legend frame legend.scatterpoints : 3 # number of scatter points ### FIGURE # See http://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure figure.figsize : 8, 6 # figure size in inches figure.dpi : 80 # figure dots per inch figure.facecolor : 0.75 # figure facecolor; 0.75 is scalar gray figure.edgecolor : w # figure edgecolor figure.autolayout : False # When True, automatically adjust subplot # parameters to make the plot fit the figure figure.frameon : True # The figure subplot parameters. All dimensions are a fraction of the # figure width or height figure.subplot.left : 0.125 # the left side of the subplots of the figure figure.subplot.right : 0.9 # the right side of the subplots of the figure figure.subplot.bottom : 0.1 # the bottom of the subplots of the figure figure.subplot.top : 0.9 # the top of the subplots of the figure figure.subplot.wspace : 0.2 # the amount of width reserved for blank space between subplots figure.subplot.hspace : 0.2 # the amount of height reserved for white space between subplots ### IMAGES image.aspect : equal # equal | auto | a number image.interpolation : bilinear # see help(imshow) for options image.cmap : jet # gray | jet etc... image.lut : 256 # the size of the colormap lookup table image.origin : upper # lower | upper image.resample : False ### CONTOUR PLOTS contour.negative_linestyle : dashed # dashed | solid ### Agg rendering ### Warning: experimental, 2008/10/10 agg.path.chunksize : 0 # 0 to disable; values in the range # 10000 to 100000 can improve speed slightly # and prevent an Agg rendering failure # when plotting very large data sets, # especially if they are very gappy. # It may cause minor artifacts, though. # A value of 20000 is probably a good # starting point. ### SAVING FIGURES path.simplify : True # When True, simplify paths by removing "invisible" # points to reduce file size and increase rendering # speed path.simplify_threshold : 0.1111111111111111 # The threshold of similarity below which # vertices will be removed in the simplification # process path.snap : True # When True, rectilinear axis-aligned paths will be snapped to # the nearest pixel when certain criteria are met. When False, # paths will never be snapped. path.sketch : None # May be none, or a 3-tuple of the form (scale, length, # randomness). # *scale* is the amplitude of the wiggle # perpendicular to the line (in pixels). *length* # is the length of the wiggle along the line (in # pixels). *randomness* is the factor by which # the length is randomly scaled. # the default savefig params can be different from the display params # e.g., you may want a higher resolution, or to make the figure # background white savefig.dpi : 100 # figure dots per inch savefig.facecolor : w # figure facecolor when saving savefig.edgecolor : w # figure edgecolor when saving savefig.format : png # png, ps, pdf, svg savefig.bbox : standard # 'tight' or 'standard'. # 'tight' is incompatible with pipe-based animation # backends but will workd with temporary file based ones: # e.g. setting animation.writer to ffmpeg will not work, # use ffmpeg_file instead savefig.pad_inches : 0.1 # Padding to be used when bbox is set to 'tight' savefig.jpeg_quality: 95 # when a jpeg is saved, the default quality parameter. savefig.transparent : False # setting that controls whether figures are saved with a # transparent background by default savefig.frameon : True savefig.orientation : portrait nbagg.transparent: True # ps backend params ps.papersize : letter # auto, letter, legal, ledger, A0-A10, B0-B10 ps.useafm : False # use of afm fonts, results in small files ps.usedistiller : False # can be: None, ghostscript or xpdf # Experimental: may produce smaller files. # xpdf intended for production of publication quality files, # but requires ghostscript, xpdf and ps2eps ps.distiller.res : 6000 # dpi ps.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) # pdf backend params pdf.compression : 6 # integer from 0 to 9 # 0 disables compression (good for debugging) pdf.fonttype : 3 # Output Type 3 (Type3) or Type 42 (TrueType) pdf.inheritcolor : False pdf.use14corefonts : False # pgf backend params pgf.debug : False pgf.texsystem : xelatex pgf.rcfonts : True pgf.preamble : # svg backend params svg.image_inline : True # write raster image data directly into the svg file svg.fonttype : path # How to handle SVG fonts: # 'none': Assume fonts are installed on the machine where the SVG will be viewed. # 'path': Embed characters as paths -- supported by most SVG renderers # 'svgfont': Embed characters as SVG fonts -- supported only by Chrome, # Opera and Safari # Set the verbose flags. This controls how much information # matplotlib gives you at runtime and where it goes. The verbosity # levels are: silent, helpful, debug, debug-annoying. Any level is # inclusive of all the levels below it. If your setting is "debug", # you'll get all the debug and helpful messages. When submitting # problems to the mailing-list, please set verbose to "helpful" or "debug" # and paste the output into your report. # # The "fileo" gives the destination for any calls to verbose.report. # These objects can a filename, or a filehandle like sys.stdout. # # You can override the rc default verbosity from the command line by # giving the flags --verbose-LEVEL where LEVEL is one of the legal # levels, e.g., --verbose-helpful. # # You can access the verbose instance in your code # from matplotlib import verbose. verbose.level : silent # one of silent, helpful, debug, debug-annoying verbose.fileo : sys.stdout # a log filename, sys.stdout or sys.stderr # Event keys to interact with figures/plots via keyboard. # Customize these settings according to your needs. # Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') keymap.fullscreen : f, ctrl+f # toggling keymap.home : h, r, home # home or reset mnemonic keymap.back : left, c, backspace # forward / backward keys to enable keymap.forward : right, v # left handed quick navigation keymap.pan : p # pan mnemonic keymap.zoom : o # zoom mnemonic keymap.save : s, ctrl+s # saving current figure keymap.quit : ctrl+w, cmd+w # close the current figure keymap.grid : g # switching on/off a grid in current axes keymap.yscale : l # toggle scaling of y-axes ('log'/'linear') keymap.xscale : k, L # toggle scaling of x-axes ('log'/'linear') keymap.all_axes : a # enable all axes ###ANIMATION settings animation.writer : ffmpeg # MovieWriter 'backend' to use animation.codec : mpeg4 # Codec to use for writing movie animation.bitrate: -1 # Controls size/quality tradeoff for movie. # -1 implies let utility auto-determine animation.frame_format: png # Controls frame format used by temp files animation.ffmpeg_path: ffmpeg # Path to ffmpeg binary. Without full path # $PATH is searched animation.ffmpeg_args: # Additional arguments to pass to ffmpeg animation.avconv_path: avconv # Path to avconv binary. Without full path # $PATH is searched animation.avconv_args: # Additional arguments to pass to avconv animation.mencoder_path: mencoder # Path to mencoder binary. Without full path # $PATH is searched animation.mencoder_args: # Additional arguments to pass to mencoder animation.convert_path: convert # Path to ImageMagick's convert binary. # On Windows use the full path since convert # is also the name of a system tool. animation.convert_args: pytest-mpl-0.9/pytest_mpl/plugin.py0000644000077000000240000003117013167701513017474 0ustar tomstaff00000000000000# Copyright (c) 2015, Thomas P. Robitaille # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # The code below includes code adapted from WCSAxes, which is released # under a 3-clause BSD license and can be found here: # # https://github.com/astrofrog/wcsaxes from functools import wraps import contextlib import os import sys import shutil import inspect import tempfile import warnings from distutils.version import LooseVersion import pytest if sys.version_info[0] == 2: from urllib import urlopen string_types = basestring # noqa else: from urllib.request import urlopen string_types = str def _download_file(baseline, filename): # Note that baseline can be a comma-separated list of URLs that we can # then treat as mirrors for base_url in baseline.split(','): try: u = urlopen(base_url + filename) content = u.read() except Exception as exc: warnings.warn('Downloading {0} failed'.format(base_url + filename)) else: break else: raise Exception("Could not download baseline image from any of the " "available URLs") result_dir = tempfile.mkdtemp() filename = os.path.join(result_dir, 'downloaded') with open(filename, 'wb') as tmpfile: tmpfile.write(content) return filename def pytest_report_header(config, startdir): import matplotlib import matplotlib.ft2font return ["Matplotlib: {0}".format(matplotlib.__version__), "Freetype: {0}".format(matplotlib.ft2font.__freetype_version__)] def pytest_addoption(parser): group = parser.getgroup("matplotlib image comparison") group.addoption('--mpl', action='store_true', help="Enable comparison of matplotlib figures to reference files") group.addoption('--mpl-generate-path', help="directory to generate reference images in, relative " "to location where py.test is run", action='store') group.addoption('--mpl-baseline-path', help="directory containing baseline images, relative to " "location where py.test is run. This can also be a URL or a " "set of comma-separated URLs (in case mirrors are " "specified)", action='store') results_path_help = "directory for test results, relative to location where py.test is run" group.addoption('--mpl-results-path', help=results_path_help, action='store') parser.addini('mpl-results-path', help=results_path_help) def pytest_configure(config): if config.getoption("--mpl") or config.getoption("--mpl-generate-path") is not None: baseline_dir = config.getoption("--mpl-baseline-path") generate_dir = config.getoption("--mpl-generate-path") results_dir = config.getoption("--mpl-results-path") or config.getini("mpl-results-path") # Note that results_dir is an empty string if not specified if not results_dir: results_dir = None if generate_dir is not None: if baseline_dir is not None: warnings.warn("Ignoring --mpl-baseline-path since --mpl-generate-path is set") if results_dir is not None and generate_dir is not None: warnings.warn("Ignoring --mpl-result-path since --mpl-generate-path is set") if baseline_dir is not None: baseline_dir = os.path.abspath(baseline_dir) if generate_dir is not None: baseline_dir = os.path.abspath(generate_dir) if results_dir is not None: results_dir = os.path.abspath(results_dir) config.pluginmanager.register(ImageComparison(config, baseline_dir=baseline_dir, generate_dir=generate_dir, results_dir=results_dir)) else: config.pluginmanager.register(FigureCloser(config)) @contextlib.contextmanager def switch_backend(backend): import matplotlib import matplotlib.pyplot as plt prev_backend = matplotlib.get_backend().lower() if prev_backend != backend.lower(): plt.switch_backend(backend) yield plt.switch_backend(prev_backend) else: yield class ImageComparison(object): def __init__(self, config, baseline_dir=None, generate_dir=None, results_dir=None): self.config = config self.baseline_dir = baseline_dir self.generate_dir = generate_dir self.results_dir = results_dir if self.results_dir and not os.path.exists(self.results_dir): os.mkdir(self.results_dir) def pytest_runtest_setup(self, item): compare = item.keywords.get('mpl_image_compare') if compare is None: return import matplotlib import matplotlib.pyplot as plt from matplotlib.figure import Figure from matplotlib.testing.compare import compare_images from matplotlib.testing.decorators import ImageComparisonTest as MplImageComparisonTest try: from matplotlib.testing.decorators import remove_ticks_and_titles except ImportError: remove_ticks_and_titles = MplImageComparisonTest.remove_text MPL_LT_15 = LooseVersion(matplotlib.__version__) < LooseVersion('1.5') tolerance = compare.kwargs.get('tolerance', 2) savefig_kwargs = compare.kwargs.get('savefig_kwargs', {}) style = compare.kwargs.get('style', 'classic') remove_text = compare.kwargs.get('remove_text', False) backend = compare.kwargs.get('backend', 'agg') if MPL_LT_15 and style == 'classic': style = os.path.join(os.path.dirname(__file__), 'classic.mplstyle') original = item.function @wraps(item.function) def item_function_wrapper(*args, **kwargs): baseline_dir = compare.kwargs.get('baseline_dir', None) if baseline_dir is None: if self.baseline_dir is None: baseline_dir = os.path.join(os.path.dirname(item.fspath.strpath), 'baseline') else: baseline_dir = self.baseline_dir baseline_remote = False else: baseline_remote = baseline_dir.startswith(('http://', 'https://')) if not baseline_remote: baseline_dir = os.path.join(os.path.dirname(item.fspath.strpath), baseline_dir) with plt.style.context(style), switch_backend(backend): # Run test and get figure object if inspect.ismethod(original): # method # In some cases, for example if setup_method is used, # original appears to belong to an instance of the test # class that is not the same as args[0], and args[0] is the # one that has the correct attributes set up from setup_method # so we ignore original.__self__ and use args[0] instead. fig = original.__func__(*args, **kwargs) else: # function fig = original(*args, **kwargs) if remove_text: remove_ticks_and_titles(fig) # Find test name to use as plot name filename = compare.kwargs.get('filename', None) if filename is None: filename = item.name + '.png' filename = filename.replace('[', '_').replace(']', '_') filename = filename.replace('/', '_') filename = filename.replace('_.png', '.png') # What we do now depends on whether we are generating the # reference images or simply running the test. if self.generate_dir is None: # Save the figure result_dir = tempfile.mkdtemp(dir=self.results_dir) test_image = os.path.abspath(os.path.join(result_dir, filename)) fig.savefig(test_image, **savefig_kwargs) # We only need to close actual Matplotlib figure objects. If # we are dealing with a figure-like object that provides # savefig but is not a real Matplotlib object, we shouldn't # try closing it here. if isinstance(fig, Figure): plt.close(fig) # Find path to baseline image if baseline_remote: baseline_image_ref = _download_file(baseline_dir, filename) else: baseline_image_ref = os.path.abspath(os.path.join(os.path.dirname(item.fspath.strpath), baseline_dir, filename)) if not os.path.exists(baseline_image_ref): pytest.fail("Image file not found for comparison test. " "(This is expected for new tests.)\nGenerated Image: " "\n\t{test}".format(test=test_image), pytrace=False) # distutils may put the baseline images in non-accessible places, # copy to our tmpdir to be sure to keep them in case of failure baseline_image = os.path.abspath(os.path.join(result_dir, 'baseline-' + filename)) shutil.copyfile(baseline_image_ref, baseline_image) msg = compare_images(baseline_image, test_image, tol=tolerance) if msg is None: shutil.rmtree(result_dir) else: pytest.fail(msg, pytrace=False) else: if not os.path.exists(self.generate_dir): os.makedirs(self.generate_dir) fig.savefig(os.path.abspath(os.path.join(self.generate_dir, filename)), **savefig_kwargs) plt.close(fig) pytest.skip("Skipping test, since generating data") if item.cls is not None: setattr(item.cls, item.function.__name__, item_function_wrapper) else: item.obj = item_function_wrapper class FigureCloser(object): """ This is used in place of ImageComparison when the --mpl option is not used, to make sure that we still close figures returned by tests. """ def __init__(self, config): self.config = config def pytest_runtest_setup(self, item): compare = item.keywords.get('mpl_image_compare') if compare is None: return import matplotlib.pyplot as plt from matplotlib.figure import Figure original = item.function @wraps(item.function) def item_function_wrapper(*args, **kwargs): if inspect.ismethod(original): # method fig = original.__func__(*args, **kwargs) else: # function fig = original(*args, **kwargs) # We only need to close actual Matplotlib figure objects. If # we are dealing with a figure-like object that provides # savefig but is not a real Matplotlib object, we shouldn't # try closing it here. if isinstance(fig, Figure): plt.close(fig) if item.cls is not None: setattr(item.cls, item.function.__name__, item_function_wrapper) else: item.obj = item_function_wrapper pytest-mpl-0.9/pytest_mpl.egg-info/0000755000077000000240000000000013167753712017324 5ustar tomstaff00000000000000pytest-mpl-0.9/pytest_mpl.egg-info/dependency_links.txt0000644000077000000240000000000113167753712023372 0ustar tomstaff00000000000000 pytest-mpl-0.9/pytest_mpl.egg-info/entry_points.txt0000644000077000000240000000005313167753712022620 0ustar tomstaff00000000000000[pytest11] pytest_mpl = pytest_mpl.plugin pytest-mpl-0.9/pytest_mpl.egg-info/PKG-INFO0000644000077000000240000002635613167753712020435 0ustar tomstaff00000000000000Metadata-Version: 1.1 Name: pytest-mpl Version: 0.9 Summary: pytest plugin to help with testing figures output from Matplotlib Home-page: https://github.com/matplotlib/pytest-mpl Author: Thomas Robitaille Author-email: thomas.robitaille@gmail.com License: BSD Description: |Travis Build Status| |AppVeyor Build status| |Coveralls coverage| About ----- This is a plugin to facilitate image comparison for `Matplotlib `__ figures in pytest. Matplotlib includes a number of test utilities and decorators, but these are geared towards the `nose `__ testing framework. Pytest-mpl makes it easy to compare figures produced by tests to reference images when using `pytest `__. For each figure to test, the reference image is subtracted from the generated image, and the RMS of the residual is compared to a user-specified tolerance. If the residual is too large, the test will fail (this is implemented using helper functions from ``matplotlib.testing``). For more information on how to write tests to do this, see the **Using** section below. Installing ---------- This plugin is compatible with Python 2.6, 2.7, and 3.3 and later, and requires `pytest `__, `matplotlib `__ and `nose `__ to be installed (nose is required by Matplotlib). To install, you can do: :: pip install pytest-mpl You can check that the plugin is registered with pytest by doing: :: py.test --version which will show a list of plugins: :: This is pytest version 2.7.1, imported from ... setuptools registered plugins: pytest-mpl-0.1 at ... Using ----- To use, you simply need to mark the function where you want to compare images using ``@pytest.mark.mpl_image_compare``, and make sure that the function returns a Matplotlib figure (or any figure object that has a ``savefig`` method): .. code:: python import pytest import matplotlib.pyplot as plt @pytest.mark.mpl_image_compare def test_succeeds(): fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot([1,2,3]) return fig To generate the baseline images, run the tests with the ``--mpl-generate-path`` option with the name of the directory where the generated images should be placed: :: py.test --mpl-generate-path=baseline If the directory does not exist, it will be created. The directory will be interpreted as being relative to where you are running ``py.test``. Once you are happy with the generated images, you should move them to a sub-directory called ``baseline`` relative to the test files (this name is configurable, see below). You can also generate the baseline images directly in the right directory. You can then run the tests simply with: :: py.test --mpl and the tests will pass if the images are the same. If you omit the ``--mpl`` option, the tests will run but will only check that the code runs without checking the output images. Options ------- Tolerance ^^^^^^^^^ The RMS tolerance for the image comparison (which defaults to 2) can be specified in the ``mpl_image_compare`` decorator with the ``tolerance`` argument: .. code:: python @pytest.mark.mpl_image_compare(tolerance=20) def test_image(): ... Savefig options ^^^^^^^^^^^^^^^ You can pass keyword arguments to ``savefig`` by using ``savefig_kwargs`` in the ``mpl_image_compare`` decorator: .. code:: python @pytest.mark.mpl_image_compare(savefig_kwargs={'dpi':300}) def test_image(): ... Baseline images ^^^^^^^^^^^^^^^ The baseline directory (which defaults to ``baseline`` ) and the filename of the plot (which defaults to the name of the test with a ``.png`` suffix) can be customized with the ``baseline_dir`` and ``filename`` arguments in the ``mpl_image_compare`` decorator: .. code:: python @pytest.mark.mpl_image_compare(baseline_dir='baseline_images', filename='other_name.png') def test_image(): ... The baseline directory in the decorator above will be interpreted as being relative to the test file. Note that the baseline directory can also be a URL (which should start with ``http://`` or ``https://`` and end in a slash). If you want to specify mirrors, set ``baseline_dir`` to a comma-separated list of URLs (real commas in the URL should be encoded as ``%2C``). Finally, you can also set a custom baseline directory globally when running tests by running ``py.test`` with: :: py.test --mpl --mpl-baseline-path=baseline_images This directory will be interpreted as being relative to where the tests are run. In addition, if both this option and the ``baseline_dir`` option in the ``mpl_image_compare`` decorator are used, the one in the decorator takes precedence. Base style ^^^^^^^^^^ By default, tests will be run using the Matplotlib 'classic' style (ignoring any locally defined RC parameters). This can be overriden by using the ``style`` argument: .. code:: python @pytest.mark.mpl_image_compare(style='fivethirtyeight') def test_image(): ... Removing text ^^^^^^^^^^^^^ If you are running a test for which you are not interested in comparing the text labels, you can use the ``remove_text`` argument to the decorator: .. code:: python @pytest.mark.mpl_image_compare(remove_text=True) def test_image(): ... This will make the test insensitive to changes in e.g. the freetype library. Test failure example -------------------- If the images produced by the tests are correct, then the test will pass, but if they are not, the test will fail with a message similar to the following: :: E Exception: Error: Image files did not match. E RMS Value: 142.2287807767823 E Expected: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/baseline-coords_overlay_auto_coord_meta.png E Actual: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/coords_overlay_auto_coord_meta.png E Difference: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/coords_overlay_auto_coord_meta-failed-diff.png E Tolerance: E 10 The image paths included in the exception are then available for inspection: +----------------+----------------+-------------+ | Expected | Actual | Difference | +================+================+=============+ | |expected| | |actual| | |diff| | +----------------+----------------+-------------+ In this case, the differences are very clear, while in some cases it may be necessary to use the difference image, or blink the expected and actual images, in order to see what changed. The default tolerance is 2, which is very strict. In some cases, you may want to relax this to account for differences in fonts across different systems. By default, the expected, actual and difference files are written to a temporary directory with a non-deterministic path. If you want to instead write them to a specific directory, you can use:: py.test --mpl --mpl-results-path=results The ``results`` directory will then contain one sub-directory per test, and each sub-directory will contain the three files mentioned above. If you are using a continuous integration service, you can then use the option to upload artifacts to upload these results to somewhere where you can view them. For more information, see: * `Uploading artifacts on Travis-CI `_ * `Build Artifacts (CircleCI) `_ * `Packaging Artifacts (AppVeyor) `_ Running the tests for pytest-mpl -------------------------------- If you are contributing some changes and want to run the tests, first install the latest version of the plugin then do: :: cd tests py.test --mpl The reason for having to install the plugin first is to ensure that the plugin is correctly loaded as part of the test suite. .. |Travis Build Status| image:: https://travis-ci.org/matplotlib/pytest-mpl.svg?branch=master :target: https://travis-ci.org/matplotlib/pytest-mpl .. |AppVeyor Build status| image:: https://ci.appveyor.com/api/projects/status/mf7hs44scg5mvcyo?svg=true :target: https://ci.appveyor.com/project/astrofrog/pytest-mpl .. |Coveralls coverage| image:: https://coveralls.io/repos/matplotlib/pytest-mpl/badge.svg :target: https://coveralls.io/r/matplotlib/pytest-mpl .. |expected| image:: images/baseline-coords_overlay_auto_coord_meta.png .. |actual| image:: images/coords_overlay_auto_coord_meta.png .. |diff| image:: images/coords_overlay_auto_coord_meta-failed-diff.png Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Framework :: Pytest Classifier: Intended Audience :: Developers Classifier: Topic :: Software Development :: Testing Classifier: Topic :: Scientific/Engineering :: Visualization Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Operating System :: OS Independent Classifier: License :: OSI Approved :: BSD License pytest-mpl-0.9/pytest_mpl.egg-info/requires.txt0000644000077000000240000000002713167753712021723 0ustar tomstaff00000000000000pytest matplotlib nose pytest-mpl-0.9/pytest_mpl.egg-info/SOURCES.txt0000644000077000000240000000215713167753712021215 0ustar tomstaff00000000000000CHANGES.md LICENSE MANIFEST.in README.rst setup.py tox.ini images/baseline-coords_overlay_auto_coord_meta.png images/coords_overlay_auto_coord_meta-failed-diff.png images/coords_overlay_auto_coord_meta.png pytest_mpl/__init__.py pytest_mpl/classic.mplstyle pytest_mpl/plugin.py pytest_mpl.egg-info/PKG-INFO pytest_mpl.egg-info/SOURCES.txt pytest_mpl.egg-info/dependency_links.txt pytest_mpl.egg-info/entry_points.txt pytest_mpl.egg-info/requires.txt pytest_mpl.egg-info/top_level.txt tests/test_pytest_mpl.py tests/baseline/1.5.x/test_dpi.png tests/baseline/1.5.x/test_parametrized_5.png tests/baseline/1.5.x/test_parametrized_50.png tests/baseline/1.5.x/test_parametrized_500.png tests/baseline/1.5.x/test_remove_text.png tests/baseline/1.5.x/test_succeeds.png tests/baseline/1.5.x/test_tolerance.png tests/baseline/2.0.x/test_base_style.png tests/baseline/2.0.x/test_dpi.png tests/baseline/2.0.x/test_parametrized_5.png tests/baseline/2.0.x/test_parametrized_50.png tests/baseline/2.0.x/test_parametrized_500.png tests/baseline/2.0.x/test_remove_text.png tests/baseline/2.0.x/test_succeeds.png tests/baseline/2.0.x/test_tolerance.pngpytest-mpl-0.9/pytest_mpl.egg-info/top_level.txt0000644000077000000240000000001313167753712022050 0ustar tomstaff00000000000000pytest_mpl pytest-mpl-0.9/README.rst0000644000077000000240000002067413167753525015134 0ustar tomstaff00000000000000|Travis Build Status| |AppVeyor Build status| |Coveralls coverage| About ----- This is a plugin to facilitate image comparison for `Matplotlib `__ figures in pytest. Matplotlib includes a number of test utilities and decorators, but these are geared towards the `nose `__ testing framework. Pytest-mpl makes it easy to compare figures produced by tests to reference images when using `pytest `__. For each figure to test, the reference image is subtracted from the generated image, and the RMS of the residual is compared to a user-specified tolerance. If the residual is too large, the test will fail (this is implemented using helper functions from ``matplotlib.testing``). For more information on how to write tests to do this, see the **Using** section below. Installing ---------- This plugin is compatible with Python 2.6, 2.7, and 3.3 and later, and requires `pytest `__, `matplotlib `__ and `nose `__ to be installed (nose is required by Matplotlib). To install, you can do: :: pip install pytest-mpl You can check that the plugin is registered with pytest by doing: :: py.test --version which will show a list of plugins: :: This is pytest version 2.7.1, imported from ... setuptools registered plugins: pytest-mpl-0.1 at ... Using ----- To use, you simply need to mark the function where you want to compare images using ``@pytest.mark.mpl_image_compare``, and make sure that the function returns a Matplotlib figure (or any figure object that has a ``savefig`` method): .. code:: python import pytest import matplotlib.pyplot as plt @pytest.mark.mpl_image_compare def test_succeeds(): fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot([1,2,3]) return fig To generate the baseline images, run the tests with the ``--mpl-generate-path`` option with the name of the directory where the generated images should be placed: :: py.test --mpl-generate-path=baseline If the directory does not exist, it will be created. The directory will be interpreted as being relative to where you are running ``py.test``. Once you are happy with the generated images, you should move them to a sub-directory called ``baseline`` relative to the test files (this name is configurable, see below). You can also generate the baseline images directly in the right directory. You can then run the tests simply with: :: py.test --mpl and the tests will pass if the images are the same. If you omit the ``--mpl`` option, the tests will run but will only check that the code runs without checking the output images. Options ------- Tolerance ^^^^^^^^^ The RMS tolerance for the image comparison (which defaults to 2) can be specified in the ``mpl_image_compare`` decorator with the ``tolerance`` argument: .. code:: python @pytest.mark.mpl_image_compare(tolerance=20) def test_image(): ... Savefig options ^^^^^^^^^^^^^^^ You can pass keyword arguments to ``savefig`` by using ``savefig_kwargs`` in the ``mpl_image_compare`` decorator: .. code:: python @pytest.mark.mpl_image_compare(savefig_kwargs={'dpi':300}) def test_image(): ... Baseline images ^^^^^^^^^^^^^^^ The baseline directory (which defaults to ``baseline`` ) and the filename of the plot (which defaults to the name of the test with a ``.png`` suffix) can be customized with the ``baseline_dir`` and ``filename`` arguments in the ``mpl_image_compare`` decorator: .. code:: python @pytest.mark.mpl_image_compare(baseline_dir='baseline_images', filename='other_name.png') def test_image(): ... The baseline directory in the decorator above will be interpreted as being relative to the test file. Note that the baseline directory can also be a URL (which should start with ``http://`` or ``https://`` and end in a slash). If you want to specify mirrors, set ``baseline_dir`` to a comma-separated list of URLs (real commas in the URL should be encoded as ``%2C``). Finally, you can also set a custom baseline directory globally when running tests by running ``py.test`` with: :: py.test --mpl --mpl-baseline-path=baseline_images This directory will be interpreted as being relative to where the tests are run. In addition, if both this option and the ``baseline_dir`` option in the ``mpl_image_compare`` decorator are used, the one in the decorator takes precedence. Base style ^^^^^^^^^^ By default, tests will be run using the Matplotlib 'classic' style (ignoring any locally defined RC parameters). This can be overriden by using the ``style`` argument: .. code:: python @pytest.mark.mpl_image_compare(style='fivethirtyeight') def test_image(): ... Removing text ^^^^^^^^^^^^^ If you are running a test for which you are not interested in comparing the text labels, you can use the ``remove_text`` argument to the decorator: .. code:: python @pytest.mark.mpl_image_compare(remove_text=True) def test_image(): ... This will make the test insensitive to changes in e.g. the freetype library. Test failure example -------------------- If the images produced by the tests are correct, then the test will pass, but if they are not, the test will fail with a message similar to the following: :: E Exception: Error: Image files did not match. E RMS Value: 142.2287807767823 E Expected: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/baseline-coords_overlay_auto_coord_meta.png E Actual: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/coords_overlay_auto_coord_meta.png E Difference: E /var/folders/zy/t1l3sx310d3d6p0kyxqzlrnr0000gr/T/tmp4h4oxr7y/coords_overlay_auto_coord_meta-failed-diff.png E Tolerance: E 10 The image paths included in the exception are then available for inspection: +----------------+----------------+-------------+ | Expected | Actual | Difference | +================+================+=============+ | |expected| | |actual| | |diff| | +----------------+----------------+-------------+ In this case, the differences are very clear, while in some cases it may be necessary to use the difference image, or blink the expected and actual images, in order to see what changed. The default tolerance is 2, which is very strict. In some cases, you may want to relax this to account for differences in fonts across different systems. By default, the expected, actual and difference files are written to a temporary directory with a non-deterministic path. If you want to instead write them to a specific directory, you can use:: py.test --mpl --mpl-results-path=results The ``results`` directory will then contain one sub-directory per test, and each sub-directory will contain the three files mentioned above. If you are using a continuous integration service, you can then use the option to upload artifacts to upload these results to somewhere where you can view them. For more information, see: * `Uploading artifacts on Travis-CI `_ * `Build Artifacts (CircleCI) `_ * `Packaging Artifacts (AppVeyor) `_ Running the tests for pytest-mpl -------------------------------- If you are contributing some changes and want to run the tests, first install the latest version of the plugin then do: :: cd tests py.test --mpl The reason for having to install the plugin first is to ensure that the plugin is correctly loaded as part of the test suite. .. |Travis Build Status| image:: https://travis-ci.org/matplotlib/pytest-mpl.svg?branch=master :target: https://travis-ci.org/matplotlib/pytest-mpl .. |AppVeyor Build status| image:: https://ci.appveyor.com/api/projects/status/mf7hs44scg5mvcyo?svg=true :target: https://ci.appveyor.com/project/astrofrog/pytest-mpl .. |Coveralls coverage| image:: https://coveralls.io/repos/matplotlib/pytest-mpl/badge.svg :target: https://coveralls.io/r/matplotlib/pytest-mpl .. |expected| image:: images/baseline-coords_overlay_auto_coord_meta.png .. |actual| image:: images/coords_overlay_auto_coord_meta.png .. |diff| image:: images/coords_overlay_auto_coord_meta-failed-diff.png pytest-mpl-0.9/setup.cfg0000644000077000000240000000007313167753712015253 0ustar tomstaff00000000000000[egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 pytest-mpl-0.9/setup.py0000644000077000000240000000266513133617760015150 0ustar tomstaff00000000000000from setuptools import setup from pytest_mpl import __version__ # IMPORTANT: we deliberately use rst here instead of markdown because long_description # needs to be in rst, and requiring pandoc to be installed to convert markdown to rst # on-the-fly is over-complicated and sometimes the generated rst has warnings that # cause PyPI to not display it correctly. with open('README.rst') as infile: long_description = infile.read() setup( version=__version__, url="https://github.com/matplotlib/pytest-mpl", name="pytest-mpl", description='pytest plugin to help with testing figures output from Matplotlib', long_description=long_description, packages=['pytest_mpl'], package_data={'pytest_mpl': ['classic.mplstyle']}, install_requires=['pytest', 'matplotlib', 'nose'], license='BSD', author='Thomas Robitaille', author_email='thomas.robitaille@gmail.com', entry_points={'pytest11': ['pytest_mpl = pytest_mpl.plugin']}, classifiers=[ 'Development Status :: 4 - Beta', 'Framework :: Pytest', 'Intended Audience :: Developers', 'Topic :: Software Development :: Testing', 'Topic :: Scientific/Engineering :: Visualization', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', 'Operating System :: OS Independent', 'License :: OSI Approved :: BSD License', ], ) pytest-mpl-0.9/tests/0000755000077000000240000000000013167753712014574 5ustar tomstaff00000000000000pytest-mpl-0.9/tests/baseline/0000755000077000000240000000000013167753712016356 5ustar tomstaff00000000000000pytest-mpl-0.9/tests/baseline/1.5.x/0000755000077000000240000000000013167753712017127 5ustar tomstaff00000000000000pytest-mpl-0.9/tests/baseline/1.5.x/test_dpi.png0000644000077000000240000000604013133617760021443 0ustar tomstaff00000000000000PNG  IHDRsBIT|d pHYs|4k IDATx_hS'`] I@3ms)J֮du6Ͱ l67PD,8Be#J0 Jw*{uζ98&ڤy{s-/<{>4M*T@Dc4i&L1Hc 0`"1Dc4i&L1Hc 0'ojl߾}}}B # Xȓ/^ĪUFBB L~_DJ !cK}Ky ]QQLOO|>3'IXZ:!(szɓH&Rב_pX|9 ʕ+ۋ@ee% l"cy œG׹f*+HxgISщJ`ش q.e& i`^[&ZDHn`2{}`&G}LT'?֮U7LTt|8px0DE8QՓX`E){oz0D/ppuPbi-U *xƁ#}gՙIo>jjTO0(͛Z˗`"X'+f`G[D[68 0yڝ;kx 0yc1šDZU /)6 @u5s p&Z"?nf`rDUU>&w3{+w`ҘSUbIKNfV&8Y%f~]UO R<88֢ Ass3~%ͬSFD"0==nN!D7-Un,Ox ÀB:Rd D[[e,G.K7JRBb1رcؽ{7.]1~#X\@nLLLH_g)}T  ^4fnoףyxCnf`rUbI9ݻUbI)7t3ăyRM*q&۹Y%lnf`UbI:w3To?nf`&SfYxk*qv3 A>ƫ*)4-׻ULKfni|S4SͬL%9:mf7Z 0Ӣy`ZWXN ZPc7qҽ `͛/X:w3Lv32piE`a7~`nf]1nf񦀇Y܁=J=ժR14>D4E2aX15|;@ci0 !#ed28#>(nfb14MHR`0hҞ13c"ڴ S=78) ;`a7X.nfof.Xsf6Xcf&XCf,X3f| FL0y;i! ^v v3b1nf* fb1nf*oH(nfZ VT Lhj 8~ض X^4 ML206joxLH_}TW;w2T~܁%a73فd>.#Nf73ه;p<|h%La f&{1KnfR. b% 477' zz1alܸ1}UUQׇ*a25n,buz>0lٰF2M3ugg'/k99NѣGc\t ccchiiG |ٱ011!}U$JK-T;<~nTOC4?xf&]0ƀd73nf o̤/f&y:f&}y2t 0M<`v3x&f&7rm$v3zf73knf=f73yv`v3׸&f&/rEL^uL^mݳϼo]ɻ k[XJ^ßDf/oLOgQv3stL0■޳1kmog73Bl7sw7?K"nf9bf73QiD:H9}__zzz0<< B?Μv a0 CEun@مBH]CqƍFBx1NW k!bo_/']]T* J{ mfkJY״O׹}g߰aC.OZib1aǎr hhh@(*rD%%I&ªUk.Ap8Pс477;~wH$8uΝ;\¹u惃Amm-_oСCx^'IF(YUUUFg ظqc{]{ܺ\FD"m _;Y읝hkkCʱm'˟[kd @^vȑ#RLڵkq}\rXf#psapp[nEuuNqYܽ{W^8.׼u֭['z/(hA 0`"1Dc4i&L1Hc 0`" 6v'IENDB`pytest-mpl-0.9/tests/baseline/1.5.x/test_parametrized_5.png0000644000077000000240000001061313133617760023603 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i-IDATxܡniO&E&RaFMDAhndBJB,mva~(xa_C1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1÷oիW'׺ׯ_( rwwW_|>|z$@yU=^o޼i;̑u{{zbg~mwv{͗/_} ׮޼ySɤ4e<َl?;;ۏco @b'#;ۏcoig0 ztZʏ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1vbQ]bvz$g5j=M}ax[墪O|5u]W]55 ouHb}_}?9l69d2i= frax_gg˚|z]DAoBfN28i #@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bFW񓳮F<}WO6MiN0 C!x^k:jdz~~y  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1vbQ]bvz$NkVF~5 ok\TUu8E5Z h>x<~ru]u]h"R?0j#q\kfi4 &I1h`6E :;[l4 ڿiNruuUUOgṹhEF'µF+ #@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bFW񓳮F<}WO6MiN0 C!x^k:jdz~~y  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @̨j>x<~ru]u]h"fi48ah=uMZV5LZOܯ>`1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1_OκM}_}?9l69g0 ztZժ&Iq, F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@vbQ]bvz$Nk Ǩ;nnnE Z.UUu}}x*Nk 9@񓳮F5 ouH(}}l4tt{{[ɤGa6E :;[l4 OuMFQǧӳ\k<Gm4y<  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @$}zcg~mwv{#Mpܝvgg~4 F1CUU}$gzn=Ql?;;ۏ0 C!xe1>}>( ۷zUqC}...׭9J#t F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ (1_4IENDB`pytest-mpl-0.9/tests/baseline/1.5.x/test_parametrized_50.png0000644000077000000240000001244113133617760023664 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?iIDATxܱoS'Ƌ%, % SP J3AjH[&1^3%^PBz\xѣ|fYx F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ _U/^+WTiz0L?/.]8 Ȋ/^ԝ;w駟MrJUW6;̂  NNNܹm#?vuZ__oxŲjgdggcogggcogggcogq#t F1 ,~ NNH[fh4c09~ @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@3ɤ^zUɤQΝ9Wn}U/~R/_?[/_6= 0v{{{u޽;GGV{nUklNhأG…Uu2>ΙM&_z˭::={ zZ߯~DWqMӚN_xzᰆk M<ޮ Vu?պPn72Fhh,hPө/x״͛}zvL~~8s&@a׮]ZYz\UUjje'x @`lmmnmn~^փڬVAmn~^`Nzz5Lj<W`3NGxK#X@b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@v`P' M5O\;<FD#XРNS_VcUMi?͛7?O9;gy!@a}w^>A}c8X*@@î]V;;;}kU~nϢ59UyZjZyV#$5G0'z^zL&5zF̙Nfg&x  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bnz6 juuĵ~_~>>ᰆk M>ᰆk MFD#X,NS_VcUMi?͛7}"͙9k ,ᄏ__Tՠ޾1Vp,g Οa\vvvvjejתqUVU^jggǟE9kp ikkvwwksjTfZjsݭGdI8kpd2x\ns'58?t #@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 ,p NNH ,x&@ d2'Y<5c}}2fMܹO?Tonz$@_U/^+WTiz0L?/.]8 I1~ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@jaaIENDB`pytest-mpl-0.9/tests/baseline/1.5.x/test_parametrized_500.png0000644000077000000240000001746013133617760023752 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?iIDATxO}2PjrX\ DZn֗ziVA%^uC{! \CU?ATzeVlT=V cF;;ش2!"ygcG~gPCePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFekzϯ~,--׾ _K.e׿8#I dÌ?~1Fs99gms9\x1O?^qd|~ՓO>醧-9gms99gm7C@ @]avvFs99gms9כtv= 0\9}M^ϧfyy9W\ɍe۶sLOOd߾}iM pG49ydzLVV%ifz$&vݜ>7XZ?wЃ 0@vm5 V+Z`kK.3Y[A2ٳ|<rԩZ'9P⁴ZԩSElzy3Y[{&z(kktz^њ#@`Ο?kIxdeZ.\P.Ftg[++IG,//fW~0Zʕ+W_{|h= 0 SSS9p`*ɠ?R:T3_ 0@ǎGLu07J~Zy;hy3%Iַx$/YyLo߾Zlff&'NHFu :YXX`pkz=z4I277VgɳjH,,,ߒ9o@ѣGόIf7x=yҒFB333xB}v6cc/e|I^LnO~ɭ?!Ky 9MLLSy_W29$O%y8$NI}燓<ɟWӧI~]|n֤iF9r$GIx69|pz {Q"@`@rUAJѥu8fktyɴZsAA:G̱ch ƨ 0@۷o;I/I^N+'y9;g}->>^cT8q"I^ֽ;ݿu7-:.^cp/8zhdnn.{$/:~gYXX?%s25߀@Gfii)=ߓ$o('y3{c%{a&@L.^gKF_}r_726R}v6?{nᷲVMLLSy_W29$O%y8$NI}燓<ɟWӧ<WFc[ lr:Nn"^/.\HMիW7۲cǎt:t:ݻ׷NsG;z !bC 7kw-X@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @M󙘘64gqq14wt:tLOO7=_zι (#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@25=i~~>6;;ن&,..fqqVWW1ܴNn \9`ePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFeP澦7gbbfgg3;;D,..jC=כtv3==8|;,Q^/ϟOr\7>˶mgΝNɾ}nf ˗/ɓy3YYv;#Gdjj) [z9tpvڕ^[lw|^B&$?GI5++k-d׮ϡC6`k0xvܹ޽'o7?ILNy0%w׏{;wjtF5Cĉٿ>`wKbQJb/ٿ~XFuCiaa!/BKI[͹0kPC senn.|cIƶȭ$$O<-:6^z~PY]]3H'I^]~n,ɱZ}a4C0T^y/sj3l?>X/25v4C04.]gdmT~g^ac@sCԩSiNrhiʩScXkPzy3Y[{&z(kktz^њ4^f 糲r-ɟ\˅ ץ)4K0nnno$[s/YvI,^O(k,PrJzAїիWYz47LLLlfgghn,H|֦jqq14w2?(mIn4gym M5{ ՗NDw`1vܙv/ik/eǎM={ %@ #'+:EdC5ha(ܼ('=IE=^f ¾}29HLN>{KS5ha(}*\&'$ޓI4ɷop29\9}J V NnZ^/.\HMիW7۲cǎt:t:ݻ׷NsG5ڝ CĆn[2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@+,..6=q6y8lss6ymq8omF5 @?ׯ_O\xIFjc8gms99gmi_qcMMO~1 ?я~1F"կ<_ך/~z.]_z$:PFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePIsQIENDB`pytest-mpl-0.9/tests/baseline/1.5.x/test_remove_text.png0000644000077000000240000003062213133617760023233 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxM/ws.CQpQkZT*U4iX+ PYvqfg{70g5f2q P]TD:V>m;> W@^s}VPUh P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7_> W/~U_ǬZ*_򗫎ӔߟΪc9~_g֭UhJ HWAKՆcQ/֘,$'kg9o) ]Ky+NC{Q֨kLZ-yd߾ȑ.OvHvNvLΝKfͪ:UkpdÆHOm:Qkq/Y0dhH #&Q/x$%%\̟_ud ڔPS/֨k`6^M^{-y3-WԗBoo GUZG%olޜ|{}sNվ`вn*ch\:߻׊ݪ) d˖dʔdҪjA+yʊ]q( WJSӫN?3@Krؽs'yd͚I~dɒdddDhd M޽7lp!3T|#X47 ձcɮ]V6ߟz2mZ28,\Xu",ƣGIww&Gsq@S{7,s>7wR$'N$VU3аjr, ^|4;4>ؑޝܙ;̚Uu*,eHOm:  ldhHh5  Сdݺ[*ϯ:ӟ䷿MMyR@ƍÇɊU'b2Zӓ,_̞]V*Oɾ}@2sfթ#Xիk%7o&eMю&G%olޜ|{ŋܹU FTn14T.kn;S@4ɖ-ɔ)ٳҥU'jFpZyPpd޼bW Q@`ɫ&otu%N%ӧWFa sJY{Nח][u"&į~,YL(|2gr^_]]̙Su*,ڍɆ eرd.+vl O?ydڴdp0YD4#XSV.A˗OvHvNvLΝKfͪ:2r?$Ǐ'۶UVldhH`( ݃ɡCɺuɷU.ϟ_u*Z,$Sёѣ^5g) ddŊѪ`Z-I/Of.+v&Цɾ}@2sfթhuFիk%7o&e @MA}) m⣏7L6oNdܪSn`[J*bj( -n` ٲ%2%9{6YD3#X-V+ \̛WV*TMhAɫ&otu%N%ӧW `+Wʊ;wdڪ?8h!UdI2uj22|xp^_]]̙Su*ό`47 ձcɮ]VҸ&ߟz2mZ28,\Xu"lFУGIww& @{7,s>+$&rR$'N$VU jr, ^|М7>ؑޝܙ;̚Uu*x:FUkגǓm۪N @+Ǔ!֠4Cuo}\<|>:dd͚dܪSA[J*b@eK2eJrltiՉF&Q9\̛WV*3`&tuSӫN20 \)+vIkN ;~) ޽7˶ 9sNq#ٰ^;e.|'L & V,Qݝ|eŮ S{7,s>R@ХK_8ZUu"hz:co~<(xOJx ɎΝɹsɬYUc s\^^5v<2m[Չy9 }}ex24|R@>ɡCɺuɷU.ϟ_u*h~FIGGrLrhrWa( ddŊAk1b'Y<=U>`) @+#W'%̙Ud hkW7o&e |Qr@ysfMrb2wnթ=ʭ[x K{Z mc` ٲ%2%9{6YD~`-VKIVL++vWsT2}zթ}Z֕+e;I__vmՉ' @K:~Q( @Kw/yd…dΜS,eܸlPFKvbדiӒdª=J~7YU>q9i@of^xᅏ[GGG:::*Jݤ~tw''yw;|FGG+J:PjU|r,XUvR$MjUՉhF4Z\07˃/+Li';v$w';w&%fU xMkm۪N< ' @+Ǔ!4Cuo}\T@`ʕbΝ/YD@dɒdddD`ܻF}{vuB2gNթF` P7n$6ѫcǒ]A&ɓ֭ɴi`paՉFc xf%eŮ|' 3{7LK 9|8y'NS( S.=ƒ'UN4:''V ˖%3f+x DǓ;ݻ;sYN4 #Xc~j~Zydp۶ X А<L$%%\̟_u*Y>IGGrLrhrẂgddŊ1Zӓ,_̞]V*DQ@+#W'%̙UZ, IrjY{f[Ư& ɢEa< ͛5ksN2#XЦnJ6m*'ٻ׊]`) І-[)SgKN #XFjȑdd޼bWI61:_tuSӫN#X\)+vIkN+' O,INMFFZ {={˚ 9sN;#XЂnH6l(Wǎ%vY 4Zɓ֭ɴi`paՉGddbWhw&I)!'4 p168ZUu"O4Z\0_,1\)@S@ ';v$w';w&%fU &szyڵmU'x|N@% !h> 4CuW^I.]Jϯ:3 #9s&9z49xЫ@R@?lܘ<|>XQu"gc P$˗'g h0ccejd߾d` 9T4Wˊݛ72~J@M-*+@kR@b'$7'k$/&sV `r ݺlTJGOOw@kS@"ɖ-ɔ)协o|DY9\̛WV*@P@FG듮䭷SӫNP?FN\)+vIkNPN@O,INMFF}) 0KIo/kv/\H̩:@u`$q#ٰ^;e.ddڴdp0YDLGddbW' 0AM:;?M~9>F 0<\{%'N$VU1.ϠV+̗-Kf(#WS@)';v$w';w&%fU pzyڵmU'hN@ % Nx <CuW^I.]JS4#XnN::3gGj4'7ӧ+Nм`ՒddW>`l\ߟۗ $3gV qjY{f[ƯN@&/^T>&IOH6oN֬)㥗Nz`nJ6m*'ٻ׊]ɢ-[)SFՉZ,R9\̛\|ԃ@M֯OJNJO:@{0@[rؽs'K֮:@{q@8~dϞdf…dΜS'#X7 ձcɮ]VTIeR__`A9fTZ@ø[mޜYSK/U d pVrubӓk.@+R@@eK2eJyߨ:Ւ#G+y˗VP?9Y>Jz+9u*>TL6#Xݕ+ɫ&|%kVzq@]?,Y<|22|ߒ={˚ 9sN@`ݸlPFKvb]) L'[iӒdªP%#XLGddbW Hz7 /|:::QQ"'snٙ'&$4wy'mtt4 ZVu˗/g/\u2<\{%MjUՉ&_{vG0!j䗿L-Kf(#WJ'?AYsgr\2kVթhDL_O^{-v<2m[ՉhdN@xj}}ɂwS>| O+Y.yҥk_:O#9s&9z49xЫ<>68lTN@NNV:VK~R8fN~{Ձɾ}@2sfթhVFTW7o&ƍU'9&/^T> s~ڼ9Y^:wVrubӓk.K I\eK2eJyߨ:@Ւ#G+y˗&d+yԩdSʌ`+WW_M> K֮: @:~@ ~=yڵmU'O% !Ʀ4dݺWKN@};HΜIM9Ah2ɦMÇɊU'g Ij^ eŮ@Q@X:p ٷ/Hfά:<9#X ղbͤ7ٸD4dѢ@S@ejd͚dܪS3`n*[.^Lzz{u( d` ٲ%2%9{6YD0`4Z-9r$Y27U>hE @d:L^u*F*tJ$}}ڵU'"Ǐ'K$?(dϞdf…dΜS@}7 ձcɮ]V^:9y2ٺ56-L.:ԟ,IQݝ^,^\V*+' ݤ3/%9~hc $.=ƒ'UN`j/,[̘QF( 4>eΝɹsɬYUa `\ZrZydp۶@q0 АFx$]]ɺu+$.%W ,tvё9=LNNV:4#XOVK~R8f.+vx| c+#W$%̙Ub 1\ZV޼&7Vۛ,ZT~V>Y( 2nysfMrb2wnթn-W/&==޽VDP@@eK2eJrltiՉuZrHre2o^Y|R@&']]ԩdS@1+Wʊ;wdڪ@rǓ%KS&{={˚ 9sNvnH6l(Wǎ%vY mddڴdp0YD^`mѣ;Y:YU>-ݤ3/%9_ ҆}ĉdժ@{ hIZ`lY2cFR>z rǓ;ݻ;sYN$F}KJ(IDATszyڵmU'e% !4CuW^I.]Jϯ:I`M#9s&9z49xЫi?lܘ<|>XQu"N$˗'g4h*ccejd߾d` 9T24Wˊݛ72~4' @SM-*+Ьݿ8lޜY\̝[u*i֭[ɦMt${Z N@eK2eJrltiՉ` h(ZrHre2o^Y|@P@1:_tuSӫNL$#X@Crؽs'K֮:0;~) @eKIo/kv/\H̩:0`q#ٰ^;e.'[iӒdªb GddbWwΤÇ|nxKNHV:PIS ˖%3f+ڛLdǎddܹd֬SU3L˫׮Gm:(/Y )) x 9t(Y.KN4#X3};HΜIM9?lܘ<|>XQu"J$˗'/XV*Q@'66VFOK{/9T@30'dd͚ܹU,3ݺlڔ\X.k.S $[$S$g&KVhvFVKIVL++v`"( nj&']]ԩdSwWw$[.L$' @dɒdddD&m޽dϞdf…dΜS7 O~;ٹӊ]`r) ЦNLnMdp0YD@;0mѣ;Y:YP>zqҀ|ͼ tttTVqnٙrpy睼;ъҴ/jZ!(._ ddd$/rqh1LJ&MT_{v}BՒcǒe˒3ȕTE6>ؑ]6\;̚Uu*-km۪NZR__l5> )@P@ )СdݺN.]Jϯ:@c0#9s&9z49xЫL r|qcartbEՉ,xFZӓ,_brixccejd߾3Nи`Szؽy3-W|6' z{Eaq) OH6oN֬){̝[u*a ӭ[ɦMŋ޽V<)@eK2eJrltiՉ, ZrHre2o^Y|<=>h~}U~NJO:@s3ʕbΝw˅sǏ'K$S&##DR@?ܻٓl^^̙Su*b ܸlؐ~ΝVLwduk/%ɂU'h]Fh[%徇0ЖM:;RBNS&B.=>_};U'h6jرdٲdƌP_ ma|<ٱ#ٽl:w.WN~`_/_VܶD -lO) Cuo;t)?Tܾtt$g&?Y{Q( 瓍ӧ˫N?3EKՒR8^|U>B+#W'?Q{̙U]ZV޼+VoohQ`><|4s~r@ysvmycܪS8`TnJ6mJ.^L~?b( 4d˖dʔҥU'Ijɑ#ʕɼyeŮМh~}U~NJO:O ʕbΝw5kNrBC:~xR kt4Y>*?N%ӧW fdtJY{Nɚ5U'9S?,Y<|22|{={˅9sN@+0ܸlؐ~ΝV0qdK_J N@1E=Jի˝ݽtv&><0I66<\{|awN@ jɱcɲeɌUszP@xcG{wpu\T va\^^5v<2m[Չh7N@D__pa9R>JH6oN֮-{̝[u*tFԭ[x %EZ @S@@eK2eJycҪ1Djȑdd޼bW( Mbt4yդ:L^u*x2 Hr%Y^nW_KթhvNh֨kwxdIHfMՉhCM[^AsP@Խ{o$۷ 'sT -X dNvb֠4_OM NGi _$g_Ϳ[9|P\F[^QW^Mo}VժA:׿unZu4> W/~U_ǬZ*_򗫎ӔnFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.!t9үIENDB`pytest-mpl-0.9/tests/baseline/1.5.x/test_succeeds.png0000644000077000000240000004236713133617760022501 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxlg4Ni.V7-ܣ2"ʤ" )'rؽY2a9cBRugdž` uJ!T (P׏#i\^K>bH$IR :$Ia$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$Iqc$I7I$IqcGa\uU̜9wvv,FYx嗇8$I!СCtuuqMww7>,TUUbŊ3l,cܹ+|擟$=yyy߿8M$IĒbQHX[n?}555ϲ`;ƍ7ܹsyꩧY$IJ8` PFFy뭷g}pWRTTDmm-PG$I,9~8ټy3[neg_~[n'OLww7Pŕ$I,x*n|A.\ȣ>z֟y7kN{ IVI$)Yz{{9Ϝ8qK/?8qPŕ$I,nFnF/^̜9s祗^:\vew} .3cؾ};]wY'Ih8q_9spWF')Y@CAAV|3=\s oiZvv۷x +I!SOhѢc$% yx|/x/_~'* }M7]\X~6ou /ipZƍ?6? H?=UW]N:œO>e]>99Bgg'7p\r NI}Y~_pB V=3瓙ycW7tStW{wM[,?W_p8l܈ҏ+Wo/}O}S9rۿ_~9TWWs?fٲe+~8¿$I xI>ؼ.4] H?JJJO?Ǐ3rH&LC|𾌌 &aÆuV|A}QN8ɓ>s#$IJmmPPհdIԉREEE}O<O 55aJ $IBM L0oj|D"I{pP\ w7.T,I$P<Cee؍D$I)JJ 3viӢN$pK$I)&  Ξ aŮ#qX@$I2:;aBx!(/; ++T0G$I+v瞃yNx"Iԩ0|8X>D$II'lڷrrNqK$II!((WUUb+vD$IIgv`HNrK$II**;aʔb\<$IRR8~/a c$IRkn{u+̙u"](;$IV,0>=\(#Y@$Ia2X/={`̘Sb9%IF^{ aɒix"IR[6[44X>RD$I )Xχn u* 6G$I7߄R`&X[SD$Iڻ vi(9%IHbPY 3gرaŮ#Y@$Iw]]ajX ;;TG$IWpp0Ԅ+O@$I7550yr, $Irp]EJQpK$IC=yY+vәD$ICJJ 3viӢN9%IA gφܰb!H$iuv…CP^;v@VVԩ($IҠ9p =zjk!??DJ4H$iPg0u* --"I]99QRrK$I!((WUUb+vuvI$]k_#&N:#X$I:/}}PQw S ' $IapQQ60?yH$i@+l sDHȾ*Iӧ |Y@$ItFݰl\ ˗Þ=0fLԩ$IRkAu5,Yu"O@$Itڰwc$INa|QR*qK$I&~6ujg$I{Ba!Νu"*G$IX,0s&VZ>4, $Ii+\YWC]dgGJ,I4 w CMMI4SS',/ $IRx=~(.F7.TJ7`I$P<CeeU4, $I)JJ 3viӢNt$IR…gCnnXkP, $I).rرN%9%Ir+vZϏ:7H$ Nác$IJ==p}p=aվ}u*t`I$%C ^UUUⲀH$%k_#&N:tv`I$%>;)SŠ]ˇ' $IIqX8~TT 0̏$, $II9<׿֭0gNԉcW$IJXx|p%' $IRe`JX1cN%]G$IX[[A%KN$]O@$ITmml  $IR9u ֯ƒGJ`I$%(-]`&X[͕Z, $I b^(,^عN$ >G$I"Ae%̜ cdž* $IR՚5z5Avvԩ$IRDZ[ÊÇ&_III&ˇ҇D$){֮b7aܸSI$IR:/+sŮҏD$)ꠤ23an6-DR4$IBlgCnnXkP:H$ NX׎u*)Z`I$ ŠݣGN$%O@$IYu5L ÇCKC0 $I Kö} ''TRbqK$i:a VpŮ $IEھ59aĨI,I p0eJXkI p8,^N?**`G9Y@$ISssx[aΜIÞ.I4@Xx|p|Y@$I-+arسƌ:|$I:p%KN$%/O@$I΢6lˇt, $I8u ֯ƒGJJ~`I$(-]`&X[ͥb$I{z{aNˋ:Z$I"ح3aذb! > $IJ{]]ajX ;;TRjrK$ְba W' $)mI&ˇIv{֮b7aܸSI,IVChhbW' $IJuuPR{7Lu")8ՏfeĈ3b-BCC<#\wuy$I{ KN%/ H?xl?)**b?w-21%I98V= u"I`cԩ)7pimmE__`Ǔ$IP] Sb8%$):a VpŮh, ?2O=sRkTҗ}{챡+IRZھ59aĨI#XW>OOqL>)SvJL +v-R,~m~m^|E >Ok ?W\qG^+--$apQQ60?^ ٲe [lkI3ᮻ;w~?\uUz͛]+I947=Wغ̉:RM߿ &D(5A?(**gyɓ'#Gꫯkǎ;}iii;̒$X,<`>}:de+ˇ<<Ƿ-y9v??-Z@yy9ռ\{z|_dĉ\qO0f֯_$I xɰjwfҨSI:~'##~` _7twws5װrJxK$-j~`dpɒIX,u $IR[.*/`)]kg@$IR:u ֯ƒ)9%IRG®]i[R*Hw/Bo/ yyQ'4X$I #J9Ǝ +v-RjHF֬իN%i9%I"V> 55aJRjD$E&M 75Y>Tg$Ix=Xa!I[,01F#WIa$I祻-+arسƌ:d$Ip%KN$)x"I&L' I"I)XχYƏ:d$I:(-]`&X[%] $I޽PXs'EHR*pK$}D,0s&VZ>$  $I@WWZV:Ύ:T$I5=|jj$ 6O@$I550iR!iX@$IJc'OڵP\ Ac#u*I,IT{;QY eeؕ4, $:()LؽM:t$Ii$al +v-"IR <|YYQn$) 8V= u"IIR\u5L ÇCKCR, $X . kv태SIJw`I0zUU+VbWRbHbmE`HN$I$I)**`\2%ص|HJ4HŋaPB6la~()Y@$IJrMMy.غ̉:$Hb0zt|HJtIPw7,[+Wgu*I:7G$IJ2mmV%KDHIHm-LN@,D$p_ìY GJΟ#X$%(-]`&X[%%/ $I l^(,^عN$I,IP,0s&VZ>$ $I +\YWC]dgGJ#X$%ְba WJ<$)AI&ˇd$)b'OڵP\ Ac#u*I`Iv(* \+)Y@$IH]@ff[N$IC,I,al +v-҅D8 zv쀬SIR8%IR8V= u"I?O@$Ij:ˇe$iUtiXoDJ$IC!((WUUb+v%"Iض -#&N:$%G$ID}}PQs”)aŮCIx1l?  >I $I)<[œ9Q'2$]X,<`>cF,tfI.Pw7,[+Wgu*IJl`It­K,:$%O@$I:O0aB8y%ˇ$ $It_ìY 7u*IJ.`I4PZ vMnK҅Ht{Baa8ٹN$I,I J9Ǝ_|HŲHԏ0rf ^ uuu*IJ~`IwZ[ÊÇ&_I' $}HM Lol|H`H< kBq1̛M7EJR#XEEtTVBY+v%iX@$IiJJ 33qQ'$)-bq#̞ C"IJ;`Cu*IJ`IʁaѣP[ Q' $)mTWԩ0|8X>$) IR{]X . kv태SIRzrK0zUU+VbWd$m`"9aĨI$>saʔb!IIRJ9~/;߁a~&I "IJMMy.غ̉:$$)bӟŒ0zt|HRbHZw7{oX|9cDJt&`IV[[p%Q'$' T[ &^|HRHʩSP^ìY 7u*I@9%IJPZ vMnKRHB}=;!//D $)b𓟄1v,CDڵz5Avvԩ$I,IRBjm +v(,:$i0x"IJ8550iR!I"IJ'Oqb7/n:$i09%IJaUc#TVBY+v%)Y@$I w|zkԉ$IC~477SVVFnn.#F`̘1s|gg'_bĈ̚5_~ySKR`F=rsa~ˇ$:O@qFKaa!7|3GG[n}sgX,ܹsyW'?I{1ؿ?999qHRz-^GKN%Ij~<lٲSTT~@uu駟f߾}<,XBnFSO y~IJt…pX( Q'$ŋ#X:uG 7?yZ[[>,W_}+Z{!,IɢN#!Ir:::+_~[n'OLww7Pœj,]NJR SO=E{{;%%%g}o5\seHIR";t'*.:$) >2ӟ(++cs=g}'KO{cX' {c IDATN ULIJH۶E0r$ĉQ'$Es+_ 'x8ǭX]v===e~')MAE̝ SI' goswo/rWgx^s?W\qG^+--t%)ZǏŰ};|{ #/IIf˖-lٲ#uvvF&uX@Π6vg?^|^饗˹gl޼%)45AAtu֭0gNԉ$0aBDRG"xgxرc<3瓙9%) 0cF, H?oϓϱch"˩_kB̲eW^c=F__?p*p}ᎏ͛}$Y@ y$##a7ȣ>ʉ'$I"I:0rv-^ uuu*IRrKtFaPSQ'$%;O@$IIIఀH>0nU\ qMQ$ G$Iho[\+I\I./)pǭFH4ƍ0{6IбHR{-Xᡇ`ʊ:$)9%IiXZϏ:$)x"IiN#!I $w߅U`Ұfw>ɉ:$)8%Ii!((WUUb+v%Ig4m,Z#GB}=Lu"IRrKRX_TTܹ0eJXk$EIJQǏŰ};<0|;0̏$IHR jj {tu֭0gNԉ$I ,LRH,?)̘G+ˇ$)X@$)Etwý5˗Þ=0fLԩ$I(G$)w%KN$IR<$W[ &ˇ$)Y@$)I:0>̚0~|ԩ$I:;G$) ut@i)6uj.IJIJ2PTs'EHsKD,?I(cdžIRHR #WkPWQ$9%I 5=|jj0D$]8O@$)I&ˇ$)Y@$)<ƭa̚0~|ԩ$IJ\`IRص 6mu\sH"텝;!//D$%G$$II:'øUq1̛0n\ԩ$IJn`IR?ÖF2WJ4, wꠤ23an6-D$G$`F=rsÊ]ˇ$I"I@g',Xkʊ:$I,IibQI<֪aT>ZZ,$ 5 Vҥa}u*IR#XΡCPPF` WJ/Iie6XFz81D$G$>saʔb!IRy")?lEHX@$GWl sDHgRR,01F#WIgra2X/={`̘SI$pKRik <.\$D$<2jka„p`$)Y@$%S`z?f͂f?>T$?`IJjPZ vMnK, ޽PXs'EH$#XN,0s&VZ>$IJII+\YWC]dgGJ$ #XFkkX{0Ԅ+I\<jj`Ҥ}SCdeNk̓F7.T$B9%)aCQQ(PV]IDRB̄ݻaڴIƍ0{6IRDR <|YYQ$I,I bQI UWԩ0|8X>$IJeIU`Ұfw>ɉ:$IJ`IġCPPF` WJ, n6XFz81D$)^7}}PQs”)aŮC 8~/C ٰ$Ii"i55=`V3'D$)*~(ib3`0re$)Y@$ nX Va3&T$)j`ItmmV%KDH$% O@$ Z0!44X>$IGY@$ S`z?ehnN%I#X.ZG®]i[$Ie^(,^عN$I#X.H,0s&\}Xk$Ibt޺՚5z5dgGJ$%G$ְba W$I IMMIt, IXa޼pǸqQ$I,IgEE:/+sŮ$IpIgTW%% wôiQ'$I3xwǝw'?I Fuu~'dذa}]r%C\xlgCnnXk$I38v<cƌ _322xG>? ) NXjk KN%IR 9rYYY0iҤ3n!H' ŠݣG$I3$++.!4aT>ZZ,$ihX@H,#//QFqկ~cIUUq199Q$I!p嗳l2n6FEKK ?я>}:ST%xxqX$ihY@@aa!":??o/}K|0lQP_&DH$GdL2QGQ냊 ;L {X>$IRxGy￟+#RZZ:Tє&ŋaPB6la~ !IRl–-[>ZgggDiR$?sUW}7ov}]SSxwGHg>/ґ#GxWcǎ_״pw3D,UU0cF,$)*ſ[os=Ç7ȑ#)//_k[o/~L8+x ƌ#(tw7O> 7åFJ$3 Y+?@FF// %K9r$ !~_nV\w`I-j~`dpɒI$AF,EB3--->R[ YY_Q'$)5kg@r_× ͖IXRDG®]i[$)X@w/Bo/ yyQ'$I#XRŠf΄믇-$)Y@$F֬ի ;;T$IgZ[ÊÇ&_I$%O@$SS&̛,$)X@$q$] 0o44qQ$I:?`II1ɉ:$IsKءCPP?˗bW$. m`"5 a„I$ -GAE̝ S=,$)x"x1lJȆ 0̏$IRHqx0~uQ'$I/?w *1F#WI, e`ʰj3&T$IpKBmmV%KDH$)ZHC6lˇ$IX@Aw_× 0~|ԩ$I#X Rص 6mu\$, ٻ vI$%GAe%̜ _[>$I"]0rf ^ /Q$IJ\`I5=|jj$II&ˇ$I@Y@p$] 0o^cܸSI$%Gjo"hl bW$|Y@̄ݻaڴI$%'G`F=rsÊ]ˇ$I҅Hg @yyڱN%Iq@X{(<\x\$ITWԩ0|8X>$IDzz`*X4ݷrrN%IZC^y/wŮ$IP(mQP_&DH$)u90w.L|H$ -O@ŋaPB6laqI!gQij {NI$?UڈŠ f̀ѣíI(-twòerepg\{mԩ$Iҏ#XJymmV%KDH$)}yV[6[uwCCC$)jS`z?ehnN%I$Gr::vx[%ID)e^(,^عfΌ:$I>,X *+Cb!Ix, Jz]]aj7 ;;T$I#XJjaPSƯ$I<QҪIMMId`Q9y֮b{u*I$ #XJ*PT]IdbQҨ w|Lu"I$/Gb1ظfφܰb!I, Jh`; ++T$IP`)a8V= =EH$I%j:Fˇ$IR(Utix|^ɉ:$I#XJAA <8,_]ITcQBض -Q&L:$I#XT_TTܹᙏˇ$IR*D9~/C ٰY%IRDhj {NI$)YqAU̘G[-$Ie`ʰjڨSI$)R\[ .Yu"I$E ڰ٪,$I!s_× 0~|ԩ$I%G4$::vx[%Idػ v3N$IDM,p\}Xk$I҇Y@4(՚5o /@vvԩ$IhEkm +v0~%I$]4)<`d$IY@tANkEJ$I,v(*FxQtŮ$IRW%%6-D$IJ&`i@b1ظfφܰb!Ie9uv‚P^v쀬SI$)9:p =z{͋:$I' :j:Fˇ$I.DU`޽u*I$GAA <8,_]I$  >m,ZFA}=Lu"I$GD_T?& ?m'GX.k:d=hDЍZ1.fꖵ! k%qYj%m _Ue _gde={>s/y_rs]|> p _ !d'K uǍӯVuE]w2F:xP̔]S $ܼ)m$;\RB@rι2a+@H8zTZu snIӟJRK**Nz{Lߤ={_ ԩSRAtt"Sc{]G\%|~AG_wr_IR\S扎-v/]{up<{~ďJ۶IIyy{|{ `.Whj~Kn 8!_/"=57nL999nWuueEGG+""Bjoo&cݻXZu] d }}}*//י3g" o2(77WJKKg]zUYYY/gU/7UG>CB\\zzztE2Ƹȑ#jhhPUU^}UmݺU'NPPPf\˿%X:v풂f1oK@`z )+zjkk5k֌9ѣu )"Bjm~YL?԰ k xA{{&͛:{=?cxXںUڸuSҥި ;i˗_̔GO¼R*`)n *cKHO>*@ ,,LÓևd6;dɒ yT`kBGG$ʘ bcc=iZ\\]uvvJqOr `z Vu~)))O&766*<<\wݷzj>|XS% SWu)~⡞ ())IA}8ڵkU[[:Kr=ذFyyy g9YV;f#LɊ>Tە6i===]7oٳgX5OzMrBV:tHOM!jWWW8|JJKKpBfl{wm۶M{U^^ބQTT$=1 ;v8fV\i> )..6AAA櫯o6ol-Zd"""Lvvikk|kfLdd 1\r?hv] sal1>>fp @X2! e ,C`@X2! e ,C`@X2! e ,C`@X2! e ,C`@X2! e , o{IENDB`pytest-mpl-0.9/tests/baseline/1.5.x/test_tolerance.png0000644000077000000240000004023413133617760022646 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATx}n68P7Ifӊ2QəsTDG7?IPCG8IXn-6Z;=%G1jUW$iAjƩk{}c&|]ߝ\a_{?w,Ǒ$I @$IR氀H$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $IH$IJ $I\Ǯ]3f 뮻4hoV?s FUVu]у7|SK$I/C$_йsg*++Y`Ν׿5:ux ɓ'С_WYjU$I&|' 4r;vѣG?4iҤJ$II3 7>{5o&?5y?sС'I$%= HZG_?N6mѵ2"I$e H8p1c/|UUUdgg_s; SUUP1%I/l|'> ~j}}NN~5/\@,#''{O<ɦMk}$I¨|+7Y@jqYzٳg/~A֭oxO6m8~5?ֶmݴiC $IJUV1x1R~!{?9>`{衇/~q;vpwҡC ~rKu5a CP:~5Q ̟{M Ͽה2dȕt, Q]]͆ xGJΜ9ç?i5j@)--^_~@4Zn:S#x?g?{'iIy .\E (+ÿהH: u;eeeӇ'O?ɓ'S\\LEE۷2|~iϽŋfV$)Ə}`H, ױw^beee]X,FVg?'NdTUU#P\\g>䗤PV"Xv F, ױu:n,_͛7>;$%{ahx1"tIRr BGP9}z :v 3kJkRj)CKu5 Ne^S^RDt[fφ '^N#IJv`Inٖ-0uj_ޡHRDtKG1#tIRHnŋ0p dg]$ݐg@$I7`.(/-C$ $馔h:$)Y@$Iurll0/  H$P<ÇñcُfB'$* $ a:(-B$2G$I*/I`D/tIRHjTYf F, t  Yڕ$9$]ה)};l[N#IJI5JKa\7/$8%I0`:$)X@$IW?-l-s٠$9%IeFAE IґDŰz5@NHҕ#X$v `XF, N[73'tIRHR| kBӦIҝg@$)M[ѓ$IjhIPee0s&̚?:$)S8%Iw`P&M FI, ae-[ʕ.$%#XAqx98t(znI2D2ҥbCΡH2#X!v1c`$I!X@$):-F4W] Cs:$)Y@$)ͽ2l7BH2#X6na 3tI, W/:5tI"IJC.DV,$% πHR?ۡEi$I_IJ3+WBQ,Y]N#IP^޽Ѣg#B$ZIJOSOAǎpa4$]#XaذhCNND$]DٰaA^^4$,IJq[D{>N޽C$vIJaУG\dgu" ٰz54j:$I7IJQ/vAy9l:$IucTR E裡HTw`IRٿ?Z28x0tIDѲv`2 Jҋ#XDq5 **`N He$x1^ %%ЩS4$?G$)I&ر:$I "II u9sB$X@$)˗ Z:v-4m:$I 3 شiu+l=Jtf`L5 }()a8wxC'$) H5k ,୷;уo|ݛ,ߤL˰ilۇN#IR8}=z\)ӧ?<x 9^PP@AAA԰6na 3tIR]PRRrյ3gJ>, >\t_j~AIJÇa` N Ft3 ={еk@҃s@^U8:t?ʵj^}UrssyBD`.DV'/%IZ-ZӧOsQ6l{رceSQQAvO EEE1"߇[2Z4d I$IRw}Y|9˗/e/7D,IInh3πs$jN$KR=:}z :v C$) $Փj6,x됓:$I"IdlذʠU?$e4G$l:zFe=zD%IR, t.^!;VHT;πHmxص ˡei$IJ~IE%%`,Z>:$I,IGKg Fatll0/  H$݄xcǢ͚N$IRjHM(,u렴:tF$Qy9L'B~H, TѾai$IJ]IK`Р5UInJ L۷ömкu4$6 $բ΅y+It{<O? H, tG۵e\6(IR}qK>&QvЉ$IJIŋaj()NB$)8%Ic0Ǝi$IJ?I' Fd$e((] MN$IRz $Ӧ֭ys+I0, 2^Y̜ f㏇N#IRzsKRF{:IB$)Y@$eh`˖r%IJG$ex{ۼyD$e t)Xйs4$eG$e]`=::!I"):-FQ] Cs:$I")c2l7BH6na 3tI2DR;|^`i$IlIi…wêUz$Iimxطo-B$IIikJ(*%Kki$I8%)M-|1"tI s4<t N#I#XJu5 m<u H$- 2{6lee:$I8G$-[=SBޡH뱀HJ УG\$%' w" ٰz54j:$Ig@$^]Z F$")h:$I tll0/  H$Յ#XRN<ÇñcُfB'$Iuer a:(-B$I7,I)&M_i$IͲHJѾai$IҭHJ .Aa5k$$ La6h:tIt, ^i)̝ EW$)u9%)<O? HeΟ k˖lPtèQPQ;wBnnD$>X@$%ŋaj()NB$I,IIg0Ǝi$IR}HJ*'N@Э̙:$IoIIe((] MN$Ig@$%i`Vؼ9z$IJ?II f΄YC$I ?_|'x{,okl޼/}Kw}7я~@;0t( &N#I'O䥗^$N뿘2e ͚5 R  s7 ;;t"IH`5^PP@UUofXRRxeش VC$I' m۶|򓟼zV &c*((޳Jq#L3f@ϞHTJJJv̙@i҇tڕ~Gr_~Qb-[B~N)%0x0SN#Iҍ]{k׮GnSee%W 4x<βeˮ\,_-ZUƹp!:t~ݰjd7$IO@jh"N>ѣGذaÕMcǎ%77ɓ'S\\LEE:޷o_/|'NХK֯_/KӤI`ߓol-ZN#IBbܹ9rX,Y~=C%77X,Fu~o}[ꫬ\|LʕѢ%K$IR,fLݻ=w/?׾3(IR$q4<t N#I#X]u5 m<ujI$ 7{6lee:$IJ&`IW[D{>N޽C$I"޼>CѶsIH/ WCFIdI`.(/-C$I"鶕hY@$]QV3g¬YHt$y}aҤi$IRH*Z6ز%\AIp2\<=Em}sJwށCo_4)tIgɓ'y饗8p=[k.V\INNN='T l +WlP$' H ڶmKee%.g&7nÆ UVP$瞃C7H$aX@jФI. ߿oJjRXsi$I;wɓ'3uT?Pv1c`$IR:43fpw2~QN vN#I| o8twyWiҤI8JR0d;o١I$5< H7nݻw__CGQ{eش 6nC$IJ H=۲e 6mb>|x<_8|0-Z 77Ư1a1H4hv%ƍ0}:̘={N#I9s&PagHE IDATX'|XGGaa!cǎk7tTr0  zԩH\{k׮ m̙3|ӟQF|K_b׼nȑ|[s\J.DV,!I2-=z 6{0vXrssOO}ꚯ5n8>O// \Ə}`vh"tIijbܹ9rF֯_ӍCK,#Ǝbbͫrehp[I, xwo˗|}}DRڻ7Z430bD4$I8.5ӧᩧcGX0tIDj@0lX!''t"I, R=6l2 F$)m;$IR"ճa@ΆիQЉ$Ig@z kC˖H$% TJJ`X}4tITO  >:$IRrHh`^A,:$IRrrKM8 ǎEg?5 H$)yY@TXAi)t:$IRrsK 0iLN#I, -}t3gN#I, -t  Yf$Iln)};l[N#I:, M*-sa޼hJ$Iut`i$IRDee.$I`IuèQPQ;wBnnD$I"Űz5@NH$.Gر&Lc!??tIfjqݺ9H$> T˗ Z:v-4m:$IR Ti`Vؼ9z$InD29f͂F$)}8%};Сз/L:$IRzH*Z6ز%\AIW8<:=zyЉ$IҏDKa (.ΝC$IJO`I]0f $IRð(:-F$)9V] Cs:$IRz(2l7BH$?G6na 3tI`QF:|^`i$I2D…wêU$I ea>ؾZF$)X@QV"Xv F$)8|wohg`Ĉi$I2Dix). F$)s9W] ÆE_rrB'$I\ٳa(+i$I2#XJk[D{>N޽C$IDi!?z􈶝K$)< ŋ0p dgШQD$Iπ(Mвe4$IDi,EGC$IrKieh쳡H$, JgFbЉ$Iq`)-0|8;h,t"I$]Di֭R!tI$,r4 &N~B$IRm, JiѾai$It#K`Р5؁BIlJYSmn:$ITZ s¼y$IR#XJ9OÀ0~|4$Iee.$IJ5`)e0jTTΝ:$InD)cbXJJSi$It+RJر&Lc!??tI$* މп?tsN#IaQR| kBӦI$vxDIm4غ6o|%IfQ*+3a,xi$ITyy'{ʢNnٲÇҬY3xFIeeeNCB߾0iR4$I/~R'OK/q}Cm۶:o~? 0|3g?巿-Zji*Z6ز%\AItbA۶mUV޽nݺBw~յ|+|_d…G}M8<:=zyЉ$IT, 5hҤ-Rhтw--] +V@q1t:$Ig@;w{7tkGG?$I~, RXXȥKwu:-F$I x7 qNu5 o@vvD$Ij(vGΝYdI8Ia&ظڷF$I Ҁ{=z'> ~ӟҬY:7aO4D̠6na 3tIURRBIIUΜ9(M4?ٓ/l۶O~u~%Ça` N F$j={ڵkDC跩r+?Opq ӇFV,߉$IO@jh"N>ѣGذacǎ%77ɓ'S\\LEEzk_o>|8gW]wE߾}$q`>ؾZF$Ibܹs9rX׳~zJnn.X~޽b1~?2\ EEd $IRfw߽k/_oLwohg`Ĉi$IhN+aNai$I(!aذhCNND$I =6l2`$I,5-[=SBޡH$)$ C~>m;$IRf\Bv6^ N$I<3q"вe4$IJ5wa"xi$I,Rۿ?Z28x0f̀=C$IR:dÇa` N F$I>0:t~ݰjdn$IR H7ۡEi$I , jJ(*%Kki$I)@{FyFF$IaNai$Ii 0l:99I$)X@2ٰaA^^4$ID`e-[=SBޡH$)SY@2C~>m;$IBa@ΆիQЉ$I<&N]Z F$IJJ߅EGC$IJ[GKg F$IX@ٳѲ<(*X,t"I$)Vap8v,:ѬYD$Ia:(-B$IV)/z5q":$It- H}t3gN#I$]$ \E׬I$)Ij2om۠ui$IY@Rkܹ0o^4~%I$%3GRÀ0~|4$IҍY@RѲv`2 J$)58q5 **`N H$I H ZV)tI$J1;v 0v,N#I$ H 9q":pޭ̙:$It, )e((aZh4t"I$y$EL[ѓ$ITdIee0s&̚?:$Ityy'{ʢ9sQFѪU+.zoy9~{:InvI$)X@jpI^z%8C=D&6qկfƎ˜9s8q=NNUUleKXe$IJ}`ՠm۶TVVҪU+vMn|~#~_QZZʓO> С/"V׈ѻ͛"I$% ?A&Mhժ-[ZZJ֭{wK.k,] +V@Qt|K1$Icio&?5y?sСZƌѣ$IR4ǏӦMktرc?q"t7H}hҤI$IRp~REqi= x;v,L9_HvhӦuǬ?@۶mk{=zR>>ҧOy***˻ 2K7k׮#(C^S^STTT޽Dq0.F*TJ4Ң;FEeT$*"ZD-xIȤEЅ6 2 %L&v翈Fy|EϜo<}s= ;wۍrGz<o$I߿vɒ%*))Qll,O }E ZdPoer1f7񷩬Tjj;ݻwKf9s(22Rwޕ$ǏSPP$)!!AͪSxx$K)))۷o# W@ %%E:p<TXXFxۿРSz6nܨ($$DϟWmm 8w<^ zj9+22RGѱc֦3g̙3ڶm*| 5 5 :;;o>(44TyO?~TNN&M0-ZH1ZQQ\.W ~1|IҲe4qD\.\l5f|UUU\͙3Gaaa6msi= l޼Yeeeڵk˗Ν;?~u-_\=޽{5qD+--M555>}ųp0^~tav[0aBw᪵UִiӼ. OI6ѣw222kiWTF۽kںu߿^k/]ɓ'k޵effʕ+ޗvuuujG=Z&MP- OنjԨ_ ٳɓ>kiG *>>եyojkkc=%%E?V]]nÚ?&q)44TVR}}}mQDDD0`͊%c^z5ZI}bBCCeڷonݺ%W6l?JJJԤuy3 =|cƌ~>ZcLy鵌 eddxŋk…S~~o# 00PO>Unnn6m̴ Hׯ_q>k1kv5o< نlxkkjjz+44T_ _Zo^x" نlßttthʕիW5sLiG k:{wSJMMULL$EϞ=ӏ?z<yZ[[UZZt=މO]j-[,?[mGWW233UQQR$3mp83ԛeeeڹsUUU}n$);;[jhhԩS%ǰ`=~X{QDDK=x@3f_h$͝;WǏWuu J~S?:u>|&>}Zk֬QRR$iǎ;v, blvܩ'N(==ۃ ~ٰa$6h#HGGٻw6!!!f޼yƍݎ6AAAMdd 3-25556advAlMpp5׶OHllq\_6  JKK\.8f k5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@XC` 5@&IDATXC` 5@X?Y[Q}QIENDB`pytest-mpl-0.9/tests/baseline/2.0.x/0000755000077000000240000000000013167753712017123 5ustar tomstaff00000000000000pytest-mpl-0.9/tests/baseline/2.0.x/test_base_style.png0000644000077000000240000006065713133623566023034 0ustar tomstaff00000000000000PNG  IHDR5sBIT|d pHYsaa?i IDATxy|Se6+K%iPJKeuV"A 8 < VQAt.(Q^`< ҲZ,ڠm-M^j=Ms8s#^ߑfDDDD$y 0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I  0I `3YVjvTv)rKTglS0]\; Y4Iv@3I  0I  0I  0I[Zxgp[oEdd$nf7}v{wrDEEO>5kΟ?=ǎÔ)Shu]رcG#""""wn>d2n̟?ǏGII ,Xwp\MŋtR9s`̘1?QFٳn ƍ̙3a41sL[^/BRp8`޽ؽ{7ƍ'cM6!!!;w)S`ʔ)xꩧ-Z\\ 4d3+WĉꢉmP.?P*?~<oڴ رc{vsahZdddfa˖-(A)xMoq\سg ..yyyP>|kcƌ8px=zt f]uGOkN_eo@L&|(,,#+ 1-X,n- }YWz]UVVB?c /\Nݻw#//G955={'N\^QQիWCRaԩ-$cLxxO9~z~Y0C ˼8Îv ;Ç#66())_|r1ͻ6>''Xt)-[vm{JJ OM6!55w}7JKKcz'Tbݺu4iҐF> Xr%zюDDD/_l Ļ̺UAߧ|-s=(--Çqa ,, ǤI裏Blڵk>7nZsϡW^nSRRcժUرcv;b Z"""kvUX} .3݂x;QcF12'ېjEqq1bbbưv.iY{gt &|]t\ZlLԡk*:sѴ<""""%DF)+õxod2i\  uZ'OuwSac=C}@""">;_fyW)â($roS0QRisa l9޶zhNcHW}[K1Q_Z?7bx{X1T`%WHDDD>JbKȱ>I7m|+]-o@`IA(-HDDD>%>U_UNoX w}%ޥ81/τ}%]TؐG9EDDD>Eday/@<ޥ%'\XrЌՊ)xif::o¥.k\|ޥU9orCYzFzmn:r;fq7w0^]  yKd5Vc|UɰzzxorHDDD^S\&DǥtDV7K*;AO4RKxv-Ʃ!gSvHDDDTfx{]G] }%VoB~2 0* DDDjV|UjDhؘGbۻx olc0x{}9\]ڄ%`jJEڻeXĞޛHDDDvʁ?7(ett '=DᥙQCA=cӇ*Pe%H8T?SC.Z|3q*:np.W0Q}qɊy&k=_'CdH(TlS,?Rwo3J{lIՆNWwyEhۻ*@"""p Xs ǫ|x3Q=׹ܹwӧa41l0,ZCmҎp17nԩS~(..nplbb"rsstl"""j*c0/]1o%.[ڵkѫW/5 ]vٳg\HOOot?0ܶ;^rnaܹncccZ TXe*P#;yKۻt"n0>>vr o8q"222@:ycǎE^jXlYsj ""6Tn .:Nѣ]:3'L]BBa6qԩ>L6 ""lO! i Tn !+-;O?aϞ=¸qcٰyf"44MZŸW௅OU ' F79jsMطoпlp\CF̟?޶x{իWcw$o Vg)a]\?kN_jǂj V{mGj>((]\2,rCv'ND~~۝M%  .رcݻۘW^y#F@\\j5Μ9c۶mA~~>BCC=VQQNgHDD$%^qX Ȫ_]"S( 柎 ¼y󐟟3f(` ~ lm`+::Esl шHTZf]jҮwg+_P &nwj$RF}vqLaaa+|X|9`ODDD.3ѽ&G`q(wWrV333eh4ۛ0h WK6ǏɓVNVCGtYz߻Xu:S+]NwI7Ft{5 DDD>%/~U '!L%u;]Q DDD>R0,%9Jd=b4NMÿ)DDD>" (0j?x0﯁~ DDD>\“HK^wR/͌  Ċy⹽ 9> Q0u0C*] lH#{fF}[n/!:>xu:w6HDD.oWU.EaM 1yjd0!h72:YIzD^I gkv]Zf{j DDD^Pnu3>=o7KIVۻPa$""jg{b~Jk=_' ۻP;c$""j' /;ߋw(LjHw!`$""ja . +ôS y Qr}(& ?@""6rʁ9]or x;IwHDDJ ,;Tje` +ì[Ր u @""VĢf^or[q]1пXp"]2AX2$ro`$""j ?wz˝ޅ|  Q3| 8[7N-4lB .S׾SK 9%p_,ۻroIII b7ߌiӦѣM<ؼys;vLXDGG㮻Ž;Z^!Q+pb@7?yn+999Xv-zQFk׮8{,rssw}M>@bb"ܶ8m`Ith4|g9s&.] 6<""EKRUwj1wN-c׮]n-??'NDFFش ZlٲF9,Zr4h`ɒ%3f V\'"66I%""j2 KF ' z*sahZdddfa˖-m~\""%~uhSȀe"i؀++?YYYZFJJ Fژ1cht²CS}I#TޛQjr,..ƾ}7۷os@gʕ+ɳg㶏Hh45DDDqrfL8_%e֭j84 jwNIncΜ9˛صkW,_ƍCll,, >+V ++ 2 /񕕕zmLcVfv.ER_*]Vśj7"H54+Z8mNK*']PPP췹dfY;r0gl߾3fo٪F$&&l6GDDĿo;v {v{_~PSS/6z"8~/y }.ƗZAP4q: }vQ֒rt o٧j ԉ :Odڻ]O5N3a_x{(6$@.'"NE<^`FUMr0﯁BU?6@""u.,9hߊjEN킁],7":)u߄K5]0)Gt u*uN+ۻ@Vс^QgHDDr;fq7w0^.maOoOVcJIl/œͨi]qjԙI\7cy. 'E8=ۻ5 }%VoB~2 0*G\ DDjV|UjDhؘGbۻ uolc0x{}9\]Z:%`jJEڻeXĞޛc$"qJ{x{сXGfFȫA=cӇ*Pe%H8T?SC.Dm|3q*:np.ޅ=0Wdł</ˀX2$*w!j7 DDԮ,?Rwo3J{lBņTwyEhۻy 9KUxx@xo&0ۻy s1p.wd{"c$"6!6Z Ԉ,(ex-f.DZZ';`wkSe{HDDk3~znOœC QGc$"?iw' IDATkEt\PrR`hK3#0QlC9fB.D>7Ux*8EڻDVİ /r %%%عs'vލӧOh4BcذaXhڤ`׮]ŋaX?8t:{fGDDmL &.:ޘ K!"]|[ڵkѫW/5 ]vٳg\HOOot3f@YYSB&!//o&>S_BnsmmaDD ÕYS+eX5Li7 s صkmĉ4?q޼y~ݻ_&|I{xW믻Obٲe-Я6`Uߝ*d+WunWN0-@BBa6qԩFwxzd2z)Z:g"")cO)+Q'ҬWw*-}l6l޼ E|||;$"֫ l>mTMZ%rR+ۻu6Mطoп>=׍F#ϟ_o[||<{=ի%"4a ]x+C]:&@ݎ9s栮˗/o ',ZGy#F@\\j5Μ9c۶m0aqVGfv.ERZ}-\"]ɰvU{s&| r@.m.l\.̙3۷onj3o@ϟǽދrl߾)))M~9sm6KX`A㋊t8gCjިpk%jB޽{w44].ϟ-[ࡇƍ!7?~<._M6{i<{?>FǷ hDdd$T*i]Yj~ Vt5JxWdڻ)¼yuVL<6lhU3_EyWyWṘmK_RĂ<ԉDNj8n|}!x}KOOGvvv>HKKk$= ͠sXo 9d`X AoӾ[n<WVV2_[JKKHaa!nFm_|9`ͩSasᩃfl[uJdqO$N-fffb˖-h4۷/^{57aРA<:.33K..]w܁}~' ++ AHHΜ9ݻwn###mR4O.Ո 77Nn"H)k멉c/|TpTIo#Gpȑ\QXX'N;v,?xHDD9|oXˇ9< 6`Æ Me|vlnD|) &,oz`1B} :IHDg\W< Sp&L{"ȏ\v`^ۻ$GGExu:w!`$"$.oWU.EaM <$P&mFF"+Ihg10Al-4KX>TlBDb$"QV'/0VqT=nձ 5  PZb?i0ޅȇX.p|/%V@v#"ޅGՆ +ۻ<7 "L.D2 DDju%@@9&0g&GD~r`CۻuC N#*]: UZd/X!;0V5dlBDm~:ۻ59)zܤe{"j[ DD^b+0H{ xbP( E~DsG*]z^irg7w!HDξņنrt~srw!HDN.S׾SK 9%p_,ۻw06_D y QтgT"%D)ê;~sۻ1˵N,<`?ۻ @NJ`"CDr/fynKAP u @"V̡ |x":O9)]p{K3#"_l ۻ̺UA.D#y OT%ޥ[o'qwL&GD DDPhce]bf]ޅ|deeĀoӦMѣGs˅l$$$ ** }Ypy9vLXDGG㮻Ž;]Q[|_~  o'. DVsrrvZ FB׮]qY"77.ӛŋcӦMׯ̙;w޽{_O> L4 AAAHOOFg}3gҥKXpaTMD ɰd_]*7 Sʓ+DܾJc׮]HJJ=??'NDFF(rM6!!!;wJuη)S`ʔ)xꩧxÁEA.#77 ,Ycƌʕ+1qDƶh"U\'BsSʀgðh w!N $$$ 99fNjtǛ6m<;IIIػw/m7 8w&O|-VEFFl6lҼꈈZ&!ϡ_@ƠP?"4Փ P4~]K^^j5ژ1c7FݤDD%^Ɩ3fSc߄nҕsi*طoпѱ555(--E\\\awg^v׿."##hPTTԤZaj Vg)aٜ^ւ[!Q2*QkS*)}ڥY;F[&@ݎ9s栮˗/otW_ה/Nxc2_ڥk?[#(?1rWWcQbkًa+k`r0oc8q ^*S\HDs>E`0KfFD]nfffb˖-h4۷/^{57]k֜L,]˖-6&%%ӧOǦMرcz=^}Q*n:L4 iiiW\\+WGm]?I!cX]h{BJ#5ZIGDD[x"zoO֮]8|ظq#j5Ə{zr?VŽ;`+V4DD;YnlC9NěM׆ lV|"NIf6CLaZQ\\;!w]'X%l"]*VaR_ڥV; $"bW*?{ tQ/D$-GD~COQi|r#P<sԐK3/\7cy;|t @NqzKDHD޾+7gd3adc?"8@"jV|UjDhؘGbۻ DI}Sf ?ۻL:hUlBDt u*N7OVcוwʰ6A=79"N:UoBQ˘vC s""`$"' >T*.A šZ2w!"|ZՉEu*:np.ޅ1 Dv_bA Ze@P, ۻ5  ÅTۻ ex$ۻ5 c0`™J.Uô `{"b$"p X} }D`{"b$wҁنr.:n܍XG$ۻ  uAЂgWFd/D)wh_ Q`$K0ۻ5)zղ Q[a$"ߋxX=wQȀ'sՏ-1T]xp>(@Nj PyifDDHD^q s (ryK^C 5ۻ@"jWv׾T)%"Ht'] v1pW.a]lBD DA?χ+Q+Vʰjnb{""ob$6e8 τ?Չ3B=z+/\ŢfynO5P Q`$V l>-&9)z֕]: J2pZoUcaQ QGc$9rkKKTo'q׍Aޛb$fll ߔw#kt.DDs1۶mŋ1rHt :7on֎ҠDlݺ{qlZZZ˫$6dFgE_h YI:|0 jp^Bqq1fFRRvÁիWC.#550̝;m{lll@DmgO|Y%]FD1Y<@D [owވŚ5kbŊfGip~ A0vXtuVe˖5xD~U0<_ - h`{""`9rd>L6ݎADmU| V)z g{"h~'ٳQQQ7n\cl66oތR">>C4@^.jۻ̍S۵RrՏjܼy3\.~ClFϯ->>zդXVVg)aҨ) ~݃xs)Q*QkS*)}YwAAkPkw{:#`ĈZƙ3g~zl۶ &L@~~>BCC=VII NU2_י1-͚vu`ijN?{1]\;>+ ݻ^ .\@bb~z4h\iM`+::fh4"22*wb[K",@W3{`ًa]jҩk?L>9s&mۆC5)zcyUR2vR0,%Sf{웊v)l6c׮]j8qbX4ODqOQ!E%ڰtxK3|5߶mV+M֢4}QlMVu.TԼ×HbHՉ v ;zܪ ̈ȗ0=?Y1 /x|O JU?""b$,^8ZwoQ ;Ey/5; &Vwyo^E]Sr|] H#.rMaB`M| Q'sʁ9]o2@GTۻQ} D UZd/X!;0V5dlBDD `$~:ۻ59)zܤe{""؊L,E.%CB c$Q5v;Ro+J{; 5  fq):n!xN-4lBDDMHC.S׾SK 9%p_,ۻQ16_D   QтgT"E/wj1w!"Va$@kXxw.DDznBAr/fynK"cP(lBDDm˪.@bb"ܶ8m`Ith4|g9s&.] xDm]TؐGDD{[owވŚ5kbŊ )) ˖-ktE ˑA,Y1c`ʕ8q"bcc[</ zvWsaן]w5x^jȑ^ZΝɓ?jȀfÖ-[:'"0׹0/ (tJ콿 e#""秊Պh ::m\^^`n3p,o~ü&\o2Ň!]h}vl߾?T*1{l\ zY@>} F&jr֞lz?Kj:r‚]CX7LQkS)} rKQ{-v˗/Ǹq łÇcŊʂL&/|m|ee% ,,^Ә8+6e4m IDATuk?]#?Eq,cCOϽ1RKkڧ~B޽{~[`~Я_kWHKKСCl,^m~N1шHTzlWNX`sy !5u #Y;kZtzHw}شi={VmXj7!T|?)RԮAso)Y{ҝ6<<`Xmzkg4Q]]3˦?A$,lۨ0I?""/= Z$&&6~Ϟ=S g s &Tw%x/u~eee(,,DYYYǏop ~׶gϞqĉk+**zjT*L:%+"a;z#x{GO ""wM6p)~xW߈#0}t@NN233tzO6mpm!::G'jS Rĺu0i${\qq1V\=zϟIFC*THr#:`AAS7<^ɬYg磼r111;w.,X_{w}%@ mv kݨV7W^թ󶕩v>ԉnb+w]69K[Q,@G1 FJrrr;z3_~{OJJ >l޼EEEhooG\\џ|YbU=.77v$(;$NwA"22ҭdn0oF w a{b09k; ;cZtM֪:x=4]&o1̟%""ܒd]hŚ h' h9d/I@r;um(τ~$y)x@9&Va!V / 'WHz[h0F.#wIs|,aH.M=qQ).DD$mLeuMZф74CQv$)1}D.DDDR\7Xx>_0w!""\dBAe+~,{ɰi?˻}@r7oR wyl7rS1J.DDD0$˷R7۬wWaHN݈unVv1K>bHNUp n8A9˻ @r:F .~Mr0s@r*ڱXU wy:$)1ď] 9Ʉn^2l.DDD\m(zGIۖ$?ncEX/%<by"""1nĚ (S :~AAAXdIQQQ}^]& gR0"LDDL,~2ܹ111¶mې/]saúL&+Ǜo~~ k׮s鉷N6~>kax3ӱ|ବd2VZ|9YM8tǘ`/ Ƙގïy{M <=-?Uף555 D||<Ə!w|q Kpzy zrՏș9<_Ųe̶#??vS[ :݀-{b`L렑-VTT`˖- Ŋ+z>oFjakkk;byiqme26~Qր&.~zp:w:}%i{vM'>M֯:u Aí6^pZq3Yۏ`ֺ:TVVl{gWSS|̘1C8W*++~zYl.usjLWi HNN>{ ۾jֿ؞̑. nbU=N.j9e/v&#\B] 3L|+֞l@ O6>>(%""r{LԷm(e.F^J0Wx;hdDDD4И?ibi=n6Zm!~>.x$\#""&n݈W]=2#n:&n/7XF`qYޅH oلlA?Q,BDD$uL]XUCn/ ?cjv&):] K2L׭XWހV.r/x\ uabn6R.2!)SLDDDnRX/)V?.DDDd@n/O6`VvPw!""":?߸EzT7 wY/rj|,BDDDIMr [+`(6IƔ78"""riLPT8S'\ezv$).DDD{Ld{hk卸-P9K- x˻Q1t[ XDZw% )SGDDD, c}Axx ـ jd]. yx8]vLȉ;X|f.G˱~GDDD``z o;j@u @Nr0?]H\Lw˻|uKF¶D%}Yԙ&=ׂ4 oޚs1Xޅ ]m1`z|q]KRvO FTO  ;b+^Р~j|ay"""r &vcĪ2^-.N酼xhFFDDDPtwx=wY6&]Äpyؕ_;&"ۭv,R¹vc%,BDDDb&rdee!-- CRDaaan4D#66 .Duu}N>ٳg#** x'PTTh2aWMHɟG`6u0?"""pW7nVAYYY(((ѣxb\~BII >3ƚWTxg燌 ȑ#X`\_|_m/߷PۥEΤ` {:hdDDDD,.GܹO~XR/<V2kс+VGŎ;i&j5 6l˗51L& OA0x\BS!**ʦ֭[SLArr2JJJVU*̚5 ƍڮP(rJz۷Ϧ1٪O4J_4[C3bxDDDdvCZ\.GBBB&O (--5kjhF OMl}O klME\0ksK҂1=/u@XXpE{ W hKΧv0`tI9~.MRO]WA]@K+|YZ>MMMP*?""c+^כoM9'!_:uz=jkkf)`ҌvK-v@:%ǥK`0zy/_:\UUGyĬ}mm-߫҈4h]qV>>>Nh]Ҏ3v)r|xرcDPRRb}gg cy"""rQ6'uuuD]]LMn,..ZFzzYT9~!***744`ܹ֭sm.Y\PPF8w`޽]&Ne^k׮:FJJ ϟ'DMM 7|| ^^xwbڴifjذaF!XL5Mn]Ll߾qqqسg}]rL>*{OII'|͛7툋Cvv6222Y t֟iF=A"22ҭo3vH;~إ; SÄ0$"""&DDDDHbI @""""a}0vir쀴g$i:DDDD@""""aHDDD$1L$ 0$"""&DDDDHb$>}gFTT"""OO0Ebb" ڮ1h4[FXX&L_:>cǎRߴi WlVcQ*(,,Kbu ӦM]Tbf8ù?pC '!8ňݕ#vW׮]CNN~⡇Bhh(x<8uTszR#G`\r/b=/q!>Cll]cD]]0w\d2jرƧ~C/((K,=**JzCsǎk~K1?sGGn x}ƍj0h~7ň|^^oߎh|ǐ!CPUUGѣxѫc/HGG&Lk׮ƍ444`ɸ|2N:u7J̙3CP\\ٳg#==}B1l߾saúL&+ /~l +=?~8f̘իWcڵÇSZ\ 爉ATTmۆlڵ 1\qs'~W8[sȑ# ,, x1ZZZPSS8oVCoP[[e˖mG~~>ooqh"lذ}羰F?яe>r9oo>Jsޞ\ukZ|ǘ1cJqλ%FwoP$00MѹqVCEElقPXÇqy\v * sӧ1sL455߾+!C`h4z*Ο?B '']`2UhR3{[ꜷ'Wbq9o/:۱xbܹsׯ ۯ1g #$$G5k֘ǥ.++Coo/箿˗e,-BcL׹=gwxpp 6n܈d2͛7r 2*J|>I ܀~@y9y{WyTtb% @ zi"i>B! y.e&rY1`~G[&Z% (+vm^&*a}MW^\ 0Q.]NہP; LT'EC$&h n6_2?䓪h׮ǏU6n 0 i 6 G"R?6Cb܁ϟ}*PUz1D9.\~m~ 0{Ylz8N$^{M܁e>طزE4kƍ) 02o8zbiؽرC4c]| 恕1HY{sާ̫e$rwJΚ-nm7J 0905e~JE*| MZfnmuWx1t3ͬLڱ[7J 0i#SO8crr~D"BCC*++e,IgnfBף dPQQt: 9ݜBo^'ZА~7'T BH z{{F9.*Iy Ű#G`޽8uԔ瓱<9N0;;+}aU$ @ zi@UnX<)4ن*1d :w3rw3RNfV󤄓ULsZ7J 0Yʉ*1d 'w3tNfV&\ͬLdQ2HTrnfV;0Ty~U=1T2nfV/iͬw`ZL7sSmi܇Y=rynf`*5c70&CCfsF,zW;ᏂVfxlG܁iYw3Lt)N]2ih5 0eY? 0`7`b7xQͬ?.%y}w>`VP`7Df֝qLNNBPHƒ̑iG[[$`nn8w\>BR)=CO/zKRBH_G^-(nf璲b1ܾ}GA2͛Ӄgy&{ 'cy?lexൠc!}T!R:s|XJ %(0XNL73nf)066CaϞ=8uԔ瓱|ɱ 0;;+}aU$ @ z]hv3 cfnoW= ѽ1nfgf v3f&bLrnfҙ<>LLv38z.f&'qULNLNt 0 &ځLnf73f73vDpDl`v3̶f&Z-<3cf&ZfwwVc 1f&*-v`v3GyLT<)/АߏqCqs=p@R)R)cL׹}gB@!u );p]]&&&ىÇ# ֭[8z2^~غՋ;Y }tsv!%_%'DP^nմO׹}g>eaBWW ك!ܸqB^ȵ^Ξ=b޽o133۷㥗^bݍ~?<~V4<|z$@yU=^o޼i;̑u{{zbg~mwv{͗/_} ׮޼ySɤ4e<َl?;;ۏco @b'#;ۏcoig0 ztZʏ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1vbQ]bvz$g5j=M}ax[墪O|5u]W]55 ouHb}_}?9l69d2i= frax_gg˚|z]DAoBfN28i #@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bFW񓳮F<}WO6MiN0 C!x^k:jdz~~y  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1vbQ]bvz$NkVF~5 ok\TUu8E5Z h>x<~ru]u]h"R?0j#q\kfi4 &I1h`6E :;[l4 ڿiNruuUUOgṹhEF'µF+ #@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bFW񓳮F<}WO6MiN0 C!x^k:jdz~~y  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @̨j>x<~ru]u]h"fi48ah=uMZV5LZOܯ>`1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1_OκM}_}?9l69g0 ztZժ&Iq, F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@vbQ]bvz$Nk Ǩ;nnnE Z.UUu}}x*Nk 9@񓳮F5 ouH(}}l4tt{{[ɤGa6E :;[l4 OuMFQǧӳ\k<Gm4y<  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @$}zcg~mwv{#Mpܝvgg~4 F1CUU}$gzn=Ql?;;ۏ0 C!xe1>}>( ۷zUqC}...׭9J#t F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ (1_4IENDB`pytest-mpl-0.9/tests/baseline/2.0.x/test_parametrized_50.png0000644000077000000240000001244113133623566023661 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?iIDATxܱoS'Ƌ%, % SP J3AjH[&1^3%^PBz\xѣ|fYx F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ _U/^+WTiz0L?/.]8 Ȋ/^ԝ;w駟MrJUW6;̂  NNNܹm#?vuZ__oxŲjgdggcogggcogggcogq#t F1 ,~ NNH[fh4c09~ @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@3ɤ^zUɤQΝ9Wn}U/~R/_?[/_6= 0v{{{u޽;GGV{nUklNhأG…Uu2>ΙM&_z˭::={ zZ߯~DWqMӚN_xzᰆk M<ޮ Vu?պPn72Fhh,hPө/x״͛}zvL~~8s&@a׮]ZYz\UUjje'x @`lmmnmn~^փڬVAmn~^`Nzz5Lj<W`3NGxK#X@b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@v`P' M5O\;<FD#XРNS_VcUMi?͛7?O9;gy!@a}w^>A}c8X*@@î]V;;;}kU~nϢ59UyZjZyV#$5G0'z^zL&5zF̙Nfg&x  @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @bnz6 juuĵ~_~>>ᰆk M>ᰆk MFD#X,NS_VcUMi?͛7}"͙9k ,ᄏ__Tՠ޾1Vp,g Οa\vvvvjejתqUVU^jggǟE9kp ikkvwwksjTfZjsݭGdI8kpd2x\ns'58?t #@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 ,p NNH ,x&@ d2'Y<5c}}2fMܹO?Tonz$@_U/^+WTiz0L?/.]8 I1~ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@ F1 @b#@jaaIENDB`pytest-mpl-0.9/tests/baseline/2.0.x/test_parametrized_500.png0000644000077000000240000001746013133623566023747 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?iIDATxO}2PjrX\ DZn֗ziVA%^uC{! \CU?ATzeVlT=V cF;;ش2!"ygcG~gPCePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFekzϯ~,--׾ _K.e׿8#I dÌ?~1Fs99gms9\x1O?^qd|~ՓO>醧-9gms99gm7C@ @]avvFs99gms9כtv= 0\9}M^ϧfyy9W\ɍe۶sLOOd߾}iM pG49ydzLVV%ifz$&vݜ>7XZ?wЃ 0@vm5 V+Z`kK.3Y[A2ٳ|<rԩZ'9P⁴ZԩSElzy3Y[{&z(kktz^њ#@`Ο?kIxdeZ.\P.Ftg[++IG,//fW~0Zʕ+W_{|h= 0 SSS9p`*ɠ?R:T3_ 0@ǎGLu07J~Zy;hy3%Iַx$/YyLo߾Zlff&'NHFu :YXX`pkz=z4I277VgɳjH,,,ߒ9o@ѣGόIf7x=yҒFB333xB}v6cc/e|I^LnO~ɭ?!Ky 9MLLSy_W29$O%y8$NI}燓<ɟWӧI~]|n֤iF9r$GIx69|pz {Q"@`@rUAJѥu8fktyɴZsAA:G̱ch ƨ 0@۷o;I/I^N+'y9;g}->>^cT8q"I^ֽ;ݿu7-:.^cp/8zhdnn.{$/:~gYXX?%s25߀@Gfii)=ߓ$o('y3{c%{a&@L.^gKF_}r_726R}v6?{nᷲVMLLSy_W29$O%y8$NI}燓<ɟWӧ<WFc[ lr:Nn"^/.\HMիW7۲cǎt:t:ݻ׷NsG;z !bC 7kw-X@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @M󙘘64gqq14wt:tLOO7=_zι (#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@25=i~~>6;;ن&,..fqqVWW1ܴNn \9`ePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFeP澦7gbbfgg3;;D,..jC=כtv3==8|;,Q^/ϟOr\7>˶mgΝNɾ}nf ˗/ɓy3YYv;#Gdjj) [z9tpvڕ^[lw|^B&$?GI5++k-d׮ϡC6`k0xvܹ޽'o7?ILNy0%w׏{;wjtF5Cĉٿ>`wKbQJb/ٿ~XFuCiaa!/BKI[͹0kPC senn.|cIƶȭ$$O<-:6^z~PY]]3H'I^]~n,ɱZ}a4C0T^y/sj3l?>X/25v4C04.]gdmT~g^ac@sCԩSiNrhiʩScXkPzy3Y[{&z(kktz^њ4^f 糲r-ɟ\˅ ץ)4K0nnno$[s/YvI,^O(k,PrJzAїիWYz47LLLlfgghn,H|֦jqq14w2?(mIn4gym M5{ ՗NDw`1vܙv/ik/eǎM={ %@ #'+:EdC5ha(ܼ('=IE=^f ¾}29HLN>{KS5ha(}*\&'$ޓI4ɷop29\9}J V NnZ^/.\HMիW7۲cǎt:t:ݻ׷NsG5ڝ CĆn[2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@2(#@+,..6=q6y8lss6ymq8omF5 @?ׯ_O\xIFjc8gms99gmi_qcMMO~1 ?я~1F"կ<_ך/~z.]_z$:PFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePFePIsQIENDB`pytest-mpl-0.9/tests/baseline/2.0.x/test_remove_text.png0000644000077000000240000003062213133623566023230 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxM/ws.CQpQkZT*U4iX+ PYvqfg{70g5f2q P]TD:V>m;> W@^s}VPUh P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7 P7_> W/~U_ǬZ*_򗫎ӔߟΪc9~_g֭UhJ HWAKՆcQ/֘,$'kg9o) ]Ky+NC{Q֨kLZ-yd߾ȑ.OvHvNvLΝKfͪ:UkpdÆHOm:Qkq/Y0dhH #&Q/x$%%\̟_ud ڔPS/֨k`6^M^{-y3-WԗBoo GUZG%olޜ|{}sNվ`вn*ch\:߻׊ݪ) d˖dʔdҪjA+yʊ]q( WJSӫN?3@Krؽs'yd͚I~dɒdddDhd M޽7lp!3T|#X47 ձcɮ]V6ߟz2mZ28,\Xu",ƣGIww&Gsq@S{7,s>7wR$'N$VU3аjr, ^|4;4>ؑޝܙ;̚Uu*,eHOm:  ldhHh5  Сdݺ[*ϯ:ӟ䷿MMyR@ƍÇɊU'b2Zӓ,_̞]V*Oɾ}@2sfթ#Xիk%7o&eMю&G%olޜ|{ŋܹU FTn14T.kn;S@4ɖ-ɔ)ٳҥU'jFpZyPpd޼bW Q@`ɫ&otu%N%ӧWFa sJY{Nח][u"&į~,YL(|2gr^_]]̙Su*,ڍɆ eرd.+vl O?ydڴdp0YD4#XSV.A˗OvHvNvLΝKfͪ:2r?$Ǐ'۶UVldhH`( ݃ɡCɺuɷU.ϟ_u*Z,$Sёѣ^5g) ddŊѪ`Z-I/Of.+v&Цɾ}@2sfթhuFիk%7o&e @MA}) m⣏7L6oNdܪSn`[J*bj( -n` ٲ%2%9{6YD3#X-V+ \̛WV*TMhAɫ&otu%N%ӧW `+Wʊ;wdڪ?8h!UdI2uj22|xp^_]]̙Su*ό`47 ձcɮ]VҸ&ߟz2mZ28,\Xu"lFУGIww& @{7,s>+$&rR$'N$VU jr, ^|М7>ؑޝܙ;̚Uu*x:FUkגǓm۪N @+Ǔ!֠4Cuo}\<|>:dd͚dܪSA[J*b@eK2eJrltiՉF&Q9\̛WV*3`&tuSӫN20 \)+vIkN ;~) ޽7˶ 9sNq#ٰ^;e.|'L & V,Qݝ|eŮ S{7,s>R@ХK_8ZUu"hz:co~<(xOJx ɎΝɹsɬYUc s\^^5v<2m[Չy9 }}ex24|R@>ɡCɺuɷU.ϟ_u*h~FIGGrLrhrWa( ddŊAk1b'Y<=U>`) @+#W'%̙Ud hkW7o&e |Qr@ysfMrb2wnթ=ʭ[x K{Z mc` ٲ%2%9{6YD~`-VKIVL++vWsT2}zթ}Z֕+e;I__vmՉ' @K:~Q( @Kw/yd…dΜS,eܸlPFKvbדiӒdª=J~7YU>q9i@of^xᅏ[GGG:::*Jݤ~tw''yw;|FGG+J:PjU|r,XUvR$MjUՉhF4Z\07˃/+Li';v$w';w&%fU xMkm۪N< ' @+Ǔ!4Cuo}\T@`ʕbΝ/YD@dɒdddD`ܻF}{vuB2gNթF` P7n$6ѫcǒ]A&ɓ֭ɴi`paՉFc xf%eŮ|' 3{7LK 9|8y'NS( S.=ƒ'UN4:''V ˖%3f+x DǓ;ݻ;sYN4 #Xc~j~Zydp۶ X А<L$%%\̟_u*Y>IGGrLrhrẂgddŊ1Zӓ,_̞]V*DQ@+#W'%̙UZ, IrjY{f[Ư& ɢEa< ͛5ksN2#XЦnJ6m*'ٻ׊]`) І-[)SgKN #XFjȑdd޼bWI61:_tuSӫN#X\)+vIkN+' O,INMFFZ {={˚ 9sN;#XЂnH6l(Wǎ%vY 4Zɓ֭ɴi`paՉGddbWhw&I)!'4 p168ZUu"O4Z\0_,1\)@S@ ';v$w';w&%fU &szyڵmU'x|N@% !h> 4CuW^I.]Jϯ:3 #9s&9z49xЫ@R@?lܘ<|>XQu"gc P$˗'g h0ccejd߾d` 9T4Wˊݛ72~J@M-*+@kR@b'$7'k$/&sV `r ݺlTJGOOw@kS@"ɖ-ɔ)协o|DY9\̛WV*@P@FG듮䭷SӫNP?FN\)+vIkNPN@O,INMFF}) 0KIo/kv/\H̩:@u`$q#ٰ^;e.ddڴdp0YDLGddbW' 0AM:;?M~9>F 0<\{%'N$VU1.ϠV+̗-Kf(#WS@)';v$w';w&%fU pzyڵmU'hN@ % Nx <CuW^I.]JS4#XnN::3gGj4'7ӧ+Nм`ՒddW>`l\ߟۗ $3gV qjY{f[ƯN@&/^T>&IOH6oN֬)㥗Nz`nJ6m*'ٻ׊]ɢ-[)SFՉZ,R9\̛\|ԃ@M֯OJNJO:@{0@[rؽs'K֮:@{q@8~dϞdf…dΜS'#X7 ձcɮ]VTIeR__`A9fTZ@ø[mޜYSK/U d pVrubӓk.@+R@@eK2eJyߨ:Ւ#G+y˗VP?9Y>Jz+9u*>TL6#Xݕ+ɫ&|%kVzq@]?,Y<|22|ߒ={˚ 9sN@`ݸlPFKvb]) L'[iӒdªP%#XLGddbW Hz7 /|:::QQ"'snٙ'&$4wy'mtt4 ZVu˗/g/\u2<\{%MjUՉ&_{vG0!j䗿L-Kf(#WJ'?AYsgr\2kVթhDL_O^{-v<2m[ՉhdN@xj}}ɂwS>| O+Y.yҥk_:O#9s&9z49xЫ<>68lTN@NNV:VK~R8fN~{Ձɾ}@2sfթhVFTW7o&ƍU'9&/^T> s~ڼ9Y^:wVrubӓk.K I\eK2eJyߨ:@Ւ#G+y˗&d+yԩdSʌ`+WW_M> K֮: @:~@ ~=yڵmU'O% !Ʀ4dݺWKN@};HΜIM9Ah2ɦMÇɊU'g Ij^ eŮ@Q@X:p ٷ/Hfά:<9#X ղbͤ7ٸD4dѢ@S@ejd͚dܪS3`n*[.^Lzz{u( d` ٲ%2%9{6YD0`4Z-9r$Y27U>hE @d:L^u*F*tJ$}}ڵU'"Ǐ'K$?(dϞdf…dΜS@}7 ձcɮ]V^:9y2ٺ56-L.:ԟ,IQݝ^,^\V*+' ݤ3/%9~hc $.=ƒ'UN`j/,[̘QF( 4>eΝɹsɬYUa `\ZrZydp۶@q0 АFx$]]ɺu+$.%W ,tvё9=LNNV:4#XOVK~R8f.+vx| c+#W$%̙Ub 1\ZV޼&7Vۛ,ZT~V>Y( 2nysfMrb2wnթn-W/&==޽VDP@@eK2eJrltiՉuZrHre2o^Y|R@&']]ԩdS@1+Wʊ;wdڪ@rǓ%KS&{={˚ 9sNvnH6l(Wǎ%vY mddڴdp0YD^`mѣ;Y:YU>-ݤ3/%9_ ҆}ĉdժ@{ hIZ`lY2cFR>z rǓ;ݻ;sYN$F}KJ(IDATszyڵmU'e% !4CuW^I.]Jϯ:I`M#9s&9z49xЫi?lܘ<|>XQu"N$˗'g4h*ccejd߾d` 9T24Wˊݛ72~4' @SM-*+Ьݿ8lޜY\̝[u*i֭[ɦMt${Z N@eK2eJrltiՉ` h(ZrHre2o^Y|@P@1:_tuSӫNL$#X@Crؽs'K֮:0;~) @eKIo/kv/\H̩:0`q#ٰ^;e.'[iӒdªb GddbWwΤÇ|nxKNHV:PIS ˖%3f+ڛLdǎddܹd֬SU3L˫׮Gm:(/Y )) x 9t(Y.KN4#X3};HΜIM9?lܘ<|>XQu"J$˗'/XV*Q@'66VFOK{/9T@30'dd͚ܹU,3ݺlڔ\X.k.S $[$S$g&KVhvFVKIVL++v`"( nj&']]ԩdSwWw$[.L$' @dɒdddD&m޽dϞdf…dΜS7 O~;ٹӊ]`r) ЦNLnMdp0YD@;0mѣ;Y:YP>zqҀ|ͼ tttTVqnٙrpy睼;ъҴ/jZ!(._ ddd$/rqh1LJ&MT_{v}BՒcǒe˒3ȕTE6>ؑ]6\;̚Uu*-km۪NZR__l5> )@P@ )СdݺN.]Jϯ:@c0#9s&9z49xЫL r|qcartbEՉ,xFZӓ,_brixccejd߾3Nи`Szؽy3-W|6' z{Eaq) OH6oN֬){̝[u*a ӭ[ɦMŋ޽V<)@eK2eJrltiՉ, ZrHre2o^Y|<=>h~}U~NJO:@s3ʕbΝw˅sǏ'K$S&##DR@?ܻٓl^^̙Su*b ܸlؐ~ΝVLwduk/%ɂU'h]Fh[%徇0ЖM:;RBNS&B.=>_};U'h6jرdٲdƌP_ ma|<ٱ#ٽl:w.WN~`_/_VܶD -lO) Cuo;t)?Tܾtt$g&?Y{Q( 瓍ӧ˫N?3EKՒR8^|U>B+#W'?Q{̙U]ZV޼+VoohQ`><|4s~r@ysvmycܪS8`TnJ6mJ.^L~?b( 4d˖dʔҥU'Ijɑ#ʕɼyeŮМh~}U~NJO:O ʕbΝw5kNrBC:~xR kt4Y>*?N%ӧW fdtJY{Nɚ5U'9S?,Y<|22|{={˅9sN@+0ܸlؐ~ΝV0qdK_J N@1E=Jի˝ݽtv&><0I66<\{|awN@ jɱcɲeɌUszP@xcG{wpu\T va\^^5v<2m[Չh7N@D__pa9R>JH6oN֮-{̝[u*tFԭ[x %EZ @S@@eK2eJycҪ1Djȑdd޼bW( Mbt4yդ:L^u*x2 Hr%Y^nW_KթhvNh֨kwxdIHfMՉhCM[^AsP@Խ{o$۷ 'sT -X dNvb֠4_OM NGi _$g_Ϳ[9|P\F[^QW^Mo}VժA:׿unZu4> W/~U_ǬZ*_򗫎ӔnFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.!t9үIENDB`pytest-mpl-0.9/tests/baseline/2.0.x/test_succeeds.png0000644000077000000240000004211213133640316022452 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxpxUD;5;jPF 6L,@ `őޱNgvLNbVgunt*S`MBbKg l b:d_ɹ|l|d&:"Ő$IuI$I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $I"I$)a, $Iҏ[nk믿ロW^ye@qկ2rH ٳimmsjI$)$v{=ʢ,X~~޾>~~cqYf­ޚ$I\bC^&Mĉ'x7u555 /cǸۘ7o=\"K$II+9~y_d,Zk#GZN<晴$IRҲϻ˿i&nʽ{y78q"C|ڻ8Ȓ$IRRǣ>ȑ#ۿ[֭[… yꩧ=Gno%$I ~k׮%??~z{{9uy>ફ'$I, 1~xƏ>}Gnn.\q~W_='Nsywo>I$)|ܹs룎, !??+Vp>57pGuΟ_WWGii$IR?eQHITWW9sw羚#k7|3~o -#<¦M 5~=|+WQYYzt, ȨQ>ӧꫯ泟,N57nC)ɋ/K/t9 ./ЇcW~;'N_M:kĈ)!]S3w/PYyz+V뿸y~oOO\{[omtR~ߝ}zoo/$I4P==æMpUX@QTTĿ//tvv2|p&MDee% ,8^y啼8հdIԉҋ_l–-[>__GqH'Ix29a„D(e#(CDwM(/<ط/HVDwM/aFX7  $I2֞=PPc̚u$I2N,UU0s&r Z>"IF֬ xuʊ:UpK$I x0~D$I+\0on|D"Iv4<1~|ԩ2#X$IJ[x46KVb7jI$z(.Ca.6-DG$Ifb@9s ;;ص|$ $IFW,Z?0jTԩ$IRZؿ?=v ^~rsNx"I@N --df$IR:y~|0lڻƍ:,I$vW7MI$:aphhɓNrK$I)**`<:5ص|O@$I:;4~TT 0ķSD$IIo߾p`V;7DTvFI$%X,\0[[-"IKŠl cDJ,I$%CՁP] KDHI$%ڰn, $IJ g@y9 Q`sK$I~Kظ֭"IH ;vYQ'R<9%IHbPU3gرaŮ#Y@$IpajX!++TJG$IPmmp0Ԅ+eO@$I055p]fG&H$)NG"җ Ə:$I⪣#p|*Wf2 $I⦾aPص M:$I],(8gdgD$I -av5*TJ`I$iV;`Aԉl<$IҠO ' ˇg$Ie9y~|0lڻƍ:#X$Id퐟F6o]H$ ÇCCLu"G$ItQ̓SÊ]ˇI$ Xg'ӏ ذ.D$Io_{u+̝u""$I+ ̿@Vˇ.D$IKŠl cDJ,I$С0ruTWÒ%Q'R:D$IS[6[>46Z>4x, $I:(/<=;\<0!TJ'`I$ ?JJa:jg$I{@AŽ0kVԉ$I`TU̙0vlXkPI4p$<0<`vw/u*$IJq퐟F6o]e$IJauu/'GH:?G$IRP_TTy0ujXkP*D$)tvBii8 `o++EX@$IRȾ}{֭0wnԉcW$IJX`/ Z>, $II.+`2ؽƌ:ti$IJb<հdIԉ $IR zz`$IJ2g@y9 Q#X$IIQ();aFXΧ+X@$IĞ=PPc̚u"i9%IX `L;6ص|(]Y@$I"F֬իN%ŏ#X$Iik +v0~%;O@$I"PSSϛ-I:}֮"ͅ&?>TR8%I x46KVbW"IP\ C®]0mZԉh8%IGTVœ9VZ>, $Iqcv5*TR$IÊcǠ,:<$IdՐÆAKCsIAr$<0mW{¸qQ#X$IͰ|+vX@$I.S]|0|844Q'#X$I**`<:5ص|H $I%pQQ6ڕ."It ={nsN${$Ib(j.D$izz`RX-ݻa̘SI,I 8t(<%KN$.O@$IΣ6lFˇt, $I8s!/f'L:$I GBI 7ºu>\,I?g@o/fEHJ/`I$VVU̙0vlXkD$e0rf ^ u*)=9%I2Z[[X{0Ԅ+I $IX550eJ!%D$eӧaZ(*\hjN%eG$IRFţ1\:_R"Y@$IRƨb:viӢN$eG̪U;6l7t8p߻e~?y$I)J3Ê]ˇ O@QYYICCy睼;q"&Lw]~ӟ^g̛7ɓ'3$IÊcǠ,:$G1}[o;{'Irr`0hi|H2@XGrgϞu]5\ 8x`J$'ᇡ,lڻƍ:95@?'<]s5}:x J,IRio0zy3,_])X@7_:ӦM_[XXHaacܹ}|;?aJ_á)%'G.wgĈ\y k3f̘ԩSyP0oLVZ> ytuu1o<?ݻʺu7~@_#0bĈVRRBII%%IJGPZN?**`۫$?VnW]u*Iҏ_++ H/~n+_ O<G[fIݡC .Yu"IX,:g [ZZ"Iҟ 9^z &L:2v"I֙3P^yy0{vxnR#X$))= %%s'lTs)X@$IRٳ vYN$i8%IF,UU0s&VZ>b$II;\YWC}=deEJ`sK$E-=|jj $ITM L>on|H"I"q4] EE MM0~|ԩ$ś#X$)::Bhl WrŮ), $)롸]`ڴIJ$G$IRBbPY s@vvXk2D$]W,ZׇaԨSI#X$)+vZX D $IjɁaà!"IIxa(+ ۮqN%)8%IU{;ѫ͛arWJoI4hmŋaphhɓN$)8%I.[_TT0ujXkO@$IeR %d["I.Yss [ܹQ'|B$]X,\01F#WIa$I.+`2ؽƌ:T$ICS \$DR' $i@jkaҤphti, $Μr˃{}`„SIJU`Is:zJJ`Nظ֭.D$k((^رf͊:t$IX `L;6ص|H,ItVwwZVzʊ:t$I-=|jj$ 6O@$I550eJ!)~, $eS`Z(*\hjN%)9%IRP:`*WJ? $IaPص M:L$I$J3Ê]ˇDH!`BX>|lFEJRqK X{‚Q'<$)UWCN --IѲHN+,ݻƍ:L$IiͰ|+v%% $Iif6X<9D$)MAE̟SII@g'B]](!6f, $pߣnsN$I{#$X,\01F#WI"IR 遥Ka X v1cN%I$I)СTC,:$ ' $Z4)46Z>$ $I)(/<ط&L:$]\R검H쁂;`֬IqK$AU̜ cdžI"IR#WkP_YYQ$II-=|jj$O@$IJ550eJ!)=Y@$IةSv-An.45QpKut@aa(UUj+v%7 $Ib:4$, $]XVe`n3&T$:j~`x%Q' $I&M ' C.D:s!/;:$G$IGva:j.I"Id5+D$b13aXx ˇ$]. $I#WkP_YYQ$I-=|jj$ipx"Iҟ)SMMIlIS`Z(*P>n=T~$e(, VrŮ$ŋD롸 >=D$eX *+aΆVˇ$%Dq`BXoQN%I,IRFٿ?=v jkaIRfD1!' ˇ$E"IJ{'NʕPV EJ2#XajfX% $)mm'GH$)AE̟SIJHJg'B]|ona$pߣnsN$IK'$IJy<4̘G+ˇ$%' $)C5˖0fLԩ$I$)e:j~`x%Q'$]' T[ &_!I"IJ)gwFJ4P`IRѣPR;wƍnO5Tc$(, ' ;vYQ'$] G$II-?c7,, F֮իN%I`IR[[X{0@AAԉ$IIRҩ)SMMIJ'IR8u*[Ann(u*I`rK::–&U\+I"I\}=СӧGH/`UVqw0l0n& 9p|_eȑ 6ٳgԒzb19s ;Z[-<Gee% pw;SO1qD~_}7 =_=?5k---z HR:~zjk+:$), 7s='>񉳯1aӟ/g^x(,,n'瞋{~IJvâE,Xu"IR8Տӧ|zq{_|EF͢Eξ6rH ɓq,Irrk!I2@XGrןx &NȐ!gH$)ݜ8+WBYYXw/u*IRY@g?9 7?|ߎK>IJf?'7Ï W_u*IR2o&_י6meee>c<璔ImŋaphhɓNL9 IDAT$I' ;p3b^|E{'N8璔 χSÊ]ˇ$b޼y?~ݻwu8r^Gy#F|䵒JJJ\ PWO<byQa9'Nˁxg?;>ݻEFn M61qK.IQjn|[aܨIҥ V&MQQ{ /0mڴ~ȑ#曜>}k=z^zk./tOÌ0zt|H' xGyO,o7|3 HNNK.w'RQQ迊$%DO$Ic r\ eea޽0n\ԩ$I,I퐟F6o]+IJ< $em`b>`I2#XχSÊ]ˇ$)JHRRo-NY@$) 57ݰu+̝u"I 4OÌ0zt|HDDO$I"I v\ eea޽0n\ԩ$IJ G$)!??^m ˗bWY, ۶0|844Q'$)8냊 ?N +v-L $Qg'B]](!6$e0 $Iss [ܹQ'$)z'I,3`0re$)H 遇 kv-ݻa̘SI<Ar<<2dIԉ$IJ>H I HcCsHe8s֯<ط&L:$I,IDGBI 7ºu>\ H%hhB;`֬I رaŮCHuwkajSIZhk +v((:$II2%|l$rX@$N VEE MM0~|ԩ$IJm`IR?::–&U\+I`H_b:viӢN$IRpKX *+a+v-$ . $]]p!_>oQN%IRqKRۿ?=v jkaI<Ѫ!' ˇ$IfN+,ݻƍ:$I,IͰ|+v%IJ m,^ ÇCCLu"I2#X2B_TT0ujXk$)<:;B ٰ$IHJkGw7l sFH{R,.ϘG+ˇ$IѳHJ;==t)X˖0fLԩ$I8%):j~`x%Q'$IIi&M ' IDR;s!/ N%Iv(Νq#[S%IJfI)k((^رf͊:$IG$X `L;6ص|H, RJwwZVzʊ:$I(G$ba W$)x")%)fˇ$I"):kBQBSu*It::0*X$: T_0t(ӦEH$ G$%X *+a+v-$  cv5*T$i09%))V;`Aԉ$IR\$" ;vYQ'$I,I$*9n%ص|H HhajX^N%IR#X.J[[X{0Ԅ+IDҀ)ysC$]< :u ֮" ?>T$)9%::¥U\+I.D9Cq1  viQ'$Is'_"W\-[[l+wމopibPY s@vvXk$Isxwy'馛;~_^x';vG^ԧ>5H ꂲ2o~|2T$)]X@nȑ#|ӟf߾}L2ƼyL{X>$IRx@7x#/u<#Fk%%%+2Dg'B]](!6߆$_?ڱc>u*---|_Ld,o7|3ӧO<'OfĈoo~Quzzk_gMફN%I2<K/K/PZZ{***۷on|+<=:!٥CS \$D$IpE,EB3---eQॗ`„I)9吗 Y>$IRrqKJGBI 7ºu>\$% 쁂;`֬I$,)bPU3g-@kC$%7 ՚5z5:deEJ$RP[[X{0Ԅ+IT bjj`ʔp!IRDJNڵPTGJ$8%(,p|*WJd\}=СkLu"IKb19s ;;ص|HTgPW,\ׇaԨSI$]>G$X{rp.I.<Hu5ab$I"%'aJ(+ kvqN%I4"3eؕ$I"Eh6X`ҤI$ŗ#XRχS}ˇ$IH PWJȆ 0ķ$IRH {~ᄄI$%J 0cF,$)Y@8遥KaŊjn3&T$IpKCS \$D$IDڰ٪-$I`ݙ3P^yypーoLu*I4ع6nu|$IҟHd((^رf͊:$IRqKLTU̙p-j$I: t՚5z5:deEJ$)y9%]ba W$I:?O@KPSS ͖IH)X 77\$I=PPc̜u"I$% G4hb1 [Š]ˇ$ID;\Y됕u*I$%GtŠÇ&_I$IDL ̛-$I:? .ɩSv-GJ$I,](,&$I .J}=СӦEH$I, H,0gdgI$], . .0jTԩ$IyV;/ Q'$IR*DT] 99pb$I峀cN+,\8߳ƍ:$Iҁ#Xvχy-sŮ$IDgmuACLu"I$GD_TTGKC$I HR %db-$IRX@2XssaN$It{(͛a =:g޾&m.=WǎI `-"zyO!>pdhi22\G@  ޽ҦMK? }wb)X ؅ Җ-ҷJSOTsd:~\ڼYZ[@Wp ւcҫmnK Nz ǥo]?@tun{t+z)3uF2]"UUIƍ{yg)XԹs.TY-vp#CGH?,p 4U]]EEE)((H TEEbbb>~篱_ɑwޑ}W K 8Y,I롡g#RT&{_JaaaS^122~}*d.>޹АϷw}.c^"AZZ; +<<\S￯i pR-vIRIIuAHr=ذIEEES^"Iںui{ duuutߵ>!Iڽ{"##w^566WIII\dڵھ}~EGG7^x@} 0]*))IgΜQ^^>)H_={O>Pff^z%eddT=p!0 "` N}Y%$$(,,LYYYꫯ<;88 (""ByyyӚm544(((hʟ~*|3<amҥ*jjjUVѣe8fejkk͛u=_uuuJOOw}+WN6 ݐdֺldggϸ?6$MMM/K.5lⷚ1?k$fL,###n7 0l6!ɨh/ טmT[[t:'uwwغu{i,?knnVpp***kڱcN8gθ766VYVtv/L,Eqqql7|鵫10uo+Vkƽ4@ɓJMMՒ%K&YF?θ7==}^|8kdkƍKXܘm0 a.\Lv'?pb_U^^_]3f,ˤP؋Ǘ~ZZ_oڴIZ~ۧzk ƢlYm4!IDATӧOR*++4q¦ua3{?KKKSww g٩I{Õ:cצo)&&fN1h6LeddDEEEˣ}4@DzkNSҲe$Rӧuʕ {/\Ԥ)7K矓>/PGG _<,fl/FGGUZZ'NIS67 0]BgZu!=䓺ب^Z~$۫$I? 999'<=eee$wK;v7|nDWLkiiiFddb$&&;w4MOnVCҔ?l\m1i{.3G@k@4!0 i LC`@4!0 i LC`@4!0 i LC`@4!0 i LC`@4!0 i LC`7}IENDB`pytest-mpl-0.9/tests/baseline/2.0.x/test_tolerance.png0000644000077000000240000004065413133623566022651 0ustar tomstaff00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxkl}!BH PS&ʨAcEVJ ,p(&T3`%pR&2qJDVb/̄pk`0w/M?n]~וQ___$I$A$I$ $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I $IH$I -OѳgOq=ڨL6]O}~TVV8$I2CH4=c|K_(..ܹs;k׮]//9|07:t8~%$IRb8p m۶~ߦ_~?[6;vOꫯcv<$I<H<7xGy/ .4$I  Y?#˖-0tЛwj/򵵵W^{-IuE?Έ#ƴno3gdm?ŋ\j߾o/~ &Nؼ$I[2a„1}өS'~Ӻu~˥Kn_ /4= c(EpSTbϿUUUL8m{8{,#G?WgݻSSSsO| _Gibjq:ubfZ}5Ň)\o:7?f̘1=zɟI^׿*++v 8@x衇bWƱcx1Hx'ؿ?*z+W\cSZZzZmm-*7V_SBnbE4D -̛7;wo|>~rP_~w}c=Ɵٟo#G\իW/Ej&ؽvi$Ir (++߿ݝZn~3ϟ}.^ȠAؼy3cY[999#(y0i~)^^OBO 0CyNR7~y.HRlZ9$5[ii}Ct{B$5˙30s&LJN#IJtIR֬޽C$3W$)]0ho.]B$֜HR 8sf΄1c`i$IjDR3 PRH0W$)ɕƍa:$ID0m HtgN@$)=TWGh[J$`$u [:$Ie._)S;7tI $%矇#GorIRq"II / $I"II.Z+:.IRqp/II^C$9$qOСH4IJ0c<\:$IM $%[ AǎHtN@$):s@N:$Ic7{6dd@QQ$$5+XW`5tI $%g;^&N#IR˰HRZ0*!G+X$W$)_=C$8s"L CSON#IRr"I fٲ;wB+&$iRY V%ЧO4$< $%W!7 B$)6\f > @۶HN@$)= KB~> :$Ic]zգGt]T $Kw/CH[N@$)'a|2FسHR у33ai$IW$); JKC$)>HROC^cdžN#IRX@$)|rC'$), 8wK.eȑtܙ 6o:tѣGEff&_җO]]]BKJ v-v-deN#IR|Y@P[[˲e˨:t??|e͚5ݛٳg3w% >OGɓC$)<ހݻSSSCVV 4ѯݰa{sL>aÆyfbYR{Y^i$I?' h׮YM܍oKnkӽ{wޖ') XzF0, 1|L>*N8)--e…I %ͅAC$)Wb`ԩ6l?[3fN')+wZFp, 1кuk>1bƏOٶmyyydeeo~ϧSN7\!'''%țoBa!,ZN#Ijm۶m۶={6PԑQ___:DM܈֬\"~m233_WѣG9qssd:tGy%Ipk:$9y<%%% >0f9~x`⮨**?|Hxo+WpxGcx1ESIdizࡇ__8}kuuuر}s!Jz:uKo?j8y$yyytԉ^~e}]z… 8q"ʴiӸ{ٶmbi&ԗ$)N6mݻa.mLIҚ6V^͉'R&Nxӝ>1a|A Yjo???x^) y0i:$Ir9,yf6o|#F0Ÿ<4kik׆N"IRⱀHR *->o.]B$)x]Zș30s&LJN#IRbHR ypJJ ##tI+XaFذzFDy6 i$IJlN@${g~mIn"Ip [:$I$._)S;7tIIj矇#GoSI $5AU,_ DI8IKuuU^tIx. H]*)_={}i$IJ.N@$.80th4$% $5R}=̘<+WN#IRrrKiaeeбc4$%'' N9GN#IRHR#̞ PT:$I,I2xزv FDnWF H, t F%dhK$5+XԀ={гg4$' t /ԩ0d :$I"Ik]zKpK^{:tFDR;yχ)S`i$IJmIi>z`f&^:$I,Iim(+Ri$IJ}N@$ӧ!/ƍcC$)=X@$|rC'$)}%)-[ƍ:$I G0}:<(L:$I P[ H^, љ5kwi$IJ?`IJ.An. O?:$I bTVB֡HHJ o PPN#IRHJyuuUv6,Z:$I,I)**`>h.tIқI)1X`i$IDRʪS[$I ,I)k&ؽvi$I8jj`<4 FF$}")%͚mڵH SZ}l]N#I~I)9ƌC$I")< \%%:$IC`IJq#l=zN#In p :$IjiI ڵW=zD%IRqKRx%ػˡCi$IR,8Na> yy0n:$I5 (.D$ŃΝcҥ9Ν;͛/ԩw ` ,%]`XB$I`i@mm-˖-~_i&ѦMUV1tP~ |>OGɓC$I!tޝ`РA~Ǚ9s&yyy0}jk ##tI/N@Ю];~zXr>w-OJjGg>/޽C$Id_Ӈgw]taɒ%\v-t<)K 7 F$ś+X1oӺuko`~aJKKY|9W^0tD)+wZF$ś$Ν;ǵkXr%w7n|EEE,ZөS䐓R&¢EЯ_4$޶mضm Ξ=(M가o* 999ڵ7xC6^xGy$1V"IR 0 Pg>?w 3g=ZQTTڅN#IB'޻zuu5]v{&)c`b˃C$I!Y@z+W\Ok׮i&:wNiNnݢ$)y6O.8y$yyytԉ^~e}]zWWR[[?O~ 6M`nص 23C$IY@nc՜8qKKK)--`ĉ7ݩ'?al߾͛7[2a„dAM ̛&HDQ#'wU8twRJ7~+.]B$yHcvˇ$IKjqg̙0f :$IJ$I-g()i$IR"qKR*/a#tIhHj1ôi0lN#II-砺:zG+ސ$I`"u렰C$I(%50e sN#IIpTT="In fah"It;IMVW^@$I%$5YI :ۇN#IIMrOСHdata xX2tIL\t׶n6XV;N#IIw)3rr`i$IRH+gCFN"I+X ^yl]C$I F9{6ըQ0aB4$)YY@$5…Q Y>Z$Ij W$ў=QxE3tI̜HaT2z*tI윀Heˢ |B$5?NHjPe%ZK@>HT`tKWBn. N#IR+Xni8|mC$I = KB~> :$IJ%I7v-UtI  СC4$)8tɓ0>LÇN#IRDу33ai$IRrK;v@YN#IRI> yy0n:$IJeIÕ+P\:$IJu`Iin.ز6ni$IRs">Gai$IR:p"gZx5F$ |Y{N#I҅+XRt rsa xi$IR:q"+wZF$' RyM(,/tIn, RVaѢi$IR:rKJ#EEPQAvHtDJǎŐN#IҕDJ0u*t@$I ,) lwî]:$IJgN@WSI0bD4$)Y@7kik׆N"I JKۡKi$IH)9ƌC$IX@3p@FF4$IWT^7† УG4$IDJ1ôi0lN#It#' Ry9ʷ$IRH)AX !;;tI"._)S;7tI[s"矇#Gْ$)A9R@U,_ DIDe\]]zիWt]$)!%xuسڷF$HI (('CC$I3 a xX2tIqKJR[F,+C$Ij' R:u ́=:tIƳHIhlȀI$I+XR)+W^-[ki$I)=j(0ܓc IDAT!tIg…Q Y>Z$IJ6`IIbϞx":$IR8ŋ0u* O=:$IR9eSwVm I?H V%KOi$I"%W!7 B$Ij>Wf > @۶H$5)A= KB~> :$IR˰H ڵW=zD%IR+XRz%ػˡCi$IZ)< Ô)0|x4$I-"%Azu4$I-,)eePZ :$IRs"%ӧ!/ƍcC$I (.D$)v, 8wK.eȑtܙ 6oܤ?+77 Fݲ!2v-[`Z F$)v, eٲeTUU79t/2۷otJ%}ӧãɡH$Ŗн{wjjjʢAQ__O^^&M<) }jk ##tIrҀvڑ]-[XR)XzF$), 1GpB-Z"t AӡH$Ň+X1l2ڷoO~~~(JP+V;@e%n:$IR|X@bѣm6ڵkwׯϧSN7\!''"*7߄BX F$ʶmضm Ξ=(M가9s9ڴi>oڴi|g_b Nnݢ$Ir|TWWPVVɓ'ˣSN/ҫW/zIϞ=o̙ç?iokPش v] 33tI0, zjN8qץ0qěT%5̓I`Ĉi$I±"o͛ټysYJ]fA6vm$$IaY@+->o.]B$I UR*;sf΄1c`i$I³H13p@FF4$IṂ%Hy9l6@H$%' R ?Ӧa:$IRp"sAuȕV|I, R ;x֭BF$)ެԂ._)S;7tIDjA?G@E$InDj!UU|9,XM@$It3 ի^$I5DPR{@H$%.' R380th4$I"5C}=̘<+WN#I\aaeeбc4$I DN9GN#I, R͞ PT:$IRpKj2xزv F$)y8ٳF B$IJ..-\,I$5+X]س'*/={N#I|Ht"L CSON#IHlY;]$I1JjJX ,>}B$IJ^^\,F$)%5p08mۆN#IܜHq(,] 0p`4$I"5ڵW=zD%I|`I x%ػˡCi$IRNa>(;C^ :$IRz(ԩЭ[t]$I ʦM{7H$' J550oL#FN#I, JfA6vm$$I,cv%tID)9ƌC$IJog 22B$IJo`)ƍa:$I(e?Ӧa:$I RsAuȕVVmI`QJ:x֭BF$I}a˗a F$I RÑ#PQ.IP(TU`A4$IRb(eEWzE%Ix\PQ()_={}i$It+N@NxI:4tI$5W_3fʕH$v\Rۺ5z`Yt:$In کS0gѡH$N, JjgCFN"IpKI ^yl]C$IRc8QR:{6ըQ0aB4$Ij, …Q Y>Z$IRrpKIgϞx":$I%aT2z*tI$-' J*˖EO=߹ZY%I?)iTVªUd :$Ip*B߾`A4$Ij*W֬Çh6tI$5%GaRχC$IRsX@Ю]zգGt]$I,%^{:tF$ID I?LC$IRK(!ḠիC$IRKqK i(+Ri$IR(> yy0n:$IZD '?\I$I, 8wK.eȑtܙ 6oܨז|z:лworssmklkBVV4$Ijii@mm-˖-gϞǓͱc(..?)'[#>}&OF$I`i@ݩ!++  ׮]U Fɰa(..f屈}jk ##tI$łڵkbСֹsg-%XzF$I89wΝ %\0h|????N:p-''XE 7-~B$Im۶m۶={6Pazcү_?~45/TVªUd :$IDv*B߾`A4$IJF`֬Çh6tI$%#' jGaRχC$IR莮]zգGt]$Ij*WtG/{By9t:$Iɓ0>LÇN#IdgQ ffաH$)eePZ :$IRӐرH$)UX@tKp N"IT nkl7BVV4$IJ%N@t>Gai$Ij> k:$IRDXzF$I,p AӡH$)U9+V;@e%n:$IRPXЯ_4$IJe4WW^egâEH$)չ把vB$IRsƎŋ!/F$IaT-:.I$Ń+Xij&ؽvi$I.7&M#B$IR:YMX6tI$WLii};t:$Iҍ4r ̜ cH$)Y@3 PRH$)&aFذzF$I H8Ma 77tI$3' i砺:zG++$Ia:(,i$I|?<] S@0wn4$IpTT=/-I$EUU`A4$I$EWzE%IDbN *)_={}i$IqbNxI:4tI$FR_3fʕH$I7s+l=l :v F$Iq̙990zt4$IҭY@RِEEH$I s++-еk4$IRÜ$g;^&N#I$ݞ$-\,I$)쉊Nj/BϞH$Iw$I]S!SH$I$I-[=|Nhe$IRG$TY V%ЧO4$IRY@ի }‚H$Iw$f > @۶H$Iw H9z.|80tI$Y@ĵk]zK$I$Kw/CH$IM$ < Ô)0|x4$IRY@\}}LX:tI$y\Jp;v@YN#I$5v4q0vl4$IRY@X~>\šH$I-ҀsαtRFIΝ`͍~~ȴiڵ+ԧWJeee_klkBVVm:҄kפ`i@mm-˖-~^{5Yf:u|+w|0}:<(L/@Vx{MJBo@ݩ!++  ?fȄ bM$Iy<k׮ptЁz(P2I$)D]q!CT0!'5'D1 uR7h:N4tm$Zm)Zs+%8a:§?ݺ8;/=2@.Kuuuo@n[ǎ577R"`D}$髯ҟ)Iڼyvvڥ 544(%%EsW_կ)Sz}ݡ:`EcP1\ƍD/m߾]_|<u-\ТKpuc~aokĉܬeffjŊ;v233[np(>>^qqqZb]6GGEggvءiӦk󎢢z|޽{ڽ{4i$EEE[[[qF%$$hܸq h V^^pmRcccx Ljt:i&=37np8^i, ?֭[r-]TOVvvvݻ\ݽ{Wobbbt!䨶V'O(0k^?~o;:::bknn֞={yn-[L/_}.YD.\Pjjj Lj3^ڳgx A}ZWֳ>Fh駟4gΜ^粦 jjj$~ߘ1O>s}$s9ؕ+WLttٵkWj4^۽{d]&rcq:F)++#GI7vo^ypl VVVf$ (6~cffڵ}eM `YUUqFؘ1c~z={V7osnzz}cO?^x=z4ucHyc&íaJLL inUUNUVp8_|+"@z5Qh"=o,55Usѕ+W˚<H]tIfR\\xFF$6noZ/#Vo3f̐nׄ n:Ԋv%-X@Fedd5@*..N6M˗/իW$nM2XӂG 3˥1#~E!Ed פMشi>CUUUiÆ :r䈞yfD* ͦb:~|M!Y]]^ueee}Yӂ0;vlk:::|6ORHsBެYF>k{Fvv233Y+ۭe˖n kZ a$c;c7i$97>DP{/ӧOWKKˀk-  {ڪ'Nk=bM $ϟdԨQ;wΟ?㻚͘1ƈlZo1~F@z؋/^TwwxMMl6f͚5D!R\v =ttth媯_ٳgkkZ aVPP.}GN)33SӧO$1t~MNի9鵦^iiHs\}cr:voYx-5Zoх X৫K:s*++p?ִex9?~\ofΜ ;wN'Oŋ%IK,?v]۶mSLL<.jl6jܹ3f~G}g7oeن0UoViiVZ4I͛eU\\ 544(%%El/~o qΟ?zj Q4-\Pv]/^'|$9NM:u ֭[{)??^֭$ִ2t@l۶$&&XnN8ONN qMSPP`K/d^jUaB 6ٳg &3sLcfeaq#)ৡcLQQ߶WKKY~= LooseVersion('2'): baseline_subdir = '2.0.x' elif MPL_VERSION >= LooseVersion('1.5'): baseline_subdir = '1.5.x' baseline_dir_local = os.path.join(baseline_dir, baseline_subdir) baseline_dir_remote = 'http://matplotlib.github.io/pytest-mpl/' + baseline_subdir + '/' WIN = sys.platform.startswith('win') @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local) def test_succeeds(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_remote) def test_succeeds_remote(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig # The following tries an invalid URL first (or at least a URL where the baseline # image won't exist), but should succeed with the second mirror. @pytest.mark.mpl_image_compare(baseline_dir='http://www.python.org,' + baseline_dir_remote, filename='test_succeeds_remote.png') def test_succeeds_faulty_mirror(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig class TestClass(object): @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local) def test_succeeds(self): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local, savefig_kwargs={'dpi': 30}) def test_dpi(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig TEST_FAILING = """ import pytest import matplotlib.pyplot as plt @pytest.mark.mpl_image_compare def test_fail(): fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot([1,2,2]) return fig """ def test_fails(tmpdir): test_file = tmpdir.join('test.py').strpath with open(test_file, 'w') as f: f.write(TEST_FAILING) # If we use --mpl, it should detect that the figure is wrong code = subprocess.call('py.test --mpl {0}'.format(test_file), shell=True) assert code != 0 # If we don't use --mpl option, the test should succeed code = subprocess.call('py.test {0}'.format(test_file), shell=True) assert code == 0 TEST_OUTPUT_DIR = """ import pytest import matplotlib.pyplot as plt @pytest.mark.mpl_image_compare def test_output_dir(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig """ def test_output_dir(tmpdir): test_file = tmpdir.join('test.py').strpath with open(test_file, 'w') as f: f.write(TEST_OUTPUT_DIR) # When we run the test, we should get output images where we specify output_dir = tmpdir.join('test_output_dir').strpath code = subprocess.call('py.test --mpl-results-path={0} --mpl {1}'.format(output_dir, test_file), shell=True) assert code != 0 assert os.path.exists(output_dir) # Listdir() is to get the random name that the output for the one test is written into assert os.path.exists(os.path.join(output_dir, os.listdir(output_dir)[0], 'test_output_dir.png')) TEST_GENERATE = """ import pytest import matplotlib.pyplot as plt @pytest.mark.mpl_image_compare def test_gen(): fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot([1,2,3]) return fig """ # TODO: We skip the following test on Windows since the first subprocess calls. # This should be fixed in the long term, but is not critical since we already # test this on Linux. @pytest.mark.skipif("WIN") def test_generate(tmpdir): test_file = tmpdir.join('test.py').strpath with open(test_file, 'w') as f: f.write(TEST_GENERATE) gen_dir = tmpdir.mkdir('spam').mkdir('egg').strpath # If we don't generate, the test will fail p = subprocess.Popen('py.test --mpl {0}'.format(test_file), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.wait() assert b'Image file not found for comparison test' in p.stdout.read() # If we do generate, the test should succeed and a new file will appear code = subprocess.call('py.test --mpl-generate-path={0} {1}'.format(gen_dir, test_file), shell=True) assert code == 0 assert os.path.exists(os.path.join(gen_dir, 'test_gen.png')) @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local, tolerance=20) def test_tolerance(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 2]) return fig def test_nofigure(): pass @pytest.mark.skipif(MPL_LT_2, reason="the fivethirtyeight style is only available in Matplotlib 2.0 and later") @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local, style='fivethirtyeight') def test_base_style(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local, remove_text=True) def test_remove_text(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot([1, 2, 3]) return fig @pytest.mark.parametrize('s', [5, 50, 500]) @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local, remove_text=True) def test_parametrized(s): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.scatter([1,3,4,3,2],[1,4,3,3,1], s=s) return fig class TestClassWithSetup(object): # Regression test for a bug that occurred when using setup_method def setup_method(self, method): self.x = [1, 2, 3] @pytest.mark.mpl_image_compare(baseline_dir=baseline_dir_local, filename='test_succeeds.png') def test_succeeds(self): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.plot(self.x) return fig pytest-mpl-0.9/tox.ini0000644000077000000240000000015213133617760014736 0ustar tomstaff00000000000000[tox] envlist = py27,py33 [testenv] deps= pytest matplotlib nose commands=py.test --mpl tests