o
    i                     @   s   d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ G dd dejZG d	d
 d
ejZG dd dejZG dd de
Zee edgdddd Zedgdddd Z dS )z)
Testing that skewed axes properly work.
    )	ExitStackN)image_comparison)Axes)register_projectionc                       s$   e Zd Z fddZdd Z  ZS )	SkewXTickc                    s   t  i}| j| j| j| j| jfD ]}||j|  qt	
| jj|  }t	
| jj|  }| j| j o9| | j| j oD| | j| j oO| | j| j oZ| tt| | W d    d S 1 sow   Y  d S N)r   gridline	tick1line	tick2linelabel1label2callbackset_visibleget_visible
transformsinterval_containsaxes
lower_xlimget_loc
upper_xlimsuperr   draw)selfrendererstackartistneeds_lowerneeds_upper	__class__ U/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/tests/test_skew.pyr      s2   "zSkewXTick.drawc                 C   s   | j j S r   )r   xaxisget_view_intervalr   r    r    r!   r#   )   s   zSkewXTick.get_view_interval)__name__
__module____qualname__r   r#   __classcell__r    r    r   r!   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )	SkewXAxisc                 C   s   t | jd |dS )N)major)r   r   )r   r*   r    r    r!   	_get_tick0   s   zSkewXAxis._get_tickc                 C   s   | j jd | j jd fS )Nr      )r   r   r   r$   r    r    r!   r#   3   s   zSkewXAxis.get_view_intervalN)r%   r&   r'   r+   r#   r    r    r    r!   r)   /   s    r)   c                   @   s   e Zd Zdd ZdS )	SkewSpinec                 C   sB   | j j}| jdkr| jj|d d df< d S | jj|d d df< d S )Ntopr   )_pathvertices
spine_typer   r   r   r   ptsr    r    r!   _adjust_location;   s   
zSkewSpine._adjust_locationN)r%   r&   r'   r4   r    r    r    r!   r-   :   s    r-   c                   @   s@   e Zd ZdZdd Zdd Zdd Zedd	 Zed
d Z	dS )	SkewXAxesskewxc                 C   sb   t | | _| jd | j | jd | j t| | _| jd | j | jd | j d S )Nr.   bottomleftright)r)   r"   spinesregister_axismaxisYAxisyaxisr$   r    r    r!   
_init_axisL   s   
zSkewXAxes._init_axisc                 C   s8   t | dtj| dtj| dtj| dd}|S )Nr.   r7   r8   r9   )r.   r7   r8   r9   )r-   linear_spinemspinesSpine)r   r:   r    r    r!   _gen_axes_spinesU   s   
zSkewXAxes._gen_axes_spinesc                 C   sn   d}t |  | j| jt |d  | _| j| j | _	t
| j| j t t |d | j | _dS )z
        This is called once when the plot is created to set up all the
        transforms for the data, text and grids.
           r   N)r   _set_lim_and_transforms
transScaletransLimitsr   Affine2Dskew_degtransDataToAxes	transAxes	transDatablended_transform_factoryIdentityTransform_xaxis_transform)r   rotr    r    r!   rE   \   s    


z!SkewXAxes._set_lim_and_transformsc                 C   s
   | j jjS r   )r   viewLim	intervalxr$   r    r    r!   r   y   s   
zSkewXAxes.lower_xlimc                 C   s,   ddgddgg}| j  |d d df S )Ng        g      ?r   )rJ   inverted	transformr2   r    r    r!   r   }   s   zSkewXAxes.upper_xlimN)
r%   r&   r'   namer?   rC   rE   propertyr   r   r    r    r    r!   r5   F   s    	
r5   	skew_axesT)remove_textc                  C   sN   t  } | jddddd}|dd |dd |d |jddd	 d S )
Nr,   r6   )
projectioni2   Tr   b)color)pltfigureadd_subplotset_xlimset_ylimgridaxvline)figaxr    r    r!   test_set_line_coll_dash_image   s   
rf   
skew_rectsc            	      C   s   t jdddddd\} }|j}ttjg ddd}|d d	d
g |d d	d
g |d jddd t	||D ]3\}\}}d| d| }}t
 ||}|d|| |tjddgdd||j ddd q:t jdddddd d S )N   T)   ri   )sharexshareyfigsize)r   r,         )repeatr   rm   ro   equal)share-   zSkew of {0} in X and {1} in Yrn   g      ?coral)rT   alpha	facecolorg{Gz?gGz?)wspacer8   r9   r7   r.   )r]   subplotsflatlist	itertoolsproductr`   ra   
set_aspectzipr   rH   rI   	set_titleformat	add_patchmpatch	RectanglerL   subplots_adjust)	fixr   	rotationsre   xrotsyrotsxdegydegtr    r    r!   test_skew_rectangle   s   
r   )!__doc__
contextlibr   r|   matplotlib.pyplotpyplotr]   matplotlib.testing.decoratorsr   matplotlib.axesr   matplotlib.transformsr   matplotlib.axisaxisr<   matplotlib.spinesr:   rA   matplotlib.patchespatchesr   matplotlib.projectionsr   XTickr   XAxisr)   rB   r-   r5   rf   r   r    r    r    r!   <module>   s(    ?
