B
    îq\¹  ã               @   sH   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 )
é    N)ÚrcParams)ÚTexté   )ÚRectangularFramec             C   s   dd„ t t|| ƒƒD ƒS )Nc             S   s   g | ]\}}|‘qS © r   )Ú.0ÚyÚxr   r   úGlib/python3.7/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                   sp   e Zd Z‡ fdd„Zdd„ Z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‡  ZS )Ú
TickLabelsc                st   |   ¡  || _tƒ j||Ž |  d¡ |  d¡ |  td ¡ d| _d|krZ|  	td ¡ d|krp|  
td ¡ d S )	NTÚallzxtick.major.padFZcolorzxtick.colorÚsizezxtick.labelsize)ÚclearÚ_frameÚsuperÚ__init__Zset_clip_onÚset_visible_axesÚset_padr   Ú_exclude_overlappingZ	set_colorZset_size)ÚselfÚframeÚargsÚkwargs)Ú	__class__r   r
   r      s    

zTickLabels.__init__c             C   s"   i | _ i | _i | _i | _i | _d S )N)ÚworldÚpixelÚangleÚtextÚdisp)r   r   r   r
   r   #   s
    zTickLabels.clearc             C   sœ   || j krH|g| j |< |g| j|< |g| j|< |g| j|< |g| j|< nP| j |  |¡ | j|  |¡ | j|  |¡ | j|  |¡ | j|  |¡ d S )N)r    r!   r"   r#   r$   Úappend)r   Úaxisr    r!   r"   r#   Zaxis_displacementr   r   r
   Úadd*   s    
zTickLabels.addc             C   s    xš| j D ]}t| j | | j| ƒ| j |< t| j| | j| ƒ| j|< t| j| | j| ƒ| j|< t| j| | j| ƒ| j|< t| j| | j| ƒ| j|< qW dS )zw
        Sort by axis displacement, which allows us to figure out which parts
        of labels to not repeat.
        N)r    r   r$   r!   r"   r#   )r   r&   r   r   r
   Úsort8   s    zTickLabels.sortc             C   s(  |   ¡  x| jD ]}| j| d }xøtdt| j| ƒƒD ]à}| j| | }t|ƒt|ƒkrn| j| | }q<d}x>tt|ƒd ƒD ]*}|| || kršP || dkr„|d }q„W | j| | }|dkr<| j| |  d¡}| j| | |d… | j| |< |r<d| j| |  | j| |< q<W qW dS )zV
        Figure out which parts of labels can be dropped to avoid repetition.
        r   r   z-0123456789.ú$N)r(   r    r#   ÚrangeÚlenÚ
startswith)r   r&   Zt1ÚiZt2ÚstartÚjZstarts_dollarr   r   r
   Úsimplify_labelsD   s(     zTickLabels.simplify_labelsc             C   s
   || _ d S )N)Ú_pad)r   Úvaluer   r   r
   r   a   s    zTickLabels.set_padc             C   s   | j S )N)r1   )r   r   r   r
   Úget_padd   s    zTickLabels.get_padc             C   s
   || _ d S )N)Ú_visible_axes)r   Zvisible_axesr   r   r
   r   g   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   n   s    z/TickLabels.get_visible_axes.<locals>.<listcomp>)r4   r    Úkeys)r   r   )r   r
   Úget_visible_axesj   s    

zTickLabels.get_visible_axesc             C   s
   || _ d S )N)r   )r   Zexclude_overlappingr   r   r
   Úset_exclude_overlappingp   s    z"TickLabels.set_exclude_overlappingc                s0  |   ¡ sd S |  ¡  | |  ¡ ¡}x|  ¡ D ]ø}xðtt| j| ƒƒD ]Ø}| j| | dkrdqJ|  	| j| | ¡ | j
| | \}}	| |  ¡ | ¡}
t| jtƒr†t | j| | ¡dk rÜd}d}|
 }| d }n|t | j| | d ¡dk rd}d}d	}| |
 }nFt | j| | d
 ¡dk rHd}d}|
}| d }nd}d}d	}|
}|  || |	| f¡ |  |¡ |  |¡ nX|  ||	f¡ tƒ  |¡}|j}|j}t t | j| | ¡¡}t t | j| | ¡¡}t | j| | ¡dk r|}|| }nht | j| | d ¡dk r4|| }|}n<t | j| | d
 ¡dk rb| }|| }n|| }| }|d9 }|d9 }t ||¡}|| }|| }|||
 7 }|||
 7 }|  || |	| f¡ |  d¡ |  d¡ tƒ  |¡}| jr | |¡d	krJtƒ  |¡ |  |¡ ||   |¡ qJW q.W d S )NÚ g     €F@ÚrightZbottomg      à?g     €V@é-   Úcenterr   g     €f@Úleft)!Zget_visibler0   Zpoints_to_pixelsZget_sizer6   r*   r+   r    r#   Zset_textr!   r3   Ú
isinstancer   r   ÚnpÚabsr"   Zset_positionZset_haZset_var   Zget_window_extentÚwidthÚheightZcosZradiansZsinZhypotr   Zcount_overlapsÚdrawr%   )r   ZrendererZbboxesZticklabels_bboxZtick_out_sizeZ	text_sizer&   r-   r	   r   ZpadZhaZvaZdxZdyZbbr@   rA   ZaxZayZdistZddxZddy)r   r   r
   rB   s   s„    





zTickLabels.draw)Ú__name__Ú
__module__Ú__qualname__r   r   r'   r(   r0   r   r3   r   r6   r7   rB   Ú__classcell__r   r   )r   r
   r      s   r   )
Znumpyr>   Z
matplotlibr   Zmatplotlib.textr   r   r   r   r   r   r   r   r
   Ú<module>   s
   