o
    i                     @   s  d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Z
d dlZdd ZdZdZe
jde e
jddd	ge
jjd
ddd Ze
jjdejv dde
jjejdkdddd Ze
jjejdkdde
jjddddd ZdS )    Nc                  C   s*  g } ddgdfddgdfdgdfddgdfd	gdfd	dgdfd
gdfdgdfdgdfdgdff
D ]b\}}d }dd |D }t jdkrKtjdsKd}n|rVdd|}n|dkrbtjdrbd}|rwtj|tj	j
d| d| dd}n|drt jdkrtj|tj	jddd}| | q0| S )Ncairogigtk3agg	gtk3cairoPyQt5qt5agg	cairocffiqt5cairoPySide2tkintertkaggwxwxaggzmatplotlib.backends._macosxmacosxc                 S   s   g | ]
}t j|s|qS  )	importlibutil	find_spec).0depr   r   e/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/tests/test_backends_interactive.py
<listcomp>#   s    z6_get_testable_interactive_backends.<locals>.<listcomp>linuxDISPLAYz$DISPLAY is unsetz{} cannot be importedz, TF_BUILDzmacosx backend fails on Azurez	Skipping z	 because reason)marksdarwinzgithub #16849)sysplatformosenvirongetformatjoinpytestparammarkskip
startswithxfailappend)backendsdepsbackendr   missingr   r   r   "_get_testable_interactive_backends   sD   



r1   aB
  import importlib
import importlib.util
import io
import json
import sys
from unittest import TestCase

import matplotlib as mpl
from matplotlib import pyplot as plt, rcParams
from matplotlib.backend_bases import FigureCanvasBase
rcParams.update({
    "webagg.open_in_browser": False,
    "webagg.port_retries": 1,
})
if len(sys.argv) >= 2:  # Second argument is json-encoded rcParams.
    rcParams.update(json.loads(sys.argv[1]))
backend = plt.rcParams["backend"].lower()
assert_equal = TestCase().assertEqual
assert_raises = TestCase().assertRaises

if backend.endswith("agg") and not backend.startswith(("gtk3", "web")):
    # Force interactive framework setup.
    plt.figure()

    # Check that we cannot switch to a backend using another interactive
    # framework, but can switch to a backend using cairo instead of agg, or a
    # non-interactive backend.  In the first case, we use tkagg as the "other"
    # interactive backend as it is (essentially) guaranteed to be present.
    # Moreover, don't test switching away from gtk3 (as Gtk.main_level() is
    # not set up at this point yet) and webagg (which uses no interactive
    # framework).

    if backend != "tkagg":
        with assert_raises(ImportError):
            mpl.use("tkagg", force=True)

    def check_alt_backend(alt_backend):
        mpl.use(alt_backend, force=True)
        fig = plt.figure()
        assert_equal(
            type(fig.canvas).__module__,
            "matplotlib.backends.backend_{}".format(alt_backend))

    if importlib.util.find_spec("cairocffi"):
        check_alt_backend(backend[:-3] + "cairo")
    check_alt_backend("svg")

mpl.use(backend, force=True)

fig, ax = plt.subplots()
assert_equal(
    type(fig.canvas).__module__,
    "matplotlib.backends.backend_{}".format(backend))

ax.plot([0, 1], [2, 3])

timer = fig.canvas.new_timer(1.)  # Test that floats are cast to int as needed.
timer.add_callback(FigureCanvasBase.key_press_event, fig.canvas, "q")
# Trigger quitting upon draw.
fig.canvas.mpl_connect("draw_event", lambda event: timer.start())
fig.canvas.mpl_connect("close_event", print)

result = io.BytesIO()
fig.savefig(result, format='png')

plt.show()

# Ensure that the window is really closed.
plt.pause(0.5)

# Test that saving works after interactive window is closed, but the figure is
# not deleted.
result_after = io.BytesIO()
fig.savefig(result_after, format='png')

if not backend.startswith('qt5') and sys.platform == 'darwin':
    # FIXME: This should be enabled everywhere once Qt5 is fixed on macOS to
    # not resize incorrectly.
    assert_equal(result.getvalue(), result_after.getvalue())

   r/   toolbartoolbar2toolmanager   )rerunsc                 C   s   | dkr|dkrt d |dkrtjdrt d tjtjdt	t
d|igi tj| d	d
ttjdd}|jrFt d|j d |jddksPJ d S )Nr   r5   z*toolmanager is not implemented for macosx.r4   TRAVISz'toolbar2 for macosx is buggy on Travis.-cr3   0
MPLBACKENDSOURCE_DATE_EPOCHT)envtimeoutstdoutuniversal_newlines2The subprocess returned with non-zero exit status .
CloseEvent   )r&   r)   r!   r"   r#   
subprocessrunr   
executable_test_scriptjsondumps_test_timeoutPIPE
returncodefailr@   count)r/   r3   procr   r   r   test_interactive_backend   s$   


rR   r   z,this test fails an azure for unknown reasonsr   ntzCannot send SIGINT on Windows.c                  C   s   t d tjtjdtgi tjdddd} d	t
jd t
jd	 }t t }	 z|  }|d u s6J tj|}W n tjjyV   t |krRt d nY q*Y nw q+|  | tj | jtddkslJ d S )Ntornador9   webaggr:   r;   )r>   zhttp://{}:{}zwebagg.addresszwebagg.portTz'Failed to connect to the webagg server.)r?   r   )r&   importorskiprF   Popenr   rH   rI   r!   r"   r$   mplrcParamstimeperf_counterrL   pollurllibrequesturlopenerrorURLErrorrO   closesend_signalsignalSIGINTwait)rQ   urlr?   retcodeconnr   r   r   test_webagg   s4   

rj   r   zthis a linux-only testQt5AggT)skip_on_importerrorc                  C   s8   d} t tjd| g}|jrtd|j d d S d S )Na  
import os
import sys

# make it look headless
del os.environ['DISPLAY']

# we should fast-track to Agg
import matplotlib.pyplot as plt
plt.get_backend() == 'agg'
assert 'PyQt5' not in sys.modules

# make sure we really have pyqt installed
import PyQt5
assert 'PyQt5' in sys.modules

# try to switch and make sure we fail with ImportError
try:
    plt.switch_backend('qt5agg')
except ImportError:
    ...
else:
    sys.exit(1)

r9   rB   rC   )rF   rG   r   rH   rN   r&   rO   )test_scriptrQ   r   r   r   test_lazy_linux_headless   s   rn   )r   importlib.utilrJ   r!   rd   rF   r   rZ   urllib.requestr]   r&   
matplotlibrX   r1   rI   rL   r(   parametrizeflakyrR   skipifr"   namerj   r    r/   rn   r   r   r   r   <module>   s4    )Q