From 705568a578d7275b32c6f9878924a8539f99978d Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Thu, 21 Sep 2023 10:04:23 +0200 Subject: [PATCH] Remove deprecations and make arguments keyword only --- ci/mypy-stubtest-allowlist.txt | 1 - .../next_api_changes/removals/26853-OG.rst | 26 +++ .../test_widgets/check_radio_buttons.png | Bin 24315 -> 23386 bytes lib/matplotlib/tests/test_widgets.py | 59 ------ lib/matplotlib/widgets.py | 174 +++--------------- lib/matplotlib/widgets.pyi | 9 +- 6 files changed, 54 insertions(+), 215 deletions(-) create mode 100644 doc/api/next_api_changes/removals/26853-OG.rst diff --git a/ci/mypy-stubtest-allowlist.txt b/ci/mypy-stubtest-allowlist.txt index 99216f5f75eb..64fae8d44562 100644 --- a/ci/mypy-stubtest-allowlist.txt +++ b/ci/mypy-stubtest-allowlist.txt @@ -54,7 +54,6 @@ matplotlib.cm.register_cmap matplotlib.cm.unregister_cmap matplotlib.collections.PolyCollection.span_where matplotlib.gridspec.GridSpecBase.get_grid_positions -matplotlib.widgets.MultiCursor.needclear # 3.8 deprecations matplotlib.cbook.get_sample_data diff --git a/doc/api/next_api_changes/removals/26853-OG.rst b/doc/api/next_api_changes/removals/26853-OG.rst new file mode 100644 index 000000000000..dc5c37e38db5 --- /dev/null +++ b/doc/api/next_api_changes/removals/26853-OG.rst @@ -0,0 +1,26 @@ +Most arguments to widgets have been made keyword-only +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Passing all but the very few first arguments positionally in the constructors +of Widgets is now keyword-only. In general, all optional arguments are keyword-only. + +``RadioButtons.circles`` +~~~~~~~~~~~~~~~~~~~~~~~~ + +... is removed. (``RadioButtons`` now draws itself using `~.Axes.scatter`.) + +``CheckButtons.rectangles`` and ``CheckButtons.lines`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +``CheckButtons.rectangles`` and ``CheckButtons.lines`` are removed. +(``CheckButtons`` now draws itself using `~.Axes.scatter`.) + +Remove unused parameter *x* to ``TextBox.begin_typing`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This parameter was unused in the method, but was a required argument. + +``MultiCursor.needclear`` +~~~~~~~~~~~~~~~~~~~~~~~~~ + +... is removed. diff --git a/lib/matplotlib/tests/baseline_images/test_widgets/check_radio_buttons.png b/lib/matplotlib/tests/baseline_images/test_widgets/check_radio_buttons.png index d6e6004a1732e7f6c449ce3ce7cc87b70743acc7..f0d5023008cabd1296c3cbd30447476c7608cb0d 100644 GIT binary patch literal 23386 zcmeFZcT`l{wicsiLQAv_>2FV~f79a*B zNsu5JL~@QrEZ*Gbckg|DUw4mpd%W)d-WZ<2VXa8S49v~9|R#8J9ZRC1UrZRzzBJpTQeuuCl02F;u9x3D_bWki>H@eOdT98 zY;6R1M0jrSn3%fo3kz_W3q3U!;5QW#6gK8D;lIHza6^Qj@A~CuPEK}?qP)D;|M6)a zTL*Jqs%O;xaEIe|4|E(6g!&2kA4#TUh6RG?X3O2bqwW^BIPC7(>iWBJ)s^Q;6Z2`; zH`lC()H{nbdUZ7Na;nPotY_1`v6v76e|>MFn(l63lZZfc-}-8lEdTm}x8!L1!#Cyav!=!UR-_2x)41Z|LJrTPQg+M- zelWg9jv>g{lmGvh|1*2=t*`$aqW?%!Gosb3_#ta(O-)Ul0Rtj+rQb>@JuQu0OiX`d zq{Maj4RY*HgOw21)vFEtJqU7EOE-uSp-s$9+h1ueU0V1vfFP7D zPYc=MQsUkv5gO#VzKQGJQ3{GP2uXbapFf+c(>pQ*al1fz8P41H3IfOezxa#&oTi@4GDxLIU4V4R_L0hOSvM)kG@)v^KA|G#eN8KT*m4+DShq_1e z+41(Be+~Ub)F(r)3OnAAIDZ+D7j<7t+gj*P75CVhseevZWjB8JZMe8a7qj(HMJI88 zwUMbW_?qlHgQajTEvK=1l7s#A_OCoth)>YA6j02?^=0 zbew(~&gV3vVm(}?5hT8)-K0*5_^969c2u-sLI|*=>ZQ5Nfl^G)qg0t}4X(SzW^EyD zW?T-@im^f(qqSb89t4{`%-gqbV{Tf6RJkl>_vYzgI+E@TRJ+;+&UbZn-E?0wDYY5a zB@8(R3E7T#s`Uqnt-U$LBw>ZK5sDSG`gLR2dv9^>S7GW@TWqB5FdmQJ>{8&JU8-Kz zOqUOTx6ep|uv@>B?3?V>`@|sPa38kkk*;o7nrVn7JKri*0K;ufIXSr)2`_ALi-i5} zm)YuBPtmEvLqbxf6FiizT)CoK=ZzP2nn{|OdDc^4WE67K;m?CSL%gnS?al{MQqr52 z-R$uqj;ykkiC$aLuTL>#!=rFS6Jzo~ri{3*nz zn1-kyt4C2^M|6JO^)rVD^E<#%(5|k`CIF;f|w7wrIwTK?FV~=9Iw5ttra#oaqLFN zWJ~0^GiN63hDi{+b1x+cW4+uyELo;45pZ=lGl!6nruAT1&q9B(pjqn$xvu@4_08S+ z0u1bmWmno;QZh0@?|nB21#(?5)8za-m(ge(lf~n)fbor(?rwGRBS-#Vy)7**w zheyWSy(*lk#tsOCkb>pYa>B3E$=BA`wIX>8-l^NDtB0{F#-z>u%;4hSkP9g>Yoixm z{c?t0%EQ!zI&fQ z5Z61~j=VMu2%BOIyJX$^+G?fVH|Fca0IK%qzyQ@yjr@txYyR+0{#68L& zSn?RwWWGJaHdnj1q_#Lvx?Z#Nrz!MZV4$X|YDm6*WeOOtw5%-c4xSWIxdeMW(M$4C zr`T+FshZoe?+3HR$F!wvUFU!i>^wL4W}dbw#nGd4>5+zALzRxEh1xewo6jD=re_=C ztM1;r2QDdklKv)pqaave7x7^496fz@M~6y!M#l8*<7wUpySp=~K{u@jZffM~>-6Mk zX<@Nd=Xvy_Y=;@$#z+J$y6&US0;ZG!yPYW)%K8;s2Z#k>Q{27(UGZZ>KAr35U%hhhxjo7v-r`Ztto6jywO4gmuexgK2M*l=+2+&YbdG94hr>qhpc^ER)>`aDejW>@6jZW-v35QBGeEzI(z*t*bYuTOo zsCIgLdpi?$cSI7a+Kmlv*g1$ z=LSl1e#GC_S}5wv)5|b!4D3%VfM7J;p2+Lq&V<`9%+|>H;LGH#4Y5`=h*7+|%zE%? z_;Eza<``~LtMa&yS+NcuAK#7*J|YpO4#1tL!=E>SjN;i~W#M+*Kq{D>mxe08 z_x0r)=#6^s<()o#x&)m1>z6Mx;C?YTp4@HHIE{?0!kn>#6!m~yneZst2GwQsf|hA- z-W+R-5zNsZPWe9-=c`?p^TB!s6VV6s+TG{`Z}8jqCP69~#|!oy=i{XUFNvh^7*w%y za>}Tq=f<+h2&p>vGl*qOD-mUnO8a(w&&5wI6P zsTA;P>-16NEIdsygzU$1miaK|#UMU7KGY@8F2*iKW20 z#5X$by}}kCh(36_`%o46N38-w-6E4F#U~b@UXZU52>+W=;yQ1vux+mo3E53p$Voc> zv}4P_3(3GlD#1i<*{1+sE2v(s)dLg$36Ovi9>qin1LJT0_HO$|HZuMfu1HEswn01y zQ7^UBSRATUgGUZ$hWMqtM_4XT94)a>E5-CFO?(Ro?XlE=9D?;>)cfV4n}1VK_hzYO zpf`pz!l1_O(HS{vtM zw8K2|D_2Lry1z&o_&H3bNmv>#1+>I(_Ugq5S?d-ypE_}(TY(p!1}w4pY2mZxFpk~L zJ|hi0*7?=z*Op+p5Y1HrG3U8;(*WtXZr)T+PEM9rR&IAa{or7CbF)*H$pSDpTfed> zTdN>{V`IaU%?X&0OeC*SFT~THG`TZ-6G6Cr+r>8b8$ixY9H}|{SpEsY89AR#Y6Hx<_xg~38EJjk#Ktr^< zMtb@3>|~^orh`M#0Sztf^a3Y|)Z5GZSA?BN$oN@*LjrQUnjTR}IfnaAMWWIL4i+92 z#V!XVMh#Ms#R>>KKJGAnO#_hsZcC>?D*~9ek@vYh|l2F{ZBOimTQ2; zX1gp70GbD1y?XT~#LaW&e}_VN%C;S?9l(2(AC!Lia$hm#rX28Sjrra@!Dk(p7l*5b z8=WmIEMmmmi*(Cv@;sI*Wx*+Hvle6--S0!(Dw7nBZKD^min6IYaB*Jvg%aGB@})a> z?qur}e>iae`tDp$sw{Q9gjdz~Wm-f<;xFPDI}ip5fK=ctDVdq<+LFNLiZ1W60yU*lsx+yau7NJvrORHa8j|rrdi~`H`O3B-00P_ zwSc>$#PpsiED#cpHdPs!*Rad!i-YAD0Qs#6ZrzfO+sie^xDkLbhFf-0fB`)~KF={R z6;Mm=s{r>e4I*HEeN5IZc@{h^9(i3SWqaFgvA?*nRynz#pdbN9bPu>BqRJY|(T*vw zed0Nj?2A%I-w`$>Y5&T8^2ebns_mSD+AiZDaWiUM|7&U{o}8X+*wtJ5D8DVU9nFVd zo&omK-?B@pa-NTvh)Y+9%vMg6u>AQUAV%0WAJUCkc&L!H&%V@L0s?Aa0;P$g5W#vN zFKzcgAsSZHUMS}boC$>t)I{}0l_d|<;gC82uS#5(N1iHP2a3Vl!1S&mPY+R0g|H0! z#3`q0Wt9uNm(yQtj%khJ3rX8qpPq+c*9TFd8|;<*=uyl4?bWTt&pbx8*CB4~>`v`J zusxB{r=X~)Atfc1Kb`U6!<61A+$YVZ)&>LWi z6HsY(c6LXJG|Q;2R$_PN8tPxLHJY1qJ>dxn`M{W_+ynZpG=cTNJ^w5(7YJDoWZDc@ zZ7pFCsU4Z^dvYs9=gdFVJT20`4(#%ggM&lh+rOlr2*skyffyv^?d{E?{yC1HpWkVJ z+a7!zWH~~eRdjSTn!ssmYuBEU$~Q07J$Lb9PEyk4y%2u#o(V|(igfd`^~&>Kym&#m zE~GCbN8DG4;p#i-GktYmB=CQlgkjrDO#ex+)fUQrA1M zMM+0sG9`4fvuDPsm%e4`eIm(kuq9GefB90&K-o3jJ z^yZkiI~n^0_&{@uS#f`y!SVWj2Mme-n>Q)|_^8aOEr8^|TbUlXe%=p0u`QlJQRPD- z2XG1m)YU~0sW{%iG{j&~5BDV5dgbfeG8lX4huCq$8JdImYE~T0K$}!i zajPdwtr68cZ#OVC-_AHHg^J0?kle0C_afK9@8}8U`>aqXkAdnsym;}_rH9DIW2Zwh zRM2swJZeaSTy9_zL#+r+8dq+@F8j#B-kw4CmeCJBDGfX7#tawHp%>Z1MNa=*bY-6e z{Ye2okCKi#=W6DZ*$iicXnCJYGxvSJ)en2Cm9bBtp_*h3ONxl-pu`s9FqIb|jCrZ+ zvLOpIbJ*QBr2c@0=z}@tb6D&!DUS+yz%hTKT2eDt0qU>VKf$uha^UQ`WmeIr&zw=n zJEfJc-&thZ5*8P?up$VA0aaGcF*4>uN)16;BVAJxvD11fc^OUBQ2-jNe@@SD^5*x% zM5*Jn5`%=NHppmx`}_NG26#{SfC6rBaMWqx7vBy_;Y5)!hhw<O0XN($w5{3();zRTpdoSbs8zi`gKv#6TKJFKlBanehI7 z62SNjBnxVGb|07O4!u!K9U18>+Jbzx^zkQB6u==|_JKH<%a-7FwXcfXs8-*|dnetj zH7XhKf7q!8vN)8PKVPOn#AwE;zsCbR`1MO0%{xXNK@?s)`5e?*luUt|Gt(h13y*T; z-s?;>Pl6m0OIXTF#1VBsRDs}x%Cd94c{xBt!6htze|d{4-Ne-(+=CF5^^bq{#Q-E> zSHIGtWMO7zMt@n*{Kq9U!^zRiYZlxmLDpop$=0TNNp4h6+5*Ob;3pRdN&~~su}^=m zTQRhrr=?|+d*|=(G?M_yc+d9g1dAL1xfZ}ODn7ywc_z=5=U_Fx`35(UH@ zo(2z}gpzs+3R zKBT9MIC%p>TNu^K)75}rWZs?tggCDR)5n8C{WpI)C`Q1)=H_NqNPE4BJLV{ufYt(; zPCJ27S$s1L#ECRG#jZ69AgKpp%``JO5X&e%n}k3XjX0m zshn6#w19aakc=eIiYx$zAqDXvgIOnF)-m9+pbFJq3W5_6@jMu`t;=(q{xO^E%ZL&p zX5-;Hu%|2_fTtn_z=9aW+*E+0seu;A3}>mZyFC%ag2pxMRJ8d````B&#IfDpi43=0 zhSYmOciaRGF&icn1t3o#)L=KW|CNPuL$Dgf9U63Yc1r6$q(_F%jZ?ET$DV;A#UOKk zNNA{^lh?zC{)(!#LFi64!{?LG2NUAu<<$eaZVj7S1{&2MI12_!nq?6AVwnenB#BWI zRqx;bH3%8-Vmrud<~abbd3Rq?md*9#3__M?h1;KCT5RM#@3#nxEP~+K42 z#daLA7-)R|j|6c{sL5@Yg{XslEkpOO=g*%v8-#jB{w5I;7)P&BxKG8s<-zE8d+WT4 z`TD|$h^eV*zoCxvcTL;<$gx>k*jyI4)?Lh{Tk$zd;eT3kZmi{PP^xg5w^a&#RMe6z zHGw^rJy6@(Y+_4%1}6YTL6N|djAGhs$_dv?_t@CjFc8CE8GhM;@>}P-b6h1)zrIt= zV?u6`!O^-OsXx@IbV#4;D=2`NXF=TG!A^#2LFvIjeC_+S5Pyc-!1z9V`SL|I=QD7# z603fGu!Y;6ZK!T46F_ePsvlZmg1`!923K7}!dM!ZR78*Ygp^tJr+|WH`ThNscR@jY zAmceh+&EZk;e~wK(PeXObL?;GW-Fn22rZ&;sKlLioF(`jnk*IPOld-7xqeYnm7$xopAjFAmktBdV4*@s>1bE-(XoxmTHS0=f(tnOq{bQYBowpaaVa=_^ zN)Tb``JTQ+Q&1AJqeD(XP;~>*QXT|C4bc8jr3=ht@|HQk7Iy48h0~yQd6sMtBPz77 z&Cg?QNAy)k=(R?@PSB(`k5nmkNN3D zTm+=9`V8;|yV;|)UgO(l_H(8)wbXOR0ggZsWCQz5 z8(;_6wI((+2g*UingQA0b#-<72M6&6C+jC*Q;Ws{ss>|0KIlx9#X!6Sn@yBB+;>Ea zLdh6BKEQAVDo4IQmO*zp*n7jZ$HoH z!*Ye6Uln3HXsh-!``}ztZcB@cd7yg9bwNUR?ytX+U@%)XU7qsTF|e2SW1IBB_kP}u=W*r>81 zzQ6K$x5bE;~;KR zs*6G(ny-WW&{iBL;yCpT#8;J8if*Dc!F`HOG49qQ@VL@Zb08qX;ewDwii7*j0aVorV2!Y|EM8z7STGJWGyGS@ zjqA#lPvclJA5bTeX}fvk!s*jjqcPR-m*lqx}lJk^&0KBWt>P-1`O9x#9`h;FDribkb@cK3+@;qEGD3@W{Y zd#R!2uh%O9BW@EX#rGD9Q5_eGCXw?Z5F@hCsvuPEazH8EYJ^?BlrQ{GxV2;C)!VAS z$@cNz(^WJl@l%(vva(7L@KR(|t5vA~GX?r9s8Ifpdv+(?`TMHkhmZYMXgv;U_Gf8m zf-%PwA3OkZt_kTlD88F_M^nYv-zMTL>?f;8CLy~@5BRS^&eEF|id%_#t|Vm05Y;%f z-ATv=q@pkHljQ#mki+i$QnJ1jg`D(vD-;!s069tBu+x3_|BH|#>amskxzEJR%<_~o5Nn`t4~j~HQli9ShX;jE z2$0*Mzx9@nIIR7V%LDly@TO^V8+;#%{-Mh@SN^{y6kc_s{{^7Ytlez>{#^xtrgr-` z)d8qU*p*Kd3|L7-MHTq$9{A?3e1qF^AwfYwD6XJ7Fi2kN(?8--9*Xh<_oXv&+@L;$ zoTa0i?GT3qAR9z9g%H%0A%4%UjDJSMxWx7t8FVA$8C3U(CDGCgoci2o9j=z(HkXy*1i}=Ql8WmiB;`ons8KdzALiucm2dU3*@WiDI{Ui0i-}w87!PY^J*bT*5()Ryh`XU@J0Ma#@2}5cf z%#3zscu}H}y2wKLJdpiKT z5h^600wJ6X@I`HqK2$()L}T{Z^AHwoZH7tzTWCp~`1Sup6#Pm96Q&B&+qakNx@cRI3{(__6etq~L$?c*E1mkF z-AsK1{ToUhK=Fr-2?g%z^-~0NlAquSEONkJ&}urU?wh~;ct!PX5%v=eOk>0vU=VFO z!sY*Ud?ABG>s*x*FrvmFCbZT8^&N+k$zZdPNT5|1h&P5a9{Ri>|Cs-Xd-V8m5?t|T zVnQuJ8rP?xzbJ%~VTJPa`STw>e*E|}e0*{;eEEW8Q`8-O zPz;_9v*`g>#tWWB zwj$OqNm!7iK$_unSM))MR!IQRZZ_B3!+#;TNcR;=sW=O3+}$Q zw&q}_F?Iy@3O+$eP3`KUVN$AVTB^I)ZV@iy4sr@ebTh#Jp!RmFn9`14%VH-MU;#xb zXuU)c6$$xcYK)wJkD+=D^+d?0p%A$6C5D8>7i7Aph1zFNpKe%Q6}weR{+Hdk|Bxkp zRPSw**@;IyC-HFrcO8>~6|*-U!yyj$kRv`0fX|nC(IHf-qTuC3%&H4sI?_QuoFjrD0I`kSH`sXTit_pNW28QHGK|&ll zGEOZehi>jg2vY2FFsq$CERF>|93IGIlWuN{u220(i|T*3bCKo3hqNR%0ADJ)ar9_c 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 z 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 RQh=I=7#W%vR9tX;@NW~Cpx*!h diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 1ecb4b9a1df7..3e41712ba530 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -7,8 +7,6 @@ import matplotlib.colors as mcolors import matplotlib.widgets as widgets import matplotlib.pyplot as plt -from matplotlib.patches import Rectangle -from matplotlib.lines import Line2D from matplotlib.testing.decorators import check_figures_equal, image_comparison from matplotlib.testing.widgets import (click_and_drag, do_event, get_ax, mock_event, noop) @@ -1055,16 +1053,10 @@ def test_check_radio_buttons_image(): rax1 = fig.add_axes((0.05, 0.7, 0.2, 0.15)) rb1 = widgets.RadioButtons(rax1, ('Radio 1', 'Radio 2', 'Radio 3')) - with pytest.warns(DeprecationWarning, - match='The circles attribute was deprecated'): - rb1.circles # Trigger the old-style elliptic radiobuttons. rax2 = fig.add_axes((0.05, 0.5, 0.2, 0.15)) cb1 = widgets.CheckButtons(rax2, ('Check 1', 'Check 2', 'Check 3'), (False, True, True)) - with pytest.warns(DeprecationWarning, - match='The rectangles attribute was deprecated'): - cb1.rectangles # Trigger old-style Rectangle check boxes rax3 = fig.add_axes((0.05, 0.3, 0.2, 0.15)) rb3 = widgets.RadioButtons( @@ -1164,57 +1156,6 @@ def test_check_button_props(fig_test, fig_ref): cb.set_check_props({**check_props, 's': (24 / 2)**2}) -@check_figures_equal(extensions=["png"]) -def test_check_buttons_rectangles(fig_test, fig_ref): - # Test should be removed once .rectangles is removed - cb = widgets.CheckButtons(fig_test.subplots(), ["", ""], - [False, False]) - with pytest.warns(DeprecationWarning, - match='The rectangles attribute was deprecated'): - cb.rectangles - ax = fig_ref.add_subplot(xticks=[], yticks=[]) - ys = [2/3, 1/3] - dy = 1/3 - w, h = dy / 2, dy / 2 - rectangles = [ - Rectangle(xy=(0.05, ys[i] - h / 2), width=w, height=h, - edgecolor="black", - facecolor="none", - transform=ax.transAxes - ) - for i, y in enumerate(ys) - ] - for rectangle in rectangles: - ax.add_patch(rectangle) - - -@check_figures_equal(extensions=["png"]) -def test_check_buttons_lines(fig_test, fig_ref): - # Test should be removed once .lines is removed - cb = widgets.CheckButtons(fig_test.subplots(), ["", ""], [True, True]) - with pytest.warns(DeprecationWarning, - match='The lines attribute was deprecated'): - cb.lines - for rectangle in cb._rectangles: - rectangle.set_visible(False) - ax = fig_ref.add_subplot(xticks=[], yticks=[]) - ys = [2/3, 1/3] - dy = 1/3 - w, h = dy / 2, dy / 2 - lineparams = {'color': 'k', 'linewidth': 1.25, - 'transform': ax.transAxes, - 'solid_capstyle': 'butt'} - for i, y in enumerate(ys): - x, y = 0.05, y - h / 2 - l1 = Line2D([x, x + w], [y + h, y], **lineparams) - l2 = Line2D([x, x + w], [y, y + h], **lineparams) - - l1.set_visible(True) - l2.set_visible(True) - ax.add_line(l1) - ax.add_line(l2) - - def test_slider_slidermin_slidermax_invalid(): fig, ax = plt.subplots() # test min/max with floats diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 0a31a9dd2529..f24be7904690 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -21,7 +21,7 @@ from . import (_api, _docstring, backend_tools, cbook, collections, colors, text as mtext, ticker, transforms) from .lines import Line2D -from .patches import Circle, Rectangle, Ellipse, Polygon +from .patches import Rectangle, Ellipse, Polygon from .transforms import TransformedPatchPath, Affine2D @@ -355,11 +355,10 @@ class Slider(SliderBase): Slider value. """ - @_api.make_keyword_only("3.7", name="valinit") - def __init__(self, ax, label, valmin, valmax, valinit=0.5, valfmt=None, + def __init__(self, ax, label, valmin, valmax, *, valinit=0.5, valfmt=None, closedmin=True, closedmax=True, slidermin=None, slidermax=None, dragging=True, valstep=None, - orientation='horizontal', *, initcolor='r', + orientation='horizontal', initcolor='r', track_color='lightgrey', handle_style=None, **kwargs): """ Parameters @@ -627,13 +626,13 @@ class RangeSlider(SliderBase): Slider value. """ - @_api.make_keyword_only("3.7", name="valinit") def __init__( self, ax, label, valmin, valmax, + *, valinit=None, valfmt=None, closedmin=True, @@ -1115,32 +1114,20 @@ def _clear(self, event): return self._background = self.canvas.copy_from_bbox(self.ax.bbox) self.ax.draw_artist(self._checks) - if hasattr(self, '_lines'): - for l1, l2 in self._lines: - self.ax.draw_artist(l1) - self.ax.draw_artist(l2) def _clicked(self, event): if self.ignore(event) or event.button != 1 or not self.ax.contains(event)[0]: return pclicked = self.ax.transAxes.inverted().transform((event.x, event.y)) distances = {} - if hasattr(self, "_rectangles"): - for i, (p, t) in enumerate(zip(self._rectangles, self.labels)): - x0, y0 = p.get_xy() - if (t.get_window_extent().contains(event.x, event.y) - or (x0 <= pclicked[0] <= x0 + p.get_width() - and y0 <= pclicked[1] <= y0 + p.get_height())): - distances[i] = np.linalg.norm(pclicked - p.get_center()) - else: - _, frame_inds = self._frames.contains(event) - coords = self._frames.get_offset_transform().transform( - self._frames.get_offsets() - ) - for i, t in enumerate(self.labels): - if (i in frame_inds["ind"] - or t.get_window_extent().contains(event.x, event.y)): - distances[i] = np.linalg.norm(pclicked - coords[i]) + _, frame_inds = self._frames.contains(event) + coords = self._frames.get_offset_transform().transform( + self._frames.get_offsets() + ) + for i, t in enumerate(self.labels): + if (i in frame_inds["ind"] + or t.get_window_extent().contains(event.x, event.y)): + distances[i] = np.linalg.norm(pclicked - coords[i]) if len(distances) > 0: closest = min(distances, key=distances.get) self.set_active(closest) @@ -1227,20 +1214,11 @@ def set_active(self, index): ) self._checks.set_facecolor(facecolors) - if hasattr(self, "_lines"): - l1, l2 = self._lines[index] - l1.set_visible(not l1.get_visible()) - l2.set_visible(not l2.get_visible()) - if self.drawon: if self._useblit: if self._background is not None: self.canvas.restore_region(self._background) self.ax.draw_artist(self._checks) - if hasattr(self, "_lines"): - for l1, l2 in self._lines: - self.ax.draw_artist(l1) - self.ax.draw_artist(l2) self.canvas.blit(self.ax.bbox) else: self.canvas.draw() @@ -1283,60 +1261,6 @@ def disconnect(self, cid): """Remove the observer with connection id *cid*.""" self._observers.disconnect(cid) - @_api.deprecated("3.7", - addendum="Any custom property styling may be lost.") - @property - def rectangles(self): - if not hasattr(self, "_rectangles"): - ys = np.linspace(1, 0, len(self.labels)+2)[1:-1] - dy = 1. / (len(self.labels) + 1) - w, h = dy / 2, dy / 2 - rectangles = self._rectangles = [ - Rectangle(xy=(0.05, ys[i] - h / 2), width=w, height=h, - edgecolor="black", - facecolor="none", - transform=self.ax.transAxes - ) - for i, y in enumerate(ys) - ] - self._frames.set_visible(False) - for rectangle in rectangles: - self.ax.add_patch(rectangle) - if not hasattr(self, "_lines"): - with _api.suppress_matplotlib_deprecation_warning(): - _ = self.lines - return self._rectangles - - @_api.deprecated("3.7", - addendum="Any custom property styling may be lost.") - @property - def lines(self): - if not hasattr(self, "_lines"): - ys = np.linspace(1, 0, len(self.labels)+2)[1:-1] - self._checks.set_visible(False) - dy = 1. / (len(self.labels) + 1) - w, h = dy / 2, dy / 2 - self._lines = [] - current_status = self.get_status() - lineparams = {'color': 'k', 'linewidth': 1.25, - 'transform': self.ax.transAxes, - 'solid_capstyle': 'butt', - 'animated': self._useblit} - for i, y in enumerate(ys): - x, y = 0.05, y - h / 2 - l1 = Line2D([x, x + w], [y + h, y], **lineparams) - l2 = Line2D([x, x + w], [y, y + h], **lineparams) - - l1.set_visible(current_status[i]) - l2.set_visible(current_status[i]) - self._lines.append((l1, l2)) - self.ax.add_line(l1) - self.ax.add_line(l2) - if not hasattr(self, "_rectangles"): - with _api.suppress_matplotlib_deprecation_warning(): - _ = self.rectangles - return self._lines - class TextBox(AxesWidget): """ @@ -1361,8 +1285,7 @@ class TextBox(AxesWidget): The color of the text box when hovering. """ - @_api.make_keyword_only("3.7", name="color") - def __init__(self, ax, label, initial='', + def __init__(self, ax, label, initial='', *, color='.95', hovercolor='1', label_pad=.01, textalignment="left"): """ @@ -1513,8 +1436,7 @@ def set_val(self, val): self._observers.process('change', self.text) self._observers.process('submit', self.text) - @_api.delete_parameter("3.7", "x") - def begin_typing(self, x=None): + def begin_typing(self): self.capturekeystrokes = True # Disable keypress shortcuts, which may otherwise cause the figure to # be saved, closed, etc., until the user stops typing. The way to @@ -1730,9 +1652,6 @@ def _clear(self, event): return self._background = self.canvas.copy_from_bbox(self.ax.bbox) self.ax.draw_artist(self._buttons) - if hasattr(self, "_circles"): - for circle in self._circles: - self.ax.draw_artist(circle) def _clicked(self, event): if self.ignore(event) or event.button != 1 or not self.ax.contains(event)[0]: @@ -1742,16 +1661,10 @@ def _clicked(self, event): coords = self._buttons.get_offset_transform().transform( self._buttons.get_offsets()) distances = {} - if hasattr(self, "_circles"): # Remove once circles is removed. - for i, (p, t) in enumerate(zip(self._circles, self.labels)): - if (t.get_window_extent().contains(event.x, event.y) - or np.linalg.norm(pclicked - p.center) < p.radius): - distances[i] = np.linalg.norm(pclicked - p.center) - else: - for i, t in enumerate(self.labels): - if (i in inds["ind"] - or t.get_window_extent().contains(event.x, event.y)): - distances[i] = np.linalg.norm(pclicked - coords[i]) + for i, t in enumerate(self.labels): + if (i in inds["ind"] + or t.get_window_extent().contains(event.x, event.y)): + distances[i] = np.linalg.norm(pclicked - coords[i]) if len(distances) > 0: closest = min(distances, key=distances.get) self.set_active(closest) @@ -1824,19 +1737,12 @@ def set_active(self, index): button_facecolors[:] = colors.to_rgba("none") button_facecolors[index] = colors.to_rgba(self._active_colors[index]) self._buttons.set_facecolor(button_facecolors) - if hasattr(self, "_circles"): # Remove once circles is removed. - for i, p in enumerate(self._circles): - p.set_facecolor(self.activecolor if i == index else "none") - if self.drawon and self._useblit: - self.ax.draw_artist(p) + if self.drawon: if self._useblit: if self._background is not None: self.canvas.restore_region(self._background) self.ax.draw_artist(self._buttons) - if hasattr(self, "_circles"): - for p in self._circles: - self.ax.draw_artist(p) self.canvas.blit(self.ax.bbox) else: self.canvas.draw() @@ -1856,23 +1762,6 @@ def disconnect(self, cid): """Remove the observer with connection id *cid*.""" self._observers.disconnect(cid) - @_api.deprecated("3.7", - addendum="Any custom property styling may be lost.") - @property - def circles(self): - if not hasattr(self, "_circles"): - radius = min(.5 / (len(self.labels) + 1) - .01, .05) - circles = self._circles = [ - Circle(xy=self._buttons.get_offsets()[i], edgecolor="black", - facecolor=self._buttons.get_facecolor()[i], - radius=radius, transform=self.ax.transAxes, - animated=self._useblit) - for i in range(len(self.labels))] - self._buttons.set_visible(False) - for circle in circles: - self.ax.add_patch(circle) - return self._circles - class SubplotTool(Widget): """ @@ -1974,8 +1863,7 @@ class Cursor(AxesWidget): -------- See :doc:`/gallery/widgets/cursor`. """ - @_api.make_keyword_only("3.7", "horizOn") - def __init__(self, ax, horizOn=True, vertOn=True, useblit=False, + def __init__(self, ax, *, horizOn=True, vertOn=True, useblit=False, **lineprops): super().__init__(ax) @@ -2109,8 +1997,6 @@ def __init__(self, canvas, axes, *, useblit=True, horizOn=False, vertOn=True, self.connect() - needclear = _api.deprecated("3.7")(lambda self: False) - def connect(self): """Connect events.""" for canvas, info in self._canvas_infos.items(): @@ -2613,8 +2499,7 @@ class SpanSelector(_SelectorWidget): See also: :doc:`/gallery/widgets/span_selector` """ - @_api.make_keyword_only("3.7", name="minspan") - def __init__(self, ax, onselect, direction, minspan=0, useblit=False, + def __init__(self, ax, onselect, direction, *, minspan=0, useblit=False, props=None, onmove_callback=None, interactive=False, button=None, handle_props=None, grab_range=10, state_modifier_keys=None, drag_from_anywhere=False, @@ -2957,8 +2842,7 @@ class ToolLineHandles: for details. """ - @_api.make_keyword_only("3.7", "line_props") - def __init__(self, ax, positions, direction, line_props=None, + def __init__(self, ax, positions, direction, *, line_props=None, useblit=True): self.ax = ax @@ -3068,8 +2952,7 @@ class ToolHandles: for details. """ - @_api.make_keyword_only("3.7", "marker") - def __init__(self, ax, x, y, marker='o', marker_props=None, useblit=True): + def __init__(self, ax, x, y, *, marker='o', marker_props=None, useblit=True): self.ax = ax props = {'marker': marker, 'markersize': 7, 'markerfacecolor': 'w', 'linestyle': 'none', 'alpha': 0.5, 'visible': False, @@ -3771,8 +3654,7 @@ def onselect(verts): which corresponds to all buttons. """ - @_api.make_keyword_only("3.7", name="useblit") - def __init__(self, ax, onselect, useblit=True, props=None, button=None): + def __init__(self, ax, onselect, *, useblit=True, props=None, button=None): super().__init__(ax, onselect, useblit=useblit, button=button) self.verts = None props = { @@ -3882,9 +3764,8 @@ class PolygonSelector(_SelectorWidget): point. """ - @_api.make_keyword_only("3.7", name="useblit") - def __init__(self, ax, onselect, useblit=False, - props=None, handle_props=None, grab_range=10, *, + def __init__(self, ax, onselect, *, useblit=False, + props=None, handle_props=None, grab_range=10, draw_bounding_box=False, box_handle_props=None, box_props=None): # The state modifiers 'move', 'square', and 'center' are expected by @@ -4199,8 +4080,7 @@ class Lasso(AxesWidget): for details. """ - @_api.make_keyword_only("3.7", name="useblit") - def __init__(self, ax, xy, callback, useblit=True): + def __init__(self, ax, xy, callback, *, useblit=True): super().__init__(ax) self.useblit = useblit and self.canvas.supports_blit diff --git a/lib/matplotlib/widgets.pyi b/lib/matplotlib/widgets.pyi index 00c2d0da8a7e..ca1e5a71a288 100644 --- a/lib/matplotlib/widgets.pyi +++ b/lib/matplotlib/widgets.pyi @@ -164,10 +164,6 @@ class CheckButtons(AxesWidget): def get_status(self) -> list[bool]: ... def on_clicked(self, func: Callable[[str], Any]) -> int: ... def disconnect(self, cid: int) -> None: ... - @property - def lines(self) -> list[tuple[Line2D, Line2D]]: ... - @property - def rectangles(self) -> list[Rectangle]: ... class TextBox(AxesWidget): label: Text @@ -191,7 +187,7 @@ class TextBox(AxesWidget): @property def text(self) -> str: ... def set_val(self, val: str) -> None: ... - def begin_typing(self, x = ...) -> None: ... + def begin_typing(self) -> None: ... def stop_typing(self) -> None: ... def on_text_change(self, func: Callable[[str], Any]) -> int: ... def on_submit(self, func: Callable[[str], Any]) -> int: ... @@ -217,8 +213,6 @@ class RadioButtons(AxesWidget): def set_active(self, index: int) -> None: ... def on_clicked(self, func: Callable[[str], Any]) -> int: ... def disconnect(self, cid: int) -> None: ... - @property - def circles(self) -> list[Circle]: ... class SubplotTool(Widget): figure: Figure @@ -253,7 +247,6 @@ class MultiCursor(Widget): vertOn: bool visible: bool useblit: bool - needclear: bool vlines: list[Line2D] hlines: list[Line2D] def __init__(