rL ip ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddlmZddlZddlZddlmZddlmZddlmZmZGddej4Zej8dZd Zerd nd Zd Z d Z!ejDjGdeejDjGdddgejDjIddZ%dZ&eZ'e'D]EZ(e(jRddZ*de*vr@e(jVjYejDj[ej\Ze*dk(r@e(jVjYejDj[ej\e*dk(rqddl/m0Z0ejbdZ1e1se0e1e0dkse(jVjYejDj[ejdde(jRdjgdd k(rAe(jVjYejDj[ej\we*d!k(rLejhd"k7r8e(jVjYejDj[d#d$e*d!k(sd%ejjvsd&ejjvse j d'k(se jldd(d)kse(jVjYejDj[d*HejDjGde'ejDjIdd+Z7d,Z8d-Z9d.Z:d/Z;d0Zd3Z?d4Z@d5ZAejDje j d6k(xrej d78ejDjGd9geAd:ZDejDjd%ejjvd;8ejDje j dZEd?ZFejDje j d6k7d@8ejDjGdedAZGdBZHeZIeID]>Z(e(jRddZ*e*dCk(r5e(jVjYejDjdDPe*dEk(r5e(jVjYejDjdFe*dk(r5e(jVjYejDjdGe*d!k(sd%ejjvsd&ejjvse j d'k(se jldd(d)ks e(jVjYejDj[d*AejDjGdeIejDjIdHdIZKdJZLejDjGdedKZMdLZNejDjGdeejDjGdMdNdOdifdPdQdRifgdSZOdTZPejDje j dF  ( *rzz~~j/I4F   ) )% 0 K--335)0)C)CE)J&,'*G"~%;;1  LL))9SE6(1S)T U   ) )$ /CLLH4L LL**/*B C,7*RZZ'?bjj+Hllh&r"W, LL !!)P!Q S <<^SXXd^z5_get_testable_interactive_backends..|s$HDAqs!A3Z$Hs)rtid)rurdparamr\items)rrts r""_get_testable_interactive_backendsrys^BC EU LLC%HH$HCIIK$HH J EE EsA Axctj5}tjdd}tj j |d|jGfddt}|jjj}|jjj}|jd||jdddddy#1swYyxYw)NLA)rztest_la_icon.pngceZdZWZdZy)5_test_toolbar_button_la_mode_icon..CustomToolr%N)r.r/r0image description) tmp_img_pathsr" CustomToolrs  EKr#rtestgroup)tempfileTemporaryDirectoryrnewrpathr\savercanvasmanager toolmanagertoolbaradd_tool)figtempdirimgrrrrs @r"!_test_toolbar_button_la_mode_iconrs  $ $ & *'iih'ww||G-?@    jj((44 **$$,,VZ0) * * *s B=CC%c ddl}ddl}ddl}ddl}ddl}ddl ddlm ddlm} jjddd jj|j|jd jdj}|jdr|jd s j!} j#||d k7r3|j$t&5 j(d d ddd fd }|j*j-dr||dddz|d j(|d  j/\}} t1|j2j4d|k(sJ|j2j6j9dk(sJ jddk(r t;|| j=ddgddg|j2j>r)|j2j>jAddddd|j2jCdjE|d|j2djF|j2jIdfd|j2jIdtJ|jM} |jO| d  jQ jSd!|jM} |jO| d | jU| jUk(sJy#1swY.check_alt_backendsX CGGKt ,**,C$//2;-@A BA IIe r#r;r@svgrzFigure 1rrrPr=g?g@key_press_eventq draw_eventc$jSNstart)eventtimers r"z(_test_interactive_impl..s u{{}r# close_eventpng)r[?)+importlib.utiliojsonrrd matplotlibrmatplotlib.backend_basesrrcParamsupdateloadsargvlowerr)r]rrraisesrbrrYrZsubplotsrrr/rget_window_titlerplotrdraw_rubberband new_timer add_callback_process mpl_connectprintBytesIOsavefigshowpausegetvalue)rXrrrrdrrrraxresult result_afterrrrs @@@r"_test_interactive_implrs (1LL"'  LL  388A;/0ll9%++-Gw'9'9.'Ijjl # g {+ -t, -  >> # #K 0 gcrlW4 5%  CGGG4 llnGC   & &,H *R RR R ::   . . 0J >> > ||I-/)#.GGQFQF zz **4QA> JJ  $E x 13::sCLLMJJ<)DEJJ=%0 ZZ\FKKuK%HHJIIcN::> # #C ( 4 L , >> # #C ( 4 L <A\!2a!7 45 ]3~~ *6J 6 =1s (C-(C2cddl}d|jd<d|jd<d|jd<d|jd<ddlm}t j t d5|jddddt j t d 5|jd dddy#1swY?xYw#1swYyxYw) Nrr5r7r8r6z(Failed to import any of the following Qt)matchr9z^(?:(?!(PySide6|PyQt6)).)*$qt5agg)rrrrrdrrbswitch_backend)rrs r" _impl_missingr%sCKKCKK!CKK !CKK # {*T U$ 7#$ {*G H% 8$%%$$%%s"B2B>2B;>Cc.tttyr )rr%rrzr#r"test_qt_missingr's  }5r#c^ddl}ddl}ddl}|j\}}}|j|d|j|d}ddl}|j|d}|j dg} |jddt|jjjy)Nrz.QtCorez .QtWidgetsz mpl testingerrorz.*Mixing Qt major.*)messagecategory) rXrwarningsr import_modulematplotlib.backends.backend_qt QApplicationfilterwarnings UserWarningbackends backend_qt _create_qApp) rXrr,_ host_binding mpl_bindingmpl_binding_qwidgetsr host_qwidgetshost_apps r"_impl_test_cross_Qt_importsr;s#&88 A|[I{m7342922k]*3MN)+I++|nJ,GHM))=/:H G-C%02""//1r#c#KdDcgc]#}tjj||%}}dDcgc]#}tjj||%}}t|dk(st|dk(r9t j ddtj jdgy|D]}|D]}||g||gfEd{ycc}wcc}w7w)N)r7r8)r5r6rr)rt)rXrYrZrrdrrerf)rprrqt5qt6s r"qt5_and_qt6_pairsr?s+ >> # #C ( 4 L , >> # #C ( 4 L <A\!2a!7ll4"(++"2"23S"T!UW W0 0Cc S#J/ / / 00 0s'C(CC(CA,C C Cr4rIrLz host, mplc tt||t}|j}d|vsJy#tj $r}|j}Yd}~+d}~wwxYw)Nr z2Mixing Qt major versions may not work as expected.)rr;rrrr)hostrrrexs r"test_cross_Qt_importsrCsW 6c#02 ?6 II I  ( ( s,A AAz,this test fails an azure for unknown reasonsr zCannot send SIGINT on Windows.ctjdtjtj dt jtdzdgitjddd}d tjd d tjd }tjtz} |j!}|Jt"j$j'|} |j/|j1t2j4|j7tdk(sJ |j!|j9yy#t"j(j*$r2tj|kDrtj,d nYYnwxYw#|j!|j9wwxYw)Ntornado-cz _test_interactive_impl()z{}webaggrrrzhttp://zwebagg.address:z webagg.portz'Failed to connect to the webagg server.r r)rd importorskiprPopenr executableinspect getsourcerrrrrtime perf_counterrpollurllibrequesturlopenr)URLErrorrr send_signalsignalSIGINTwaitkill)rurlrretcodeconns r" test_webaggr^s  "       1 2 ' ()- / Mrzz L L  ND CLL!1231S\\-5P4Q RC!M1G ))+&~~--c2  'yyy/1444 99;  IIK <<(( $$&0KK IJK  99;  IIK s24F*63E)A F*A F&!F*%F&&F**#G cddl}ddl}|jdd\}}|jd}|jj dd|jj dd|D]}||j vrJddlm}|jdk(sJ|D]}||j vrJ|D]'}tj|||j vr'J |j||jdy#t$rYywxYw)Nrr&rUDISPLAYWAYLAND_DISPLAYr?)rrrsplitrpoprrr get_backendrXr-r$exitrb)rrrrorprs r"_lazy_headlessrfs HHQRLMGT ::c?DJJNN9d#JJNN$d+&#++%%%&$ ??  %% %&#++%%%&"$ckk!!!"  7#      sC>> D  D zthis a linux-only testc ~tt|jd|jdti|ddd}y)NrrTr%)r`rar)rrfrcrrs r"test_lazy_linux_headlessrhs:   sww~6?S?RB?  Dr#cddlm}|j\}}|jddgddgd\}|j d|j d|j jd t|j j|j}|j||j j|jtd D]}|j j||jddgddg\}|j||j j|j|j j|j d y) Nrr&rPT)animatedF)blockg333333?r 皙?)rrrrrrrrrcopy_from_bboxbbox draw_artistblitrangerestore_regionr)rrrlnbgjs r"_test_number_of_draws_scriptrw)s#llnGC ''1a&1a&4' 0CBHH5HIIcNJJ</  " "388 ,BNN2JJOOCHH 2Y " !!"%ggq!fq!f% r ! ! "IIcNr# gtk3cairoz#gtk3cairo does not support blitting gtk4cairoz#gtk4cairo does not support blittingzwx does not support blittingr>cttt|}|jj d}d|cxkrdksJJy)Nr DrawEventrr)rrwrrr)rrndrawss r"test_blitting_eventsr}jsA $ms LD [[  { +F v>>>>r#cRddlm}ddlm}d}|j }|j ||j jd}|}|j||j|j ||j|jdkDsJd|_ d|_ |j|j ||jdk(sJ|j|j ||jdk(sJ|jdy) Nr)Mockrrmr&TrPr) unittest.mockrrrrrrrrrstop call_count single_shotr)rr pause_timerrmocks r"_impl_test_interactive_timersrxs ##J **,CIIj JJ  %E 6D t KKMIIj JJL ??Q  DOE KKMIIj ??a   KKMIIj ??a  IIer#c|ddk(r*tjdrtjd|ddk(rtjdt t t |y)NrrxCIz)gtk3cairo timers do not work in remote CIrErr)rgetenvrdrfrrrrHs r"test_interactive_timersrsP <K'BIIdO ?@ <D  HI-%6r#cz ddl ddlm}ddlddl}|j | fd}t ||}|jd| |j}|jjdd|jjd fd |d i|y#t$rtdd YywxYw) Nrcjdk(rddl}|jddyddl}jj |j y)Nr r)rwin32apiGenerateConsoleCtrlEventrWrZgetpidrX)rrWrrs r" interrupterz&_test_sigint_impl..interruptersA <<7 "   - -a 3  BGGIBIIK /r#r&rctddSNDRAWTflushrrs r"rz#_test_sigint_impl..s eF$/r#c$jSrr)rrs r"rz#_test_sigint_impl..s ekkmr#SUCCESSTrrz) rrrr threadingr$getattrTimerrrrKeyboardInterruptr) r target_namer rrrtargetrrrrs @@@r"_test_sigint_implrs# w0S+ &F OOA{ +E **,CJJ/JJ#% % it$%sB!!B:9B:ztarget, kwargsrrkrintervalrlc |jd}|jdstjdt t j dtjtd|d|d|dzg} |jd|jt \}}d |vsJy#t$r%|j|j\}}wxYw) NrqtrG-SIGINT currently only tested on qt and macosxrFz _test_sigint_impl(rH)rr r)r^r]rdrfr rrLrMrNrr- communicater ExceptionrZ)rrr rrrr5s r" test_sigintrs ggl#G   . / CD     , - {"VJb ! D E F GD f$$]$;      $$&  s 9*B**.Ccddl}ddlm}|j|t ||}|j }|j jdd|j jdd_ jtddfd }|j|j| |d i|y#t$rtd dYywxYw) NrrctddSrrrs r"rz7_test_other_signal_before_sigint_impl..s uV47Pr#r&)rTSIGUSR1rc&jyrr)signumframers r"custom_signal_handlerzD_test_other_signal_before_sigint_impl..custom_signal_handlers  r#rrz)rWrrr$rrrrrrrrrr) rrr rWrrrrrs @r"%_test_other_signal_before_sigint_implrs#w S+ &F **,CJJ<)PQ JJ ! ,EE uit4FMM&.."78% % it$%s4B==CCz,No other signal available to send on Windowsc |jd}|jdstjd|dk(r9|jj tj jdtjdk(r>|dk(r9|jj tj jd ttjd tjtd |d |d |d zg} |jdt!j"|j$t&j(|jdt!j"|j$t&j*|j-t.\}}t3|d|vsJy#t0$r%|j#|j-\}}wxYw)NrrrrGzmacosx backend is buggyrLrNrzQt backend is buggy on macOSrFz' _test_other_signal_before_sigint_impl(rHrrrr r)r^r]rdrfnode add_markerrergrrr rLrMrNrr-rrZpidrWrrXrrrr)rrr rSrrrr5s r"test_other_signal_before_sigintrsggl#G   . / CD(  1 19R 1 ST ||xFf$4   KK  %C  D F     @ A 3kF:Rz 4 4 5 6D  f &..) i  &--($$]$;   &M     $$&  s BF11.G)R functoolsrXrrMrrrrWrrrrOurllib.requestrRPILrrdrrrmatplotlib.backend_toolsrmatplotlib.testingrrrrKr lru_cacherurrrrre parametrizeflakyrr_thread_safe_backendsrvaluesrrtrcrgrpackaging.versionrmac_verTimeoutExpiredr^python_implementationrrhrrr rrrr r%r'r;r?skipifrVrCr^rfrhrw_blit_backendsrfr}rrrrrrrzr#r"rs     (3V***> ==@E)* *.P8f B DEZ$?@!0AF0."<;< " HEll1ol+G'   KK  Z%B%B  C E D  KK  Z%B%B  C E H +"(""$Q' uW~g6 KK   !!)B)B)-"/ 0 a  X &) 3  KK  Z%B%B  C E G  > > > @I M  KK  K    W   #"**'D ,,( "s'7'7';g'E  KK  E F H? HF 56!070 ' >>>2" % 62$0&LLGH$F$5$F$F$H H 46&<(9(;&<= J>6 JJ"**,IKCLLG+4TUVK<BCLLG+4LM B DEFN&R45  Ell1ol+G+  KK  B C E K   KK  B C E D  KK  ; < > W   #"**'D ,,( "  2A  (  KK  E F % ./!0@ B DE6F6%B B DE) gt_ z2, F $%2CLLG+IK B DE) gt_ z2, FKr#