U
    e»{jÛ+  ã                   @   sT   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„ Z
G d	d
„ d
eƒZdS )é    )ÚdefaultdictN)ÚrcParams)ÚTexté   )ÚRectangularFramec                 C   s   dd„ t t|| ƒƒD ƒS )Nc                 S   s   g | ]\}}|‘qS © r   )Ú.0ÚyÚxr   r   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/visualization/wcsaxes/ticklabels.pyÚ
<listcomp>   s     zsort_using.<locals>.<listcomp>)ÚsortedÚzip)ÚXÚYr   r   r   Ú
sort_using   s    r   c                       sŠ   e Zd Z‡ fdd„Zdd„ Zddd„Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )Ú
TickLabelsc                    sz   |   ¡  || _tƒ j||Ž |  d¡ |  d¡ |  td ¡ d| _d| _	d|kr`|  
td ¡ d|krv|  td ¡ d S )	NTÚallzxtick.major.padFÚcolorzxtick.colorÚsizezxtick.labelsize)ÚclearÚ_frameÚsuperÚ__init__Zset_clip_onÚset_visible_axesÚset_padr   Ú_exclude_overlappingÚ_staleZ	set_colorZset_size)ÚselfÚframeÚargsÚkwargs©Ú	__class__r   r   r      s    

zTickLabels.__init__c                 C   s6   t tƒ| _t tƒ| _t tƒ| _t tƒ| _t tƒ| _d S ©N)r   ÚlistÚworldÚdataÚangleÚtextÚdisp©r   r   r   r   r   &   s
    



zTickLabels.clearNc           	      C   sÂ   ddddddg}|dk	r*t  d|› �t¡ |dksZ|dksZ|dksZ|dksZ|dksZ|dkrhtd	|› �ƒ‚| j|  |¡ | j|  |¡ | j|  |¡ | j|  |¡ | j	|  |¡ d
| _
dS )a  
        Add a label.

        Parameters
        ----------
        axis : str
            Axis to add label to.
        world : Quantity
            Coordinate value along this axis.
        pixel : [float, float]
            Pixel coordinates of the label. Deprecated and no longer used.
        angle : float
            Angle of the label.
        text : str
            Label text.
        axis_displacement : float
            Displacement from axis.
        data : [float, float]
            Data coordinates of the label.
        Úaxisr&   r(   r)   Úaxis_displacementr'   NzäSetting the pixel coordinates of a label does nothing and is deprecated, as these can only be accurately calculated when Matplotlib is drawing a figure. To prevent this warning pass the following arguments as keyword arguments: z1All of the following arguments must be provided: T)ÚwarningsÚwarnZAstropyDeprecationWarningÚ	TypeErrorr&   Úappendr'   r(   r)   r*   r   )	r   r,   r&   Zpixelr(   r)   r-   r'   Zrequired_argsr   r   r   Úadd-   s6    ûÿþýüûúÿzTickLabels.addc                 C   s¢   | j D ]�}t| j | | j| ƒ| j |< t| j| | j| ƒ| j|< t| j| | j| ƒ| j|< t| j| | j| ƒ| j|< t| j| | j| ƒ| j|< qd| _dS )zw
        Sort by axis displacement, which allows us to figure out which parts
        of labels to not repeat.
        TN)r&   r   r*   r'   r(   r)   r   )r   r,   r   r   r   Úsorth   s    
zTickLabels.sortc                 C   sH  |   ¡  | jD �],}| j| d }tdt| j| ƒƒD �]}| j| | }t|ƒt|ƒkrj| j| | }q6d}tt|ƒd ƒD ],}|| || kr– q¬|| dkr~|d }q~| j| | }|dk�r| j| |  d¡}| j| | |d… | j| |< |�rd| j| |  | j| |< | j| | dkr6d| j| |< q6qd| _dS )	zV
        Figure out which parts of labels can be dropped to avoid repetition.
        r   r   z-0123456789.ú$Nz$$Ú T)r3   r&   r)   ÚrangeÚlenÚ
startswithr   )r   r,   Út1ÚiÚt2ÚstartÚjZstarts_dollarr   r   r   Úsimplify_labelsu   s.    

 zTickLabels.simplify_labelsc                 C   s   || _ d| _d S ©NT)Ú_padr   )r   Úvaluer   r   r   r   —   s    zTickLabels.set_padc                 C   s   | j S r$   )r@   r+   r   r   r   Úget_pad›   s    zTickLabels.get_padc                 C   s   || _ d| _d S r?   )Ú_visible_axesr   )r   Úvisible_axesr   r   r   r   ž   s    zTickLabels.set_visible_axesc                    s,   ˆ j dkrˆ j ¡ S ‡ fdd„ˆ j D ƒS d S )Nr   c                    s   g | ]}|ˆ j kr|‘qS r   )r&   )r   r
   r+   r   r   r   ¦   s     
 z/TickLabels.get_visible_axes.<locals>.<listcomp>)rC   r&   Úkeysr+   r   r+   r   Úget_visible_axes¢   s    

zTickLabels.get_visible_axesc                 C   s
   || _ d S r$   )r   )r   Zexclude_overlappingr   r   r   Úset_exclude_overlapping¨   s    z"TickLabels.set_exclude_overlappingc                    s$  | j s
dS |  ¡  | |  ¡ ¡}|  ¡ }dd„ |D ƒ| _dd„ |D ƒ| _dd„ |D ƒ| _|D �]º}tt	| j
| ƒƒD �] }| j| | dkrŽqt| jjj | j| | ¡\}}| |  ¡ | ¡}	t| jtƒ�rŽt | j| | ¡dk rþd}
d	}|	 }| d
 }n|t | j| | d ¡dk �r4d}
d	}d}| |	 }nFt | j| | d ¡dk �rjd}
d	}|	}| d
 }nd}
d	}d}|	}|| }|| }�nZ|  | j| | ¡ |  ||f¡ tƒ  |¡}|j}|j}t t | j| | ¡¡}t t | j| | ¡¡}t | j| | ¡dk �r$|}|| }nht | j| | d ¡dk �rP|| }|}n<t | j| | d ¡dk �r~| }|| }n|| }| }|d
9 }|d
9 }t  ||¡}|| }|| }|||	 7 }|||	 7 }|| }|| }d}
d}||f| j| |< |
| j| |< || j| |< qtq\d| _ dS )zq
        Compute and set the x, y positions and the horizontal/vertical alignment of
        each label.
        Nc                 S   s   i | ]
}|i “qS r   r   ©r   r,   r   r   r   Ú
<dictcomp>·   s      z1TickLabels._set_xy_alignments.<locals>.<dictcomp>c                 S   s   i | ]
}|i “qS r   r   rH   r   r   r   rI   ¸   s      c                 S   s   i | ]
}|i “qS r   r   rH   r   r   r   rI   ¹   s      r5   g     €F@ÚrightÚbottomg      à?g     €V@é-   Úcenterr   g     €f@ÚleftF)!r   r>   Zpoints_to_pixelsÚget_sizerF   ÚxyÚhaÚvar6   r7   r&   r)   r   Zparent_axesZ	transDataZ	transformr'   rB   Ú
isinstancer   ÚnpÚabsr(   Úset_textÚset_positionr   Úget_window_extentÚwidthÚheightÚcosÚradiansÚsinÚhypot)r   ÚrendererÚtick_out_sizeZ	text_sizerD   r,   r:   r
   r	   ÚpadrQ   rR   ZdxZdyÚbbrY   rZ   ZaxZayÚdistZddxZddyr"   r   r   Ú_set_xy_alignments«   sŠ    


zTickLabels._set_xy_alignmentsc                    sr   | j | | dkrdS |  | j | | ¡ |  | j| | ¡ |  | j| | ¡ |  | j| | ¡ tƒ  	|¡S )z‚
        Get the bounding box of an individual label. n.b. _set_xy_alignment()
        must be called before this method.
        r5   N)
r)   rV   rW   rP   Zset_harQ   Zset_varR   r   rX   )r   r,   r:   r_   r"   r   r   Ú_get_bb  s    zTickLabels._get_bbc                    s’   |   ¡ sd S |  ||¡ |  ¡ D ]l}tt| j| ƒƒD ]T}|  |||¡}|d krRq6| jrf| |¡dkr6t	ƒ  
|¡ | |¡ ||  |¡ q6q d S )Nr   )Zget_visiblerd   rF   r6   r7   r&   re   r   Zcount_overlapsr   Údrawr1   )r   r_   ZbboxesZticklabels_bboxr`   r,   r:   rb   r"   r   r   rf   *  s    
zTickLabels.draw)NNNNNNN)Ú__name__Ú
__module__Ú__qualname__r   r   r2   r3   r>   r   rB   r   rF   rG   rd   re   rf   Ú__classcell__r   r   r"   r   r      s(   	       ø
;"qr   )Úcollectionsr   ÚnumpyrT   Z
matplotlibr   Zmatplotlib.textr   r   r   r   r   r   r   r   r   Ú<module>   s   