B
    îq\ú  ã               @   sb   d dl Zd dlmZ d dlmZ dddddgZd	d„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )é    N)Úunits)ÚBaseCoordinateFrameÚselect_step_degreeÚselect_step_hourÚselect_step_scalarÚcoord_type_from_ctypeÚtransform_contour_set_inplacec          
   C   s   | dt j krdddddddd	d
dg
}ddddddddddg
}t jgt|ƒ }ddddddddg}ddddddddg}t |¡d }t jgt|ƒ }t |¡d }t jgt|ƒ }	t |||g¡}
|| | }|	| | }|
 |  	t j¡¡}|| }|| }|| S t
|  t j¡ƒt j S d S )Ng      ð?g      ø?é   é   é   é   é(   éF   éx   i  i  é   é   é   é
   é   é   é-   éZ   é´   ih  g      @g      @é   é   é   é   g      N@g      ¬@)ÚuÚarcsecZdegreeÚlenÚnpÚarrayÚarcminÚconcatenateÚsearchsortedÚtor   Úto_value)ÚdvZdegree_limits_Zdegree_steps_Zdegree_unitsÚminsec_limits_Úminsec_steps_Úminute_limits_Úminute_unitsÚsecond_limits_Úsecond_unitsZdegree_limitsZdegree_stepsÚnÚstepÚunit© r1   úBlib/python3.7/site-packages/astropy/visualization/wcsaxes/utils.pyr      s(    c             C   s8  | dt j krdddddddd	d
g	}dddddddddg	}t jgt|ƒ }dddddddddddg}dddddddddddg}t |¡d }dt j gt|ƒ }t |¡d }dt j gt|ƒ }	t |||g¡}
|| | }|	| | }|
 |  	t j¡¡}|| }|| }|| S t
|  dt j ¡ƒdt j  S d S )Ng      .@g      ø?g      @g      @r   r
   r   r   é   é$   r   r   r	   é   é   r   é   r   é   g      @g      @r   é   r   r   r   r   g      N@g      ¬@)r   r   Ú	hourangler   r    r!   r"   r#   r$   r%   r   r&   )r'   Zhour_limits_Zhour_steps_Z
hour_unitsr(   r)   r*   r+   r,   r-   Zhour_limitsZ
hour_stepsr.   r/   r0   r1   r1   r2   r   1   s(    c             C   sR   t  | ¡}t  |¡}|| }t  ddddg¡}t  t  || ¡¡}d|||   S )Nr   r   r   r   g      $@)r    Zlog10ZfloorZargminÚabs)r'   Zlog10_dvÚbaseZfracZstepsZiminr1   r1   r2   r   T   s    

c             C   s   i }d|d< d|d< t jt jf|d< ddlm} t| tƒr^| }| | ¡} | d kr^td |¡ƒ‚t| t	ƒsn| ƒ } t
| j ¡ ƒ}|d d	… |d
< |S )N)Ú	longitudeÚlatitudeÚtype)NNZwrapr0   r   )Úframe_transform_graphzUnknown frame: {0}r   Úname)r   ZdegÚastropy.coordinatesr@   Ú
isinstanceÚstrZlookup_nameÚ
ValueErrorÚformatr   ÚlistZrepresentation_component_namesÚkeys)ÚframeZ
coord_metar@   Zinitial_frameÚnamesr1   r1   r2   Úget_coord_metab   s    


rK   c             C   sÈ   | dd… dkrdt jdfS | dd… dkr8dt jdfS | dd… dkrTdt jdfS | dd… d	krhd
S | dd… dksˆ| dd… dkrŒdS | dd… dks¼| dd… dks¼| dd… dkrÀdS dS dS )zd
    Determine whether a particular WCS ctype corresponds to an angle or scalar
    coordinate.
    Nr5   zRA--r=   ZHPLNg     €f@ZHPLTr>   ZHGLN)r=   Ng     €f@r   ZLONr   ZLN)r=   NNzDEC-ZLATZLT)r>   NN)ZscalarNN)r   r:   r   )Zctyper1   r1   r2   r   z   s     0c             C   s  g }g }g }xb| j D ]X}| ¡ }t|ƒdkr.q| |¡ t dd„ |D ƒ¡}| |dd… ¡ | |d ¡ qW t |¡dd… }dd„ |D ƒ}t|ƒdkr¨t |¡}ndS | |¡}t ||¡}xHt	|ƒD ]<\}	}
t |
||	 ¡}
x"t	|
ƒD ]\}}|||	 | _
qîW qÌW dS )aÎ  
    Transform a contour set in-place using a specified
    :class:`matplotlib.transform.Transform`

    Using transforms with the native Matplotlib contour/contourf can be slow if
    the transforms have a non-negligible overhead (which is the case for
    WCS/SkyCoord transforms) since the transform is called for each individual
    contour line. It is more efficient to stack all the contour lines together
    temporarily and transform them in one go.
    r   c             S   s   g | ]}t |ƒ‘qS r1   )r   )Ú.0Úxr1   r1   r2   ú
<listcomp>­   s    z1transform_contour_set_inplace.<locals>.<listcomp>Néÿÿÿÿc             S   s   g | ]}|D ]
}|j ‘qqS r1   )Úvertices)rL   ÚpathsÚpathr1   r1   r2   rN   µ   s    )ÚcollectionsZ	get_pathsr   Úappendr    Zcumsumr#   Ú	transformÚsplitÚ	enumeraterP   )ZcsetrU   Z	all_pathsZ	pos_levelZpos_segmentsZ
collectionrQ   ÚposrP   ZilevelZvertZisegZivertr1   r1   r2   r      s,    

)Znumpyr    Zastropyr   r   rB   r   Ú__all__r   r   r   rK   r   r   r1   r1   r1   r2   Ú<module>   s   %#