
    IR-e*,                     t    d dl Z 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lmZ d Z G d	 d
e          ZdS )    N)defaultdict)rcParams)Text   )RectangularFrame)AstropyDeprecationWarningc                 P    d t          t          ||                     D             S )Nc                     g | ]\  }}|S  r   ).0yxs      Hlib/python3.11/site-packages/astropy/visualization/wcsaxes/ticklabels.py
<listcomp>zsort_using.<locals>.<listcomp>   s    ...&1aA...    )sortedzip)XYs     r   
sort_usingr      s&    ..F3q!99--....r   c                        e Zd Z fdZd Z	 	 	 	 	 	 	 ddZd Zd Zd Zd Z	d	 Z
d
 Zd Z fdZ fdZ fdZ xZS )
TickLabelsc                    |                                   || _         t                      j        |i | |                     d           |                     d           |                     t          d                    d| _        d| _	        d|vr | 
                    t          d                    d|vr"|                     t          d                    d S d S )	NTallzxtick.major.padFcolorzxtick.colorsizezxtick.labelsize)clear_framesuper__init__set_clip_onset_visible_axesset_padr   _exclude_overlapping_stale	set_colorset_size)selfframeargskwargs	__class__s       r   r    zTickLabels.__init__   s    

$)&)))e$$$X/0111$)!  &  NN8M2333MM(#4566666  r   c                     t          t                    | _        t          t                    | _        t          t                    | _        t          t                    | _        t          t                    | _        d S N)r   listworlddataangletextdispr(   s    r   r   zTickLabels.clear(   sQ     &&
%%	 &&
%%	%%			r   Nc                    g d}|t          j        d| t                     |
|||||t          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.
        )axisr0   r2   r3   axis_displacementr1   NzSetting 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warnr   	TypeErrorr0   appendr1   r2   r3   r4   r%   )	r(   r7   r0   pixelr2   r3   r8   r1   required_argss	            r   addzTickLabels.add/   s   < XWWMN ?LN N *   L}}| (|SMSS   	
4&&&	$t$$$
4&&&	$t$$$	$0111r   c                    | j         D ]}t          | j         |         | j        |                   | j         |<   t          | j        |         | j        |                   | j        |<   t          | j        |         | j        |                   | j        |<   t          | j        |         | j        |                   | j        |<   t          | j        |         | j        |                   | j        |<   d| _        dS )zw
        Sort by axis displacement, which allows us to figure out which parts
        of labels to not repeat.
        TN)r0   r   r4   r1   r2   r3   r%   )r(   r7   s     r   sortzTickLabels.sortj   s    
 J 	K 	KD)$*T*:DIdOLLDJt(4$)D/JJDIdO)$*T*:DIdOLLDJt(4$)D/JJDIdO(4$)D/JJDIdOOr   c                 Z   |                                   | j        D ]}| j        |         d         }t          dt	          | j        |                             D ]F}| j        |         |         }t	          |          t	          |          k    r| j        |         |         }Jd}t          t	          |          dz
            D ]%}||         ||         k    r n||         dvr|dz   }&| j        |         |         }|dk    ru| j        |         |                             d          }| j        |         |         |d         | j        |         |<   |r$d| j        |         |         z   | j        |         |<   | j        |         |         dk    rd| j        |         |<   Hd| _        dS )	zV
        Figure out which parts of labels can be dropped to avoid repetition.
        r   r   z-0123456789.$Nz$$ T)rA   r0   r3   rangelen
startswithr%   )r(   r7   t1it2startjstarts_dollars           r   simplify_labelszTickLabels.simplify_labelsw   s    			J 	, 	,D4#B1c$*T"23344 , ,Yt_Q'r77c"gg%%4+B
 s2ww{++ & &A!u1~~!uN22 !AYt_Q'A::$(IdOA$6$A$A#$F$FM)-4);EFF)CDIdOA&$ F-049T?13E-E	$*9T?1%--)+DIdOA&/,2 r   c                 "    || _         d| _        d S NT)_padr%   )r(   values     r   r#   zTickLabels.set_pad   s    	r   c                     | j         S r.   )rQ   r5   s    r   get_padzTickLabels.get_pad   s
    yr   c                 "    || _         d| _        d S rP   )_visible_axesr%   )r(   visible_axess     r   r"   zTickLabels.set_visible_axes   s    )r   c                 r      j         dk    r j                                        S  fd j         D             S )Nr   c                 &    g | ]}|j         v |S r   )r0   )r   r   r(   s     r   r   z/TickLabels.get_visible_axes.<locals>.<listcomp>   s     EEE!Q$*__A___r   )rV   r0   keysr5   s   `r   get_visible_axeszTickLabels.get_visible_axes   s@    &&:??$$$EEEEt1EEEEr   c                     || _         d S r.   )r$   )r(   exclude_overlappings     r   set_exclude_overlappingz"TickLabels.set_exclude_overlapping   s    $7!!!r   c                    | j         sdS |                                  |                    |                                           }|                                 }d |D             | _        d |D             | _        d |D             | _        |D ]u}t          t          | j
        |                             D ]I}| j        |         |         dk    r| j        j        j                            | j        |         |                   \  }}|                    |                                 |z             }	t%          | j        t&                    rt)          j        | j        |         |                   dk     rd}
d}|	 }| d	z  }nzt)          j        | j        |         |         d
z
            dk     rd}
d}d}| |	z
  }nAt)          j        | j        |         |         dz
            dk     rd}
d}|	}| d	z  }nd}
d}d}|	}||z   }||z   }n|                     | j        |         |                    |                     ||f           t3                                          |          }|j        }|j        }t)          j        t)          j        | j        |         |                             }t)          j        t)          j        | j        |         |                             }t)          j        | j        |         |                   dk     r|}||z  }nqt)          j        | j        |         |         d
z
            dk     r||z  }|}n=t)          j        | j        |         |         dz
            dk     r	| }||z  }n||z  }| }|d	z  }|d	z  }t)          j         ||          }||z  }||z  }|||	z  z  }|||	z  z  }||z
  }||z
  }d}
d}||f| j        |         |<   |
| j        |         |<   || j        |         |<   Kwd| _         dS )zq
        Compute and set the x, y positions and the horizontal/vertical alignment of
        each label.
        Nc                     i | ]}|i S r   r   r   r7   s     r   
<dictcomp>z1TickLabels._set_xy_alignments.<locals>.<dictcomp>       5554555r   c                     i | ]}|i S r   r   ra   s     r   rb   z1TickLabels._set_xy_alignments.<locals>.<dictcomp>   rc   r   c                     i | ]}|i S r   r   ra   s     r   rb   z1TickLabels._set_xy_alignments.<locals>.<dictcomp>   rc   r   rD   g     F@rightbottomg      ?g     V@-   centerr   g     f@leftF)!r%   rN   points_to_pixelsget_sizer[   xyhavarE   rF   r0   r3   r   parent_axes	transData	transformr1   rT   
isinstancer   npabsr2   set_textset_positionr   get_window_extentwidthheightcosradianssinhypot)r(   renderertick_out_size	text_sizerW   r7   rI   r   r   padrn   ro   dxdybbry   rz   axaydistddxddyr,   s                         r   _set_xy_alignmentszTickLabels._set_xy_alignments   sJ   
 { 	F--dmmoo>>	,,..555555555555555  ]	& ]	&D3tz$/0011 \& \& 9T?1%++{.8BB49T?STCUVV1//0NOOdk+;<< N" vdj.q122T99$%!T'Z#-
4 0 3d :;;b@@%%'Z#-
4 0 3e ;<<rAA#% 'Z#-%% BABAA MM$)D/!"4555%%q!f---228<<B
 HEYF 
4:d+;A+> ? ?@@B
4:d+;A+> ? ?@@B vdj.q122T99"&[
4 0 3d :;;b@@%Z#
4 0 3e ;<<rAA#V&[%Z$W#IB#IB
 8B++Dt)Ct)C#)OB#)OBBABA!B!B$%q6a #%a #%a  y\&| r   c                    | 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.
        rD   N)
r3   rv   rw   rm   set_harn   set_varo   r   rx   )r(   r7   rI   r   r,   s       r   _get_bbzTickLabels._get_bb  s    
 9T?1##Fdioa()))$'$-*+++DGDM!$%%%DGDM!$%%%ww((222r   c                    |                                  sd S |                     ||           |                                 D ]}t          t	          | j        |                             D ]}|                     |||          }|| j        r|                    |          dk    rQt                      
                    |           |                    |           ||                             |           d S )Nr   )get_visibler   r[   rE   rF   r0   r   r$   count_overlapsr   drawr<   )	r(   r   bboxesticklabels_bboxr   r7   rI   r   r,   s	           r   r   zTickLabels.draw,  s   !! 	F-888))++ 	5 	5D3tz$/0011 5 5\\$844: 0 5B4E4Ef4M4MQR4R4RGGLL***MM"%%%#D)004445	5 	5r   )NNNNNNN)__name__
__module____qualname__r    r   r?   rA   rN   r#   rT   r"   r[   r^   r   r   r   __classcell__)r,   s   @r   r   r      s1       7 7 7 7 7*& & & 9 9 9 9v       D      F F F8 8 8o o o o ob3 3 3 3 35 5 5 5 5 5 5 5 5r   r   )r9   collectionsr   numpyrt   
matplotlibr   matplotlib.textr   r)   r   astropy.utils.exceptionsr   r   r   r   r   r   <module>r      s     # # # # # #                       # # # # # # > > > > > >/ / /n5 n5 n5 n5 n5 n5 n5 n5 n5 n5r   