o
    i0s                     @   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 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TTTc                 C   s&   t | } | |t d| |  |  S )zg
    For each coordinate where *axmask* is True, move *coord* away from
    *centers* by *deltas*.
    r	   )npasarraycopysign)Zcoordcentersdeltasaxmask r   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/mpl_toolkits/mplot3d/axis3d.py_move_from_center   s   
r   c                 C   sl   | j | | j| | jd | jd | jd | jd | j|| | j	dgdg dS )z.Update tick line and label position and style.TF- r   N)
label1set_positionlabel2	tick1lineZset_visible	tick2lineset_linestyleZ
set_markerset_datagridline)tickZtickxsZtickysZlabelposr   r   r   _tick_update_position   s   r!   c                       s  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dQ fdd	ZdQ fdd	Zd d! Zd"d# Zd$d% Zd&d' ZdQd(d)Zd*d+ Zd,d- Zd.d/ ZdQd0d1ZdQd2d3Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$e%j&dBdC Z'e%j&dDdE Z(dQdFdGdHdIZ)ejddJddKedLd dMd Z*ejddNddKedOd dPd Z+  Z,S )RAxiszAn Axis class for the 3D plots.))r            )r	            )r   r	   r(   r%   )r#   r&   r'   r$   )r   r	   r&   r#   )r%   r(   r'   r$   r   r	   )r	   r   r&   )itickdirjuggled)r   r	   r&   r&   )r   r&   r	   )xyzN)rotate_labelc                O      t  S Nlocals)selfadirv_intervalxd_intervalxaxesr/   argskwargsr   r   r   	_old_init6   s   zAxis._old_initc                K   r0   r1   r2   )r4   r8   r/   r:   r   r   r   	_new_init:   s   zAxis._new_initc                    s$  t j| j| jgg|R i |}d|v r;t jddtt| j dd |d | j	kr;t
dt| j d|d |d }|d	 }|d
d}|d }| j	}d| _d| _| 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 nD| jtjd$ tjd% dtjd& tjd' tjd( dd | jd  d!|d)v rtjd* ntjd+ |d)v rtjd, ntjd- d#i t j|g|R i | d.|v r| j|d.   d/|v r| j|d/   | | |   d S )0Nr5   3.6zUThe signature of 3D Axis constructors has changed in %(since)s; the new signature is T)messagependingzCannot instantiate z with adir=r8   r/   r9   r   r:   default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	   )	linewidthrI   )?rK   rK   r	   g      ?r   )rI   rJ   	linestyle)axislinegridr    rJ   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.widthr7   r6   )r   Zselect_matching_signaturer;   r<   warn_deprecatedinspect	signaturetype__init__	axis_name
ValueError__name__get_label_position_tick_position_AXINFOcopy_axinfoupdatemplZrcParamssuperset_data_intervalset_view_intervalset_rotate_label_init3d)r4   r9   r:   paramsr8   r/   name	__class__r   r   rT   =   s   






zAxis.__init__r=   T)r?   c                 C      | j S r1   )rU   r4   r   r   r   <lambda>   s    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   rM   rJ   rI   T)ZxdataZydatarJ   rI   Zantialiasedr   r	   F)closed)mlinesZLine2Dr]   linempatchesZPolygonpaneset_pane_colorr8   Z_set_artist_propsr
   ZLine3DCollection	gridlinesrH   
offsetText	transData
_transformrj   r   r   r   rd      s    zAxis._init3dc                 C   s   |    d S r1   )rd   rj   r   r   r   init3d   s   zAxis.init3dc                    F   t  |}|D ]}|j|j|j|j|jfD ]	}|| jj	 qq|S r1   )
r`   get_major_ticksr   r   r   r   r   set_transformr8   rt   r4   Znumtickstickstobjrg   r   r   rx         zAxis.get_major_ticksc                    rw   r1   )
r`   get_minor_ticksr   r   r   r   r   ry   r8   rt   rz   rg   r   r   r      r~   zAxis.get_minor_ticksc                 C   @   |dv rt jdd|ddd dS t jg d|d	 || _dS )
z
        Set the ticks position.

        Parameters
        ----------
        position : {'lower', 'upper', 'both', 'default', 'none'}
            The position of the bolded axis lines, ticks, and tick labels.
        topbottom3.8	position=argument value'upper' or 'lower'rf   obj_typealternativeNlowerupperbothr@   noneposition)r   rP   check_in_listrZ   r4   r   r   r   r   set_ticks_position      	

zAxis.set_ticks_positionc                 C   ri   )z
        Get the ticks position.

        Returns
        -------
        str : {'lower', 'upper', 'both', 'default', 'none'}
            The position of the bolded axis lines, ticks, and tick labels.
        )rZ   rj   r   r   r   get_ticks_position      	zAxis.get_ticks_positionc                 C   r   )
z
        Set the label position.

        Parameters
        ----------
        position : {'lower', 'upper', 'both', 'default', 'none'}
            The position of the axis label.
        r   r   r   r   r   r   Nr   r   )r   rP   r   rY   r   r   r   r   set_label_position   r   zAxis.set_label_positionc                 C   ri   )z
        Get the label position.

        Returns
        -------
        str : {'lower', 'upper', 'both', 'default', 'none'}
            The position of the axis label.
        )rY   rj   r   r   r   get_label_position   r   zAxis.get_label_positionc                 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*.
        rI   TN)mcolorsZto_rgbar]   rp   Zset_edgecolorZset_facecolorZ	set_alphastale)r4   rI   alphar   r   r   rq      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   )r4   valr   r   r   rc   	  s   
zAxis.set_rotate_labelc                 C   s   | j d ur| j S t|dkS )Nr%   )r   len)r4   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 ]$}
t || jd|
  df ||
< t || jd|
 d  df |	|
< qW||	k }t ||	 t tjk}t |dkrt | d d }|dkrt dd|d g}n|dkrt d|d d	g}n|dkrt |d d	d	g}||||||fS )
N      ?   g      ?r   r	   r&   r#   TF)r   arrayr8   Z
get_xboundZ
get_yboundZ
get_zboundTZ_tunit_cubeMZzerosrangemean_PLANESabsZfinfofloatZepssumwhere)r4   rendererminsmaxsr   r   ZboundsZbounds_projZmeans_z0Zmeans_z1r)   highsequalsverticalr   r   r   _get_coord_info  s:   (

 &zAxis._get_coord_infoc           
      C   s  ||g}|ddd }|||g|||g|||gg}|| j j | jd  }| jd }|d  }|dkrC|d |d  |d |d  k sW|dkrd|d |d  |d |d  krd|d |d  ||d < n|d |d  ||d < | }	|d |d  |	|d < ||	fS )	z3Get the edge points for the black bolded axis line.Nr   r)   r+   r   r   r	   r   )r8   _vertical_axisr]   r\   )
r4   minmaxmaxminr   mbZmb_revmmr+   Zedge_point_0Zedge_point_1r   r   r   _get_axis_line_edge_points?  s   
((zAxis._get_axis_line_edge_pointsc                 C   s   g }g }g }|dv r|  ||\}}|g}|g}dg}n:| j ||dd\}	}
| j ||dd\}}|dv rC||	 ||
 |d |dv rV|| || |d |||fS )N)Nr@   r@   r   r   r   )r   r   )r   r   )r   append)r4   r   r   Zaxis_positionZedgep1sZedgep2sr   edgep1edgep2Zedgep1_lZedgep2_lZedgep1_uZedgep2_ur   r   r   _get_all_axis_line_edge_pointsW  s.   








z#Axis._get_all_axis_line_edge_pointsc           
      C   s   t jd|d dd | j D }t| jjd dd }t| jjd}|dkrG|dkr2g d	}ng d
}d|  kr@dk rFn n&d|d< n!|dkrh|dkrTg d}ng d}d|  krbdk rhn nd|d< dd | j D }| j	d }| jj
}|d }t|| t|| | }	|	S )aS  
        Get the direction of the tick.

        Parameters
        ----------
        position : str, optional : {'upper', 'lower', 'default'}
            The position of the axis.

        Returns
        -------
        tickdir : int
            Index which indicates which coordinate the tick line will
            align with.
        )r   r   r@   r   c                 S      g | ]}|d  qS )r*   r   .0vr   r   r   
<listcomp>      z%Axis._get_tickdir.<locals>.<listcomp>   ih  r   r   )r&   r&   r   )r	   r   r   r	   r&   r   )r	   r   r	   )r&   r&   r	   c                 S   r   )r)   r   r   r   r   r   r     r   r)   )r   r   r[   valuesr   modr8   ZelevZazimr]   r   Zroll)
r4   r   Ztickdirs_baseZelev_modZazim_modZinfo_ir)   Zvert_axjr*   r   r   r   _get_tickdirp  s.   


zAxis._get_tickdirc                    s~   |  |\}}}} }| j}|d }|| s"|| }	| jd|  }
n|| }	| jd| d  }
t fdd|
D }||	fS )Nr)   r&   r	   c                    s   g | ]} | qS r   r   )r   ptcr   r   r     r   z$Axis.active_pane.<locals>.<listcomp>)r   r]   r   r   r   )r4   r   r   r   r   r   r   infoindexlocZplanexysr   r   r   active_pane  s   zAxis.active_panec                 C   sR   |j d|  d | |\}}|ddddf | j_| j| |d dS )z
        Draw pane.

        Parameters
        ----------
        renderer : `~matplotlib.backend_bases.RendererBase` subclass
        Zpane3dgidNr&   )
open_groupget_gidr   rp   Zxydrawclose_group)r4   r   r   r   r   r   r   	draw_pane  s
   zAxis.draw_panec                 C   s   g d}d|| j d < |S )Nr   Fr)   )r]   )r4   r   r   r   r   _axmask  s   zAxis._axmaskc           !      C   sr  |   }| j}	|	d }
| |}|| r|| n||  }|	d }|d | }|d | }|d }|| }|| }|| }d}|| }|D ]q}| }| ||
< |||< tjg || jjR  \}}}|||< tjg || jjR  \}}}|	 | | }|||< t
||||  }tjg || jjR  \}}} t|||f||f||f |j||j  || qEd S )Nr)   r    rG   rF   rJ   g       @)_update_ticksr]   r   r\   get_locr   proj_transformr8   r   Zget_padr   r   r!   r   set_linewidthZ_majorr   )!r4   r   r   r   r   r   deltas_per_pointposr{   r   r   r*   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z2labeldeltaslxZlyZlzr   r   r   _draw_ticks  s:   
zAxis._draw_ticksc
                 C   s  | j }
|
d }|
d }|
d }|d dkr|}d}n|}d}t||||  }tjg || jjR  \}}}| j| j	j
  | j||f ttt|	|}| j| | jd tjg || jjR  }|| |||f kr|| |||f krt|d dkr| g dkr|d	v rd
}n$d}n!d
}n|| |||f krt|d dkr|dkrdnd
}nd}| jd | j| | j| d S )Nr)   r+   r*   r&   r   r	   rB   )FTT)r	   r&   leftrightrA   )r]   r   r   r   r   r8   r   rs   Zset_textmajor	formatterZ
get_offsetr   r
   _norm_text_angler   rad2degarctan2set_rotationset_rotation_modeZcount_nonzerotolistset_vaset_har   )r4   r   r   r   r   r   r   pepdxdyr   r   r+   r*   Z
outeredgepZ
outerindexr   ZolxZolyZolzangleZcentptalignr   r   r   _draw_offset_text  sB   zAxis._draw_offset_textc                 C   s   | j d }d||  }	t|	|||  }	tjg |	| jjR  \}
}}| j|
|f | 	| j
 rEttt||}| j| | j|d  | j|d  | j|d  | j| d S )NrH   r   rC   rD   rE   )r]   r   r   r   r   r8   r   rH   r   r   get_textr
   r   r   r   r   r   r   r   r   r   )r4   r   r   r   r   r   r   r   rH   ZlxyzZtlxZtlyZtlzr   r   r   r   _draw_labels+  s   
zAxis._draw_labelsc                 C   s  | j j| j_| j j| j_|jd|  d | |\}}}}}}| jj	
 }|| j jj}	td|	 }
d|
 }d}| j| | | }t|||}t| ||}t| ||| j D ]]\}}}t||g| j j}t|}| j j|dddf g| j j|dddf g d \}}| j|d |d  | j| | ||||||| | |||||||||	 q\t| ||| j D ]?\}}}t||g| j j}t|}| j j|dddf g| j j|dddf g d \}}|  ||||||| q|!d d	| _"d S )
NZaxis3dr   g      R@0   g      5@r   r&   r	   F)#r8   rt   rH   ru   rs   r   r   r   ZfigureZdpi_scale_transinverted	transformZbboxsizer   Zlabelpadr   r   zipr   rZ   r   Z_proj_trans_pointsr   r   Z	transAxesrn   r   r   r   r   rY   r   r   r   )r4   r   r   r   r   r   r   r   ZreltoinchesZ	ax_inchesZax_points_estimater   Zdefault_offsetr   r   r   r   r   r   r   r   r   r   r   r   r   ;  sV   
	



z	Axis.drawc                 C   sV  | j jsd S |jd|  d |  }t|r| j}|d }| |\}}}}}}t	|||}	t	| ||}
t
|	t|df}dd |D |d d |f< tj|||gdd}|
|d  |d d d	|d f< |
|d  |d d d|d f< | j| |d
 }| j|d  | j|d  | j|d  | j  | j| |d d S )NZgrid3dr   r)   r	   c                 S   s   g | ]}|  qS r   )r   )r   r    r   r   r   r     r   z"Axis.draw_grid.<locals>.<listcomp>)r   r&   r   rN   rI   rJ   rL   )r8   Z
_draw_gridr   r   r   r   r]   r   r   r   Ztilestackrr   Zset_segmentsZ	set_colorr   r   Zdo_3d_projectionr   r   )r4   r   r{   r   r   r   r   _r   r   r   Zxyz0r   Zgridinfor   r   r   	draw_grid{  s.   
zAxis.draw_gridF)for_layout_onlyc             	   C   s0  |   sd S |  }|  }g | t|| t|}|  \}}||kr-||}}|  ||g}g }	|D ]"}
z|  |
	 }W n	 t
yP   Y q:w t||r\|	|
 q:|	}| ||\}}g }| j  rw|| j| | j  r|s| j r|| j| tjg |||S r1   )Zget_visibleZget_majorticklocsZget_minorticklocsr   r   rx   get_view_intervalZget_transformr   r   AssertionErrormtransformsZ_interval_contains_closer   Z_get_ticklabel_bboxesrn   Zget_window_extentrH   r   ZBboxunion)r4   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   r?   c                 C      |   S r1   )r
  rj   r   r   r   rk         c                 C   
   | j | S r1   )ra   r4   r   r   r   r   rk        
 r  c                 C   r  r1   )r  rj   r   r   r   rk     r  c                 C   r  r1   )rb   r  r   r   r   rk     r  r1   )-rW   
__module____qualname____doc__r   r[   r;   r<   rT   rQ   rR   __signature__r   
deprecatedpropertyr5   rd   rv   rx   r   r   r   r   r   rq   rc   r   r   r   r   r   r   r   r   r   r   r   r   Zallow_rasterizationr   r  r	  Z
d_intervalZ
v_interval__classcell__r   r   rg   r   r"   &   sp    


S



(
,(G
?
(.r"   c                   @   4   e Zd ZdZeddd\ZZeddd\ZZ	dS )XAxisr,   view
xy_viewLim	intervalxdata
xy_dataLimN
rW   r  r  rU   maxisZ_make_getset_intervalr  rb   r
  ra   r   r   r   r   r        r  c                   @   r  )YAxisr-   r  r  Z	intervalyr  r  Nr  r   r   r   r   r!    r   r!  c                   @   r  )ZAxisr.   r  Z
zz_viewLimr  r  Z
zz_dataLimNr  r   r   r   r   r"    r   r"  )r   )rQ   numpyr   Z
matplotlibr_   r   r   r   rm   r   r  r   ro   r   r  r   r   r   r
   r   r   r!   r  r"   r!  r"  r   r   r   r   <module>   s    $
	     ;