U
    e»{j  ã                   @   sN   d Z ddlZddl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dS )z!
Handles the "FITS" unit format.
é    Né   )ÚcoreÚgenericÚutilsc                       sv   e Zd ZdZdZedd„ ƒZeddd„ƒZeddd	„ƒZ	ed
d„ ƒZ
edd„ ƒZedd„ ƒZed‡ fdd„	ƒZ‡  ZS )ÚFitsz°
    The FITS standard unit format.

    This supports the format defined in the Units section of the `FITS
    Standard <https://fits.gsfc.nasa.gov/fits_standard.html>`_.
    Úfitsc               #   C   s   ddl m}  i }tƒ }ddddddd	d
dddddddddddddddddddddd d!d"d#d$d%g#}g }d&d'dd(d)d*d+dd,d-d.d/d0d1d2d$dd3d4d5d6g}d7|  d7d8| j ¡i}|| D ]H}|D ]>}|| }	t |	¡rÒq¸q¸|	|krè||	 ||	< q¸t| |	ƒ||	< q¸q°|D ]}|D ]}| || ¡ �qqþd9d:d;d<d=d0d-d>d?d+d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSg}
g }|
| D ]}t| |ƒ||< �qj|D ]}| |¡ �q„||g fS )TNr   )ÚunitsÚmÚgÚsZradÚsrÚKÚAZmolÚcdZHzÚJÚWÚVÚNZPaÚCZOhmÚSÚFZWbÚTÚHZlmÚlxÚaÚyrZeVZpcZJyÚmagÚRÚbitÚbyteÚGZbarnÚyÚzÚfÚpÚnÚuÚcÚdÚ ÚdaÚhÚkÚMÚPÚEÚZÚYZdbytegš™™™™™¹?ÚdegZarcminZarcsecZmasÚminZRyZsolMassZsolLumZsolRadZAUZlyrÚcountÚctZphotonÚphZpixelZpixÚDÚSunZchanÚbinZvoxelZaduZbeamZergZAngstromZangstrom)	Zastropyr   ÚsetZUnitr   ÚkeywordÚ	iskeywordÚgetattrÚadd)r&   ÚnamesZdeprecated_namesÚbasesZdeprecated_basesÚprefixesZspecial_casesÚbaseÚprefixÚkeyZsimple_unitsZdeprecated_unitsÚunit© rF   úX/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/units/format/fits.pyÚ_generate_unit_names   sÞ                                   ü                   þ
                          üzFits._generate_unit_namesTc                 C   sb   || j kr<|r6td|› d�t || j | j| j¡ ƒ‚ntƒ ‚|| jkr^t || j | d| j¡ d S )NzUnit 'z&' not supported by the FITS standard. ZFITS)Ú_unitsÚ
ValueErrorr   Zdid_you_mean_unitsZ_deprecated_unitsÚ_to_decomposed_alternativeZunit_deprecation_warning©ÚclsrE   Údetailed_exceptionrF   rF   rG   Ú_validate_unitJ   s(    

üÿÿ

   ÿzFits._validate_unitc                 C   s   | j ||d� | j| S )N)rN   )rO   rI   rL   rF   rF   rG   Ú_parse_unit_   s    zFits._parse_unitc                 C   s   |  d¡}|  |¡ |S )Nr   )Zget_format_namerO   )rM   rE   ÚnamerF   rF   rG   Ú_get_unit_named   s    

zFits._get_unit_namec                 C   sÐ   t  || j¡}g }t|tjƒr¶t |j¡}|d dkrNt 	d|jd›d�¡‚n|jdkrl| 
dt|ƒ› �¡ tt|j|jƒƒ}t|ƒrª|jt d¡dd	� | 
|  |¡¡ d
 |¡}nt|tjƒrÌ|  |¡}|S )Nç      ð?g        zgThe FITS unit format is not able to represent scales that are not powers of 10.  Multiply your data by ÚeÚ.z10**r   T)rD   Úreverseú )r   Zdecompose_to_known_unitsrR   Ú
isinstancer   ZCompositeUnitÚnpÚlog10ÚscaleÚUnitScaleErrorÚappendÚintÚlistÚzipr@   ZpowersÚlenÚsortÚoperatorÚ
itemgetterZ_format_unit_listÚjoinZ	NamedUnit)rM   rE   ÚpartsrB   Úpairsr   rF   rF   rG   Ú	to_stringj   s$    ÿ

zFits.to_stringc                 C   sV   z|   |¡}W nB tjk
rP   |j}t |¡}d|_|   |¡› d|› d� Y S X |S )NrS   z (with data multiplied by ú))rh   r   r\   r[   ÚcopyZ_scale)rM   rE   r   r[   rF   rF   rG   rK   ˆ   s    
zFits._to_decomposed_alternativeFc                    s$   t ƒ  ||¡}t|dƒr tdƒ‚|S )NZfunction_unitz4Function units are not yet supported for FITS units.)ÚsuperÚparseÚhasattrrJ   )rM   r   ÚdebugÚresult©Ú	__class__rF   rG   rl   “   s    
z
Fits.parse)T)T)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rQ   ÚstaticmethodrH   ÚclassmethodrO   rP   rR   rh   rK   rl   Ú__classcell__rF   rF   rp   rG   r      s    
.



r   )ru   rj   r;   rc   ÚnumpyrY   r)   r   r   r   ÚGenericr   rF   rF   rF   rG   Ú<module>   s   