
    HR-eR                     r    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  G d de
          ZdS )	    N)fits)	_ValidHDU   )FitsTestCase)comparerecordsc                        e Zd Z fdZ f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 xZS )TestChecksumFunctionsc                    t                                                       t          j        d d          | _        t          j        dd           t          j        dd           t          j        | _        d t          _        d S )NerrorzChecksum verification failed)messagezDatasum verification failedc                     dS )Nz2013-12-20T13:36:10 )selfs    Clib/python3.11/site-packages/astropy/io/fits/tests/test_checksum.py<lambda>z4TestChecksumFunctions.setup_method.<locals>.<lambda>   s    0E     )	supersetup_methodwarningsfilters_oldfiltersfilterwarningsr   _get_timestamp_old_get_timestampr   	__class__s    r   r   z"TestChecksumFunctions.setup_method   sy    #+AAA.1OPPPP1NOOOO #,":#E#E	   r   c                     t                                                       | j        t          _        | j        t          _        d S )N)r   teardown_methodr   r   r   r   r   r   r   s    r   r   z%TestChecksumFunctions.teardown_method   s5    !!!+#'#:	   r   c                     t          j        |                     d          d          }|j        sJ |                                 d S )Nchecksum.fitsTchecksum)r   opendata	_read_allcloser   hduls     r   test_sample_filez&TestChecksumFunctions.test_sample_file"   sA    y?33dCCC~

r   c                    t          j        dt           j                  }t          j        |          }|                    |                     d          dd           t          j        |                     d          d          5 }|j        |d         j        k    	                                sJ d|d         j
        v sJ d	|d         j
        v sJ t          j                            d
          s2|d         j
        d         dk    sJ |d         j
        d	         dk    sJ d d d            d S # 1 swxY w Y   d S )Nd   dtypetmp.fitsT	overwriter"   r!   r   CHECKSUMDATASUMwin32ZHMkeGKjZGKjbGKj4950)nparangeint64r   
PrimaryHDUwritetotempr#   r$   allheadersysplatform
startswithr   nhdur(   s       r   test_image_createz'TestChecksumFunctions.test_image_create'   ss   Ic***oa  DIIj))TDIIIYtyy,,t<<< 		;HQ,1133333a////Q....<**733 ; Aw~j15GGGGGAw~i0F::::		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		; 		;s   	BD44D8;D8c                    t          j        |                     d                    5 }|d         j                                        }|d                             dd           |                    |                     d          dd           t          j        |                     d          d          5 }|d         j        |k                                    sJ d	|d         j        v sJ |d         j        d	         d
k    sJ d|d         j        v sJ |d         j        d         dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N
scale.fitsr   int16oldr.   Tr/   r!   r1   cUmaeUjZcUjacUjWr2   
1891563534)	r   r#   r$   copyscaler:   r;   r<   r=   )r   r(   	orig_datahdul1s       r   test_scaled_dataz&TestChecksumFunctions.test_scaled_data6   s   Ytyy..// 		B4Q))++IGMM'5)))LL:..$LNNN499Z004@@@ BEa27799999!U1X_4444Qxz26HHHHH E!HO3333Qxy1\AAAAAB B B B B B B B B B B B B B B			B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		B 		Bs7   BE8A:D?3E?E	EE	EEEc                    t          j        |                     d                    5 }|                    |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|                    |                     d          dd           ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|                    |                     d          d           ddd           n# 1 swxY w Y   t          j        |                     d          d	          5 }|                    |                     d
          d           ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          j        |                     d                    5 }t          j        |                     d
                    5 }|d         j        }|d         j        }|d         j        }|d         |d         k    sJ |d         |d         k    sJ |d         |d         k    sJ |d         |d         k    sJ 	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )a   
        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.
        rF   zrescaled.fitsNzrescaled2.fitsTr/   zrescaled3.fitsr!   )do_not_scale_image_datazscaled.fitsr   r2   r1   r   r#   r$   r:   r;   r=   )r   r(   rN   hdul2hdul3hdr1hdr2hdr3s           r   test_scaled_data_auto_rescalez3TestChecksumFunctions.test_scaled_data_auto_rescaleB   s    Ytyy..// 	54LL?33444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5
 Ytyy1122 	UdLL#344tLTTT	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U Ytyy..// 	E4LL#344tLDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E Ytyy..MMM 	BQULL=11DLAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B
 Ytyy!12233 		@u499%56677 @5Ytyy7788 @E 8?D 8?D 8?D	?d9o====
+tJ/?????	?d9o====
+tJ/??????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@ 		@s   )AA!$A!,CCC9+D00D47D4$+FF"F(K5(J9A8J"J9"J&&J9)J&*J9-K9J=	=K J=	KKKc                    g d}t          j        |                     d          d          5 }|                    |                     d          dd           t          j        |                     d          dd          5 }t          t          ||                    D ]\  }\  }}|j        |j        |j        |j        u sJ n$|j        |j        k                                    sJ d||         j        v sJ ||         j        d         ||         d	         k    sJ d
||         j        v sJ ||         j        d
         ||         d         k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N))aDcXaCcXaCcXaCcX0)oYiGqXi9oXiEoXi9
1746888714)VhqQWZoQVfoQVZoQr[   )4cPp5aOn4aOn4aOnr[   )8aCN8X9N8aAN8W9N
1756785133)UhqdUZnbUfnbUZnbr[   )4cQJ5aN94aNG4aN9r[   zo4sp040b0_raw.fitsT)uintr.   r/   )rd   r"   r1   r   r2   r   )	r   r#   r$   r:   r;   	enumeratezipr<   r=   )r   	checksumsr(   rN   idxhdu_ahdu_bs          r   test_uint16_dataz&TestChecksumFunctions.test_uint16_datai   sM   
 
 
	 Ytyy!566TBBB 	LdLL:..$LNNN499Z00tdKKK 
Lu+4Su5E5E+F+F 	L 	L'C%z)UZ-?$zUZ77777 %
ej 8==?????%c)999999+J79S>!;LLLLL$S	(888889+I6)C.:KKKKKK	L
L 
L 
L 
L 
L 
L 
L 
L 
L 
L 
L 
L 
L 
L 
L	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls7   AE?CE'E?'E+	+E?.E+	/E??FFc                    t          j        d          }d|_        t          j        d          dz   }d}t          j        j                            |ddg||gd	          }t          j        |          }|                    | 	                    d
          dd           t          j
        | 	                    d
          d          5 }t          |d         j        |j                  sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Ng      Y@)
   r   r         rm   g?*   abcxyzi)parnamespardatabitpixr.   Tr/   r!   r   r1   3eDQAZDO4dDOAZDOr2   
2797758084)r6   r7   shaper   rC   groups	GroupData	GroupsHDUr:   r;   r#   r   r$   r=   )r   imdatapdata1pdata2xrC   r(   s          r   test_groups_hdu_dataz*TestChecksumFunctions.test_groups_hdu_data   s   5!!'2$HO%%eU^ff5Ec & 
 
 nQDIIj))TDIIIYtyy,,t<<< 	=!$q',99999a////7>*-1CCCCCQ....7>),<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   	A7EEEc                    t          j        g d          }t          j        g d          }t          j        dd|          }t          j        dd|          }t          j        ||g          }t          j                            |          }|                    |                     d          d	d	
           t          j	        |                     d          d	          5 }t          |j        |d         j                  sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )N)NGC1001NGC1002NGC1003)g333333&@g(@gffffff.@target20AnameformatarrayV_magEr.   Tr/   r!   r   r1   r   D8iBD6ZAD6fAD6ZAr2   r[   aD1Oa90MaC0Ma90M
1062205743)r6   r   r   ColumnColDefsBinTableHDUfrom_columnsr:   r;   r#   r   r$   r=   )r   a1a2col1col2colstbhdur(   s           r   test_binary_table_dataz,TestChecksumFunctions.test_binary_table_data   s   X77788X((()){bAAA{2>>>|T4L)) --d33dii
++tdKKKYtyy,,t<<< 		=!%*d1gl;;;;;a////7>*-1CCCCCQ....7>),3333a////7>*-1CCCCCQ....7>),<<<<<		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		=s   $CF==GGc                 v   t          j        ddt          j        ddgt          j        g d          gd                    }t          j        dd	d
dgddgg          }t           j                            ||g          }|                    |                     d          dd           t          j        |                     d          d          5 }t          |j
        |d         j
                  sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )NvarzPJ()g     F@8   )         Or   rr   2Ir      r      r.   Tr/   r!   r   r1   r   r   r2   r[   YIGoaIEmZIEmaIEm1507485)r   r   r6   r   r   r   r:   r;   r#   r   r$   r=   )r   c1c2r   r(   s        r   test_variable_length_table_dataz5TestChecksumFunctions.test_variable_length_table_data   s   [(T2J(>(>?EE
 
 

 [eD"a2q'8JKKK --r2h77dii
++tdKKKYtyy,,t<<< 		:!%*d1gl;;;;;a////7>*-1CCCCCQ....7>),3333a////7>*-1CCCCCQ....7>),	99999		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		: 		:s   CF..F25F2c                    t          j        ddg          }t          j        ddg          }t          j        dd|          }t          j        dd|dd	
          }t          j        ddg d          }t          j        |||g          }t          j                            |          }|                    |                     d          dd           t          j	        |                     d          d          5 }t          |j        |d         j                  sJ d|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ t          j                            d          sTd|d         j        v sJ |d         j        d         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d d d            d S # 1 swxY w Y   d S )Nrq   defg      &@g      (@A3r   Dgffffff@g333333?)r   r   r   bscalebzerot1I)[   \   ]   r.   Tr/   r!   r   r1   r   r   r2   r[   r3   3rKFAoI94oICAoI9
1914653725)r6   r   r   r   r   TableHDUr   r:   r;   r#   r   r$   r=   r>   r?   r@   )	r   r   r1r   r   c3r   rC   r(   s	            r   test_ascii_table_dataz+TestChecksumFunctions.test_ascii_table_data   s^   Xuen%%XtTl##[eD;;; [eCr#SQQQ[d3lllCCCL"b"&&m((++DIIj))TDIIIYtyy,,t<<< 	A!#(DGL99999a////7>*-1CCCCCQ....7>),3333<**733 A "T!W^3333Aw~j15GGGGG DGN2222Aw~i0L@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As    C*G77G;>G;c                    t          j        |                     d                    5 }|                    |                     d          dd           t          j        |                     d          d          5 }t          j        |d         j        |d         j        k              sJ d|d         j        v sJ |d         j        d         d	k    sJ d
|d         j        v sJ |d         j        d
         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d
|d         j        v sJ |d         j        d
         dk    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nz	comp.fitsr.   Tr/   r!   r   r1   r   r   r2   r[   ZeAbdb8aZbAabb7a	113055149)r   r#   r$   r:   r;   r6   r<   r=   )r   h1h2s      r   test_compressed_image_dataz0TestChecksumFunctions.test_compressed_image_data   s   Ytyy--.. 	>"JJtyy,,tJLLL499Z004@@@ 	>BvbejBqEJ677777!RU\1111!u|J/3EEEEE BqEL0000!u|I.#5555!RU\1111!u|J/3EEEEE BqEL0000!u|I.+=====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s7   AE;=CE#E;#E'	'E;*E'	+E;;E?E?c                    t          j        dd          }t          j        |          }|                    |                     d          d           t          j        |                     d          d          5 }t          j        |d         j        |j        k              sJ 	 ddd           dS # 1 swxY w Y   dS )	zT
        Regression test for https://github.com/astropy/astropy/issues/4587
        )rm   rm   float32r,   r.   Tr!   r   N)	r6   onesr   CompImageHDUr:   r;   r#   r<   r$   )r   rB   comp_hdur(   s       r   test_failing_compressed_datasumz5TestChecksumFunctions.test_failing_compressed_datasum   s     GHI...$Q'':..>>>Ytyy,,t<<< 	96$q',(-7888888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s   >+B77B;>B;c                 N   t          j        dd          }t          j        |          }t          j        |j        |j                  }|                    |                     d          d           |                    |                     d          d           t          j	        |                     d          d          5 }t          j
        |d         j        |j        k              sJ t          j
        |d         j        |j        k              sJ d	|d
         j        v sJ |d
         j        d	         dk    sJ d|d
         j        v sJ |d
         j        d         dk    sJ d	|d         j        v sJ |d         j        d	         dk    sJ d|d         j        v sJ |d         j        d         dk    sJ d	|d         j        v sJ t          j	        |                     d          d          5 }|d         j        }|d         j        }d|v sJ d	|v sJ |d	         dk    sJ |d         |d	         k    sJ d|v sJ d|v sJ |d         dk    sJ |d         |d         k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr+   rG   r,   r.   Tr!   uncomp.fitsr   r1   r   r   r2   r[   J5cCJ5c9J5cAJ5c9
2453673070ZHECKSUMZE94eE91ZE91bE91ZDATASUM	160565700r6   r7   r   ImageHDUr   r$   r=   r:   r;   r#   r<   _headerr   rB   rC   r   r(   rS   header_compheader_uncomps           r    test_compressed_image_data_int16z6TestChecksumFunctions.test_compressed_image_data_int16   s   Ic)))mA$SXsz:::..>>>DIIm,,t<<<Ytyy,,t<<< 	K6$q',(-7888886$q',#(233333a////7>*-1CCCCCQ....7>),3333a////7?:.2DDDDDQ....7?9-====a////499]33dCCC 
Ku"1go %a![0000!]2222$Z04FFFFF":.-
2KKKKK![0000 M1111$Y/;>>>>":.-	2JJJJJJ
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks8   D7J>A7J6JJ	J	J	
JJ!Jc                    t          j        dd          }t          j        |          }t          j        |j        |j                  }|                    |                     d          d           |                    |                     d          d           t          j	        |                     d          d          5 }t          j
        |d         j        |j        k              sJ t          j
        |d         j        |j        k              sJ d	|d
         j        v sJ |d
         j        d	         dk    sJ d|d
         j        v sJ |d
         j        d         dk    sJ d	|d         j        v sJ d|d         j        v sJ t          j	        |                     d          d          5 }|d         j        }|d         j        }d|v sJ d	|v sJ |d	         dk    sJ |d         |d	         k    sJ d|v sJ d|v sJ |d         dk    sJ |d         |d         k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr+   r   r,   r.   Tr!   r   r   r1   r   r   r2   r[   r   Cgr5FZo2Cdo2CZo2r   
2393636889r   r   s           r   "test_compressed_image_data_float32z8TestChecksumFunctions.test_compressed_image_data_float32  s7   Ic+++mA$SXsz:::..>>>DIIm,,t<<<Ytyy,,t<<< 	K6$q',(-7888886$q',#(233333a////7>*-1CCCCCQ....7>),3333a////Q.... 499]33dCCC 
Ku"1go %a![0000!]2222$Z04FFFFF":.-
2KKKKK![0000 M1111$Y/<????":.-	2JJJJJJ
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K 
K#	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks8   C4I;A7H?3I?I	II	IIIc                     t          j        |                     d          d          }|                                 d S )Nzarange.fitsTr!   )r   r#   r$   r&   r'   s     r   test_open_with_no_keywordsz0TestChecksumFunctions.test_open_with_no_keywords/  s3    y=11DAAA

r   c                    t          j        |                     d                    }|                    |                     d          d           t          j        d          }t          j        |                     d          |d           |                                 t          j        |                     d          d          }|d         j	        J |                                 d S )Ntb.fitsr.   T)r0   r+   r!   r   )
r   r#   r$   r:   r;   r6   r7   appendr&   	_checksum)r   r(   rB   s      r   test_appendz!TestChecksumFunctions.test_append3  s    y9--..TYYz**d;;;IcNNDIIj))1t<<<<

y:..>>>Aw (((

r   c                 4   t          j        d          }t          j        |                     d          |dd           t          j        |                     d          d          }|                     |d                    |                                 d S )Nr+   r.   Tr/   r!   r   )r6   r7   r   r:   r;   r#   _check_checksumsr&   )r   rB   r(   s      r   test_writeto_conveniencez.TestChecksumFunctions.test_writeto_convenience=  s}    IcNNTYYz**AMMMMy:..>>>d1g&&&

r   c                 ^   t          j        dd          }t          j        |          }|                    |                     d          d           t          j        |                     d          d          }|                     |d                    |                                 d S )Nr+   rG   r,   r.   Tr!   r   )	r6   r7   r   r   r:   r;   r#   r   r&   rA   s       r   test_hdu_writetoz&TestChecksumFunctions.test_hdu_writetoD  s    Ic)))mADIIj))D999y:..>>>d1g&&&

r   c                    t          j        |                     d                    5 }|                    |                     d          d           ddd           n# 1 swxY w Y   t          j        |                     d                    5 }d|d         j        v sJ |d         j        d         dk    sJ d	|d         j        v sJ |d         j        d	         d
k    sJ d|d         j        v sJ |d         j        d         dk    sJ d	|d         j        v sJ |d         j        d	         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )z
        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
        r   	test.fitsTr!   Nr1   r   7UgqATfo7TfoATfor2   r[   r   99daD8bX98baA8bU
1829680925rR   r'   s     r   test_hdu_writeto_existingz/TestChecksumFunctions.test_hdu_writeto_existingL  s    Ytyy++,, 	@LL;//$L???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ Ytyy--.. 		=$a////7>*-1CCCCCQ....7>),3333a////7>*-1CCCCCQ....7>),<<<<<		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		= 		=s$   +AA#&A#B)EEEc                    t          j        dd          }t          j        |          }|                    |                     d          dd           t          j        |                     d          d          5 }t          |d	         d
          r|d	         j        st          j
        d           t          |d	         d          r|d	         j        rt          j
        d           d d d            d S # 1 swxY w Y   d S )Nr+   rG   r,   r.   Tdatasumr/   r!   r   _datasumMissing DATASUM keywordmsgr   zNon-empty CHECKSUM keyword)r6   r7   r   r   r:   r;   r#   hasattrr   pytestfailr   rA   s       r   test_datasum_onlyz'TestChecksumFunctions.test_datasum_onlyb  s;   Ic)))mADIIj))TINNNYtyy,,t<<< 	>DGZ00 ;T!W5E ; 9::::DG[11 >$q':K > <====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   ?A1C==DDc                 f   |                      d           t          j        |                     d                    5 }|d         j                                        }ddd           n# 1 swxY w Y   t          j        |                     d          d          }|                                 t          j        |                     d                    5 }d|d         j        v sJ d|d         j        v sJ t          ||d         j                  sJ 	 ddd           dS # 1 swxY w Y   dS )z
        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.
        r    r   Nupdatemoder1   r2   )		copy_filer   r#   r;   r$   rK   r&   r=   r   )r   r(   r$   s      r   'test_open_update_mode_preserve_checksumz=TestChecksumFunctions.test_open_update_mode_preserve_checksumm  s    	'''Ytyy1122 	'd7<$$&&D	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' y?33(CCC

Ytyy1122 	6da////Q....!$Q555555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s$    A))A-0A-A D&&D*-D*c                    |                      d           t          j        |                     d                    5 }|d         j                                        }|d         j                                        }ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }d|d         j        d<   d|d         j        d	         d
<   ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        }|d         j        }|dd         |dd         k    sJ d|v sJ d|v sJ |d         dk    sJ |d
         dd         |d
         dd         k                                    sJ |d
         d	         dk    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d          dd          5 }	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        }|d         j        }|dd         |dd         k    sJ d|vsJ d|vsJ |d         dk    sJ |d
         dd         |d
         dd         k                                    sJ |d
         d	         dk    sJ 	 ddd           dS # 1 swxY w Y   dS )a  
        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'.
        r    r   Nr   r   BARFOOrp   r   TIMEr1   r2   remove)r   r"   )r   r   r#   r;   r=   rK   r$   r<   )r   r(   r=   r$   header2data2s         r   %test_open_update_mode_update_checksumz;TestChecksumFunctions.test_open_update_mode_update_checksum  s@    	'''Ytyy1122 	'd!W^((**F7<$$&&D	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' Ytyy11AAA 	)T$)DGN5!&(DGLOF#	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) Ytyy1122 	*d1gnGGLE3B3<6#2#;....((((''''5>U****&M!""%fabb)99>>@@@@@=#r)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* YIIo&&X
 
 
 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 Ytyy1122 	*d1gnGGLE3B3<6#2#;....W,,,,G++++5>U****&M!""%fabb)99>>@@@@@=#r)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s[   ?BBB<'C//C36C3!BGG	G	:HHH:BKK#&K#c                 j   |                      d          }t          j        |                     d                    5 }|                    |d           ddd           n# 1 swxY w Y   |                      d          }t          j        |                     d                    5 }d|d         j        d	<   d
|d         j        d<   d|d         j        d	<   d|d         j        d<   |                    |           ddd           n# 1 swxY w Y   t          j        |          5 }|                    |                      d          d           ddd           n# 1 swxY w Y   t          j        |                      d                    5 }t          j        |          5 }d|d         j        v sJ |d         j        d         |d         j        d         k    sJ d	|d         j        v sJ |d         j        d	         dk    sJ d|d         j        v sJ |d         j        d         |d         j        d         k    sJ d	|d         j        v sJ |d         j        d	         |d         j        d	         k    sJ 	 ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zh
        Tests that invalid checksum or datasum are overwritten when the file is
        saved.
        zref.fitsr   Tr!   Nr   z1       r   r2   8UgqATfo7TfoATfor1   
2349680925r   11daD8bX98baA8bUz
test2.fitsr[   )r;   r   r#   r$   r:   r=   )r   reffiler(   testfilerefs        r   test_overwrite_invalidz,TestChecksumFunctions.test_overwrite_invalid  s    ))J''Ytyy++,, 	1LL4L000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 99[))Ytyy++,, 	#(2DGN9%);DGN:&(4DGN9%);DGN:&LL"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# Yx   	ADLL<004L@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A Ytyy..// 
	M47## 	Ms!T!W^3333Aw~j1SV]:5NNNNN DGN2222Aw~i0C7777!T!W^3333Aw~j1SV]:5NNNNN DGN2222Aw~i0CFM)4LLLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	Msm   A!!A%(A%(AD

DD)+E  E$'E$J('CJJ(J	J(J	J((J,/J,c                     t          |d          r|j        st          j        d           t          |d          r|j        st          j        d           d S d S )Nr   r   r   r   zMissing CHECKSUM keyword)r   r   r   r   r   )r   rC   s     r   r   z&TestChecksumFunctions._check_checksums  sp    Z(( 	7S\ 	7K56666[)) 	8cm 	8K6777777	8 	8r   )__name__
__module____qualname__r   r   r)   rD   rO   rX   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   __classcell__)r   s   @r   r	   r	      s       	F 	F 	F 	F 	F; ; ; ; ;
  
; ; ;
B 
B 
B%@ %@ %@NL L L0= = ="= = =&: : :(A A A4> > >	9 	9 	9K K K@!K !K !KF        = = =,	> 	> 	>6 6 6(+* +* +*ZM M MB8 8 8 8 8 8 8r   r	   )r>   r   numpyr6   r   
astropy.ior   astropy.io.fits.hdu.baser   conftestr   
test_tabler   r	   r   r   r   <module>r     s    


             . . . . . . " " " " " " & & & & & &D8 D8 D8 D8 D8L D8 D8 D8 D8 D8r   