U
    \	a1                     @   s   d dl Z d dlZd dlZd dlZdZejjddddd Zejjddddd	 Zejjdddejj	d
ddd Z
ejjdddejj	d
ddd Zejjddddd ZdS )    N
   TkAggT)Zskip_on_importerrorc                  C   s   d} z0t jtjd| gtjdddtt jddd}W n> t jk
rT   t	
d Y n> t jk
rr   t	
d	 Y n X t|j |jd
dkstd S )Na  
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends import _tkagg
def evil_blit(photoimage, aggimage, offsets, bboxptr):
    data = np.asarray(aggimage)
    height, width = data.shape[:2]
    dataptr = (height, width, data.ctypes.data)
    _tkagg.blit(
        photoimage.tk.interpaddr(), str(photoimage), dataptr, offsets,
        bboxptr)

fig, ax = plt.subplots()
bad_boxes = ((-1, 2, 0, 2),
             (2, 0, 0, 2),
             (1, 6, 0, 2),
             (0, 2, -1, 2),
             (0, 2, 2, 0),
             (0, 2, 1, 6))
for bad_box in bad_boxes:
    try:
        evil_blit(fig.canvas._tkphoto,
                  np.ones((4, 4, 4)),
                  (0, 1, 2, 3),
                  bad_box)
    except ValueError:
        print("success")
-cr   0Z
MPLBACKENDSOURCE_DATE_EPOCHTenvtimeoutstdoutcheckuniversal_newlinesSubprocess timed outz<Likely regression on out-of-bounds data access in _tkagg.cppsuccess   )
subprocessrunsys
executableosenviron_test_timeoutPIPETimeoutExpiredpytestfailCalledProcessErrorprintr   countAssertionErrorscriptproc r#   D/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_backend_tk.py	test_blit   s&    



r%   c                  C   s   d} z0t jtjd| gtjdddtt jddd}W n> t jk
rT   t	
d Y n4 t jk
rr   t	
d	 Y nX |jd
dkstd S )Na]  
import tkinter
import matplotlib.pyplot as plt
success = False

def do_plot():
    plt.figure()
    plt.plot([1, 2], [3, 5])
    plt.close()
    root.after(0, legitimate_quit)

def legitimate_quit():
    root.quit()
    global success
    success = True

root = tkinter.Tk()
root.after(0, do_plot)
root.mainloop()

if success:
    print("success")
r   r   r   r   Tr   r   +Subprocess failed to test intended behaviorr      r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r#   r#   r$   *test_figuremanager_preserves_host_mainloop@   s$    


r)      )Zrerunsc                  C   s   d} z0t jtjd| gtjdddtt jddd}W n> t jk
rT   t	
d Y n  t jk
rr   t	
d	 Y nX |jd
dkstd S )Na>  
import tkinter
import time
import matplotlib.pyplot as plt
import threading
from matplotlib.cbook import _get_running_interactive_framework

root = tkinter.Tk()
plt.plot([1, 2, 3], [1, 2, 5])

def target():
    while not 'tk' == _get_running_interactive_framework():
        time.sleep(.01)
    plt.close()
    if show_finished_event.wait():
        print('success')

show_finished_event = threading.Event()
thread = threading.Thread(target=target, daemon=True)
thread.start()
plt.show(block=True)  # testing if this function hangs
show_finished_event.set()
thread.join()

r   r   r   r   T)r	   r
   r   r   r   z&Most likely plot.show(block=True) hungr&   r   r'   r(   r    r#   r#   r$   &test_figuremanager_cleans_own_mainloopl   s$    


r+   c                  C   s   d} z,t jtjd| gtjdddtddd}W n  t jk
rP   t	d Y n0X d	|j
ks`tt|j
tj
d
 |jrt	d d S )NaK  
import tkinter
del tkinter.Misc.update
del tkinter.Misc.update_idletasks

import matplotlib.pyplot as plt
fig = plt.figure()
plt.show(block=False)

# regression test on FigureCanvasTkAgg
plt.draw()
# regression test on NavigationToolbar2Tk
fig.canvas.toolbar.configure_subplots()

# check for update() or update_idletasks() in the event queue
# functionally equivalent to tkinter.Misc.update
# must pause >= 1 ms to process tcl idle events plus
# extra time to avoid flaky tests on slow systems
plt.pause(0.1)

# regression test on FigureCanvasTk filter_destroy callback
plt.close(fig)
r   r   r   r   T)r	   r
   capture_outputr   r   zException in Tkinter callback)filer&   )r   r   r   r   r   r   r   r   r   r   stderrr   r   
returncoder    r#   r#   r$   test_never_update   s$    

	r0   c                  C   s   d} z.t jtjd| gtjdddtt jdd}W n  t jk
rR   t	
d Y n:X |jd	d
ksht|jdd
ks|t|jrt	
d d S )Na  
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk
class Toolbar(NavigationToolbar2Tk):
    # only display the buttons we need
    toolitems = [t for t in NavigationToolbar2Tk.toolitems if
                 t[0] in ('Home', 'Pan', 'Zoom')]

fig = plt.figure()
print("setup complete")
# this should not raise
Toolbar(fig.canvas, fig.canvas.manager.window)
print("success")
r   r   r   r   T)r	   r
   r   r   r   zsetup completer'   r   r&   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r    r#   r#   r$   test_missing_back_button   s$    

	r1   )r   r   r   r   r   markbackendr%   r)   Zflakyr+   r0   r1   r#   r#   r#   r$   <module>   s    
2
+,/