U
    Evf\                     @   s   d dl Z d dlZd dlZd dlmZmZmZm	Z
mZmZmZ ddlmZmZ ejddddd	d
ZdddZejddddd Zdd ZG dd de
jZG dd deZG dd deZG dd deZdS )    N)_apiartistlinesaxispatches
transformscolors   )art3dproj3d3.6z$a vendored copy of _move_from_center)alternativeTTTc                 C   s   t | |||dS )g
    For each coordinate where *axmask* is True, move *coord* away from
    *centers* by *deltas*.
    )axmask)_move_from_centerZcoordcentersdeltasr    r   ?/tmp/pip-unpacked-wheel-7vhvci0g/mpl_toolkits/mplot3d/axis3d.pymove_from_center   s    r   c                 C   s&   t | } | |t d| |  |  S )r   r	   )npasarraycopysignr   r   r   r   r      s    
r   z(a vendored copy of _tick_update_positionc                 C   s   t | ||| dS ).Update tick line and label position and style.N)_tick_update_positiontickZtickxsZtickysZlabelposr   r   r   tick_update_position"   s    r   c                 C   sl   | j | | j| | jd | jd | jd | jd | j|| | j	dgdg dS )r   TF- r   N)
label1set_positionlabel2	tick1lineZset_visible	tick2lineset_linestyleZ
set_markerset_datagridliner   r   r   r   r   (   s    r   c                       sz  e Zd ZdZdZddddddddddd	dd
ZddddZddddZ fddZe	
ee_ejdddedd Zdd Zejddddd Zd? fdd	Zd@ fdd	Zedd d! Zd"d# ZdAd$d%Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zejd2d3 ZdBd4d5d6d7Z ejdd8dd9ed:d d;d Z!ejdd<dd9ed=d d>d Z"  Z#S )CAxiszAn Axis class for the 3D plots.))r            )r	            )r   r	   r0   r-   )r+   r.   r/   r,   )r   r	   r.   r+   )r-   r0   r/   r,   r   r	   )r	   r   r.   )itickdirjuggled)r   r	   r.   r.   )r   r.   r	   )xyzN)rotate_labelc                O   s   t  S Nlocals)selfadirv_intervalxd_intervalxaxesr7   argskwargsr   r   r   	_old_initE   s    zAxis._old_initc                K   s   t  S r8   r9   )r;   r?   r7   rA   r   r   r   	_new_initI   s    zAxis._new_initc                    s  t j| j| jgf||}d|krpt jddtt| j dd |d | j	krpt
dt| j d|d |d }|d	 }|d
d}|d }| j	}| j|  | _| jddddtjd| d dddd tjd r.| jdddddddd | jd d tjd! tjd! d"i n| jtjd# tjd$ dtjd% tjd& tjd' dd | jd d |d(krtjd) ntjd* |d(krtjd+ ntjd, d"i t j|f|| d-|kr| j|d-   d.|kr| j|d.   | | |   d S )/Nr<   r   zUThe signature of 3D Axis constructors has changed in %(since)s; the new signature is T)messagependingzCannot instantiate z with adir=r?   r7   r@   r   rA   centeranchor)vaharotation_modezaxes3d.zaxis.panecolorg?g?)inward_factoroutward_factor)labelcolorr   z_internal.classic_modeg      ?)r   r   r   r	   )	linewidthrN   )?rP   rP   r	   g      ?r    )rN   rO   	linestyle)axislinegridr   rO   zlines.linewidth)TFzaxes.linewidthzaxes.edgecolorz
grid.colorzgrid.linewidthzgrid.linestylexzzxtick.major.widthzytick.major.widthzxtick.minor.widthzytick.minor.widthr>   r=   )r   Zselect_matching_signaturerB   rC   Zwarn_deprecatedinspect	signaturetype__init__	axis_name
ValueError__name__get_AXINFOcopy_axinfoupdatemplZrcParamssuperset_data_intervalset_view_intervalset_rotate_label_init3d)r;   r@   rA   paramsr?   r7   name	__class__r   r   rX   L   s    
 





zAxis.__init__r   T)rE   c                 C   s   | j S r8   )rY   r;   r   r   r   <lambda>       zAxis.<lambda>c                 C   s   t jdd| jd d | jd d dd| _tjddgddggd	d
| _| | jd  | j	| j | j	| j t
g | _| j	| j | j	| j | j	| j | jj| j_| jj| j_d S )N)r   r   rR   rO   rN   T)ZxdataZydatarO   rN   Zantialiasedr   r	   F)closed)mlinesZLine2Dr_   linempatchesZPolygonpaneset_pane_colorr?   Z_set_artist_propsr
   ZLine3DCollection	gridlinesrM   
offsetText	transData
_transformrk   r   r   r   rf      s"     zAxis._init3dc                 C   s   |    d S r8   )rf   rk   r   r   r   init3d   s    zAxis.init3dc                    sF   t  |}|D ]0}|j|j|j|j|jfD ]}|| jj	 q,q|S r8   )
rb   get_major_ticksr%   r&   r)   r"   r$   set_transformr?   rv   r;   Znumtickstickstobjri   r   r   ry      s        zAxis.get_major_ticksc                    sF   t  |}|D ]0}|j|j|j|j|jfD ]}|| jj	 q,q|S r8   )
rb   get_minor_ticksr%   r&   r)   r"   r$   rz   r?   rv   r{   ri   r   r   r      s        zAxis.get_minor_ticksc                 C   s   |  | dS )zSet pane position.N)_set_pane_posr;   xysr   r   r   set_pane_pos   s    zAxis.set_pane_posc                 C   s0   t |}|d d d df }|| j_d| _d S )Nr.   T)r   r   rr   Zxystaler   r   r   r   r      s    
zAxis._set_pane_posc                 C   sH   t ||}|| jd< | j| | j| | j|d  d| _dS )z
        Set pane color.

        Parameters
        ----------
        color : color
            Color for axis pane.
        alpha : float, optional
            Alpha value for axis pane. If None, base it on *color*.
        rN   TN)mcolorsZto_rgbar_   rr   Zset_edgecolorZset_facecolorZ	set_alphar   )r;   rN   alphar   r   r   rs      s    
zAxis.set_pane_colorc                 C   s   || _ d| _dS )z
        Whether to rotate the axis label: True, False or None.
        If set to None the label will be rotated if longer than 4 chars.
        TN)_rotate_labelr   )r;   valr   r   r   re      s    zAxis.set_rotate_labelc                 C   s    | j d k	r| j S t|dkS d S )Nr-   )r   len)r;   textr   r   r   get_rotate_label   s    
zAxis.get_rotate_labelc                 C   s  t | j | j | j gj\}}d||  }|| d }|d| 8 }|d| 7 }|d |d |d |d |d |d f}| j|| jj}t 	d}t 	d}	t
dD ]H}
t || jd|
  df ||
< t || jd|
 d  df |	|
< q||	k }t ||	 t tjk}t |dkrt | d d }|dkr^t dd|d g}n>|dkr~t d|d d	g}n|dkrt |d d	d	g}||||||fS )
N      ?   g      ?r   r	   r.   r+   TF)r   arrayr?   Z
get_xboundZ
get_yboundZ
get_zboundTZ_tunit_cubeMzerosrangeZmean_PLANESabsZfinfofloatZepssumwhere)r;   rendererminsmaxsr   r   ZboundsZbounds_projZmeans_z0Zmeans_z1r1   highsequalsZverticalr   r   r   _get_coord_info   s6    (

 &


zAxis._get_coord_infoc           	      C   s   ||g}|ddd }|||g|||g|||gg}|| j j | jd  }| jd }|d  }|d |d  ||d < | }|d |d  ||d < ||fS )z3Get the edge points for the black bolded axis line.Nr   r1   r3   r   r	   )r?   _vertical_axisr_   r^   )	r;   minmaxmaxminmbZmb_revmmr3   Zedge_point_0Zedge_point_1r   r   r   _get_axis_line_edge_points  s    
zAxis._get_axis_line_edge_pointsc                 C   s`   dd | j  D }dd | j  D }| jd }| jjd }t|| t|| | }|S )z
        Get the direction of the tick.

        Returns
        -------
        tickdir : int
            Index which indicates which coordinate the tick line will
            align with.
        c                 S   s   g | ]}|d  qS )r2   r   .0vr   r   r   
<listcomp>;  s     z%Axis._get_tickdir.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r1   r   r   r   r   r   r   <  s     r1   r.   )r]   valuesr_   r?   r   r   Zroll)r;   Ztickdirs_baseZinfo_ir1   jr2   r   r   r   _get_tickdir0  s    
zAxis._get_tickdirc                    s   |j d|  d | |\}}}} }| j}|d }|| sN| jd|  }	n| jd| d  }	 fdd|	D }
| |
 | j| |d dS )	z
        Draw pane.

        Parameters
        ----------
        renderer : `~matplotlib.backend_bases.RendererBase` subclass
        Zpane3dgidr1   r.   r	   c                    s   g | ]} | qS r   r   )r   ptcr   r   r   V  s     z"Axis.draw_pane.<locals>.<listcomp>N)	
open_groupget_gidr   r_   r   r   rr   drawclose_group)r;   r   r   r   r   r   r   infoindexZplaner   r   r   r   	draw_paneD  s    
zAxis.draw_panec           ?      C   s  | j j| j_|jd|  d |  }| j}|d }|d }| |\}}}}	}
}t	
|||}t	
| ||}| ||\}}t||g| j j}t	|}| j|d |d  | j| | j j|dddf g| j j|dddf g d \}}d||  }| jj }|| j jj}td	| }d
| }d}| j| | |	 }dddg}d||< t||||}tj|| j jf \}}}| j||f | | j  rt!"t	#t	$||}| j%| | j&|d d  | j'|d d  | j(|d d  | j| |d dkr2|}d} n|}d} t||||}!tj|!| j jf \}"}#}$| j)*| j+j,-  | j)|"|#f t!"t	#t	$||}| j)%| | j)(d tj|| j jf }%|%|d  ||d | f krB|%| ||| f kr<t	.|d dkr<|/ dddgkr6|dkr6d}&nd}&nd}&nB|%| ||| f krt	.|d dkr|dkrzdnd}&nd}&| j)&d | j)'|& | j)| | j j0rt1|rt	2|t1|df}'dd |D |'d d |f< t	j3|'|'|'gdd}(||d  |(d d d|d f< ||d  |(d d d|d f< | j45|( |d })| j46|)d  | j47|)d  | j48|)d  | j49  | j4| | : }*||* r|	|* n|	|*  }+|d },|,d  |+ }-|,d! |+ }.|,d }/||* }0|0|- }1|0|. }2d"}3||	 }4|D ]}5|; }!|5< |!|< |1|!|*< tj|!| j jf \}6}7}8|2|!|*< tj|!| j jf \}9}:};|5= |3 |4 }|0|!|*< t|!|||}!tj|!| j jf \}<}=}>t>|5|6|9f|7|:f|<|=f |5j?7|/|5j@  |5| q|Ad d| _Bd S )#NZaxis3dr   r1   r3   r   r	   r.   r   g      R@0   g      5@TFrM   rH   rI   rJ   rG   r2   )r	   r.   leftrightrF   c                 S   s   g | ]}|  qS r   )get_loc)r   r   r   r   r   r     s     zAxis.draw.<locals>.<listcomp>)r   rS   rN   rO   rQ   r   rL   rK   g       @)Cr?   rv   rM   rw   r   r   Z_update_ticksr_   r   r   r   r   r   Zproj_trans_pointsr   r   rp   r(   r   Z	transAxes	transformfigureZdpi_scale_transinvertedZbboxsizer   Zlabelpadr   Zproj_transformr#   r   get_textr
   Z_norm_text_angleZrad2degZarctan2Zset_rotationZset_vaZset_haZset_rotation_moderu   Zset_textmajor	formatterZ
get_offsetZcount_nonzerotolistZ
_draw_gridr   Ztilestackrt   Zset_segmentsZ	set_colorZset_linewidthr'   Zdo_3d_projectionr   r^   r   Zget_padr   r%   Z_majorr   r   )?r;   r   r|   r   r   r3   r   r   r   r   r   r   r   r   Zedgep1Zedgep2ZpepZdxZdyZlxyzZreltoinchesZ	ax_inchesZax_points_estimateZdeltas_per_pointZdefault_offsetZlabeldeltasr   ZtlxZtlyZtlzZangleZ
outeredgepZ
outerindexposZolxZolyZolzZcentptZalignZxyz0r   Zgridinfor2   Z	tickdeltaZ	tick_infoZtick_outZtick_inZtick_lwZedgep1_tickdirZout_tickdirZ
in_tickdirZdefault_label_offsetZpointsr   x1y1Zz1Zx2y2Zz2ZlxZlyZlzr   r   r   r   \  s    




z	Axis.drawF)for_layout_onlyc             	   C   s.  |   sd S |  }|  }| t|| t|}|  \}}||krV|| }}|  ||g}g }	|D ]F}
z|  |
	 }W n t
k
r   Y qpX t||rp|	|
 qp|	}| ||\}}g }| j  r|| j| | j  r|s| j r|| j| tj|||S r8   )Zget_visibleZget_majorticklocsZget_minorticklocsr   r   ry   get_view_intervalZget_transformr   r   AssertionErrormtransformsZ_interval_contains_closeappendZ_get_ticklabel_bboxesrp   Zget_window_extentrM   r   ZBboxunion)r;   r   r   Z
major_locsZ
minor_locsr|   Zview_lowZ	view_highZ
interval_tZticks_to_drawr   Zloc_tZbb_1Zbb_2otherr   r   r   get_tightbbox  s:    

zAxis.get_tightbboxget_data_interval)r   rE   c                 C   s   |   S r8   )r   rk   r   r   r   rl   D  rm   c                 C   s
   | j | S r8   )rc   r;   r   r   r   r   rl   E  rm   r   c                 C   s   |   S r8   )r   rk   r   r   r   rl   H  rm   c                 C   s
   | j | S r8   )rd   r   r   r   r   rl   I  rm   )N)N)N)N)$r[   
__module____qualname____doc__r   r]   rB   rC   rX   rU   rV   __signature__r   
deprecatedpropertyr<   rf   rx   ry   r   r   r   rs   re   r   r   r   r   r   r   Zallow_rasterizationr   r   Z
d_intervalZ
v_interval__classcell__r   r   ri   r   r*   5   sf   


P



)
 8.    r*   c                   @   s4   e Zd ZdZeddd\ZZeddd\ZZ	dS )XAxisr4   view
xy_viewLim	intervalxdata
xy_dataLimN
r[   r   r   rY   maxisZ_make_getset_intervalr   rd   r   rc   r   r   r   r   r   L  s       r   c                   @   s4   e Zd ZdZeddd\ZZeddd\ZZ	dS )YAxisr5   r   r   Z	intervalyr   r   Nr   r   r   r   r   r   T  s       r   c                   @   s4   e Zd ZdZeddd\ZZeddd\ZZ	dS )ZAxisr6   r   Z
zz_viewLimr   r   Z
zz_dataLimNr   r   r   r   r   r   \  s       r   )r   )r   )rU   Znumpyr   Z
matplotlibra   r   r   r   ro   r   r   r   rq   r   r   r   r   r!   r
   r   r   r   r   r   r   r   r*   r   r   r   r   r   r   <module>   s$   $
	
    