From a234668c7af2e2409052fe06817f939b931dad5f Mon Sep 17 00:00:00 2001 From: krassowski Date: Sat, 27 Jan 2018 16:34:52 -0100 Subject: [PATCH] Implement notched box plots, closes #2286 --- src/traces/box/attributes.js | 22 ++ src/traces/box/calc.js | 7 + src/traces/box/defaults.js | 3 + src/traces/box/plot.js | 24 +- test/image/baselines/box_horz_notched.png | Bin 0 -> 31025 bytes test/image/baselines/box_notched.png | Bin 0 -> 29194 bytes test/image/mocks/box_horz_notched.json | 287 ++++++++++++++++++++++ test/image/mocks/box_notched.json | 283 +++++++++++++++++++++ 8 files changed, 622 insertions(+), 4 deletions(-) create mode 100644 test/image/baselines/box_horz_notched.png create mode 100644 test/image/baselines/box_notched.png create mode 100644 test/image/mocks/box_horz_notched.json create mode 100644 test/image/mocks/box_notched.json diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 9d5d45247ff..2b2fcaccc7a 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -85,6 +85,28 @@ module.exports = { 'For example, with 1, the whiskers are as wide as the box(es).' ].join(' ') }, + notched: { + valType: 'boolean', + dflt: false, + role: 'style', + editType: 'calcIfAutorange', + description: [ + 'Determines whether or not notches should be drawn.' + ].join(' ') + }, + notchwidth: { + valType: 'number', + min: 0, + max: 1, + dflt: 0.5, + role: 'style', + editType: 'calcIfAutorange', + description: [ + 'Sets the width of the notches relative to', + 'the box\' width.', + 'For example, with 1, the whiskers are as wide as the box(es).' + ].join(' ') + }, boxpoints: { valType: 'enumerated', values: ['all', 'outliers', 'suspectedoutliers', false], diff --git a/src/traces/box/calc.js b/src/traces/box/calc.js index 93532067058..688f2ba419f 100644 --- a/src/traces/box/calc.js +++ b/src/traces/box/calc.js @@ -111,6 +111,13 @@ module.exports = function calc(gd, trace) { cdi.lo = 4 * cdi.q1 - 3 * cdi.q3; cdi.uo = 4 * cdi.q3 - 3 * cdi.q1; + + // lower and upper notches ~95% Confidence Intervals for median + var iqr = cdi.q3 - cdi.q1; + var mci = 1.57 * iqr / Math.sqrt(bvLen); + cdi.ln = cdi.med - mci; + cdi.un = cdi.med + mci; + cd.push(cdi); } } diff --git a/src/traces/box/defaults.js b/src/traces/box/defaults.js index ff69dcec01d..2709b4c2612 100644 --- a/src/traces/box/defaults.js +++ b/src/traces/box/defaults.js @@ -29,6 +29,9 @@ function supplyDefaults(traceIn, traceOut, defaultColor, layout) { coerce('whiskerwidth'); coerce('boxmean'); + coerce('notched'); + coerce('notchwidth'); + handlePointsDefaults(traceIn, traceOut, coerce, {prefix: 'box'}); } diff --git a/src/traces/box/plot.js b/src/traces/box/plot.js index 6c2864ac1ca..5cd23c409f4 100644 --- a/src/traces/box/plot.js +++ b/src/traces/box/plot.js @@ -101,6 +101,8 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { var wdPos = t.wdPos || 0; var bPosPxOffset = t.bPosPxOffset || 0; var whiskerWidth = trace.whiskerwidth || 0; + var notched = trace.notched || false; + var nw = notched ? trace.notchwidth : 1; // to support for one-sided box var bdPos0; @@ -125,6 +127,8 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { var pos1 = posAxis.c2p(pos + bPos + bdPos1, true) + bPosPxOffset; var posw0 = posAxis.c2p(pos + bPos - wdPos, true) + bPosPxOffset; var posw1 = posAxis.c2p(pos + bPos + wdPos, true) + bPosPxOffset; + var posm0 = posAxis.c2p(pos + bPos - bdPos0 * nw, true) + bPosPxOffset; + var posm1 = posAxis.c2p(pos + bPos + bdPos1 * nw, true) + bPosPxOffset; var q1 = valAxis.c2p(d.q1, true); var q3 = valAxis.c2p(d.q3, true); // make sure median isn't identical to either of the @@ -135,18 +139,30 @@ function plotBoxAndWhiskers(sel, axes, trace, t) { ); var lf = valAxis.c2p(trace.boxpoints === false ? d.min : d.lf, true); var uf = valAxis.c2p(trace.boxpoints === false ? d.max : d.uf, true); + var ln = valAxis.c2p(d.ln, true); + var un = valAxis.c2p(d.un, true); if(trace.orientation === 'h') { d3.select(this).attr('d', - 'M' + m + ',' + pos0 + 'V' + pos1 + // median line - 'M' + q1 + ',' + pos0 + 'V' + pos1 + 'H' + q3 + 'V' + pos0 + 'Z' + // box + 'M' + m + ',' + posm0 + 'V' + posm1 + // median line + 'M' + q1 + ',' + pos0 + 'V' + pos1 + // left edge + (((notched === true)) ? 'H' + ln + 'L' + m + ',' + posm1 + 'L' + un + ',' + pos1 : '') + // top notched edge + 'H' + q3 + // end of the top edge + 'V' + pos0 + // right edge + (((notched === true)) ? 'H' + un + 'L' + m + ',' + posm0 + 'L' + ln + ',' + pos0 : '') + // bottom notched edge + 'Z' + // end of the box 'M' + q1 + ',' + posc + 'H' + lf + 'M' + q3 + ',' + posc + 'H' + uf + // whiskers ((whiskerWidth === 0) ? '' : // whisker caps 'M' + lf + ',' + posw0 + 'V' + posw1 + 'M' + uf + ',' + posw0 + 'V' + posw1)); } else { d3.select(this).attr('d', - 'M' + pos0 + ',' + m + 'H' + pos1 + // median line - 'M' + pos0 + ',' + q1 + 'H' + pos1 + 'V' + q3 + 'H' + pos0 + 'Z' + // box + 'M' + posm0 + ',' + m + 'H' + posm1 + // median line + 'M' + pos0 + ',' + q1 + 'H' + pos1 + // top of the box + (((notched === true)) ? 'V' + ln + 'L' + posm1 + ',' + m + 'L' + pos1 + ',' + un : '') + // notched right edge + 'V' + q3 + // end of the right edge + 'H' + pos0 + // bottom of the box + (((notched === true)) ? 'V' + un + 'L' + posm0 + ',' + m + 'L' + pos0 + ',' + ln : '') + // notched left edge + 'Z' + // end of the box 'M' + posc + ',' + q1 + 'V' + lf + 'M' + posc + ',' + q3 + 'V' + uf + // whiskers ((whiskerWidth === 0) ? '' : // whisker caps 'M' + posw0 + ',' + lf + 'H' + posw1 + 'M' + posw0 + ',' + uf + 'H' + posw1)); diff --git a/test/image/baselines/box_horz_notched.png b/test/image/baselines/box_horz_notched.png new file mode 100644 index 0000000000000000000000000000000000000000..3904c3a680d407abcfd2d380347ef03fb75a374b GIT binary patch literal 31025 zcmeFa2UL^W*7s`{RJw?Qh;*eYf{`X5(xpg?ln|9BB1B3cbd;tbMGz1}l_mm-bb$aG zlq#TzQlL-~7+%V0LTk)l5+~vuOvPoA#~mjPB2A zl@il<@R9pEe-roKSJ$(5`sI#2DsevQhbXyP(nRuG*x%b9txUV{vV=!N!`9T?G_vjC zSL2;7KTpDdz1Lc2s^2`$@#pa5;&pPm$LPj7X<+@6;v}i~g-X!2|E-W+`%drL&7it# z4{NY$82hU$C~;W}gTvsvfBxVdn<}cB^7b*-C*szI+JKwY?5z~$R?<%t*;+#?LC5gJej5vRDUvP zb8(4A!M4|}k;F%8y$zKr`*}x$b^?5;?+=cTc#kF`>en@EyynCLXe&>dAj3wo4Z1_m z<}P$833grHDB4^I+DTZb-!NEFxN)~2cbKA$B}&0+_9?rJ2W+hp+Z$O_W|1fB>b-{D znw#WbzkWSjEm8JKW@%`2+q`nvUGGZ<+xpOB(eyKV(skvtRilA6&8{v~<+WkKowcBy zNgKnOI@(O3JDySW(e^sKo&?+MTLrgQMEB1xQ%>$V!LEwB5ZaNYE1LNY4A$P-skk6P zYf=uNd9HsAVHx`|gz%1cU+se?U-k)pniL8ZzWI|%*6%D0*!WS3KP2ArbMgClIFD;w zcI;)#8YCr&`*FkeD%Rk&X=WrF=}WejBI6cVn~*~b!04o+3Z`62TSev@6Lfq17V0L2 ztj4kNl}RMloCjU*KEC@cM8MD{%ka9*!yuH$;P}mWGdLCwFs_;9E1$XoQfw#9%J&TcmjE zPpRs$c!xU{?4&EhR~{M{RD*{!w$`vyr?j)V{5TA1Kl>^>CO(Aa@(r+PxSRNmL1%0= zW(ZR|FIKxy@27p#VdC<1PD1KzdeHWIcSF!lX^V>+|&euc1tJBsJ41C)x)55 z^7RO{U8?p|0Eh8R5(Rvsy1YK@g{)KjhB@VRA?B_CE|<`9i9tdFSdcK`>6WfCVRFE? z$D(5o4@=#DXa$qWFtEu!Aul$^@QM$% ze!=n(Z`d-)uY6X|RgYkHRpG_LR7bQFU(%o2c<^54xKql$vYi)fn~qdZyl@_a@6eJz zy^zzp>+C!t6Yh+yGp_{C#XMOSEV0&n{f4X0OhLZgw-1jo+x+U`E#M#-87uUk8{3@s zZb(>Y*s)3XU(!iY@+n=J9q3`qtzWDlBsxE~n%{RQVElEOhyC(mGheNN@3vR}t%z20 zE0?}+eK~1Y>|c$@%~ehlCv_BXDx1`hlc=u`N(UU!t(j^esc&TA-PG8i&BnBy$&8@+ z8_tuy*t#F_azyL0l2i6_-t*SgOKsv-MT;$hu}3@f!?KEF9J-%uujH##ci!@NaC!OD z1>VMntvLkd)Of%b4KDe5%kPJ!abHV&cMRS2XSxs9iNJlvIj=j2W8S{phzv|LGk03_ zuLvnjN%dc9E#0P3s@4-!2WH}ftz4@$Z2T8B)&{$s4V`;g5_N3gzO2QI6KI6jWNw=I zoY>mj5D|H8Ia&6ZyFs-uQ&=c8wwRbE1HA?F8BZLMr&KIP!8fn0a1)BMY7* z_4;itL-)#}(dz3I=lfM7UI|gs_5EA^pNTI!3xn3W^`u*)A*BB2Re^66wpMyZd?*z4 z+Ap*+&Dx$pw@w!w41ePNx&Xes=mQJ~e z!*cytc*8}kq*t)2JU9f$bGk}6IPOTf()Pl`t|^*}DOF=xkykji18h$yc)r>gG~d|) zo7bL-sJq{smzen;OR>vh_+{EU74Jnol(fSSu~>l?8aSX67~K z0OvVakRNzYs#B3Y)`=N`ac9b>c`5^`UsyPGk|c#X&O9!27sjbgBSUyg*y34Dp*?c!vGCI=~A%_qJlf6mc#ebo)NoLV^@8lv?1|FE| z;+mVC>0;W_s?s=S@gd;2c|o83;hJl9U^%>q*@x;P9rf^ql&IB;OZUI3R;^rF?q2j| zn!J2dv^soc^_2?36eC?d#$NSF@4}bWwy;ph^eTGA@rjh*my86OhgO%xM|e>9bVXrx zsoFc4-JwKxgZnAyU;>AJB6mRcXJ$t$Sm!Vr?ZvXzZ_7el?c=dAP@Iz$Ef2ex z$iDR+Q<{l5Q&SM<1l2;k9=wwsJqFGyPk4j#ngjLg`{{}@N(3l8VEk^|LK3G! zx^B&(2Crec{2Xwvr&c?xRL;EmRQTZ-J87c1*Z*09RM3rp)xHteby0Gy&iYBPXw^DIu$s9f@JvhbSp#3DEpU7w z@dbRiWg_(=7wI-;G)KjDr6OB@ukvM{eYXXJsZB}!S1b|R`p%K6ikHNs2U~mW_laSv z4RrXg(!#UhjuQ&+#dgz#b_JLWd-mvap{_iTdhogPnU~@+B*4UYppO~tMO<-SY(C{z z)C&DhORNbLF0!?nq0aE+d3o>wS7m>_Ih4(~q|a4%KH9S3hdE={sHwr+~VAP z*(r2UV8!UBzHyh%N0Tt2HS!hWk-G=Aa!nOY!!B;oENjce%&HA+*~xv?s}!TH;JA&? zai*w>q1?%*S8Y7xChhoJi5nm7o|&4v<0`C3{wJBVWXHj6SO+y~%MNIP5~x z4-UNJ6lj}&2rXsU;?jK5;|Zl@A{2@p6@uO89o<~b#fs0pxtp&NWb&YQwMd>Uxtbc! zfc08h^)DAES)*2WhQ1Zckm9L#*C0D`@rupBF;T3p$-5L};?zq_(8apyV6$@YR-aZ2 zRk#v1pM1$+p}jYUd)JifB=^2iJADkq4H7z%W5~*tK7WjDzTpWYw?6%bZyj(-L7Mm$ z?S7PG<(;E8bGpEb@|f4xYq&yOt@b^#Wog_H*cV`yiPkF*>??o?&UHKG>xWf*h7Hpk z3gi3Z!767GZrr)&@xZD6$2sq_uc$K$0~2Yrn|i|D1|1(Yl6OrFPE6nnZ|A_*DBaAw z*-Mz0Ik$@itX~b~!<@EuWwxJKLY(f#K3vU{EU%N&V0o4U3lk9Cv`VcRDs<>Sc>I~Jzs}G=Pngj zk$j_L2fHDcVWKGw1PG*7w@f#iG@OmNU2{>tmTNGpyBdw4iR5lf@lJ|)gel+@42Tnz zLO3x54OtS?A(_&`t2N57+T{*W;9Pd-#Sv~3sWU&%+cv#*EyWD=1_iFS!)siTdWP?f zriu2f#V&(RCRuHxBG;aOB}rHftvsjgW1eerx;)58IBAAMDq|c>pHOE?OsC9PSHrUj zmA7TOSs-FQ9SF-F4+4w+I;2?GN6IKIpc zaz{Yn7qFtjCbc-4+UcMkdwJgrw+&Ew%K4R{P&itQM&s^bDXFPgQRr?E|4=JO?r1nK zxwC1>ZnNb9`<~G-4dL;XoK(QkcQP;CQWys|O+{#J#pU|UR9zpGy%`d0zlQ-k?)j?t zsjA+$yjaWb+KpAdM4JFxA|@knD}BgwJ;Y1GtmY6Sc0S)(1?g{a$dl=%SA#p{`eBW% zH0HV6X@2w7^CCIJc_T)N@r0U3HK#1XZczHrA?|1bhGM^(G0fzdi#stsA+CX19bR=f zUM$_3x0FReqY=I#@lrfr*2_%_ujIKW`niXD9b0w4O`z+u3RT6S0nZW$F9+_`tr85( zJbk99sSHg#zO{Titm?B| z0WV_i1qE{WG&ja0};547QuE1sX+Pq1wRtndKs_4;RxD zv_f&%x|u_KOe#vWGE9{ftaJ5*`(x+yA>Wi_M(?&8d;7moGfrA zuBxY8&eIpJtiUEBGa5F>rK2ex70y_`Lo3J}Ncr@^U?E3rA$Uz7aHyjgKn5pwZu3|4vTYqHf~ z7NsYO(`KvkYLLy;5_7=I5UJhW8BpJO1*q$QX}7a>ms!x$C+Ss$ynCybXUeTb{^98a z?giglbXrygPW7TKRzp53P>M{tySxslofZctfO(F54A+AR2z;8wDqz{dZ?0m*gxeh^ zo(Qe;(Q0t-g&f^_U*x?+;dxVEO=0ocs`7GO?OKU889iEYI3KPxIjWswc=9s@1rse~ zfBiCd>E**08?+n50~B`#<@8flqeoUmPQdbCA+(Dbv60DvbFWIl4eg1iJR92yf0cvK z4BN#ej-xrehVOUQUq?&ve}-5D2&i@!$AM!67x=~~3o#8n!NqO^+s;H3(LR}M1!t#8 zZpCHoDMpTmLM_e`hp}ER1%zRmJ}f57kjcocm*u!vt*`QUD8xx~u%oxL5Mx1b)?Mxq zW)>5yIhrj=*7wz)85Yy5nZ5c^hfgb)h#{R!+L2VxS|+gEqsi69n5FyH%|sjz;GOO; zp$*^J8dN4ON|uL1S}Ee*_qNXE$38I`AP{4gK4a@v_v&tYp!DSPCmJkosO+1fXd$kd z$@evf$p!h_Y*WshMZo+D`RtyhNo8DrFJ+E0V>e@{uquk>=tZ1faSV|vYlDZ!uW%dJ z)84Bkn@o2xb-)pJ5<BX0&6Hu7ia#{xde_@jv2PuX z`O+u#64Tm?Z5;R~csmc!q^)k0B|mFiuoR~exepocs~+v;i?n!zaU@`6kkui9l0)4H z%fmOgP1OGZ4si^paW+4XA9>IwkO^@q7@m<9`izYCZM4j|959T?=~-=AhwL^Zq}>m4*ge(Av2BiN63b34XN*G* zUY+ZN021XiT3_cm)7$F$)HLbPgOm%7x@KmHp7X=}^yf(Hz z{Ax{m7;i9J91L~7cQ=$spST+8*Q8h#aBlk_?)yl;w%we%G^T_BL7!9fuh?=rtB z=2XTeeC_j-;1~Otrs$2)ww5Os7tf1q)e>dpwd_qHE-wJ?9r{*HIk<0J&j0JKFBqRs zJYYBb{`o~h-l0$Y@*QDYM_9^uFGN-ww&i)fng^}|6X|$f^6oLF+tzJ;JiacqpJ|#X z>RZyT@;;S{sWwHdYs7xE-|Y2mw)NjC-+#%}8G;+_;ydt6OV|Z$c_#r})6$iPPxgan zP|EykV;f6o)uwPbe)@TxX1blH55M_iSmx2N@uP|M)5a2_{iZcG{C%}L>4~4C-X`tFO)DjN; z2g@nMM!FIK-R+7yAvF$WU0$<&k@#M+Tqz4m#B?|0p=;k8j92EFKXga>o*yunN!{Fs9-bZ zz7uv&o?1?{O3!>*7;kmQ=gNWikjp;a^rXi)l!=udqC(+ zovLOm?_}WI%p0=$+P0b`8!O zDCEb!1Y$-mbpo2ZRLHlazQfKQy5=~uC0$L}G8Eo?F*XK8;rzh6P^$j0`|v)peys3? zb>O~k{ro7)O^!Y**x9^2Myf%{m&ht5Z9 z0=KsvYaU9Bg%h&tLcKSCF1imo<+mbK=cr z@{b#Ln@caT;n6l?3$`F_K{agC zoKt{_TA3SyaFCTj{=+^&|Kd}SdXl)015tm4LRt8Xhf*jp;uIczO4&g-VHX}PqCe!p zkE>kPDN_iA=)WLOzE=1eymx|y=i)VU7}880Fh2Y4932^Fg2aG(yW~jxLy*23+S-|~ zU6}u{_QDzSG}*>i=NQcM`T(7Ar#PlNS$9)G*47Hsu_k$ zPQy~`$eAF+jLWdg8?zVI5F=}!)majE?>+DqvpAj%m)hA{2+|O?NH$oR?$L66OFpnx z+qF0n?zTE?_Q?`GRH0vfpw5qYgz76k#G)`lEpu?f!6eM_hU zc~*sj%Rj${jGQ+k06ux>b!Wj6U@X$@0c#_ZcYPN>a*a>tXCyrp)KYjl>X;EQ7OyAu z^dlF1IBkfYE$=iuF*R&S0jaXN7@y@1NbUGBu{NyL_;S3{ zLUE|xPQC`>xs;n1-B?43SC6C|eL!`1C|?mGduRb3bs8>YsI++X zi~W8IX2UjOu>&&tOdN~rX2g0qnCHPVvjAzd}>UJBk2$8Wi zgR~ii@@&oM_@FHc{AJqAh0aUr4xOpfohFlC4BqIL%ooC}N6Po&NWPR-dd}Z&J4SIn zjtCEefkg4a0q{PB2tA?ZMR5LREe3%2X0Y`jxgtTsJn=Nn;^_}XgZF5{sh~|a(J-jB zn+C_zUgiaY6=LM=@K=yHjJ5Wi&NV8G6@6&y3Yqq^I_;6=vqwmE`a%zm#y&{>>WS z)Cu8hc&;fefp=bo+;H$Iev`wmH@Mw=_oz+Xdp*S(--H3t41WQzX)7s%6W%Cf0Ok34 z+hGs)igw>l`N@`@?KKrquu#e~ud=NtJqPTQkt5d=)nQzz4f@Z|sl{BT-Kk2igf|4b z>K97|e73Eq2(MZ<;RZZ#?(59bWAK{!?)I$-UweO$&y(U;p;&BO^l-S^!?8-Uy0Vh6 z)j)dlqjq$w6B*P)dg~;q{PMps;eArIvob-+FfTVlnYWYae#11=fI|-g>s0Q1&J@8H zLfi|^%$RU{G6rLu`trHQ0vA6315f^7rUCtEL9BPJ9B??CnxI=2^TqyPb-wJY%^AX= zzOxgm#v zW-a2L{JO;(r7MpFaMLArA}Szcq_46d?tJbzRGfbNP`eEHdtTD$gc&~Uh)m$66LgeGq|W=EH$q=K4lYFn83~3+|ksgXG!p4 z`t*ymq&@Lyxv#flBdEvpipICtKss9{fe(PISopPUHq!I%r9w{f>i6W;JE0KgZ!RZU z$okT(p%CSyPh(oUzz?{3zz_1uH}7fy7r#GvJHtGZMR^YG5 zD7tp>nj{4qpZu*4XSsbz_ul;Ais*F?9wG(g^ec)9h?SI&m)BPZAEC!Yn zqz@^W?mg?Y?lKR_o7X#G0#QRTV_TTBPkG|zdFoxz!~I#CfNL!|e$LtRA0qCoP^f*S z>!2(c93~Q=(#Yt#tRM6}UHAU7epppy9(u*5ys+0Cs>m;eR7VAgC z`#lnEW>u>Vc2WcbCdTy}zwpuoiTD zCAcz3asd&oV6&}-*d(&HUo(5mjxaqaFgTI4NUqFhB?c`tPzc#FzT) zXMagTzQj4CUi)cQn@~tG9Wyi6CND7{6i%9;_cQ7; z<*q+&8T7we!1;)p7v8;jRSd^bpTTbucqgvLx2|<|GGBCzE2BY4O}Hx0M9XAyg0Mr- zzhiyq`jo@l;lW$5+vnfH;U1H$+-LASFYebY3*x4iR??Xmmo$%e?6c$5HzkD$;7AM| z2ARBFIu{&knnNl;NKj*Gs+wTXr)Er7mZjvBMPFHi~uVr9Dd&iFQ%Ln2me7>ty0l-CA4!W z8DKlIs^L@FlX-?d_v5jpa1cH42HmE9HxVi?gz3;D*BAdGa_!@Ja$waG-){jmmlu0m z^P}?f_xJAY9Hujbsp`;;yA2+bor(Lu=9jfHVlk6urvh z6s(gkft@7%`-jGBiHc5h)ky9kEbU9o1nRv=E}PM~(V?KODdMI8t{$pZ`JIh)&!@^q zR_K-fRnD@#7SLce#h5r=w?@0oN;1?|OM14QBk1>*d?bg8v8*5uO5`9v~$g95w zocd222mm)c&o5Z^8O)tk=nVbZ!p`*glRkeiDG)^bbHJC4e|o5Yfr?im{$7wjP}aW} zPH3BY3 zxB!m>IFFAI;~g~~>S}V0sFub^mBt_b!AUxgr;_3eD2Uh2uW@l#;mq{O5ja8hJj?DC_-&H`imA|X@n5&=8lzDEGSW~Fvl*M9zk} zOE0%cThM%@{Enr;uh2KOb zkrOG7Z9rBpO_woqT_S-Z1IaRnj(G52kq<6L$`+n!DFc+Dq0) z-=Qq?|6z6d@~AOeAs0m(*#y!m)T%?KBFm@6h zYjrA6B&HnGt1iZi-y6aWGh#BI+?sj zuWuObp!m@t6$RUnR8ym{4(bzf^71re6lTs?xP9bA_b!3D3JBrp4i}vRtjv$pw$>x+ zR+El!%W4DAaY-IXrNPdCBF2!XaZeB4xVp}OV0&ZS52C@4NB`RY*w?^lbkg}(>KOAW zrT)j?fZCQ~_Xdi!dAaA3=hWvWW`NEjr%yPhlCQq4ueYi3UXTKKDmQ@yI2sfv#8b;p z0iIGi^Sbb2Iwe)!!><3$EqB1Xv_Y}J$Y|k7Am(l@1qkr5mn)?I=3WahNA56a^VHIT zxgtyj!BWO`_>w%Rtr+{jVdyC*hc&d{1QjVYsge)u^Ic|_4jwsv8tBM<61Gh9yoX#M769+0-JmD|73cGNWgQoPL)d*# z_*_kCH8a-B8#!_>FhJ|1Tj)K2ASDki0I{*KSbj|aK!pbN3%F$i!~_Etaz&&?(8!f6 z{NyJ?ueo;uImA2?OMN1)iP{RD{JGvyN_{dRk8`tw$vJ#_z79C|8wzIP;@mrfG=)B7 z0NUGVRXkwM9fMnHJIwGKM>I1to9_a=Or~n{W?^yV-O^EB?_vJAp{nF`Wxuxkj6gB< z@FPzF8*i74y0qGB!t?Q>C{DUzvs4zlP~KyZ04j&xXpsAu%e=ynJMQ>L7 zQO}gC%leA%JCbF`egJa&_LXe`J2_hTtRfNszEV|Gg4Cmc6z=*ry+A6&J4)Xb* zYw$T(QNg^RBbqi=QwbE6>#@SlIw&MB_7E~z3T6jtX1ttjL5&j>5GdGKS=VKcZ-rKY z5zyL?zzo<6X4}TdH$}TR>8Nkpwpy~2jDrPnxkk3v^!Bw$;x_XtW-V8-f=lYrh3T9`@JUj%_(1vS7m7R9@wm<`|4?Fff zR>g~V0{olAh*+k*P|4j*u5d57uH~_ZVFB-9DfGJucX@lE zGrX{{Py=z>3P5e^XxhFAz?N$q7w>v|149Dd?P`s5P)6qMG1$a|kN|ZyLAS|$^2j+1 zrl)V+v!}XKdCl6pEaj9+Lu29279f`GfJV;(37?^r(Qdd)MPDlQB6b06L6@Z{QSfFb zbAuQA@PZuu{8avBXV7sLrBFQfIBgA|l5r2oA{#yvWWb~6G=l$m?V($}A+F6E;Ry7-U4Ds)peWRQ z^YAI0HM`xB#w*vEEu@d0uT8j$D(m3>=cxkmn7CGzy)7VlaRcPBY)|}AKk*+umPHfZ zKPojkE&|a1=TrFq_2v2B>mF$XhY*xFs?{aEakq4!pb*^<y$7{j^pPu*Y%{aM2Y}~QHa_Pk8%j*R+4lWu z=CcRf=`lr25ee>242U*WCc_9SH?!z?H!JDcg9GWzWTqo;`=_5~-hTYCR>h(j4FfwI z_mMryJ17)FnvEMt$8-=OQCGP(aRlRuE>%x;cJsB!9f@>D-R^@Ty&Z)YrsO&1t@j*^la zej1a|vKliy-0Va%E0|>C0cLHSiei$%F0y1AOkPs}H=apqJO6tufD~p}c;m-+jPs4| zsHs0tu%+!{DVP(d=T=@A@N#5$oyA*?p3`eGNEfi35xMlfFKA{)Z{vPe_hsMaVh&<^ zOfFEj=s7}To-!chUjf^7WgbC1ls^LTrK{Op;|1&5#(VzRqpI|fP7q#t+Y8_Z zN({bhGa$H+nxyV!)Md+CENB@-sh&-O>fj6E$%UI{GkM<>eVUG>{M?G&>D5QuP)#c+ zim#xCqVL5T#NLZFuHy^$ymnXok&h|%x_{V(SCO6nT7HSZ@)w2GQH#zl-mfV#fp_b!rOKN)bfj3_Pa0i;wQa47 zbJUATwDBs|2(tq<9muPRRm0ek_lLwzkX@pTXh9%3*d;smgaM&lBm60PU*aywZhkvn zr~AUsqNz!{I)1Vyel1`s%K>>V%05F{V0drW-5OcCs>;B%!r98IN8i_bP7I{ASlk^L z5UfST29Z>UuHnf?bfM}l+ozekjG_&62$~^`M#u0xyI#LP%QNvQQQXF_-OOw3YlTcP zE4kxnl_KC0${rblbY<$ECmIj;sLCk_TktT6s9G=}cD>Tf$5F?LY&O{gIk01R^u;f4 z07ba9eoR@B-Bh;p&cQfj`4>*uCA<~=o71>2nov(N1L8|dn*!Ks;@kUKV*V<{`kg#= z@XWzKdmeO|?jO{aAgcL=`P&mKF7vGPay7NQOV?{@VG5_E?y=l!O{E9FG>s!%@w#e9|D^O0Z9|Xqw}>f&#Vl z>hhp@!8nMPp8`RVO^nJm%HsB8;bX7n5}`Ivd0gMB0W6SXRpsj5!XMGnCXStLtov9p z9-nzyv@xfc{S1@vXLdZ)@Ng*{;}s$4q*>{r)wJui%NCTc)t-Ou~k>R zxVL{!-wI`x2cV20z3qTKP>>`w0438B2&GzpjE9s{Dep1S0t$D-g|4 zK2RSVJQWADoVCIS51zcQnxH!xum-!XRtIE5!x?mO*3xWQR~x9RpW5EZiZ~VDrLtpv zk%Y1pjpVYv|6s#o?u`v#JinnSu)3o3M4 zBTH#tq^T+7#zbK=6-TD!D(zUw(tU*w#zaj_>#4?iKt zKwiaj_1z4Gync&|)Iily?JvItVy|xlCAM0kHDWliDp0GQC|Nb!tpk);^OX8-6`;i$ zr%Sucpsktfp%`bdh!$`V!JLzWqmBcz92V=9rpUo`vW}Mv8R;jlxP;vDEG0a zT5a@}E8m-rRgHLA5}ElX_45Am=DRK)nIS8A><>)%ar?-hA>|r6Af%JX=Kh6l|#JAv}9g)V)xYXC2*xz|6@lEw~wZzqEH_ZrZ+ z@C*Q@+xSc&)+=qm8t{=?E*n(Vt7{XLf-#q_fbCa%ENqP~egj~0cn(8xH8aqgE1!u* zfm-YmtM0fVx}s+QXfEwRlNE%!Yfbu%+E0T3Z7u>dBLv#Xu&|pOGahoMhTZ9wT-dI~ zEwAS6@BEpz^&{@1qIX;9)$XDl&zooZAVND@l34JQp+BXSJcb2scd62v+?cu(sn72 zc9u%ehec%LwFF&;-_mJg~I>`kn2KX#56Un@3mP)ihKC zvFD#yRqp;l+1s!qNH0_ogy2;?%!`Yl2+(1H1fK@r9q%NaYf zSC!VDg#&}yTFgkuBc?Wsei>E;zR+c4#IH#xg{7$)A zevdAhD-=poW+i!EYC3lq&!et8-3!zqjpqw3UIV^<9-ho|4Slgg*_Q$=l3OzYyN2{p zGbZ<)uknIrq-Q!?Bk4t)8XA^}izXJIxNNrkwsz?KOO$ifGAc74)`BesxIMB=P%FlB zsd$;*nMglyF%(OkSzKjvvK$3!$&o?ZL_}Sy!HKB^p_Ru>HP61&wQPnjjCAIE3ljY9 zHi9Zn4k5u%2!nY-LXx<%t7ZGPJKzO>Igd*^CaJV*o&Db!0U(RSK4Yu@?MSAetrvmh z;#j4`z`(C4TyOJq{@fS zRRX8rtLgJnrhhsG-T$LgAPic9Q8{*pdXuYu7F&Oq`|1PXS*Md(#P2Gyl`jXdXi zj{$A`UvK9R?nUkw<^{imyq1G#i?1#xHh$|><$@ciN@+<>3Roiu36?MRjH>3G#}KdR$0(4gJW{3A4z zqib;fUEcKnq)bG09MqeLLvcTn&|59KjL6>c1ZSzu-aN4L5oH$pGDV8c4bLk*huS-=3U!IWl}@NFgA}GiY-`x-9Qrc3nLhqp4I?T?B6vsYYh9Md)j&TMO4qeo|ob4KRf z7b|WhT}waTD5-a*ybmNj9@P0NWOZzrSed}?kNT4(%hh39<$UAb-ABKS`u4}~quk(h z;-m=SR!^E@EE>@xiNM)yR)`kl$2l2Yb7K}dqw%~cU%>hM?%W$T!i8`liv-Z-*c zPcbXuH6GGBusU;APJPe9B+9`L_J3&W>>osCsE@vJkyG&z{C^66vFCFf+I37&9qB@0@^n2H*PcJ?x&9*k`MaKw zUJvlO4mVZ~A{{OWEm$AK|FheAJlrQ=I0-rY;2qjF-%yc4{c_X>=67oSR=1UDNu=#wyHsv_f|# zhX77(@tBG{yQxyy4Xrq2Q7b1Lg11t-a9GeCZ`D%*4$hGa*L6Uwj^rhI%?%0px$qiV*I_X_qTK4mb^UKjPc~1II(xl6e-=~g0Jk#~0wwk9n2hBv za^wUOVkvh6h-(+&`2d-+4BSuIPI>HF|G9^(k76sex(lY*Ym|3^jr|#O^Kl1$%5h`e ze9ce@Z;VBku`9W6+2#2KV)0zS_d@JQP;zN~)n|nfrev6bIv@<6V?7OAWP*8 z-g%Z?_4h|Pn4BtmlC2ubBX@=d^mXuUe-Dd?t94<7Y1g;+g4RJgPgsc60Rr@RPzRSZ z&`N6dklKG3KnLX^TqqH9LPc#RPv1Mp^iBXmkK!58`$Gpcam!mB)wpE;15ZyKLl6A9 z>>Z z*q$p_6OGAjjG`W>J7SrdN<{j+P4+bntul3g(8RCy;2n2rQV~-)`zs;R@x2e2lqB&y z2hQ=5&RM5aAomm;S^&}qX;6k$XMO+ue$sFR3!fBda+v11KpOGGJQq=Yc$;2QTKeNx zX-Xi5lgyL=6!+ocWtIFmP(1fxa}<;~xwzAa4co#LOs#9-h6Ni5gorn`LBHJ^OEWRh zDR;*8xCLlXIhN|t>9lO!UcHyy)POc{3SCq-4(rV32c0V6v=TN__dvx(b~00AqJ;@7 zX}TxB9S|pRx;*759t|Jk+om3@2G}hZ(9G-BhsU2~`YccC)xLgx=8}bk`~2p5cRfSk z_@_aE23-szIr;)D6mrd#0dXAj>4g!Bj^uy_tO`t+L&mZ5q=jv?+!!e1d-h{)sGZ(y z7qqEJ1XxuQ^emMd03~~N^zvCCM{5J}C8;Qh(npk30+CoN%mfc*=>?(g0Cs6(ZR&X(wwZU zEH&m!UxW8|YR4{uD8BM*3TS}{WOG*Ao0BT-oKS0W=cISTMw${}b#wqM+qsypvZaHm zr``451U)lqJj@P&>i(ndH2LHEh6oMXJh#nNKw+@%e1)HV{njic&Wg>_UkxtY?Pxu9s~j{yPYv2Lq+9RqVg4Nf83Lw&e)09Y6=h-QIHZ)WU{n~ z;iXY@ui8$ede!V)_W`{Q?B{Xo#vn&AKO87-f$>8+tn%YhvJ6&L84#~8@rZ&~@xDDF z6ulN(q@%?a~mb~BSuCk_MW=fdiUdcFFMtgO}o zR25~Wk9K_G-s16 z0vHeuuS}F#@n|svVDAhZ^tCg^s>0W>L0g6Q0CS9{c$(d&E8Tp)J~()cl>}ss^d7`Y z^p?FZPHGaV>0qb11G${scD0vDg~w}{F>kg&A-Zh^Y*%5rR&6+FXG_Ls$&PrPps)Ce zE(+wZA4L-m{iZS{kJW(!!+Deo;{srw^g3Ou@1>6b%x){O2v}X&FYHVX*lgHIV2f3% zcsK6;&a$wTk+LO1wlAm7|9BU{*UrC#^4h&CqPQ&Yq_W-I{%!01K41GF($vYp6M?rU zd5_t|?e6kVEObqpE_0B)AKL6SXkZRoYDPT2f{-UO1)Q8l3cQ*C)y;HtZS*3v7K{_$r1tSE|WjjwNVvU~1h&bijf(%)P zaN2OTg4Vuo7Go>2{XliAqLcYzhvco#yq=670K*f{){0G{W8CeZ%_}9@~kU~ z3^4eLR4zLOCmy9NRsh*qF~wUQVR2Ymk9(8do?eA2p;?y0f4D8t=SY%lXltSz?$%ow zXUabA9EBXFUAvC=(*KTtFes6FmuQk}_|X8gOoU#j5rJlOXTr&&0BXCAy#8P9UHLzh zd*7ER)e*8(b|Om+ClyBsMMbvA*kWWYdrGFPV=V_2B1tMsF&JcQBZ?wKWX;$a*~S_& z8lKPPInOzsbME^uxbGj#>*boc=K9X}TE3s1vbb$0n={w!rZkg418~ke4#|cyJJ`idBj7n{$g6_1ps(pU=ozdl6do~d|2C{rioD%ye4~HXHOlymVh+b0 zP3$Be??_5YdtGh6uLMG=)J?#k{qx`3I8^6w4N|;Zm-ZYo-S_vpNzP|!caU*fZH#i6 zW6zU;C+KKBAI1;m?tA>g_sWH0sBaa#lcT4De8#6O1g^nk#p@Zi_{x;Pe^-pG@;tn2 zqXY^SBTW*ijMc(EkY5ptT6Tnfb7K#66TKO-8t0Z6P0EV48<2JqN9;e+x%a| z>P9ky#v;CJujin+DwM)#a3$HT%E;8ZIKE>!x3n!Lv9~L1HvX~TurFj!{}NfSUndc= z8dZH0ec8Gby@p4)%=-~7A|S=2wn=f`JB{T`wW;NT7Q9rIj;*wqBx}UAPwE}lM&iyq zM9?3vQx1T9qU9laEDrc1SDuUs`uS~~M+Ntd!Lnb;X)651 zdXr7-OO3)MQ{rK#S;cJvpn&uBo+gz4`zAOxS113_D0{^OFmkPLP03pYLo-ou{h`wC zmv0MEP{ivjX#~l=a~Tr0a}^EKi2$7$^$IkU|>alu|H8B}MoJ+#O zwvBh>B>7kpfU9AbyzSD~>tniC!I&c&G>R~KDvND35#QGdWfRg!I%W?FKM$byX;##C z+j)5zafE?Rt_i5sY#j&X2!6n#$Xx;4wd3g>EbfW9xP04MZA;5!Bf5a+468D@;Buw=Mml#==)O;SOYla7$8WHma}LoWTUxd0Ors@M1Bwxj;M?0 z_ouUCp(DKEgA)xRbkg|jp^${^^CDNhBmJ?xkcIU+6EiY0w4U3!Dij+^x3cAeB1l3H zAR?y83e+h9AY^%dOZJ{GlVN_9f8_BDB9MYmwZ;_WR|NVv^_4GxBZ-fha}M!RJ8hX$ zLN5+~s*SV$<8e(Vi;S_yz_>Sz3yl@KZ$C86?X`cJq_ zyaNcB-zR<_1Nzw!LzF$&d25ir^8BJDQOCUZ(!fcobA@!do#kOI^6Dht2qJIfoSh$5 z4t^kC5Pg*p&4q)`lEOJ@Ay z6HpscQ1d`OGDhfUo#QG$XR9f2e%+N1P{H@6f3P~7?_@)0Dxl!inrJqq)FN`vo-m{U z(Z9B&fLL-^tR|2z`ln!rc4TH{$r&6G=Q=-trSBIUVJqiAh20Bj}m166H$YZG8oCf$y~4O2);)WQt^{6#i2>&=nS5O27erJYK(n>e6v#0Jvg^ooQ0-ty>xmuW- zME-tA&yTY$>G8)h&w`Gm`0r9mG~B`BOomBLuRh-e-GbcvuXceQM7J@19aSC^%EvUI0c8LG(LV*fn{M~gR^o^brndlUv(-xf#Lvweu>PJYI zb}zOQYU6=rh=7F}E~3J9W7Yh_6S7;yoNZ++YnRv8`q!_!dxGTDQy+R3!{mW+tR?xQ zWR&!c(g+8iI`M>apguMhEboR) z|8#p(6PAK-SxRbYld|%i7=|i7dlxR&zx>(m$3gZJ$F;i2Cr$$vpeQ-{h_L^)ctecG z&S^6Y>S{;OH#xGsfW_?0em>1j%aj$uLYGl-lO-o)3Y>JJsQT@wy z4kroEp9?i-S~l&d1)H?A@`e5~jZ=$*`nsfT>Xl79ropDPv@W(yzgin^wYdBX$2RR~ z2%8KIr#89Rv5Ujp{Krg}uskDT0H*U)*(_Rd^ih}gODkj!TL6=udhb3b*aK>d&%(-C zhuE|M$uk;&mBv|ky!{7mlQ>xEs_9CNjc2hbw?_9X0@>G6F?bs*ZJpX{_Da`%U+vu4 zQL&>JM)%0XU1A?PRkO?Joc7%qsSwe`Q+7I|ibg|K1~mp^nx)S)I1vc&yL~r*9xPU-;7jMS_HzY|N23DhK#eSN zCCdlgiw5K_d8{RsKEr(oT^K8&&*Nzx844DOT%ioOV#)gVnxcVf&zYN2RNe9DoC5XW zZDz%8z1a?pkC#Rp`AB}NMP5@~Ex~po_ttr_fXAE=DY{hZ>7NYWR0NDu^4xH(9|b$r zmG56lTY(3Ej&73tI3-|psZsEx@0Hktx}vi@1+S1JY93Gq&a zIN(|nxxWKYtb4-gvxC7=`;Jt}yL4GM#G{UavK6MX&%E%;<(+wZWvvR~&lDbGDjqkX zuv<%;8xE&_eGTklC5N3!Fpy;iI+TtI(+4Lz2}NF$XeICIC*h{aN|&pc;CFSqccyY% zG52{*cC0unxb@^gS@&xY^R6i%Ojo?XPm(+ag8hzPQg*rebf=g^(p%BDpwU%yPW z;~mXWXh}2+3R6)YZW?MpV8temUkom>@Dpre#C0F^)fFzyrZy82~+|x;%I9<#_^JC!{wUlxD(4i zyh4GLUEEjn?5+Qg*~_ax=2DC8lmpg!axaw*;hT3Z8fRV1hk%0v8?;~>G1DQqWBcLN!~Ncv#@{LnJ8Y$AyR30w-AIg31I^x zM9fx#e{Kg;&OH2<=7V}q#$12dISZ9RBHRF7(6>+ylr<{|d7HGJ^G=CFO*j?KZX{3q zRgploI>zonHCL7Zr>h1tIsWt%J}mcPNC}d6m)u%#2q@9TnH?%LAEW}5mKO{8!~`MJ zTS2jnfKL|Y!p0_Z7CyEp^`yw1UwrvC$>&RkZc_QZ5@S62s{0I_S(ouI=~w$@QLOfI z3xKZsmDmv=LkHUNCKVC4 zsolrfl6IEA)K6Kmn%EFrbEU7m)E#wmrcY(ECAHSw zSPC^OV_x{NnplKx^}4tJXiXtwj(}*J+jEsrFLvzK{wW=SEliPb8+2hnmzlYKYk!S@ zmg(_|+Y~GX{b)ZXT<4p+2`E-`5vvN{QuiGh@!M3?iUQXC*WR_3Fgy_7ZbV zH#ix^>SFzc87HknhmJZnVe!EgznyaB&{AteX=~w@J8~>4h-UNRoF~o>XR?*J^_Eqf z*NEah&QgAP#^Yc#1LIu=T!PP*Ellh`Qg+3)S0{a@ysk>Rw`WG30hbMT(ra_GQFv4( zatO~lWW?z(ZDCq_z<^s8dbg0z0ykR)#G(Ywu zgXl}a3NfOGqMP? z>ju8%%NhE#7sjN<052>D)dpD69vR^20EdJZ4Nl?NGx*;YG?90aj|A;t#|Cph85c#~ zMLyEP#8TcO-Q>%$@dauOIBU43t(l>OyzvDv@MBvT-3ud*V*WUWn(!mI{7l~^%KUMR g{|@7CvoRpSIp$*t?w4|4h0LI(si%>9$~x$O09Hj=r2qf` literal 0 HcmV?d00001 diff --git a/test/image/baselines/box_notched.png b/test/image/baselines/box_notched.png new file mode 100644 index 0000000000000000000000000000000000000000..d542bebfae5bc89c7ea9e70e41b061aeb682567e GIT binary patch literal 29194 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 R@Qp_z1z8oDEGZ-J{{b88`