
    g                        d Z ddlmZ ddl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ej2                        Z G d	 d
ej6                        Z G d dej:                        Z G d de      Z ee        e	dgd      d        Z  e	dgd ejB                         dk(  rdnd      d        Z"y)z)
Testing that skewed Axes properly work.
    )	ExitStackN)image_comparison)Axes)register_projectionc                   $     e Zd Z fdZd Z xZS )	SkewXTickc                    t               5 }| j                  | j                  | j                  | j                  | j
                  fD ],  }|j                  |j                  |j                                . t        j                  | j                  j                  | j                               }t        j                  | j                  j                  | j                               }| j                  j                  | j                  j                         xr |       | j                  j                  | j                  j                         xr |       | j                  j                  | j                  j                         xr |       | j
                  j                  | j
                  j                         xr |       t        | A  |       d d d        y # 1 sw Y   y xY wN)r   gridline	tick1line	tick2linelabel1label2callbackset_visibleget_visible
transformsinterval_containsaxes
lower_xlimget_loc
upper_xlimsuperdraw)selfrendererstackartistneeds_lowerneeds_upper	__class__s         W/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/tests/test_skew.pyr   zSkewXTick.draw   sc   [ 	#E==$..$..;;5 Iv1163E3E3GHI %66		$$dlln6K$66		$$dlln6KNN&&**,<>KK##'')9k;NN&&**,<>KK##'')9k;GL"!	# 	# 	#s   GGG"c                 J    | j                   j                  j                         S r
   )r   xaxisget_view_intervalr   s    r"   r%   zSkewXTick.get_view_interval*   s    yy0022    )__name__
__module____qualname__r   r%   __classcell__r!   s   @r"   r   r      s    #&3r'   r   c                       e Zd Zd Zd Zy)	SkewXAxisc                 2    t        | j                  d |      S )N)major)r   r   )r   r0   s     r"   	_get_tickzSkewXAxis._get_tick1   s    D66r'   c                 f    | j                   j                  d   | j                   j                  d   fS )Nr      )r   r   r   r&   s    r"   r%   zSkewXAxis.get_view_interval4   s+    yy##A&		(<(<Q(???r'   N)r(   r)   r*   r1   r%    r'   r"   r.   r.   0   s    7@r'   r.   c                       e Zd Zd Zy)	SkewSpinec                     | j                   j                  }| j                  dk(  r| j                  j                  |d d df<   y | j                  j
                  |d d df<   y )Ntopr   )_pathvertices
spine_typer   r   r   r   ptss     r"   _adjust_locationzSkewSpine._adjust_location<   sK    jj!!??e#		,,C1I		,,C1Ir'   N)r(   r)   r*   r>   r4   r'   r"   r6   r6   ;   s    -r'   r6   c                   N     e Zd ZdZd Zd Z fdZed        Zed        Z	 xZ
S )	SkewXAxesskewxc                    t        |       | _        | j                  j                  j	                  | j                         | j                  j
                  j	                  | j                         t        j                  |       | _        | j                  j                  j	                  | j                         | j                  j                  j	                  | j                         y r
   )r.   r$   spinesr8   register_axisbottommaxisYAxisyaxisleftrightr&   s    r"   
_init_axiszSkewXAxes._init_axisL   s    t_
%%djj1((4[[&
&&tzz2''

3r'   c                     t         j                  | d      t        j                  j                  | d      t        j                  j                  | d      t        j                  j                  | d      d}|S )Nr8   rE   rI   rJ   )r8   rE   rI   rJ   )r6   linear_spinemspinesSpine)r   rC   s     r"   _gen_axes_spineszSkewXAxes._gen_axes_spinesU   s]    "//e<#MM66tXF!--44T6B"==55dGDF r'   c                    d}t         |           | j                  | j                  t	        j
                         j                  |d      z   z   | _        | j                  | j                  z   | _	        t	        j                  | j                  | j                  z   t	        j                               t	        j
                         j                  |d      z   | j                  z   | _        y)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!   s     r"   rS   z!SkewXAxes._set_lim_and_transforms\   s    
  	') !%!%!1!1!+!4!4!6!?!?Q!G"H!I
 --> ",!E!EOOd...((*", !**32"3 7;nn!Er'   c                 B    | j                   j                  j                  S r
   )r   viewLim	intervalxr&   s    r"   r   zSkewXAxes.lower_xlimy   s    yy  ***r'   c                 r    ddgddgg}| j                   j                         j                  |      d d df   S )Ng        g      ?r   )rX   inverted	transformr<   s     r"   r   zSkewXAxes.upper_xlim}   s=    Bx"b"##,,.88=adCCr'   )r(   r)   r*   namerK   rP   rS   propertyr   r   r+   r,   s   @r"   r@   r@   G   sD     D4E: + + D Dr'   r@   	skew_axesT)remove_textc                      t        j                         } | j                  dddd      }|j                  dd       |j	                  dd       |j                  d       |j                  dd	       y )
Nr3   rA   )
projectioni2   Tr   b)color)pltfigureadd_subplotset_xlimset_ylimgridaxvline)figaxs     r"   test_set_line_coll_dash_imagerw      s\    
**,C	AqW	5BKKRKKCGGDM JJqJr'   
skew_rectsarm64g;On?)rh   tolc                  ~   t        j                  ddddd      \  } }|j                  }t        t	        j
                  g dd            }|d   j                  d	d
g       |d   j                  d	d
g       |d   j                  dd       t        ||      D ]  \  }\  }}d|z  d|z  }}t        j                         j                  ||      }|j                  d| d| d       |j                  t        j                   ddgdd||j"                  z   dd              t        j$                  ddddd       y )N   T)   r}   )sharexshareyfigsize)r   r3         )repeatr   r   r   equal)share-   zSkew of z
 in X and z in Yr   g      ?coral)rd   alpha	facecolorg{Gz?gGz?)wspacerI   rJ   rE   r8   )rn   subplotsflatlist	itertoolsproductrq   rr   
set_aspectzipr   rV   rW   	set_title	add_patchmpatch	RectanglerZ   subplots_adjust)	fixr   	rotationsrv   xrotsyrotsxdegydegts	            r"   test_skew_rectangler      s8    Q$tVLIC99DY&&'8CDIGb!WGb!WGwd+!$	2 ENUE%Zed!**46
xvZvU;<
V%%r2h101BLL0@,/7D 	EE qt4$Or'   )#__doc__
contextlibr   r   platformmatplotlib.pyplotpyplotrn   matplotlib.testing.decoratorsr   matplotlib.axesr   matplotlib.transformsr   matplotlib.axisaxisrF   matplotlib.spinesrC   rN   matplotlib.patchespatchesr   matplotlib.projectionsr   XTickr   XAxisr.   rO   r6   r@   rw   machiner   r4   r'   r"   <module>r      s    !    :   *  # # 6
3 34@ @- -9D 9D| I  ;-T2 3 <.d/x//1W<e!EPEPr'   