U
    e»{jí  ã                   @   sN   d Z ddlZddlZddlmZmZmZ G dd„ dejƒZ	G dd„ de	ƒZ
dS )	z"
Handles the "LaTeX" unit format.
é    Né   )ÚbaseÚcoreÚutilsc                   @   sZ   e Zd ZdZedd„ ƒZedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZ	eddd„ƒZ
dS )ÚLatexz¼
    Output LaTeX to display the unit based on IAU style guidelines.

    Attempts to follow the `IAU Style Manual
    <https://www.iau.org/static/publications/stylemanual1989.pdf>`_.
    c                 C   s   |  dd¡S )NÚ_z\_)Úreplace)ÚclsÚname© r   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/format/latex.pyÚ_latex_escape   s    zLatex._latex_escapec                 C   s"   |  d¡}||jkr|  |¡S |S )NÚlatex)Zget_format_namer
   r   )r	   Úunitr
   r   r   r   Ú_get_unit_name   s    


zLatex._get_unit_namec                 C   sl   g }|D ]X\}}|   |¡}|dkr.| |¡ qt d|¡rD|jd }| |› dt |¡› d�¡ qd |¡S )Nr   z.*\^{[^}]*}$r   z^{Ú}ú\,)r   ÚappendÚreÚmatchZshort_namesr   Zformat_powerÚjoin)r	   ZunitsÚoutZbase_ÚpowerZ
base_latexr   r   r   Ú_format_unit_list$   s    

zLatex._format_unit_listc                 C   sd   t  |j|j¡\}}t|ƒrRt|ƒr0|  |¡}nd}|  |¡}d|› d|› d�}n|  |¡}|}|S )NÚ1z\frac{z}{r   )r   Zget_grouped_by_powersÚbasesÚpowersÚlenr   )r	   r   Z	positivesZ	negativesÚsr   r   r   Ú_format_bases5   s    

zLatex._format_basesc                 C   s’   d }t |dƒr|j d¡}|d k	r(|}n^t|tjƒrn|jdkrDd}n|  |j¡d }t|j	ƒr†||  
|¡7 }nt|tjƒr†|  |j¡}d|› d�S )NÚ_formatr   r   Ú r   z	$\mathrm{z}$)Úhasattrr    ÚgetÚ
isinstancer   ZCompositeUnitÚscaleÚformat_exponential_notationr   r   r   Z	NamedUnitr   r
   )r	   r   Z
latex_namer   r   r   r   Ú	to_stringF   s    


zLatex.to_stringú.8gc                 C   sn   t  |¡rLt ||¡\}}g }|r,| |¡ |rB| d|› d�¡ d |¡S t  |¡rZdS |dkrfdS dS dS )	a�  
        Formats a value in exponential notation for LaTeX.

        Parameters
        ----------
        val : number
            The value to be formatted

        format_spec : str, optional
            Format used to split up mantissa and exponent

        Returns
        -------
        latex_string : str
            The value in exponential notation in a format suitable for LaTeX.
        z10^{r   z \times z	{\rm NaN}r   z\inftyz-\inftyN)ÚnpÚisfiniter   Zsplit_mantissa_exponentr   r   Úisnan)r	   ÚvalÚformat_specÚmÚexÚpartsr   r   r   r&   \   s    



z!Latex.format_exponential_notationN)r(   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr   r   r   r   r'   r&   r   r   r   r   r      s   




r   c                   @   s    e Zd ZdZdZedd„ ƒZdS )ÚLatexInlinea2  
    Output LaTeX to display the unit based on IAU style guidelines with negative
    powers.

    Attempts to follow the `IAU Style Manual
    <https://www.iau.org/static/publications/stylemanual1989.pdf>`_ and the
    `ApJ and AJ style guide
    <https://journals.aas.org/manuscript-preparation/>`_.
    Zlatex_inlinec                 C   s   |   t|j|jƒ¡S )N)r   Úzipr   r   )r	   r   r   r   r   r   �   s    zLatexInline._format_basesN)r1   r2   r3   r4   r
   r5   r   r   r   r   r   r6   ƒ   s   
r6   )r4   r   Únumpyr)   r!   r   r   r   ZBaser   r6   r   r   r   r   Ú<module>   s
   u