o
    i{I                     @   s   d dl Zd dlmZ d dl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)artistlinesaxispatchesrcParams   )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)coordcentersdeltasaxmask r   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/mpl_toolkits/mplot3d/axis3d.pymove_from_center   s   
r   c                 C   sh   | j | | j| | jd | jd | jd | jd | j|| | j	dd dS )z.Update tick line and label position and style.TF- r   N)
label1set_positionlabel2	tick1lineset_visible	tick2lineset_linestyle
set_markerset_datagridline)ticktickxstickys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dddZddddZdd Zd0ddZd0ddZ	dd Z
dd Zdd Zdd Zd d! Zd"d# Zejd$d% Zd&d'd(d)Zed*d+ Zejd,d+ Zed-d. Zejd/d. ZdS )1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*   )ffffff?r-   r-         ?)itickdirjuggledcolor)r   r   r*   )?r3   r3   r.   r*   )r   r*   r   )皙?r4   r4   r.   )xyzN)rotate_labelc             	   O   s
  || _ | j|  | _td r0| jdddddtd td ddd	d
dddddd n:| jddddd|dv rAtd ntd |dv rLtd ntd ddtd td dtd td td dd tjj| |g|R i | || _	|| _
| | d S )Nz_internal.classic_modecenter)vahag?g?zlines.linewidth)TF)inward_factoroutward_factor	linewidthg      ?)r   r   r   r   )r>   r2   )r3   r3   r3   r   g      ?r   )r2   r>   	linestyle)labelr!   axislinegridxzzxtick.major.widthzytick.major.widthzxtick.minor.widthzytick.minor.widthzaxes.linewidthzaxes.edgecolorz
grid.colorzgrid.linewidthzgrid.linestyle)adir_AXINFOcopy_axinfor   updatemaxisXAxis__init__
d_interval
v_intervalset_rotate_label)selfrD   v_intervalxd_intervalxaxesr8   argskwargsr   r   r   rK   6   sN   
zAxis.__init__c                 C   s   t jdd| jd d | jd d dd| _tjtddgddgddgddggd	d
d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   rA   r>   r2   T)xdataydatar>   r2   antialiasedr   r   Fg?k)closedalpha	facecolor	edgecolor)mlinesLine2DrG   linempatchesPolygonr   arraypaneset_pane_colorrR   _set_artist_propsr   Line3DCollection	gridlinesr@   
offsetText	transData
_transformrO   r   r   r   init3dq   s&    zAxis.init3dc                 C   H   t j| |}|D ]}|j|j|j|j|jfD ]	}|| j	j
 qq	|S N)rI   rJ   get_major_ticksr   r   r    r   r   set_transformrR   ri   rO   numtickstickstobjr   r   r   ro         zAxis.get_major_ticksc                 C   rm   rn   )rI   rJ   get_minor_ticksr   r   r    r   r   rp   rR   ri   rq   r   r   r   rw      rv   zAxis.get_minor_ticksc                 C   s0   t |}|d d d df }|| j_d| _d S )Nr*   T)r   r   rc   xystale)rO   xysr   r   r   set_pane_pos   s   

zAxis.set_pane_posc                 C   s<   || j d< | j| | j| | j|d  d| _dS )zSet pane color to a RGBA tuple.r2   TN)rG   rc   set_edgecolorset_facecolor	set_alphary   )rO   r2   r   r   r   rd      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_labelry   )rO   valr   r   r   rN      s   
zAxis.set_rotate_labelc                 C   s   | j d ur| j S t|dkS )Nr)   )r   len)rO   textr   r   r   get_rotate_label   s   
zAxis.get_rotate_labelc                    s   t | j | j | j gj\}}|| d }|| d }||d  }||d  }|d |d |d |d |d |d f}| j||jfdd| j	D  t  fd	dt
d
D }|||||fS )Ng       @g      (@g      @r   r   r*   c                    sD   g | ]\}}}} | d   | d    | d    | d   qS )r*   r   ).0p1p2p3p4tcr   r   
<listcomp>   s    
4z(Axis._get_coord_info.<locals>.<listcomp>c                    s(   g | ]} d |   d | d  k qS )r*   r   r   )r   r/   )avgzr   r   r      s   ( r'   )r   rb   rR   
get_xbound
get_ybound
get_zboundT
tunit_cubeM_PLANESrange)rO   rendererminsmaxsr   r   valshighsr   )r   r   r   _get_coord_info   s$   (
zAxis._get_coord_infoc                    s   |j d|  d | |\}}}} }| j}|d }|| s'| jd|  }	n	| jd| d  }	 fdd|	D }
| |
 | j| |d d S )Npane3dgidr/   r*   r   c                    s   g | ]} | qS r   r   )r   pr   r   r   r          z"Axis.draw_pane.<locals>.<listcomp>)	
open_groupget_gidr   rG   r   r{   rc   drawclose_group)rO   r   r   r   r   r   r   infoindexplanerz   r   r   r   	draw_pane   s   
zAxis.draw_panec           6      C   s  | j j| j_|jd|  d |  }| j}|d }| |\}}}}}	}
t	
|
||}t	
|
||}|d }| }||d  ||d < | }||d  ||d < t	t||g|j}tjg ||jR  }| j|d |d  | j| t	|t|df}dd |D |d d |f< | j j|dd	df g| j j|dd	df g d \}}d
||  }| j jj| jjj }t	|| j }td| }d| }d}| j| | | }g d}d||< t||||}tjg ||jR  \}}}| j ||f | !| j" r t#$t	%t	&||} | j'|  | j(|d d  | j)|d d  | j| |d	 d	krF|}!d}"n|}!d}"t|!|||}#tjg |#|jR  \}$}%}&| j*+| j,j-.  | j* |$|%f t#$t	%t	&||} | j*'|  | j*/d ||d  ||d |"f kr|| |||"f krt	0|
d	 dkr|
1 g dkr|dv rd}'n(d}'n%d}'n"|| |||"f krt	0|
d	 dkr|d	krd}'nd}'nd}'| j*(d | j*)|' | j*| | j j2rVt|rVt	j3|||gdd}(||d	  |(d d d|d	 f< ||d  |(d d d	|d f< | j45|( | j46|d d  | j47|d d  | j48|d d  | j4j|dd  |d })||) }*|
|) rfd}+nd!}+|D ]},| }#|,9 |#|< ||) |d" d# |+ |*  |#|)< tjg |#|jR  \}-}.}/||) |d" d$ |+ |*  |#|)< tjg |#|jR  \}0}1}2d%}|,: | | | }g d}d||< ||) |#|)< t|#|||}#tjg |#|jR  \}3}4}5t;|,|-|0f|.|1f|3|4f |,j<7|d" d |,j=  |,| qj|>d d| _?d S )&Naxis3dr   r/   r1   r   r   c                 S   s   g | ]}|  qS r   )get_loc)r   r!   r   r   r   r      r   zAxis.draw.<locals>.<listcomp>r*   r.   g      R@0   g      5@r
   Fr@   r:   r;   anchorr0   )FTT)r   r*   leftrightr9   )r   rB   r2   r>   r?   T)projectr|   r!   r=   r<   g       @)@rR   ri   r@   rj   r   r   _update_ticksrG   r   r   whererF   r   r	   proj_trans_pointsr   proj_transformr_   r   r   tiler   	transAxes	transformbboxsizefiguremultiplyget_size_inchessumlabelpadr   r   r   get_textr   _norm_text_anglerad2degarctan2set_rotationset_vaset_harh   set_textmajor	formatter
get_offsetset_rotation_modecount_nonzerotolist
_draw_gridstackrg   set_segments	set_colorset_linewidthr   r   get_padr%   r   _majorr   ry   )6rO   r   rs   r   r   r   r   r   r   r   r   minmaxmaxminr1   edgep1edgep2pepcentptxyz0dxdylxyzax_scale	ax_inchesax_points_estimatedeltas_per_pointdefault_offsetlabeldeltasr   tlxtlytlzangle
outeredgep
outerindexposolxolyolzalignr   r0   	tickdeltaticksignr!   x1y1z1x2y2z2lxlylzr   r   r   r      s   




z	Axis.drawF)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 rn   )get_visibleget_majorticklocsget_minorticklocsrw   r   ro   get_view_intervalget_transformr   r   AssertionErrormtransforms_interval_contains_closeappend_get_tick_bboxesr_   get_window_extentr@   r   Bboxunion)rO   r   r   
major_locs
minor_locsrs   view_low	view_high
interval_tticks_to_drawr!   loc_tbb_1bb_2otherr   r   r   get_tightbbox  s>   


zAxis.get_tightbboxc                 C      |   S rn   )get_data_intervalrk   r   r   r   rL        zAxis.d_intervalc                 C      | j |  d S rn   )set_data_intervalrO   r   r   r   r   rL        c                 C   r  rn   )r   rk   r   r   r   rM     r  zAxis.v_intervalc                 C   r  rn   )set_view_intervalr  r   r   r   rM     r  rn   )__name__
__module____qualname____doc__r   rE   rK   rl   ro   rw   r{   rd   rN   r   r   r   r   allow_rasterizationr   r  propertyrL   setterrM   r   r   r   r   r&   #   sH    
;


 <.


r&   c                   @   0   e Zd Zeddd\ZZeddd\ZZdS )rJ   view
xy_viewLim	intervalxdata
xy_dataLimN	r  r  r  rI   _make_getset_intervalr   r  r  r  r   r   r   r   rJ         rJ   c                   @   r!  )YAxisr"  r#  	intervalyr%  r&  Nr'  r   r   r   r   r*    r)  r*  c                   @   r!  )ZAxisr"  
zz_viewLimr$  r%  
zz_dataLimNr'  r   r   r   r   r,    r)  r,  )r
   )numpyr   matplotlib.transforms
transformsr   
matplotlibr   r   r]   r   rI   r   r`   r   r   r   r	   r   r%   rJ   r&   r*  r,  r   r   r   r   <module>   s   
	   6