σ
ίΘ[c           @` s‘   d  Z  d d l m Z m Z m Z m Z d d l m 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 d e j f d	     YZ d S(
   u!   
Handles the "FITS" unit format.
i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsi   (   t   zipNi   (   t   coret   generict   utilst   Fitsc           B` s   e  Z d  Z d Z e d    Z e e d   Z e e d   Z	 e d    Z
 e d    Z e d    Z e e d   Z RS(	   u°   
    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>`_.
    u   fitsc       #   C` sZ  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/ d0 d1 d2 d$ d d3 d4 d5 d6 g } i |  j d7 d8 |  j  d7 6} xr | | D]f } x] | D]U } | | }	 t j |	  r6qq|	 | k rS| |	 | |	 <qt |  |	  | |	 <qWqWx0 | D]( } x | D] } | j | |  qWquWd9 d: d; d< d= d0 d- d> d? d+ d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS g }
 g  } x% |
 | D] } t |  |  | | <qWx | D] } | j |  q6W| | g  f S(T   Ni   (   t   unitsu   mu   gu   su   radu   sru   Ku   Au   molu   cdu   Hzu   Ju   Wu   Vu   Nu   Pau   Cu   Ohmu   Su   Fu   Wbu   Tu   Hu   lmu   lxu   au   yru   eVu   pcu   Jyu   magu   Ru   bitu   byteu   Gu   barnu   yu   zu   fu   pu   nu   uu   cu   du    u   dau   hu   ku   Mu   Pu   Eu   Zu   Yu   dbytegΉ?u   degu   arcminu   arcsecu   masu   minu   Ryu   solMassu   solLumu   solRadu   AUu   lyru   countu   ctu   photonu   phu   pixelu   pixu   Du   Sunu   chanu   binu   voxelu   aduu   beamu   ergu   Angstromu   angstrom(	   t    R	   t   sett   Unitt   bytet   keywordt	   iskeywordt   getattrt   add(   t   ut   namest   deprecated_namest   basest   deprecated_basest   prefixest   special_casest   baset   prefixt   keyt   simple_unitst   deprecated_unitst   unit(    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyt   _generate_unit_names   s@    	' 
c         C` s   | |  j  k rW | rK t d j | t j | |  j  |  j |  j     qW t    n  | |  j k r t j | |  j  | d |  j  n  d  S(   Nu2   Unit '{0}' not supported by the FITS standard. {1}u   FITS(   t   _unitst
   ValueErrort   formatR   t   did_you_mean_unitst   _deprecated_unitst   _to_decomposed_alternativet   unit_deprecation_warning(   t   clsR   t   detailed_exception(    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyt   _validate_unitU   s    	c         C` s   |  j  |  |  j | S(   N(   R)   R    (   R'   R   R(   (    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyt   _parse_unitf   s    c         C` s    | j  d  } |  j |  | S(   Nu   fits(   t   get_format_nameR)   (   R'   R   t   name(    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyt   _get_unit_namek   s    c         C` s4  t  j | |  j  } g  } t | t j  rt j | j  } | d d k rm t j	 d j
 | j    n. | j d k r | j d j
 t |    n  t t | j | j   } t |  rϊ | j d t j d  d t  | j |  j |   n  d j |  } n$ t | t j  r0|  j |  } n  | S(	   Ng      π?g        um   The FITS unit format is not able to represent scales that are not powers of 10.  Multiply your data by {0:e}.u   10**{0}R   i   t   reverseu    (   R   t   decompose_to_known_unitsR-   t
   isinstanceR   t   CompositeUnitt   npt   log10t   scalet   UnitScaleErrorR"   t   appendt   intt   listR   R   t   powerst   lent   sortt   operatort
   itemgettert   Truet   _format_unit_listt   joint	   NamedUnit(   R'   R   t   partsR   t   pairst   s(    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyt	   to_stringq   s$    c         C` se   y |  j  |  } WnK t j k
 r` | j } t j |  } d | _ d j |  j  |  |  SX| S(   Ng      π?u!   {0} (with data multiplied by {1})(   RE   R   R5   R4   t   copyt   _scaleR"   (   R'   R   RD   R4   (    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyR%      s    		c         C` s=   t  t |   j | |  } t | d  r9 t d   n  | S(   Nu   function_unitu4   Function units are not yet supported for FITS units.(   t   superR   t   parset   hasattrR!   (   R'   RD   t   debugt   result(    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyRI      s    (   t   __name__t
   __module__t   __doc__R,   t   staticmethodR   t   classmethodR>   R)   R*   R-   RE   R%   t   FalseRI   (    (    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyR      s   7(   RO   t
   __future__R    R   R   R   t   extern.six.movesR   t   numpyR2   RF   R   R<   R
   R   R   R   t   GenericR   (    (    (    s8   lib/python2.7/site-packages/astropy/units/format/fits.pyt   <module>   s   "