ó
šßÈ[c        
   @  s•  d  d l  m Z d  d l Z d  d l 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 d	 l m Z d d
 l m Z d d l m Z m Z m Z m Z d d l m Z d d l m Z d d l m Z d Z d d d d d d d d g Z d d d d d d d d  d! d" g
 Z d# „  Z  d$ „  Z! d d% „ Z# e$ d& „ Z% e	 j& d' e e# ƒ e	 j' d' e e% ƒ e	 j( d' e e! ƒ d S((   iÿÿÿÿ(   t   print_functionN(   t   OrderedDicti   (   t   registryi   (   t   units(   t   string_types(   t   Table(   t   AstropyUserWarningi   (   t   HDUListt   TableHDUt   BinTableHDUt	   GroupsHDU(   t   fitsopen(   t   first(   t   table_to_hdus   SIMPLE  =                    Tt   XTENSIONt   BITPIXt   NAXISt   NAXIS1t   NAXIS2t   PCOUNTt   GCOUNTt   TFIELDSs   TFORM[0-9]+s   TBCOL[0-9]+s   TSCAL[0-9]+s   TZERO[0-9]+s   TNULL[0-9]+s   TTYPE[0-9]+s   TUNIT[0-9]+s   TDISP[0-9]+s
   TDIM[0-9]+t   THEAPc         C  s1   x* t  D]" } t j | |  ƒ d  k	 r t Sq Wt S(   N(   t   COLUMN_KEYWORDSt   ret   matcht   Nonet   Truet   False(   t   keywordt   c(    (    s6   lib/python2.7/site-packages/astropy/io/fits/connect.pyt   is_column_keyword+   s    c         O  s‘   | d	 k	 r> | j ƒ  } | j d ƒ } | j | ƒ | t k S| d	 k	 rf | j ƒ  j d
 ƒ r t Sn' t | d t	 t
 t t f ƒ r‰ t St Sd	 S(   s$  
    Determine whether `origin` is a FITS file.

    Parameters
    ----------
    origin : str or readable file-like object
        Path or file object containing a potential FITS file.

    Returns
    -------
    is_fits : bool
        Returns `True` if the given file is a FITS file.
    i   s   .fitss   .fits.gzs   .fits   .fit.gzs   .ftss   .fts.gzi    N(   s   .fitss   .fits.gzs   .fits   .fit.gzs   .ftss   .fts.gz(   R   t   tellt   readt   seekt   FITS_SIGNATUREt   lowert   endswithR   t
   isinstanceR   R   R	   R
   R   (   t   origint   filepatht   fileobjt   argst   kwargst   post   sig(    (    s6   lib/python2.7/site-packages/astropy/io/fits/connect.pyt   is_fits2   s    
	c         C  st  t  |  t ƒ rt ƒ  } x? t |  ƒ D]1 \ } } t  | t t t f ƒ r% | | | <q% q% Wt | ƒ d k ræ | d k r¦ t	 j
 d j t | ƒ ƒ t ƒ t | ƒ } n  |  j | ƒ } | | k rÎ | | } qt d j | ƒ ƒ ‚ qit | ƒ d k r| t | ƒ } qit d ƒ ‚ nO t  |  t t t f ƒ r;|  } n. t |  ƒ } z t | d | ƒSWd | j ƒ  Xt } x* | j D] } | j d k	 ryt } PqyqyWt | j d | ƒ}	 | rxa | j D]S } | j d k	 rÁ|	 | j j | j ƒ t |	 | j j |	 | j | j k <qÁqÁWn  xK | j D]@ } | j d k	 r%t j | j d d	 d
 d ƒ|	 | j _ q%q%Wx| j j  D]ö \ }
 } } |
 d k rß|
 d k r¦d }
 n  |
 |	 j! k rÌ|	 j! |
 j" | ƒ ql| g |	 j! |
 <qv|
 |	 j! k r8t  |	 j! |
 t# ƒ r|	 j! |
 j" | ƒ ql|	 j! |
 | g |	 j! |
 <qvt$ |
 j% ƒ  ƒ sl|
 j% ƒ  t& k r_qv| |	 j! |
 <qvW|	 S(   s¥  
    Read a Table object from an FITS file

    Parameters
    ----------
    input : str or file-like object or compatible `astropy.io.fits` HDU object
        If a string, the filename to read the table from. If a file object, or
        a compatible HDU object, the object to extract the table from. The
        following `astropy.io.fits` HDU objects can be used as input:
        - :class:`~astropy.io.fits.hdu.table.TableHDU`
        - :class:`~astropy.io.fits.hdu.table.BinTableHDU`
        - :class:`~astropy.io.fits.hdu.table.GroupsHDU`
        - :class:`~astropy.io.fits.hdu.hdulist.HDUList`
    hdu : int or str, optional
        The HDU to read the table from.
    i   sb   hdu= was not specified but multiple tables are present, reading in first available table (hdu={0})s   No table found in hdu={0}s   No table foundt   hduNt   maskedt   formatt   fitst   parse_strictt   silentt   COMMENTt   HISTORYt   comments(   R5   R6   ('   R&   R   R   t	   enumerateR   R	   R
   t   lenR   t   warningst   warnR1   R   R   t   index_oft
   ValueErrort	   fits_opent   read_table_fitst   closeR   t   columnst   nullR   R   t   datat   namet   set_fill_valuet   maskt   unitt   ut   Unitt   headert   cardst   metat   appendt   listR   t   uppert   REMOVE_KEYWORDS(   t   inputR/   t   tablest   ihdut   hdu_itemt   tablet   hdulistR0   t   colt   tt   keyt   valuet   comment(    (    s6   lib/python2.7/site-packages/astropy/io/fits/connect.pyR?   O   sn    		.)	c         C  sl   t  |  ƒ } t | t ƒ r[ t j j | ƒ r[ | rC t j | ƒ q[ t d j | ƒ ƒ ‚ n  | j	 | ƒ d S(   s  
    Write a Table object to a FITS file

    Parameters
    ----------
    input : Table
        The table to write out.
    output : str
        The filename to write the table to.
    overwrite : bool
        Whether to overwrite any existing file without warning.
    s   File exists: {0}N(
   R   R&   R   t   ost   patht   existst   removet   IOErrorR1   t   writeto(   RQ   t   outputt	   overwritet	   table_hdu(    (    s6   lib/python2.7/site-packages/astropy/io/fits/connect.pyt   write_table_fitsÆ   s    !R2   ()   t
   __future__R    R\   R   R:   t   collectionsR   t    R   t   io_registryR   RH   t
   extern.sixR   RU   R   t   utils.exceptionsR   R   R   R	   R
   t   hdu.hdulistR   R>   t   utilR   t   convenienceR   R#   RP   R   R   R.   R   R?   R   Re   t   register_readert   register_writert   register_identifier(    (    (    s6   lib/python2.7/site-packages/astropy/io/fits/connect.pyt   <module>   sB   "			w