o
    g1                     @   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)skip_on_importerrorc                  C   s   d} zt jtjd| gi tjdddtt jddd}W n t jy,   t	
d Y d S  t jy;   t	
d	 Y d S w t|j |jd
dksKJ 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
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scriptproc r$   ^/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_tk.py	test_blit   s(   



r&   c                  C   s   d} zt jtjd| gi tjdddtt jddd}W n t jy,   t	
d Y d S  t jy;   t	
d	 Y d S w |jd
dksFJ 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%   *test_figuremanager_preserves_host_mainloop@   s&   


r*      )rerunsc                  C   s   d} zt jtjd| gi tjdddtt jddd}W n t jy+   t	
d Y n t jy9   t	
d	 Y nw |jd
dksDJ 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i tjdddtddd}W n t jy*   t	d Y d S w d	|j
vs2J t|j
tj
d
 |jrDt	d d S 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   
returncoder!   r$   r$   r%   test_never_update   s(   

	r2   c                  C   s   d} zt jtjd| gi tjdddtt jdd}W n t jy+   t	
d Y d S w |jd	d
ks6J |jdd
ks@J |jrJt	
d d S 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    r1   r!   r$   r$   r%   test_missing_back_button   s(   

	r3   )r   r   r   r   r   markbackendr&   r*   flakyr-   r2   r3   r$   r$   r$   r%   <module>   s"    
2
+,/