ó
šßÈ[c           @   sš   d  d l  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
 e f d „  ƒ  YZ d S(   iÿÿÿÿNi   (   t   comparerecordsi   (   t	   _ValidHDUi   (   t   fits(   t   zip(   t   FitsTestCaset   TestChecksumFunctionsc           B   sà   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sb   t  t |  ƒ j ƒ  t j |  _ t j d d d ƒt j d d d ƒt j |  _	 d „  t _ d  S(   Nt   errort   messages   Checksum verification faileds   Datasum verification failedc         S   s   d S(   Ns   2013-12-20T13:36:10(    (   t   self(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   <lambda>!   s    (
   t   superR   t   setupt   warningst   filterst   _oldfilterst   filterwarningsR   t   _get_timestampt   _old_get_timestamp(   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyR      s    c         C   s/   t  t |  ƒ j ƒ  |  j t _ |  j t _ d  S(   N(	   R
   R   t   teardownR   R   R   R   R   R   (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyR   #   s    c         C   s,   t  j |  j d ƒ d t ƒ} | j ƒ  d  S(   Ns   checksum.fitst   checksum(   R   t   opent   datat   Truet   close(   R   t   hdul(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_sample_file(   s    c         C   s  t  j d d t  j ƒ} t j | ƒ } | j |  j d ƒ d t d t ƒt j |  j d ƒ d t ƒª } | j	 | d j	 k j
 ƒ  sŒ t ‚ d | d j k s¥ t ‚ d | d j k s¾ t ‚ t j j d	 ƒ s| d j d d
 k sí t ‚ | d j d d k st ‚ n  Wd  QXd  S(   Nid   t   dtypes   tmp.fitst	   overwriteR   i    t   CHECKSUMt   DATASUMt   win32t   ZHMkeGKjZGKjbGKjt   4950(   t   npt   aranget   int64R   t
   PrimaryHDUt   writetot   tempR   R   R   t   allt   AssertionErrort   headert   syst   platformt
   startswith(   R   t   nt   hduR   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_image_create,   s    "!"c         C   sò   t  j t j d d t j ƒƒ } | j |  j d ƒ d t d d ƒ~ t  j |  j d ƒ d d ƒˆ } d | d	 j	 k s€ t
 ‚ d
 | d	 j	 k s™ t
 ‚ t j j d ƒ sè | d	 j	 d d k sÈ t
 ‚ | d	 j	 d
 d k sè t
 ‚ n  Wd  QXd  S(   Ng      $@i   R   s   tmp.fitsR   R   t   nonstandardR   i    R   R   t   jD4Am942jC48j948t
   4164005614g    €„.A(   R   R$   R!   R"   t   float64R%   R&   R   R   R)   R(   R*   R+   R,   (   R   R.   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_nonstandard_checksum;   s    !!c         C   s   t  j |  j d ƒ ƒ } | d j j ƒ  } | d j d d ƒ | j |  j d ƒ d t d t ƒt  j |  j d ƒ d t ƒ’ } | d j | k j ƒ  s¤ t	 ‚ d | d j
 k s½ t	 ‚ | d j
 d d	 k sÚ t	 ‚ d
 | d j
 k só t	 ‚ | d j
 d
 d k st	 ‚ Wd  QXWd  QXd  S(   Ns
   scale.fitsi    t   int16t   olds   tmp.fitsR   R   R   t   cUmaeUjZcUjacUjWR   t
   1891563534(   R   R   R   t   copyt   scaleR%   R&   R   R'   R(   R)   (   R   R   t	   orig_datat   hdul1(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_scaled_dataJ   s    "!c         C   sð  t  j |  j d ƒ ƒ  } | j |  j d ƒ ƒ Wd QXt  j |  j d ƒ ƒ ) } | j |  j d ƒ d t d t ƒWd QXt  j |  j d ƒ ƒ # } | j |  j d ƒ d t ƒWd QXt  j |  j d ƒ d t ƒ# } | j |  j d	 ƒ d t ƒWd QXt  j |  j d ƒ ƒ Ø } t  j |  j d ƒ ƒ · } t  j |  j d	 ƒ ƒ – } | d
 j } | d
 j } | d
 j } | d | d k sŒt ‚ | d | d k s¦t ‚ | d | d k sÀt ‚ | d | d k sÚt ‚ Wd QXWd QXWd QXd S(   s   
        Regression test for
        https://github.com/astropy/astropy/issues/3883#issuecomment-115122647

        Ensure that when scaled data is automatically rescaled on
        opening/writing a file that the checksum and datasum are computed for
        the rescaled array.
        s
   scale.fitss   rescaled.fitsNs   rescaled2.fitsR   R   s   rescaled3.fitst   do_not_scale_image_datas   scaled.fitsi    R   R   (   R   R   R   R%   R&   R   R)   R(   (   R   R   R<   t   hdul2t   hdul3t   hdr1t   hdr2t   hdr3(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_scaled_data_auto_rescaleV   s(    
""c         C   s”  d d d d d d d g } t  j |  j d ƒ d t ƒU} | j |  j d ƒ d t d t ƒt  j |  j d ƒ d t d t ƒ} xü t t | | ƒ ƒ D]å \ } \ } } | j d  k sË | j d  k ræ | j | j k st	 ‚ n | j | j k j
 ƒ  st	 ‚ d | | j k st	 ‚ | | j d | | d k sBt	 ‚ d | | j k s[t	 ‚ | | j d | | d k s› t	 ‚ q› WWd  QXWd  QXd  S(   Nt   aDcXaCcXaCcXaCcXt   0t   oYiGqXi9oXiEoXi9t
   1746888714t   VhqQWZoQVfoQVZoQt   4cPp5aOn4aOn4aOnt   8aCN8X9N8aAN8W9Nt
   1756785133t   UhqdUZnbUfnbUZnbt   4cQJ5aN94aNG4aN9s   o4sp040b0_raw.fitst   uints   tmp.fitsR   R   R   i    R   i   (   RE   RF   (   RG   RH   (   RI   RF   (   RJ   RF   (   RK   RL   (   RM   RF   (   RN   RF   (   R   R   R   R   R%   R&   t	   enumerateR   t   NoneR(   R'   R)   (   R   t	   checksumsR   R<   t   idxt   hdu_at   hdu_b(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_uint16_data   s     	!"(%c         C   sW  t  j d ƒ } d | _ t  j d ƒ d } d } t j j j | d t d	 ƒ t d
 ƒ g d | | g d d ƒ} t j | ƒ } | j	 |  j
 d ƒ d t d t ƒt j |  j
 d ƒ d t ƒ’ } t | d j | j ƒ sá t ‚ d | d j k sú t ‚ | d j d d k st ‚ d | d j k s0t ‚ | d j d d k sMt ‚ Wd  QXd  S(   Ng      Y@i
   i   i   i   gš™™™™™¹?i*   t   parnamest   abct   xyzt   pardatat   bitpixiàÿÿÿs   tmp.fitsR   R   i    R   t   3eDQAZDO4dDOAZDOR   t
   2797758084(   i
   i   i   i   i   (   R!   R"   t   shapeR   R.   t   groupst	   GroupDatat   strt	   GroupsHDUR%   R&   R   R   R    R   R(   R)   (   R   t   imdatat   pdata1t   pdata2t   xR.   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_groups_hdu_data”   s    	*"!c         C   s×  t  j d d d g ƒ } t  j d d d g ƒ } t j d d d	 d
 d | ƒ } t j d d d	 d d | ƒ } t j | | g ƒ } t j j | ƒ } | j |  j d ƒ d t	 d t	 ƒt j
 |  j d ƒ d t	 ƒþ } t | j | d j ƒ sõ t ‚ d | d j k st ‚ | d j d d k s+t ‚ d | d j k sDt ‚ | d j d d k sat ‚ d | d j k szt ‚ | d j d d k s—t ‚ d | d j k s°t ‚ | d j d d k sÍt ‚ Wd  QXd  S(   Nt   NGC1001t   NGC1002t   NGC1003g333333&@gš™™™™™(@gffffff.@t   namet   targett   formatt   20At   arrayt   V_magt   Es   tmp.fitsR   R   i   R   i    t   D8iBD6ZAD6fAD6ZAR   RF   t   aD1Oa90MaC0Ma90Mt
   1062205743(   R!   Ro   R   t   Columnt   ColDefst   BinTableHDUt   from_columnsR%   R&   R   R   R    R   R(   R)   (   R   t   a1t   a2t   col1t   col2t   colst   tbhduR   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_binary_table_data¤   s"    "!c         C   sÔ  t  j d d d d d t j d d g t j d d	 d
 g ƒ g d ƒ ƒ } t  j d d d d d d d g d	 d g g ƒ } t  j j | | g ƒ } | j |  j d ƒ d t d t ƒt  j	 |  j d ƒ d t ƒþ } t
 | j | d j ƒ sò t ‚ d | d j k st ‚ | d j d d k s(t ‚ d | d j k sAt ‚ | d j d d k s^t ‚ d | d j k swt ‚ | d j d d k s”t ‚ d | d j k s­t ‚ | d j d d k sÊt ‚ Wd  QXd  S(   NRk   t   varRm   s   PJ()Ro   g     €F@i8   i   i   i   t   ORY   t   2Ii   i   s   tmp.fitsR   R   i   R   i    Rr   R   RF   t   YIGoaIEmZIEmaIEmt   1507485(   R   Ru   R!   Ro   Rw   Rx   R%   R&   R   R   R    R   R(   R)   (   R   t   c1t   c2R~   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_variable_length_table_data·   s     '0"!c   	      C   s  t  j d d g ƒ } t  j d d g ƒ } t j d d d d d | ƒ } t j d d d d	 d | d
 d d d ƒ } t j d d d d d d d d g ƒ } t j | | | g ƒ } t j j | ƒ } | j |  j d ƒ d t	 d t	 ƒt j
 |  j d ƒ d t	 ƒ} t | j | d j ƒ s%t ‚ d | d j k s>t ‚ | d j d d k s[t ‚ d | d j k stt ‚ | d j d d k s‘t ‚ t j j d ƒ sd | d j k s¼t ‚ | d j d d k sÙt ‚ d | d j k sòt ‚ | d j d d k st ‚ n  Wd  QXd  S(   NRX   t   defg      &@g      (@Rk   Rm   t   A3Ro   t   Dt   bscalegffffff@t   bzerog333333ã?t   t1t   Ii[   i\   i]   s   tmp.fitsR   R   i   R   i    Rr   R   RF   R   t   51IDA1G981GCA1G9t
   1948208413(   R!   Ro   R   Ru   Rv   t   TableHDURx   R%   R&   R   R   R    R   R(   R)   R*   R+   R,   (	   R   Ry   t   r1R…   R†   t   c3Rf   R.   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_ascii_table_dataÉ   s(    !	'"!c         C   so  t  j |  j d ƒ ƒ Q} | j |  j d ƒ d t d t ƒt  j |  j d ƒ d t ƒ} t j | d j | d j k ƒ s‡ t ‚ d | d j	 k s  t ‚ | d j	 d d k s½ t ‚ d	 | d j	 k sÖ t ‚ | d j	 d	 d
 k só t ‚ d | d j	 k st ‚ | d j	 d d k s)t ‚ d	 | d j	 k sBt ‚ | d j	 d	 d k s_t ‚ Wd  QXWd  QXd  S(   Ns	   comp.fitss   tmp.fitsR   R   i   R   i    Rr   R   RF   t   ZeAbdb8aZbAabb7at	   113055149(
   R   R   R   R%   R&   R   R!   R'   R(   R)   (   R   t   h1t   h2(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_compressed_image_dataä   s    "!)c         C   sÃ  t  j d d d ƒ} t j | ƒ } t j | j | j ƒ } | j |  j d ƒ d t	 ƒ| j |  j d ƒ d t	 ƒt j
 |  j d ƒ d t	 ƒ+} t  j | d j | j k ƒ sº t ‚ t  j | d j | j k ƒ sß t ‚ d | d	 j k sø t ‚ | d	 j d d
 k st ‚ d | d	 j k s.t ‚ | d	 j d d k sKt ‚ d | d j k sdt ‚ | d j d d k st ‚ d | d j k sšt ‚ | d j d d k s·t ‚ d | d j k sÐt ‚ t j
 |  j d ƒ d t	 ƒÉ } | d j } | d j } d | k st ‚ d | k s/t ‚ | d d k sEt ‚ | d | d k s_t ‚ d | k sqt ‚ d | k sƒt ‚ | d d k s™t ‚ | d | d k s³t ‚ Wd  QXWd  QXd  S(   Nid   R   R5   s   tmp.fitsR   s   uncomp.fitsi   R   i    Rr   R   RF   t   J5cCJ5c9J5cAJ5c9t
   2453673070t   ZHECKSUMt   ZE94eE91ZE91bE91t   ZDATASUMt	   160565700(   R!   R"   R   t   ImageHDUt   CompImageHDUR   R)   R%   R&   R   R   R'   R(   t   _header(   R   R-   R.   t   comp_hduR   R?   t   header_compt   header_uncomp(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt    test_compressed_image_data_int16ò   s8    !%%!c         C   s¿  t  j d d d ƒ} t j | ƒ } t j | j | j ƒ } | j |  j d ƒ d t	 ƒ| j |  j d ƒ d t	 ƒt j
 |  j d ƒ d t	 ƒ'} t  j | d j | j k ƒ sº t ‚ t  j | d j | j k ƒ sß t ‚ d | d	 j k sø t ‚ | d	 j d d
 k st ‚ d | d	 j k s.t ‚ | d	 j d d k sKt ‚ d | d j k sdt ‚ d | d j k s}t ‚ t j j d ƒ sÌ| d j d d k s¬t ‚ | d j d d k sÌt ‚ n  t j
 |  j d ƒ d t	 ƒÉ } | d j } | d j } d | k st ‚ d | k s+t ‚ | d d k sAt ‚ | d | d k s[t ‚ d | k smt ‚ d | k st ‚ | d d k s•t ‚ | d | d k s¯t ‚ Wd  QXWd  QXd  S(   Nid   R   t   float32s   tmp.fitsR   s   uncomp.fitsi   R   i    Rr   R   RF   R   t   eATIf3SHe9SHe9SHt
   1277667818Rœ   t   Cgr5FZo2Cdo2CZo2Rž   t
   2393636889(   R!   R"   R   R    R¡   R   R)   R%   R&   R   R   R'   R(   R*   R+   R,   R¢   (   R   R-   R.   R£   R   R?   R¤   R¥   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt"   test_compressed_image_data_float32  s8    !%% !c         C   s,   t  j |  j d ƒ d t ƒ} | j ƒ  d  S(   Ns   arange.fitsR   (   R   R   R   R   R   (   R   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_open_with_no_keywords5  s    c         C   s±   t  j |  j d ƒ ƒ } | j |  j d ƒ d t ƒt j d ƒ } t  j |  j d ƒ | d t ƒ| j	 ƒ  t  j |  j d ƒ d t ƒ} | d j
 d  k s£ t ‚ | j	 ƒ  d  S(   Ns   tb.fitss   tmp.fitsR   id   R   i    (   R   R   R   R%   R&   R   R!   R"   t   appendR   t	   _checksumRQ   R(   (   R   R   R-   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_append9  s    
c         C   sq   t  j d ƒ } t j |  j d ƒ | d t d t ƒt j |  j d ƒ d t ƒ} |  j | d ƒ | j ƒ  d  S(   Nid   s   tmp.fitsR   R   i    (	   R!   R"   R   R%   R&   R   R   t   _check_checksumsR   (   R   R-   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_writeto_convenienceC  s
    %c         C   s}   t  j d d d ƒ} t j | ƒ } | j |  j d ƒ d t ƒt j |  j d ƒ d t ƒ} |  j | d ƒ | j	 ƒ  d  S(   Nid   R   R5   s   tmp.fitsR   i    (
   R!   R"   R   R    R%   R&   R   R   R±   R   (   R   R-   R.   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_hdu_writetoJ  s    c         C   s:  t  j |  j d ƒ ƒ # } | j |  j d ƒ d t ƒWd QXt  j |  j d ƒ ƒ ß } d | d j k sq t ‚ | d j d d k sŽ t ‚ d | d j k s§ t ‚ | d j d d	 k sÄ t ‚ d | d
 j k sÝ t ‚ | d
 j d d k sú t ‚ d | d
 j k st ‚ | d
 j d d k s0t ‚ Wd QXd S(   så   
        Tests that when using writeto with checksum=True, a checksum and
        datasum are added to HDUs that did not previously have one.

        Regression test for https://github.com/spacetelescope/PyFITS/issues/8
        s   tb.fitss	   test.fitsR   NR   i    t   7UgqATfo7TfoATfoR   RF   i   t   99daD8bX98baA8bUt
   1829680925(   R   R   R   R%   R&   R   R)   R(   (   R   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_hdu_writeto_existingR  s    "c         C   s?  t  j d d d ƒ} t j | ƒ } | j |  j d ƒ d t d d ƒt j |  j d ƒ d t ƒÕ } t | d d	 ƒ o„ | d j	 sš t
 j d
 d ƒ n  t | d d ƒ o¸ | d j sÎ t
 j d
 d ƒ n  t | d d ƒ oë | d j st
 j d
 d ƒ n  t | d d ƒ o| d j s5t
 j d
 d ƒ n  Wd  QXd  S(   Nid   R   R5   s   tmp.fitsR   R   t   datasumi    t   _datasumt   msgs   Missing DATASUM keywordR¯   s   Non-empty CHECKSUM keywordt   _datasum_comments   Missing DATASUM Card commentt   _checksum_comments   Non-empty CHECKSUM Card comment(   R!   R"   R   R    R%   R&   R   R   t   hasattrR¹   t   pytestt   failR¯   R»   R¼   (   R   R-   R.   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   test_datasum_onlyh  s    "! !c      	   C   sÜ   |  j  d ƒ t j |  j d ƒ ƒ  } | d j j ƒ  } Wd QXt j |  j d ƒ d d ƒ} | j ƒ  t j |  j d ƒ ƒ U } d | d j k s t ‚ d | d j k s¶ t ‚ t	 | | d j ƒ sÒ t ‚ Wd QXd S(   sê   
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/148 where
        checksums are being removed from headers when a file is opened in
        update mode, even though no changes were made to the file.
        s   checksum.fitsi   Nt   modet   updateR   R   (
   t	   copy_fileR   R   R&   R   R9   R   R)   R(   R    (   R   R   R   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt'   test_open_update_mode_preserve_checksum{  s    
c         C   st  |  j  d ƒ t j |  j d ƒ ƒ - } | d j j ƒ  } | d j j ƒ  } Wd QXt j |  j d ƒ d d ƒ- } d | d j d <d | d j d	 d
 <Wd QXt j |  j d ƒ ƒ · } | d j } | d j } | d  | d  k sð t ‚ d | k st ‚ d | k st ‚ | d d k s*t ‚ | d
 d | d
 d k j ƒ  sRt ‚ | d
 d	 d k slt ‚ Wd QXt j |  j d ƒ d d d d ƒ } Wd QXt j |  j d ƒ ƒ · } | d j } | d j } | d  | d  k sît ‚ d | k s t ‚ d | k st ‚ | d d k s(t ‚ | d
 d | d
 d k j ƒ  sPt ‚ | d
 d	 d k sjt ‚ Wd QXd S(   s›  
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/148, part
        2.  This ensures that if a file contains a checksum, the checksum is
        updated when changes are saved to the file, even if the file was opened
        with the default of checksum=False.

        An existing checksum and/or datasum are only stripped if the file is
        opened with checksum='remove'.
        s   checksum.fitsi   NRÁ   RÂ   t   BARt   FOOi*   i    t   TIMEiýÿÿÿiþÿÿÿR   R   R   t   removeiÿÿÿÿ(	   RÃ   R   R   R&   R)   R9   R   R(   R'   (   R   R   R)   R   t   header2t   data2(    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt%   test_open_update_mode_update_checksum  s8    !( (c         C   s°   t  | d ƒ o | j s+ t j d d ƒ n  t  | d ƒ o@ | j sV t j d d ƒ n  t  | d ƒ ok | j s t j d d ƒ n  t  | d ƒ o– | j s¬ t j d d	 ƒ n  d  S(
   NR¹   Rº   s   Missing DATASUM keywordR¯   s   Missing CHECKSUM keywordR»   s   Missing DATASUM Card commentR¼   s   Missing CHECKSUM Card comment(   R½   R¹   R¾   R¿   R¯   R»   R¼   (   R   R.   (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyR±   »  s    (   t   __name__t
   __module__R   R   R   R/   R4   R=   RD   RV   Rg   R   R‡   R”   R™   R¦   R¬   R­   R°   R²   R³   R·   RÀ   RÄ   RË   R±   (    (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyR      s0   							)							 	#		
						,(   R*   R   R¾   t   numpyR!   t
   test_tableR    t   hdu.baseR   t   ioR   t   extern.six.movesR   t    R   R   (    (    (    sB   lib/python2.7/site-packages/astropy/io/fits/tests/test_checksum.pyt   <module>   s   