
    HR-eN                    F   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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mZmZ d d	lmZmZ d d
lmZmZ ddlmZ ddlm Z   G d de          Z! G d de          Z" G d d          Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*dS )    N)BytesIO)product)given)basic_indices)assert_equal)fits)COMPRESSION_TYPESDITHER_SEED_CHECKSUMSUBTRACTIVE_DITHER_1)download_fileget_pkg_data_filename)AstropyDeprecationWarningAstropyUserWarning   )FitsTestCase)comparerecordsc                      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ej                            dd          ej                            dd          d                         Zd Zd Zej                            d          d             Z d  Z!d! Z"d" Z#ej                            d#          d$             Z$d% Z%d& Z&d' Z'd( Z(d) Z)d* Z*d+ Z+d, Z,d-S ).TestImageFunctionsc                    t          j                    }|j        dk    sJ d|j        vsJ d|_        |j        dk    sJ |j        d         dk    sJ t          j        d          }|j        dk    sJ |j        d         dk    sJ t          j                    }d|d<   t          j        |d          }|j        dk    sJ |j        d         dk    sJ dS )z/Like the test of the same name in test_table.py EXTNAMEFOO)nameEVENTS)headerr   N)r   ImageHDUr   r   Header)selfhduhdrs      @lib/python3.11/site-packages/astropy/io/fits/tests/test_image.pytest_constructor_name_argz,TestImageFunctions.test_constructor_name_arg   s     moox2~~~~
****x5    z)$---- m'''x5    z)$---- kmm!Im3U333x5    z)$------    c                    d }t          j                    }|j        dk    sJ d|j        vsJ d|_         ||d           t          j        d          } ||d           t          j                    }d|d<   t          j        |d          } ||d           t          j                    }d	|d<   t          j        |d           } ||d	           t          j        |
          } ||d	           d S )Nc                 F    | j         |k    sJ | j        d         |k    sJ d S )NEXTVER)verr   )r   reference_vers     r!   assert_ver_iszBTestImageFunctions.test_constructor_ver_arg.<locals>.assert_ver_is5   s3    7m++++:h'=888888r#   r   r&      )r'         )r   r'      r   )r   r   r'   r   r   )r   r)   r   r    s       r!   test_constructor_ver_argz+TestImageFunctions.test_constructor_ver_arg4   s!   	9 	9 	9 moow!||||sz))))c1 m"""c1 kmmHm3A...c1 kmmHm3D111c1m3'''c1r#   c                    t          j        t          j                              }|d         j        }d|d<   t          j        |          }t          j        |          }d|d         j        d<   |d         dk    sJ dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/153

        Ensure that a header from one HDU is copied when used to initialize new
        HDU.
        r   zlabq01i3q_rawtag.fitsFILENAMEr.   zlabq01i3q_flt.fitsN)r   HDUList
PrimaryHDUr   )r   ifdphdrprimary_hduofds        r!   test_constructor_copies_headerz1TestImageFunctions.test_constructor_copies_headerR   s     l4?,,--1v}2ZoT222l;''$8Aj! J#:::::::r#   c                 D   t          j        |                     d                    }|                                 t	          j        t                    5 }|d         j        d dd df          d d d            n# 1 swxY w Y   t          |j                  dk    sJ d S )N
test0.fitsr   r*   sHDU not found, possibly because the index is out of range, or because the file was closed before all HDUs were read)	r   opendataclosepytestraises
IndexErrorstrvaluer   rexc_infos      r!   	test_openzTestImageFunctions.test_opene   s     Idii--.. 	
			]:&& 	(aDIbqb"1"f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 8>""/
 
 
 
 
 
s   A;;A?A?c                 &   t          j        |                     d                    }dgd t          dd          D             z   }	 |                    d          |k    sJ 	 |                                 d S # |                                 w xY w)Nr:   )r   PRIMARYr   r3       r   r   c           
      "    g | ]}|d |dddddfS )SCIr   =   )(   rO   int16r   rK   .0xs     r!   
<listcomp>z2TestImageFunctions.test_open_2.<locals>.<listcomp>   s<     E
 E
 E
EFQq*b(GR@E
 E
 E
r#   r   r-   Foutput)r   r<   r=   rangeinfor>   )r   rE   rX   s      r!   test_open_2zTestImageFunctions.test_open_2}   s    Idii--..@A E
 E
JOPQST++E
 E
 E
 
	666''4/////GGIIIIIAGGIIIIs   A: :Bc                 .   t          j        |                     d                    }|                                 t	          j        t                    5 }|d          d d d            n# 1 swxY w Y   t          |j                  dk    sJ t          j        |                     d          d          }|                                 t          |d         t           j
                  sJ t          |          dk    sJ t	          j        t                    5 }|d          d d d            n# 1 swxY w Y   t          |j                  dk    sJ t           j        j        sJ dt           j        _        	 t          j        |                     d                    }|                                 t          |d         t           j
                  sJ t          |          dk    sJ 	 d	t           j        _        d S # d	t           j        _        w xY w)
Nr:   r   r;   F)lazy_load_hdusr-      zlist index out of rangeT)r   r<   r=   r>   r?   r@   rA   rB   rC   
isinstancer   lenconfr[   rD   s      r!   test_open_3zTestImageFunctions.test_open_3   sC   Idii--..				]:&& 	(aDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 8>""/
 
 
 
 Idii--eDDD				!A$.....1vv{{{{]:&& 	(aDD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	8>""&????? y''''#(	 	,	$))L1122AGGIIIadDM22222q66Q;;;;;'+DI$$$tDI$++++s1   	A**A.1A.	D11D58D5;A2H Hc                    t          j        d                              dd          }t          j        |          }|                     d          }|                     d          }t          j        |                              |           t          j        |                              |           t           j        	                    t          j
        |          |           t           j        	                    t          j
        |          |           |                     d          }|                     d          }t          |d	
          5 }t          j        |                              |           d d d            n# 1 swxY w Y   t          |d	
          5 }t          j        |                              |           d d d            n# 1 swxY w Y   t           j        	                    t          j
        |          |           t           j        	                    t          j
        |          |           d S )N   r+      z
a_str.fitsz
b_str.fitsr=   za_fileobj.fitszb_fileobj.fitswbmodenparangereshapeasfortranarraytempr   r3   writetotestingassert_array_equalgetdatar<   r   abafitsbfitsaafitsbbfitsfds           r!   test_fortran_arrayz%TestImageFunctions.test_fortran_array   sS   IbMM!!!Q''a  		,''		,''Q''...Q''...

%%dl5&9&91===

%%dl5&9&91=== +,,+,,&t$$$ 	0O###++B///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0&t$$$ 	0O###++B///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0

%%dl6&:&:A>>>

%%dl6&:&:A>>>>>s$   )FFF')GG #G c                 |   t          j        d                              ddd          }t          j        |          }|                     d          }|                     d          }t          j        |d d dd d df                                       |           t          j        |d d dd d df                                       |           t           j        	                    t          j
        |          |d d dd d df                    t           j        	                    t          j
        |          |d d dd d df                    |                     d	          }|                     d
          }t          |d          5 }t          j        |d d dd d df                                       |           d d d            n# 1 swxY w Y   t          |d          5 }t          j        |d d dd d df                                       |           d d d            n# 1 swxY w Y   t           j        	                    t          j
        |          |d d dd d df                    t           j        	                    t          j
        |          |d d dd d df                    d S )Ni   r+   r-   rc   za_str_slice.fitszb_str_slice.fitsr*   rd   za_fileobj_slice.fitszb_fileobj_slice.fitsre   rf   rh   rr   s           r!   !test_fortran_array_non_contiguousz4TestImageFunctions.test_fortran_array_non_contiguous   s   IcNN""1a++a   		,--		,--QsssCCaCx[)))11%888QsssCCaCx[)))11%888

%%dl5&9&91SSqS##A#X;GGG

%%dl5&9&91SSqS##A#X;GGG 122122&t$$$ 	:O33Q3!8---55b999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:&t$$$ 	:O33Q3!8---55b999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:

%%dl6&:&:Accc33Q3hKHHH

%%dl6&:&:Accc33Q3hKHHHHHs$   7GGG.7H11H58H5c                    t          j        ddg          }t          j        t          j        |          g          }d|d         j        v sJ |d         j        dk    sJ |d         j        |d         j        d         k    sJ dg}|                    d	          |k    sJ |d
         |d         u sJ |d
         |d         u sJ d|d         _        |d         j        d         dk    sJ |                    |                     d                     t          j	        |                     d                    5 }|d         j        dk    sJ 	 ddd           dS # 1 swxY w Y   dS )aX  Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/151

        Tests that the EXTNAME keyword works with Primary HDUs as well, and
        interacts properly with the .name attribute.  For convenience
        hdulist['PRIMARY'] will still refer to the first HDU even if it has an
        EXTNAME not equal to 'PRIMARY'.
        )r   XPRIMARY)r&   r   r.   r   r   r   )r   r   r   r3   r-   rK   r   r   FrU   rI   )r   r   	XPRIMARY2	test.fitsN)
r   r   r2   r3   r   r   rX   rn   rm   r<   )r   prihdrhdulrX   s       r!   test_primary_with_extnamez,TestImageFunctions.test_primary_with_extname   s    5}EFF|T_F;;;<==DGN****Aw|z))))Aw|tAw~i88888?@yyy&&$....I$z"22222I$"77777"QAw~i(K7777TYY{++,,,Ytyy--.. 	/$7<;.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   ?E!!E%(E%c           
         t          j        |                     d                    5 }|d         j        d         dk    sJ |d         j        d         dk    sJ |d         j        d         dk    sJ d|d         j        d	<   d
                    d |d         j        j        dd          D                       dk    sJ |d         j                            dd           t          j        t          |d         j        j        dd           t          j        t          |d         j        j        dd           |d         j                            dd           t          j        |d         j        d dd df         t          j        g dg dg dgt          j                            sJ t          j        |                     d          d          5 }|                    |d                    |                    |d                    |                                 |d         j        d         dk    sJ d|d         j        d<   d d d            n# 1 swxY w Y   ~t#          j        |                     d          |                     d                     t          j        |                     d          d          5 }|d         j        d         dk    sJ |                    |d                    d d d            n# 1 swxY w Y   ~t#          j        |                     d          |                     d                     t          j        |                     d          d           5 }|d         j        d!         d"k    sJ d#|d         j        d!<   |d         j        d         dk    sJ d|d         j        d<   |                                 |d= |                                 |                    |d                    |                    |                     d                     d d d            n# 1 swxY w Y   ~d d d            n# 1 swxY w Y   t          j        |                     d                    5 }|                                 |d         j        d         d$k    sJ 	 d d d            n# 1 swxY w Y   t          j        d%t          j                  }t          j        |d&'          }t          j        |j        t          j        g d(g d(g d(gt          j                            sJ t          j        |d         j        t          j        ddgd)          *          }d
                    d+ |j        j        dd,         D                       d-k    sJ d S ).Nr:   primarynaxisr   )scir   detectorr   gZ0l!Kxxx
c              3   4   K   | ]}t          |          V  d S NrB   rQ   s     r!   	<genexpr>z:TestImageFunctions.test_io_manipulation.<locals>.<genexpr>  s(      AAQ#a&&AAAAAAr#   zEXPFLAG = 'NORMAL            ' / Exposure interruption indicator                
FILENAME= 'vtest3.fits'        / File name                                      
XXX     =            1.234E+56                                                  filenamefnamehistorysimpler*   r+   )]  r   i\  )r   r   [  )r   i^  r   dtypetest_new.fitsappendrf   r   r   r   c   ztest_append.fitsztest_update.fitsupdaterootname	U2EQ0201Tabci;  )r+   r-   rM   r=   r   )      ?r   r   r   r   int32)r   r=   c              3   4   K   | ]}t          |          V  d S r   r   rQ   s     r!   r   z:TestImageFunctions.test_io_manipulation.<locals>.<genexpr>~  s(      ==c!ff======r#   r-   aC  BITPIX  =                   32 / array data type                                
NAXIS   =                    1 / number of array dimensions                     
NAXIS1  =                    2                                                  
PCOUNT  =                    0 / number of parameters                           )r   r<   r=   r   joincardsrename_keywordr?   r@   
ValueErrorri   array_equalarrayrP   rm   r   flushosrenamern   readallonesfloat32r   )r   rE   nrs   ur=   r   hdu2s           r!   test_io_manipulationz'TestImageFunctions.test_io_manipulation   s    Ytyy..// f	1Y<&w/14444Q4;w'1,,,,
 X;%j1Q6666 "*AaDK 		AA!A$+*;BCC*@AAAAAcc c c c aDK&&z7;;;M*adk&@'9UUUM*adk&@'8TTTaDK&&w
;;; >!	"1"bqb&!$__oooGrx       499_55HEEE % 11
 			ty#---- #%!	$% % % % % % % % % % % % % % %$  Idii00$))<N2O2OPPP499%788xHHH A ty#----1	              
 
 Idii 233TYY?Q5R5RSSS499%788xHHH 6A t{:.+====*/!J'ty#----"$!	$			 aD			 1		$))O4455576 6 6 6 6 6 6 6 6 6 6 6 6 6 68 Mf	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	 f	V Ytyy..// 	*1IIKKKQ49T?c)))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*
 wvRZ000mE222~HH---------
 j  

 

 
	
 
	
 
	
 }AaDKbh1vW6U6U6UVVV II==dk&7!&<=====__ _ _ _ _ _s   F1QA4IQI	Q I	!A(Q	5L
>Q
L	QL	A(Q:CQ;QQ	QQ	QQ#&Q#.SSSc                     t          j        |                     d          d          }|                                 d S )Nr:   r   )memmap)r   r<   r=   r>   )r   f1s     r!   test_memory_mappingz&TestImageFunctions.test_memory_mapping  s3    Ytyy..q999





r#   c                    t          j                    }t          j        |          }t          j        t
          d          5 }|                                 d d d            n# 1 swxY w Y   t          |          dk    sJ t          j        t
          d          5 }|                    | 	                    d          d           d d d            n# 1 swxY w Y   t          |          dk    sJ d S )Nz,HDUList's 0th element is not a primary HDU\.matchr+   zQHDUList's 0th element is not a primary HDU\.  Fixed by inserting one as 0th HDU\.ztest_new2.fitsfix)
r   r   r2   r?   warnsr   verifyr^   rn   rm   )r   rS   r   ws       r!   test_verification_on_outputz.TestImageFunctions.test_verification_on_output  s\    MOOl1oo\&U
 
 
 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1vv{{{{\3
 
 
 	< KK		"233U;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 1vv{{{{{{s$   A$$A(+A(*CCCc                    t          j        |                     d                    }t          j        |d         j        d         d          sJ t          j        |d         j        ddd d f         t          j        g d                    sJ t          j        |d         j        dddd f         t          j        g d	                    sJ t          j        |d         j        ddd d
f         t          j        g d                    sJ t          j        |d         j        dddd
f         t          j        g d                    sJ t          j        |d         j        dddd d f         t          j        g dg dg dg                    sJ t          j        |d         j        dd d d d f         d dd df         t          j        g dg dg dg                    sJ |d         j        }t          j        |d         j        dddd d
f         |dddd d
f                   sJ t          j        |d         j        ddddf         |ddddf                   sJ t          j        |d         j        ddd d d d f         d dd dd df         t          j        g dg dg dgg dg dg dgg dg dg dgg                    sJ t          j        |d         j        d d d d d d f         d dd dd df         t          j        ddgddggddgd d!ggd"d#gd$d%ggg                    sJ t          j        |d         j        d d dd d f         |d d dd d f                   sJ t          j        |d         j        d d ddd d f         |d d ddd d f                   sJ t          j        |d         j        dddd d f         |dddd d f                   sJ t          j        |d         j        dddd&d d f         |dddd&d d f                   sJ t          j        |d         j        d d d d df         |d d d d df                   sJ t          j        |d         j        d d g d'df         |d d g d'df                   sJ t          j        g d(          }t          j        |d         j        d d |d d f         |d d |d d f                   sJ t          j        |d         j        dddd d d)f         |dddd d d)f                   sJ t          j        |d         j        d)d d df         |d)d d df                   sJ t          j        |d         j        d)g d'df         |d)g d'df                   sJ t          j        |d         j        d*         |d*                   sJ t          j        |d         j        d+d,         |d+d,                   sJ t          j        |d         j        d-d.d/d*f         |d-d.d/d*f                   sJ |                                 d S )0Nzarange.fitsr   )r+   r*   r-   e  r+   r*   )`  a  b  c  d  r   f  g  h  i  j  r,   )r   r   r   r   r   r   r      )r   r   r   r   r   r   r   r   i)r   r   r   r   r   r-   )ik  il  im  in  io  ip  iq  ir  is  it  iu  )iv  iw  ix  iy  iz  i{  i|  i}  i~  i  i  )iJ  iK  iL  )iU  iV  iW  )r   r   r   r\   )i  i  i  )i  i  i  )i  i  i  )i&  i'  i(  )i1  i2  i3  )i<  i=  i>  r         n   o   y   z               rc   )r   r*   r,   )
TFTTFFTTFT.iiir   )r   r<   r=   ri   r   sectionr   r>   )r   fsdat
bool_indexs       r!   test_sectionzTestImageFunctions.test_section  s   Ytyy//00~bemG4c:::::~qEM!Q'"HLLLMM
 
 	
 	
 	
 ~qEM!Q(#RX.Q.Q.Q%R%R
 
 	
 	
 	
 ~qEM!Q(#RX.V.V.V%W%W
 
 	
 	
 	
 ~qEM!Q1*%rx0I0I0I'J'J
 
 	
 	
 	
 ~qEM!QqS!!!)$HKKKKKKKKK 	
 	
 		
 		
 		
 ~qEM!QQQ'"2A2rr6*HoooHII
 
 	
 	
 	

 ej~bemAqsBQBJ7Q!RaRZIIIII~bemAqsAI6AqsAIGGGGG~qEM!A#qqq!!!)$RaR!RaRZ0H$__oooG$__oooG$__oooG 	
 	
 		
 		
 		
 ~qEM!!!QQQ'"2A2rr2A2:.Ha&2r(#sCj3*%=c
SRUJ?WX 
 
 	
 	
 	
 ~bemAAAq!!!G4c!!!Q'lCCCCC~bemAAAqsAAAI6AAAqsAAAIGGGGG~bemAaCAAAI6AaCAAAIGGGGG~bemAaC1aaaK8#ac1Q3k:JKKKKK~bemAAAsssF3SCCaC[AAAAA~bemAAAyyy!O<c!!!YYYPQ/>RSSSSSXLLL
 

 ~bemAAAz111,<=s111jRSRSRSCS?TUUUUU~bemAaCAAAsN;S1aC=PQQQQQ~bemC1H5s3!8}EEEEE~bemCA,=>CTUDU@VWWWWW ~bemB/R99999~bemBrE2C2J?????~bemB2rM:CBrE2<NOOOOO





r#   c                 j   t          j        dg          }t          j        |          }|                    |                     d                     t          j        |                     d                    }|d         j        }|d         j        }t          j	        |d         |d                   sJ t          j	        |d         |d                   sJ t          j	        |d         |d                   sJ t          j	        |d         |d                   sJ |
                                 d S )Nr   r   r   .).r   )r   .)ri   r   r   r3   rn   rm   r<   r   r=   r   r>   )r   rs   r   r   secr   s         r!   test_section_data_singlez+TestImageFunctions.test_section_data_single  s    HaSMMoa  DIIo..///y?33441go1gl~c!fc!f-----~c#hC11111~c&k3v;77777~c&k3v;77777

r#   c                    t          j        d                              dd          }t          j        |          }|                    |                     d                     t          j        |                     d                    }|d         }|d         j        }|j	        d d d d f         |d d d d f         k    
                                sJ |j	        dd d f         |dd d f         k    
                                sJ |j	        dd d f         |dd d f         k    
                                sJ |j	        d d df         |d d df         k    
                                sJ |j	        d d df         |d d df         k    
                                sJ |j	        d         |d         k    
                                sJ |j	        d         |d         k    
                                sJ |j	        d         |d         k    
                                sJ |j	        d	         |d	         k    
                                sJ |j	        ddddf         |ddddf         k    
                                sJ |j	        ddddf         |ddddf         k    
                                sJ |j	        ddddf         |ddddf         k    
                                sJ |j	        ddddf         |ddddf         k    
                                sJ |                                 d S )
Nr,   r*   r   r   r   r   r   r   r   r   r   r   ri   rj   rk   r   r3   rn   rm   r<   r=   r   allr>   r   rs   r   r   dr   s         r!   test_section_data_squarez+TestImageFunctions.test_section_data_square  sC   IaLL  A&&oa  DIIo..///y?3344G1gl	!!!QQQ$3qqq!!!t9,1133333	!QQQ$3q!!!t9,1133333	!QQQ$3q!!!t9,1133333	!!!Q$3qqq!t9,1133333	!!!Q$3qqq!t9,1133333	$3t9,1133333	$3t9,1133333	$3t9,1133333	$3t9,1133333	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;

r#   c                 t   t          j        d                              ddd          }t          j        |          }|                    |                     d                     t          j        |                     d                    }|d         }|d         j        }|j	        d d          |d d          k    
                                sJ |j	        d d d d f         |d d d d f         k    
                                sJ t          d           ddfD ]^}t          d           dddfD ]H}t          d           dddfD ]2}|||f}	|j	        |	         ||	         k    
                                sJ 3I_t          dd          t          dd          t          dd          t          dd          t          dd          t          dd          fD ]L}t          d           t          d           |f}	|j	        |	         ||	         k    
                                sJ Mt          dd          t          dd          fD ]}t          dd          t          dd          t          dd          t          dd          t          dd          fD ]}t          dd          t          dd          t          dd          t          dd          t          dd          t          dd          fD ]2}|||f}	|j	        |	         ||	         k    
                                sJ 3|                                 d S )N   r*   r+   r   r   r   )ri   rj   rk   r   r3   rn   rm   r<   r=   r   r   slicer>   )
r   rs   r   r   r   r   idx1idx2idx3nd_idxs
             r!   test_section_data_cubez)TestImageFunctions.test_section_data_cube  sI   IbMM!!!Q**oa  DIIo..///y?3344G1gl	!!!AAA&++-----	!!!QQQ$3qqq!!!t9,1133333
 4[[!Q' 	D 	DDtaA. D D"4[[!Q2 D DD"D$/FIf-V<AACCCCCCDD !QKK!QKK!QKK!QKK!QKK!QKK
 		< 		<D Dkk5;;5FIf%V499;;;;;; 1a[[%1++. 	D 	DDaaaaa D D !QKK!QKK!QKK!QKK!QKK!QKK 	D 	DD #D$/FIf-V<AACCCCCC	DD$ 	

r#   c                    t          j        d                              dddd          }t          j        |          }|                    |                     d                     t          j        |                     d                    }|d         }|d         j        }|j	        d d d d d d d d f         |d d d d d d d d f         k    
                                sJ |j	        d d d d d d f         |d d d d d d f         k    
                                sJ |j	        d d d d f         |d d d d f         k    
                                sJ |j	        d d          |d d          k    
                                sJ |j	        dd d d d d d f         |dd d d d d d f         k    
                                sJ |j	        dd d dd d f         |dd d dd d f         k    
                                sJ |j	        d d d d dd d f         |d d d d dd d f         k    
                                sJ |j	        d d ddd d f         |d d ddd d f         k    
                                sJ |j	        d d d d d d df         |d d d d d d df         k    
                                sJ |                                 d S )N   r,   r   r   r   r   r   s         r!   test_section_data_fourz)TestImageFunctions.test_section_data_fourF  s"   IcNN""1aA..oa  DIIo..///y?3344G1gl	!!!QQQ111*%QQQ111aaaZ8==?????	!!!QQQ'"c!!!QQQ'l27799999	!!!QQQ$3qqq!!!t9,1133333	!!!AAA&++-----	!QQQ111*%Q111aaaZ8==?????	!QQQ111*%Q1aaaZ8==?????	!!!QQQ111*%QQQ1aaaZ8==?????	!!!Q111*%QQQ1aaaZ8==?????	!!!QQQ1*%QQQ111aZ8==?????

r#   c                 j   t          j        |                     d                    }|d         }|d         j        }|j        ddddf         |ddddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        d         |d         k                                    sJ |j        d         |d         k                                    sJ |j        d         |d         k                                    sJ |j        d         |d         k                                    sJ |j        ddddf         |ddddf         k                                    sJ |j        dd	ddf         |dd	ddf         k                                    sJ |j        dddd	f         |dddd	f         k                                    sJ |j        dd	dd	f         |dd	dd	f         k                                    sJ |                                 t          j        |                     d                    }|d         }|j        ddddf         |ddddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        dddf         |dddf         k                                    sJ |j        d         |d         k                                    sJ |j        d         |d         k                                    sJ |j        d         |d         k                                    sJ |j        d         |d         k                                    sJ |j        ddddf         |ddddf         k                                    sJ |j        dd	ddf         |dd	ddf         k                                    sJ |j        dddd	f         |dddd	f         k                                    sJ |j        dd	dd	f         |dd	dd	f         k                                    sJ |j        rJ |                                 dS )
z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/143

        This is like test_section_data_square but uses a file containing scaled
        image data, to test that sections can work correctly with scaled data.
        
scale.fitsr   Nr   r   r   r   r   r*   )r   r<   r=   r   r   r>   _data_loaded)r   r   r   r   s       r!   test_section_data_scaledz+TestImageFunctions.test_section_data_scaledY  s    y<0011G1gl	!!!QQQ$3qqq!!!t9,1133333	!QQQ$3q!!!t9,1133333	!QQQ$3q!!!t9,1133333	!!!Q$3qqq!t9,1133333	!!!Q$3qqq!t9,1133333	$3t9,1133333	$3t9,1133333	$3t9,1133333	$3t9,1133333	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;

 y<0011G	!!!QQQ$3qqq!!!t9,1133333	!QQQ$3q!!!t9,1133333	!QQQ$3q!!!t9,1133333	!!!Q$3qqq!t9,1133333	!!!Q$3qqq!t9,1133333	$3t9,1133333	$3t9,1133333	$3t9,1133333	$3t9,1133333	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;	!A#qs(#s1Q3!8}499;;;;;>!!!

r#   c                    t          j        |                     d          d          5 }|d         j        j        t	          j        d          k    sJ 	 d d d            n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        j        t	          j        d          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   Tdo_not_scale_image_datar   z>i2r   )r   r<   r=   r   ri   r   r   s     r!   test_do_not_scale_image_dataz/TestImageFunctions.test_do_not_scale_image_data  sA   Ytyy..MMM 	9QU7<%%88888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 Ytyy..// 	=47<%))<)<<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s#   +A""A&)A&+CCCc                    t          j        |                     d          t          j        g d                     t          j        ddg                              d          }t          j        |                     d          |           t          j        |                     d          d          5 }|d	         j	        j
        dk    sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )zRegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/56
        (BZERO and BSCALE added in the wrong location when appending scaled
        data)
        r   uint8r   rd   d   uint16Tuintr   N)r   rn   rm   ri   r   zerosastyper   r<   r=   r   )r   r   fs      r!   test_append_uint_dataz(TestImageFunctions.test_append_uint_data  s    	TYY//bhr6Q6Q6QRRRRHc3Z  ''11DIIo..Q7777Ytyy11=== 	/Q49?h.....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   9C  C$'C$c                     t          j        t          j                            dd                    }|                    ddd           dS )zT
        Regression test for https://github.com/astropy/astropy/issues/6399
        r  r   r   r   )typebscalebzeroN)r   r   ri   randomrandscale)r   r   s     r!   %test_scale_with_explicit_bzero_bscalez8TestImageFunctions.test_scale_with_explicit_bzero_bscale  sC     }RY^^C5566 	


33333r#   c                 x   dD ]}d|z  dz
  }|dk    rt          j        |          }d| }t          j        d|          }|                    |           |t          j        d|          z  }t          j        |          }t          j        |j        |k              sJ |j        j	        j
        d| k    sJ d	|j        v sJ |j        d	         d|dz
  z  k    sJ d| d
}|                    |                     |                     t          j        |                     |          d          5 }|d         }t          j        |j        |k              sJ |j        j	        j
        d| k    sJ d	|j        v sJ |j        d	         d|dz
  z  k    sJ 	 ddd           n# 1 swxY w Y   dS )z
        Regression test for https://github.com/astropy/astropy/issues/2305

        This ensures that an HDU containing unsigned integer data always has
        the appropriate BZERO value in its header.
        )       @   r*   r   r  r  r  r   rd   BZEROz.fitsTr  r   N)ri   uint64emptyfillrj   r   r3   r   r=   r   r   r   rn   rm   r<   )	r   int_sizemax_uintr   arruint_hdur   r   new_uint_hdus	            r!   test_uint_header_consistencyz/TestImageFunctions.test_uint_header_consistency  sQ    % 	M 	MH 8q(H2~~9X..%8%%E(3e,,,CHHX29S....CC000H6(-3./////=&+/@h/@/@@@@@ho----?7+hl0CDDDD-h---HTYYx00111499X..T::: Md#Awvl/3677777#(.37Hh7H7HHHHH,"55555#*73hl8KLLLLLM M M M M M M M M M M M M M M+	M 	Ms   :A&F--F1	4F1		from_file)FTdo_not_scale)Fc                    t          j        dd          }|rt          j        |          }d}|                    |                     |                     t          j        |                     |          |          5 }|d         }|j        }ddd           n# 1 swxY w Y   nt          j        ||          }d|j        v sJ d	|j        v sJ |j        d         d
k    sJ |j        d	         dk    sJ |j        dz  |_        |j        d         dk     sJ d|j        vsJ d	|j        vsJ d}|                    |                     |                     t          j        |                     |                    5 }	|	d         j        dk    	                                sJ 	 ddd           dS # 1 swxY w Y   dS )a<  
        Regression test for https://github.com/astropy/astropy/issues/4974

        BZERO/BSCALE should be removed if data is converted to a floating
        point type.

        Currently excluding the case where do_not_scale_image_data=True
        because it is not clear what the expectation should be.
        r  r  r   zunsigned_int.fitsr   r   NBSCALEr  r   i   r   BITPIXztest_uint_to_float.fits)
ri   r  r   r3   rn   rm   r<   r=   r   r   )
r   r  r   r  tmp_uintr   r  r  _r   s
             r!   5test_uint_header_keywords_removed_after_bitpix_changezHTestImageFunctions.test_uint_header_keywords_removed_after_bitpix_change  sm    hs(+++ 	R s++H*HTYYx00111		(##\   "Q4M" " " " " " " " " " " " " " " sLQQQH
 8?****(/))))x(A----w'50000 !+ x(1,,,, x....ho---- -8,,---Ytyy**++ 	-tGLA%**,,,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s$    BB #B &F77F;>F;c                    t          j        dt           j                  }d|d<   t          j        |          }d|j        d<   |                    |                     d                     t          j        |                     d                    5 }t          j	        |d         j
        d                                                   sJ 	 ddd           dS # 1 swxY w Y   dS )	zhTest image data with blank spots in it (which should show up as
        NaNs in the data array.
        
   r)  r   i  r   rd   BLANKr   N)ri   r  r   r   r   r   rn   rm   r<   isnanr=   r   r   r  r   r   s       r!   test_blankszTestImageFunctions.test_blanks  s   
 hxrx000Am%%%!
7DIIo..///Ytyy1122 	3d8DGLO,,00222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   :CC #C c                    t          j        dt           j                  }t          j        |          }d|j        d<   t          j        t          d          5 }|	                    | 
                    d                     d	d	d	           n# 1 swxY w Y   t          |          d
k    sJ t          j        t          d          5 }t          j        | 
                    d                    5 }t          j        ||d         j        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   t          |          d
k    sJ d	S )z
        Test that invalid use of the BLANK keyword leads to an appropriate
        warning, and that the BLANK keyword is ignored when returning the
        HDU data.

        Regression test for https://github.com/astropy/astropy/issues/3865
        r-   r   rd   r*   r*  !Invalid 'BLANK' keyword in headerr   r   Nr   r   )ri   rj   float64r   r3   r   r?   r   r   rn   rm   r^   r<   r   r=   )r   r  r   r   hs        r!   test_invalid_blanksz&TestImageFunctions.test_invalid_blanks  s    i,,,o3'''
7\&I
 
 
 	4KK		/22333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 1vv{{{{ \&I
 
 
 	0499_5566 0!vcQqTY.//////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0
 1vv{{{{{{sH   )BBB(D=3&D&D=&D*	*D=-D*	.D==EEz(ignore:Invalid 'BLANK' keyword in headerc                 *   t          j        dt           j                  }t          j        |          }|                    dd           |                     d          }d|j        d	<   d|j        d
<   |	                    |           t          j
        |          5 }|d	         j        }t          j        |d	                   sJ t          j        t          j        j        d          5  |	                    |                     d                     ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j
        |                     d                    5 }d
|d	         j        vsJ |d	         j        }t          j        |d	                   sJ 	 ddd           n# 1 swxY w Y   t          j
        |dd          5 }|d	         j        }t          j        |d	                   sJ 	 ddd           n# 1 swxY w Y   t          j
        |d          5 }|d	         j        d
         dk    sJ |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 )a  
        Test that when auto-rescaling integer data with "blank" values (where
        the blanks are replaced by NaN in the float data), that the "BLANK"
        keyword is removed from the header.

        Further, test that when using the ``scale_back=True`` option the blank
        values are restored properly.

        Regression test for https://github.com/astropy/astropy/issues/3865
        r-   r   rd   rP   gGz?r  r   i'  r   r*  r/  r   
test2.fitsNTr   )
scale_backrg   r   r"  )ri   rj   r   r   r3   r  rm   r=   r   rn   r<   r+  r?   r   r   VerifyWarning)	r   r  r   r   r   r=   hdul2hdul3hdul4s	            r!   test_scale_back_with_blanksz.TestImageFunctions.test_scale_back_with_blanks/  s    i***o3'''		'$	''' 99[))"
7HYx   	6D7<D8DG$$$$$)1U   6 6 TYY|445556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 Ytyy..// 	%5%(/11118=D8DG$$$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% YxDx@@@ 	%E8=D 8DG$$$$$$		% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% Yx>>> 	,%8?7+t33338?8,44448=#t+++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,sn   AD:.)D#D:#D'	'D:*D'	+D::D>D>,;F44F8;F8*HHH.AJJJc                    t          j        d          dz
  }t          j        |          }d|j        d<   |                    |                     d                     t          j        |                     d                    5 }|dz  }|d         j        |k    	                                sJ 	 ddd           dS # 1 swxY w Y   dS )zUTest use of the BZERO keyword in an image HDU containing float
        data.
        r(  r   rd   r   r  r   N)
ri   r  r   r   r   rn   rm   r<   r=   r   r,  s       r!   test_bzero_with_floatsz)TestImageFunctions.test_bzero_with_floatsg  s    
 hx  1$m%%%!
7DIIo..///Ytyy1122 	/d1HCGLC',,......	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/   +B??CCc                    t          j        |                     d                    }|d         j        }|                    |                     d          d           |                                 t          j        |                     d                    }|d         j        |k                                    sJ |                                 t          j        |                     d                    }|                    |                     d          d           |                                 t          j        |                     d                    }|d         j        |k                                    sJ |                                 t          j        |                     d          d          }|                    |                     d          dd           |                                 t          j        |                     d                    }|d         j        }|                                 t          j        |                     d          d	
          }|                                 t          j        |                     d                    }|d         j        |k                                    sJ |                                 dS )zRegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/84 and
        https://aeon.stsci.edu/ssb/trac/pyfits/ticket/101
        fixed-1890.fitsr   r   T	overwriter   	silentfixrB  output_verifyr   rf   N)r   r<   r=   rn   rm   r>   r   )r   r   	orig_datas      r!   !test_rewriting_large_scaled_imagez4TestImageFunctions.test_rewriting_large_scaled_imageu  sL   
 y#45566GL	TYY//4@@@

y?3344Q	)..00000


 y#45566TYY//4@@@

y?3344Q	)..00000

 y#455tTTTIIo&&$k 	 	
 	
 	
 	

y?3344GL	

y?33(CCC

y?3344Q	)..00000

r#   c                    |                      d           t          j        |                     d          d          5 }|d         j                                        }|d         j                                        }|d= ||d         _        ddd           n# 1 swxY w Y   t          j        |                     d                    5 }||d         j        k                                    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/105

        Replacing the original header to an image HDU and saving should update
        the NAXISn keywords appropriately and save the image data correctly.
        r:   r   rf   r   zNAXIS*N)	copy_filer   r<   rm   r=   copyr   r   )r   r   rF  hdr_copys       r!   test_image_update_headerz+TestImageFunctions.test_image_update_header  so    	|$$$Ytyy..X>>> 	&$Q))++IAw~**,,H"%DGN		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& Ytyy..// 	54a-22444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s$   ABB!B&D  DDz+ignore:unclosed transport <asyncio.sslprotoc                    |                      d           t          j        |                     d                    j        }t          j        d           t          j        |                     d          d          	                                 |t          j        |                     d                    j        k    sJ t          j        d           t          j        |                     d          d          }|d         j
        }|	                                 |t          j        |                     d                    j        k    sJ t          j        |                     d          d          }|d         j
        j        t          j        d          k    sJ |d         j        d         dk    sJ d	|d         j        vsJ d
|d         j        vsJ ||d         j
        k                                    sJ d|d         j
        _        |	                                 t          j        |                     d                    }|d         j        dk    sJ |d         j
        j        t          j        d          k    sJ |d         j        d         dk    sJ d	|d         j        vsJ d
|d         j        vsJ |	                                 dS )al  
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/119
        (Don't update scaled image data if the data is not read)

        This ensures that merely opening and closing a file containing scaled
        image data does not cause any change to the data (or the header).
        Changes should only occur if the data is accessed.
        r   r   r   rf   r   z>f4r#  r  r"  *   r)  N)rI  r   statrm   st_mtimetimesleepr   r<   r>   r=   r   ri   r   r   shape)r   mtimer   rF  s       r!   test_open_scaled_in_update_modez2TestImageFunctions.test_open_scaled_in_update_mode  s    	|$$$		,//009
1	$))L))999??AAA 		, 7 788AAAAA 	
1y<00(;;GL	

 		, 7 788AAAAAy<00x@@@Aw|!RXe__4444Aw~h'3....d1gn,,,,tAw~----T!W\)..00000 &Q

y<0011Aw}((((Aw|!RXe__4444Aw~h'3....d1gn,,,,tAw~----

r#   c                 *   |                      d           t          j        |                     d          dd          5 }|d         j        d         }|d         j        d         }|d         j        d         }|d         j                                        }d|d         j        d<   d	d	d	           n# 1 swxY w Y   t          j        |                     d          d
          5 }|d         j        d         |k    sJ |d         j        d         |k    sJ |d         j        d         |k    sJ t          t          j	        | |z                      }|d         j        d         |k    
                                sJ 	 d	d	d	           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        dd	         |dd	         k    
                                sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )z|A simple test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/120

        The scale_back feature for image HDUs.
        r   r   Trg   r6  r   r#  r  r"  Nr   r   )rI  r   r<   rm   r   r=   rJ  intmathfloorr   )r   r   orig_bitpix
orig_bzeroorig_bscalerF  
zero_points          r!   test_scale_backz"TestImageFunctions.test_scale_back  s    	|$$$Ytyy..X$OOO 	 SWq'.2Ka0Jq'.2KQ))++IDGLO	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  Ytyy..MMM 	9QU7>(+{::::7>'*j88887>(+{::::TZk(ABBCCJGLOz166888888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 Ytyy..// 	=4GL$	!""5::<<<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s8    A)B55B9<B9)BFFF6HHHc                 *   t          j        |                     d                    5 }|d         j         d|d         _        |d                             |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        J |d         j        d         dk    sJ d|d         j        vsJ d|d         j        vsJ 	 ddd           dS # 1 swxY w Y   dS )	zX
        Regression test for https://github.com/spacetelescope/PyFITS/issues/27
        r:   r   Nr   NAXISr   NAXIS1NAXIS2)r   r<   r=   rn   rm   r   )r   r1  s     r!   test_image_nonez"TestImageFunctions.test_image_none  s   
 Ytyy..// 	11aDIIAaDIaDLL;//000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1
 Ytyy--.. 	/!Q49$$$Q4;w'1,,,,1Q4;....1Q4;.....		/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s%   A	A==BB/ADDDc                 "   t          j        dt           j                  }t          j        |          }d|j        d<   t          j        t          j        j	        d          5  |
                    |                     d                     ddd           n# 1 swxY w Y   t          j        t                    5 }t          j        |                     d                    5 }t          j        |d	         j        |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   t!          |          d
k    sJ d}|t#          |d	         j                  v sJ d}|t#          |d         j                  v sJ dS )z
        Regression test for https://github.com/astropy/astropy/issues/2711

        If the BLANK keyword contains an invalid value it should be ignored for
        any calculations (though a warning should be issued).
        r  r   nanr*  z2Invalid value for 'BLANK' keyword in header: 'nan'r   r   Nr   r*   z+Invalid value for 'BLANK' keyword in headerzInvalid 'BLANK' keywordr   )ri   rj   r0  r   r3   r   r?   r   r   r7  rn   rm   r   r<   r   r=   r^   rB   message)r   r=   r   r   r   msgs         r!   test_invalid_blankz%TestImageFunctions.test_invalid_blank  s&    yBJ///od###
7\K%G
 
 
 	0 	0 KK		+..///		0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 \,-- 	4499[1122 4dvd1gld23333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 1vv{{{{;c!A$,'''''''c!A$,''''''''sH   $)BB B=(D/%&DD/D	D/D	 D//D36D3c                 0   t          j        dt           j                  }t          j        |                                          }|                    d           |                    |                     d                     t          |                     d          d          5 }|
                                }ddd           n# 1 swxY w Y   t          j                            |          }t          j        |d	         j        |          sJ dS )
zT
        Regression test for https://github.com/astropy/astropy/issues/2710
        r  r   rd   g?r4  r   rbNr   )ri   rj   r   r   r3   rJ  r  rn   rm   r<   readr2   
fromstringallcloser=   )r   rs   r   r  	file_datar   s         r!   test_scaled_image_fromfilez-TestImageFunctions.test_scaled_image_fromfile)  s    Ic,,,o16688,,,			DIIk**+++$))K(($// 	!1I	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! |&&y11{47<+++++++s   )C

CCc                 b    t          j                    }t          j        d          }||_        dS )z4
        Test data assignment - issue #5087
        r   N)r   r   ri   rj   r=   )r   imars      r!   test_set_dataz TestImageFunctions.test_set_data;  s'    
 ]__Yr]]r#   c                    t          j        ddt           j                  }t          j        |                                          }t          j        |                                          }|                    dd           |                    dd           t          j        |j        |j                  sJ d	S )
zT
        Regression test for https://github.com/astropy/astropy/issues/4600
        r     r   rd   rP        X@r  r   N)	ri   rj   rP   r   r3   rJ  r  rp  r=   r   rs   hdu1r   s       r!   test_scale_bzero_with_int_dataz1TestImageFunctions.test_scale_bzero_with_int_dataD  s    
 Ic3bh///AFFHH---AFFHH--- 	

7$
'''

7"
%%%{49di0000000r#   c                    t          j        ddt           j                  }t          j        |                              |                     d                     t          j        |                     d          dd          5 \  }d|j        d	d	<   t          j	        |j        d          sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )
z
        Extend fix for #4600 to assignment to data

        Suggested by:
        https://github.com/astropy/astropy/pull/4602#issuecomment-208713748
        r  rx  r   r   r   TrY  r   N)
ri   rj   r  r   r3   rn   rm   r<   r=   rp  )r   rs   r   s      r!   test_scale_back_uint_assignmentz2TestImageFunctions.test_scale_back_uint_assignmentS  s     Ic3bi000""499[#9#9:::Ytyy--HNNN 	, S
CHQQQK;sx++++++		, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,r>  c                    d}t          j        t          |          5  t          j        d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        d           d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        t          j        d                     d d d            n# 1 swxY w Y   t          j        t          |          5  t          j        t          j        d                     d d d            d S # 1 swxY w Y   d S )Nz9data object array\(1\) should have at least one dimensionr   r   rd   )r?   r@   	TypeErrorr   r   r3   ri   r   )r   rj  s     r!   test_hdu_creation_with_scalarz0TestImageFunctions.test_hdu_creation_with_scalarc  s   J]9C000 	" 	"Mq!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"]9C000 	$ 	$O####	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ ]9C000 	, 	,Mrx{{++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,]9C000 	. 	.O!----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.sG   A  AA&BBB.(C""C&)C&(D==EEN)-__name__
__module____qualname__r"   r/   r8   rG   rY   r`   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r?   markparametrizer&  r-  r2  filterwarningsr;  r=  rG  rL  rW  ra  rf  rk  rr  rv  r}  r  r  rK   r#   r!   r   r      s       . . .,  <; ; ;&
 
 
0
 
 
", ", ",H? ? ?.I I I./ / /8L
 L
 L
\  
  &K K KZ    .5 5 5n  &+ + +Z= = =/ / /4 4 4"M "M "MH [kM::[nx886- 6- 98 ;:6-p3 3 3  > [ JKK5, 5, LK5,n/ / /$ $ $L5 5 5* [ MNN2 2 ON2h= = =2/ / / ( ( (6, , ,$  1 1 1, , , 
. 
. 
. 
. 
.r#   r   c                   d   e Zd Zd Zej                            d ej        dej	                  ddf ej        dej	                  ddf ej        dej	                  d	df ej        d
          dz   ddf ej        d          ddfg          ej                            dddg          d                         Z
ej        j        d             Zd Zd Zd Zd Zd Zej        j        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'ej                            d.d/ej(        ej	        fd/ej)        ej	        fd/ej*        ej+        fd0ej(        ej	        fd0ej)        ej	        fd0ej*        ej+        fg          d1             Z,ej                            d2ej(        ej)        ej-        ej*        ej.        f          d3             Z/ej                            d4 e0d5e1                    d6             Z2d7 Z3d8 Z4d9 Z5d: Z6d; Z7d< Z8d=S )>TestCompressedImagec                 h   t          j                    }|j        J |                    |                     d                     t          j        |                     d          d          5 }t          |          dk    sJ t          |d         t           j                  sJ |d         j        J t          j	        dt          j
                  |d         _        ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          |          dk    sJ t          |d         t           j                  sJ t          j        |d         j        t          j	        dt          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/2595
        Nr   r   rf   r*   r   r  r   )r   CompImageHDUr=   rn   rm   r<   r^   r]   ri   rj   r   r   r   r   r   s      r!   
test_emptyzTestCompressedImage.test_emptyq  s   
 !!xDIIk**+++Ytyy--H=== 	:t99>>>>d1gt'8999997<''' 9S999DGL	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: Ytyy--.. 	J$t99>>>>d1gt'8999996$q',")Crx*H*H*HHIIIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	Js&   .A2C,,C03C0A;F''F+.F+r=   compression_typequantize_levelr*   r)  r)  r   RICE_1r  GZIP_1g{GzGZIP_2r  r  r   HCOMPRESS_1r(  PLIO_1
byte_order<>c                 @   |                     |          }t          j                    }t          j        |          }t          j        |d||          }|                    |           |                    |                     d          d           |                                 t          j	        |                     d                    5 }|d         j
        |k                                    sJ |d         j        d         |j        d         k    sJ |d         j        d         |j        d         k    sJ |d         j        d	         |j        d	         k    sJ |d         j        d
         |j        d
         k    sJ 	 d d d            d S # 1 swxY w Y   d S )NrM   )r   r  r  r   TrA  r   rc  rd  re  r#  )newbyteorderr   r3   r2   r  r   rn   rm   r>   r<   r=   r   r   )	r   r=   r  r  r  r6   r7   chdury   s	            r!   test_comp_imagez#TestCompressedImage.test_comp_image  s      ,,o''l;'' -)	
 
 
 	

4DIIo..$???		Ytyy1122 	CbqEJ$&++-----a5<(DK,@@@@@a5<)T[-BBBBBa5<)T[-BBBBBa5<)T[-BBBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs   B6FFFc                 L   ddl }t          j                            d           t	          d          }t          |d          5 }t          j        |                    |                    }ddd           n# 1 swxY w Y   |t          j                            dd          dz  z   }t          j
        |                              |                     d                     t          j        |d	d
dd                              |                     d                     t          j        |d	d
dd                              |                     d                     t          j        |                     d                    }t          j        |                     d                    }t          j        |                     d                    }t          j        ||          rJ t          j        t          j        ||z
            dd          sJ t          j        t          j        ||z
            dd          sJ t          j        t          j        ||z
            dd          sJ t          j        t          j        ||z
            dd          sJ dS )z
        Regression test for https://github.com/astropy/astropy/issues/5969

        Test that quantize_level is used.

        r   NrP  zEhttps://github.com/scipy/dataset-ascent/blob/main/ascent.dat?raw=truerm  i   r)  zim1.fitsr  r   r   r-   )r  quantize_methodr  dither_seedzim2.fitsizim3.fitsg      gMbP?)atolg      ?g?2   )pickleri   r  seedr   r<   r   loadrandnr   r   rn   rm   r  rq   r   iscloseminmax)	r   r  r   r  
scipy_datar=   im1im2im3s	            r!   test_comp_image_quantize_levelz2TestCompressedImage.test_comp_image_quantize_level  s    	
	r S
 
 % 	2!&++a..11J	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 BIOOC55::d##DIIj$9$9:::%	
 	
 	
 '$))J''
(
(
(%	
 	
 	
 '$))J''
(
(
(l499Z0011l499Z0011l499Z0011>#s+++++z"&s++T======z"&s++St<<<<<<z"&s++St<<<<<<z"&s++Rd;;;;;;;;s   (A77A;>A;c           	          t          j        t          t          j        t          j        dt
          j                  dddd           dS )z
        Tests compression with the HCOMPRESS_1 algorithm with data that is
        not 2D and has a non-2D tile size.
        r  r   rM   r  r  )r   r  r  
tile_shapeN)r?   r@   r   r   r  ri   r  r   r   s    r!   +test_comp_image_hcompression_1_invalid_dataz?TestCompressedImage.test_comp_image_hcompression_1_invalid_data  sP     	H[
333*"	
 	
 	
 	
 	
 	
r#   c                    t          j        dt           j                                      ddd          }t	          j        |dddd	          }|                    |                     d
                     t	          j        |                     d
                    5 }t          j	        |d         j
        |z
                                            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/171

        Tests that data containing more than two dimensions can be
        compressed with HCOMPRESS_1 so long as the user-supplied tile size can
        be flattened to two dimensions.
        i,  r   r+   r)  rM   r  r  )r   r-   r-   )r=   r   r  r  r  r   g?N)ri   rj   r   rk   r   r  rn   rm   r<   absr=   r  )r   cuber   r   s       r!   %test_comp_image_hcompress_image_stackz9TestCompressedImage.test_comp_image_hcompress_image_stack  s:    yBJ///772rBB* 
 
 
 	DIIk**+++Ytyy--.. 	F$ 6$u+*T1226688:EEEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs   ;C''C+.C+c                    t          j        d                              dd          }|d                             d                                          dz  dz   }t          j        |t          t                    }|	                    | 
                    d                     t          j        | 
                    d                    5 }t          |d         t
          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         |k    sJ t          j        |d         j        |k              sJ 	 ddd           dS # 1 swxY w Y   dS )aF  
        Regression test for https://github.com/spacetelescope/PyFITS/issues/32

        Ensure that when floating point data is compressed with the
        SUBTRACTIVE_DITHER_1 quantization method that the correct ZDITHER0 seed
        is added to the header, and that the data can be correctly
        decompressed.
        g      Y@r)  r   r   i'  r   )r=   r  r  r   ZQUANTIZr   ZDITHER0N)ri   rj   rk   viewsumr   r  r   r
   rn   rm   r<   r]   _headerr   r=   )r   r   csumr   r   s        r!   test_subtractive_dither_seedz0TestCompressedImage.test_subtractive_dither_seed  s    	%  ((R00ag&&**,,u490,
 
 

 	DIIk**+++Ytyy--.. 	1$d1gt'899999a00007?:.2HHHHHa00007?:.$66666$q',%/000000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   BE66E:=E:c                    t          j        |                     d          d          5 }t          |d         t           j                  sJ t          |d         t           j                  rJ 	 d d d            n# 1 swxY w Y   t          j        |                     d                    5 }t          |d         t           j                  sJ 	 d d d            d S # 1 swxY w Y   d S )N	comp.fitsTdisable_image_compressionr   )r   r<   r=   r]   BinTableHDUr  r   s     r!   test_disable_image_compressionz2TestCompressedImage.test_disable_image_compression  sT   Ytyy--NNN 	>RV d1gt'788888!$q'4+<======		> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> Ytyy--.. 	:$d1gt'8999999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   AA<<B B .#CC#&C#c                    |                      d           t          j        |                     d                    j        }t          j        d           t          j        |                     d          d          	                                 |t          j        |                     d                    j        k    sJ dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/167

        Similar to test_open_scaled_in_update_mode(), but specifically for
        compressed images.
        r  r   r   rf   N)
rI  r   rQ  rm   rR  rS  rT  r   r<   r>   )r   rV  s     r!   #test_open_comp_image_in_update_modez7TestCompressedImage.test_open_comp_image_in_update_mode#  s     	{###		+..//8
1	$))K((x888>>@@@ 		+ 6 677@@@@@@@r#   c                 v   t          j        |                     d          d          5 }t          j        |d         j        |d         j                  }|                    |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    j	        }t          j        d           t          j        |                     d          d	                                           |t          j        |                     d                    j	        k    sJ t          j        d           t          j        |                     d          d          }|d         j         |                                 |t          j        |                     d                    j	        k    sJ t          j        |                     d          d	          }|d         j        j        t          j        d
          k    sJ |d         j        d         dk    sJ d|d         j        vsJ d|d         j        vsJ d|d         j        _        |                                 t          j        |                     d                    }|d         j        dk    sJ |d         j        j        t          j        d
          k    sJ |d         j        d         dk    sJ d|d         j        vsJ d|d         j        vsJ |                                 dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/88 2

        Identical to test_open_scaled_in_update_mode() but with a compressed
        version of the scaled image.
        r   Tr   r   r=   r   Nr   r   rf   r   r#  rN  r  r"  rO  )r   r<   r=   r  r   rn   rm   r   rQ  rR  rS  rT  r>   r   ri   rU  )r   r   r  rV  s       r!   *test_open_scaled_in_update_mode_compressedz>TestCompressedImage.test_open_scaled_in_update_mode_compressed7  s	    Ytyy..MMM 	2QU$$q',tAw~NNNDLL<00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 		,//009
1	$))L))999??AAA 		, 7 788AAAAA 	
1y<00(;;Q

 		, 7 788AAAAAy<00x@@@Aw|!RXi%8%88888Aw~h'3....d1gn,,,,tAw~---- &Q

y<0011Aw}((((Aw|!RXi%8%88888Aw~h'3....d1gn,,,,tAw~----

   ABBBc                    t          j        |                     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         j        |d         j        k              sJ t          |d         j        |d         j                  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   r<   r=   rn   rm   ri   r   r   compressed_datar   r   hdul1r8  s       r!   (test_write_comp_hdu_direct_from_existingz<TestCompressedImage.test_write_comp_hdu_direct_from_existingl  s   Ytyy--.. 	4$GOODIIk22333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 Ytyy--.. 	%499[1122 eveAhmuQx}<=====%!H,eAh.F                   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sH   /A##A'*A'(D;=AD#D;#D'	'D;*D'	+D;;D?D?c                    t          j        |                     d          d          5 }t          j        |d         j        |d         j                  }|                    |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    }|d         j        }|                    |                     d	          d
           |                                 t          j        |                     d	                    }|d         j        |k                                    sJ |                                 t          j        |                     d                    }|                    |                     d	          d
           |                                 t          j        |                     d	                    }|d         j        |k                                    sJ |                                 t          j        |                     d          d          }|                    |                     d	          dd           |                                 t          j        |                     d	                    }|d         j        }|                                 t          j        |                     d	          d          }|                                 t          j        |                     d	                    }|d         j        |k                                    sJ |                                 dS )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/88 1

        Identical to test_rewriting_large_scaled_image() but with a compressed
        image.
        r@  Tr   r   r  zfixed-1890-z.fitsNr   r   rA  rC  rD  r   rf   )	r   r<   r=   r  r   rn   rm   r>   r   )r   r   r  rF  s       r!   ,test_rewriting_large_scaled_image_compressedz@TestCompressedImage.test_rewriting_large_scaled_image_compressedw  s    YII'(($
 
 
 	9$$q',tAw~NNNDLL#677888		9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 y#67788GL	TYY//4@@@

y?3344Q	)..00000


 y#67788TYY//4@@@

y?3344Q	)..00000

 y#677QUVVVIIo&&$k 	 	
 	
 	
 	

y?3344GL	

y?33(CCC

y?3344Q	)..00000

r  c                 (   t          j        |                     d          d          5 }t          j        |d         j        |d         j                  }|                    |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d          dd          5 }|d	         j        d
         }|d	         j        d         }|d	         j        d         }|d	         j                                        }d|d	         j        d<   ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }|d	         j        d
         |k    sJ |d	         j        d         |k    sJ |d	         j        d         |k    sJ t          t          j
        | |z                      }|d	         j        d         |k                                    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d	         j        d	d         |d	d         k                                    sJ t          j        |                     d                    5 }d|d         j        d<   |d	         j        |d         j        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 )z
        Regression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/88 3

        Identical to test_scale_back() but uses a compressed image.
        r   Tr   r   r  Nr   rY  r   r#  r  r"  )r   r<   r=   r  r   rn   rm   rJ  rZ  r[  r\  r   )	r   r   r  r]  r^  r_  rF  r`  r8  s	            r!   test_scale_back_compressedz.TestCompressedImage.test_scale_back_compressed  s    Ytyy..MMM 	2QU$$q',tAw~NNNDLL<00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 Ytyy..X$OOO 	 SWq'.2Ka0Jq'.2KQ))++IDGLO	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  Ytyy..MMM 	9QU7>(+{::::7>'*j88887>(+{::::TZk(ABBCCJGLOz166888888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 Ytyy..// 	=4GL$	!""5::<<<<< 499\2233 =u $%aa Qa5::<<<<<<	= = = = = = = = = = = = = = =		= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=sp   ABBB A)D55D9<D9)BHHHAL!AK/#L/K3	3L6K3	7LLLc                 0   t           j                            d          }|                    d          }t	          j        |d          }|                    |                     d                     t	          j        |                     d                    5 }t          j	        ||d         j
        z
                                            dk    sJ 	 d	d	d	           n# 1 swxY w Y   ~t	          j        |dd
          }|                    |                     d          d           t	          j        |                     d                    5 }||d         j
        k                                    sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/198rP     r  sizer  )r=   r  r   r   g        Nr  TrA  )ri   r  default_rngnormalr   r  rn   rm   r<   r  r=   r  r   )r   rngnoisechdu1r1  chdu2s         r!   test_lossless_gzip_compressionz2TestCompressedImage.test_lossless_gzip_compression  s    i##B''


))!uxHHH 	dii,,---Ytyy--.. 	9!6%!A$)+,,0022S88888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 !#
 
 
 	dii,,===Ytyy--.. 	.!QqTY&++------	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s$   ;C##C'*C'&FFFc                    t          j        ddt           j                  dz  ddt           j        f         t          j        dd          z   }t           j                            d           t           j                            d	          }||d|j        d
         d|j        d         f<   t          j	        |dd          }|
                    |                     d                     t          j        |                     d          d          5 }t          j        d|d         j        d                   sJ t          j        d|d         j        d                   sJ 	 ddd           dS # 1 swxY w Y   dS )zERegression test for https://aeon.stsci.edu/ssb/trac/pyfits/ticket/199r   r   r   r)  Nrc   i9  )      r  r   r  )r\   rc   r  r  r   Tr  z^1PB\(\d+\)$TFORM1TFORM2)ri   rj   r   newaxisr  r  uniformrU  r   r  rn   rm   r<   rer   r   )r   data2data1r  r1  s        r!   test_compression_column_tformsz2TestCompressedImage.test_compression_column_tforms  s   
 1arz222R7BJG")qK
 K
 
 		t	!!~!6649A 0%+a. 001 fUUUTYY{++,,,Ytyy--NNN 	DRS8OQqT[-BCCCCC8OQqT[-BCCCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   AE66E:=E:c                    |                      d           t          j        |                     d          d          5 }t	          |d         t          j                  sJ d|d         j        d<   d|d         j        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d           n# 1 swxY w Y   t          j        |                     d          d          5 }|d         j        }d	||                    d
          <   ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        d
         d	k    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }d|d         j        d<   ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          |d         j        d         
                                          ddgk    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }|d         j        }|                    d
          }d|||dz   <   ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          |d         j        d         
                                          ddgk    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }d|d         j        d<   ddd           n# 1 swxY w Y   t          j        |                     d                    5 }|d         j        d         d         dk    sJ |d         j        d         d         dk    sJ 	 ddd           n# 1 swxY w Y   t          j        |                     d          d          5 }|d         j        }|d= |                    d
          }|||dz   = ddd           n# 1 swxY w Y   t          j        |                     d                    5 }d|d         j        vsJ d|d         j        vsJ d
|d         j        vsJ d
|d         j        vsJ d|d         j        vsJ d|d         j        vsJ 	 ddd           dS # 1 swxY w Y   dS )zWRegression test for
        https://github.com/spacetelescope/PyFITS/issues/23
        r  r   rf   r   testtest1test2NfooTEST1quxzTEST*barr*   zI am fire. I am death!)COMMENTr   r  TEST2)rI  r   r<   rm   r]   r  r   r  indexlistvalues)r   r   r    idxs       r!   test_compression_update_headerz2TestCompressedImage.test_compression_update_header  sj   
 	{###Ytyy--H=== 	/d1gt'899999&,DGN7#'.DGOG$	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 Ytyy--.. 	6$d1gn,,,,7>'*f4444d1gn,,,,7>'*g55555		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 Ytyy--H=== 	,q'.C&+C		'""#	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, Ytyy--.. 	4$7>'*e33333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 Ytyy--H=== 	,&+DGN7#	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, Ytyy--.. 	L$Qw/668899eU^KKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L Ytyy--H=== 	'q'.C))G$$C!&CcAg	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 Ytyy--.. 	L$Qw/668899eU^KKKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L Ytyy--H=== 	F-EDGN>*	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F Ytyy--.. 	M$7>),Q/3KKKKK7?9-a04LLLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M
 Ytyy--H=== 	#q'.CI))G$$CC#'M"		# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# Ytyy--.. 	2$DGN2222DGO3333$q'.0000$q'/1111$q'.0000$q'/11111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   ABBB AD""D&)D&&FFF:G!!G%(G%H22H69H6$;J,,J03J0 -LL L;NNNO$$O(+O(?Q""Q&)Q&.SSSA'U77U;>U;c                    d }t          j        |                     d                    5 }|d         j        } ||dd            ||dd            ||dd	            ||d
d           ddd           dS # 1 swxY w Y   dS )z
        Ensure that setting reserved keywords related to the table data
        structure on CompImageHDU image headers fails.
        c                    t          j        t                    5 }|| |<   d d d            n# 1 swxY w Y   t          |          dk    sJ t	          |d         j                                      d|d          sJ || vsJ d S )Nr   r   zKeyword z is reserved)r?   r   UserWarningr^   rB   ri  
startswith)r    keywordrC   r   s       r!   test_set_keywordzZTestCompressedImage.test_compression_update_header_with_reserved.<locals>.test_set_keyword;  s    k** %a$G% % % % % % % % % % % % % % %q66Q;;;;qt|$$//0R70R0R0RSSSSS#%%%%%%s   ,00r  r   TFIELDSr   TTYPE1FooZCMPTYPEASDFZVAL1N)r   r<   r=   r   )r   r  r   r    s       r!   ,test_compression_update_header_with_reservedz@TestCompressedImage.test_compression_update_header_with_reserved5  s    	& 	& 	& Ytyy--.. 	2$q'.CS)Q///S(E222S*f555S'5111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   AA::A>A>c                    t          j        |                     d                    5 }|d         j        }|d         j        }t          j        t          d          5 }|                    d           d d d            n# 1 swxY w Y   t          |          dk    sJ d|vsJ |                    dd           d	|v sJ |d
         dk    sJ d	|v sJ |d
         dk    sJ |                    d           d|v sJ |d         dk    sJ d|vsJ d|v sJ |d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r   Keyword 'TFIELDS' is reservedr   r  )r   r  r  T)endr   r   r  )CHECKSUMabcd1234r  r  ZHECKSUM)
r   r<   r=   r   r  r?   r   r   r   r^   r   r   imghdrtblhdrr   s        r!   test_compression_header_appendz2TestCompressedImage.test_compression_header_appendI  s   Ytyy--.. 	4$!W^F!W_Fk1PQQQ )UVi((() ) ) ) ) ) ) ) ) ) ) ) ) ) )q66Q;;;;F****MM/TM:::F????":&&&&F????":&&&&MM2333''''*%3333V++++''''*%33333'	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s6   6D6B 4D6 B	D6B	B D66D:=D:c                    t          j        |                     d                    5 }|d         j        }t	          |          dk     r'|                                 t	          |          dk     '|                    d           |                    d           |                    d           ddd           dS # 1 swxY w Y   dS )zZ
        Regression test for issue https://github.com/astropy/astropy/issues/5827
        r  r     )Q1_OSAVGr   z[adu] quadrant 1 overscan mean)Q1_OSSTDr   z [adu] quadrant 1 overscan stddev)Q1_OSMEDr   z [adu] quadrant 1 overscan medianN)r   r<   r=   r   r^   r   )r   r   r   s      r!   test_compression_header_append2z3TestCompressedImage.test_compression_header_append2_  s    Ytyy--.. 	O$!W^Ff++$$ f++$$ MMKLLLMMMNNNMMMNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   BB<<C C c                    t          j        |                     d                    5 }|d         j        }|d         j        }t          j        t          d          5 }|                    dd           d d d            n# 1 swxY w Y   t          |          dk    sJ d|vsJ |
                    d          dk    sJ |                    dd           d	|v sJ |                    d	          |                    d          dz
  k    sJ d	|v sJ |                    d	          |                    d          dz
  k    sJ |                    d	          }|                    d	d
           d|v sJ |                    d          |k    sJ d|v sJ |                    d          |                    d	          dz
  k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r   r  r   r  r  TELESCOP)OBSERVERz
Phil Plaitr  )r   r   )r   r<   r=   r   r  r?   r   r   insertr^   countr  )r   r   r  r  r   r  s         r!   test_compression_header_insertz2TestCompressedImage.test_compression_header_insertm  s   Ytyy--.. 	G$!W^F!W_Fk1PQQQ /UVdI.../ / / / / / / / / / / / / / /q66Q;;;;F****<<	**a//// MM*&@AAA''''<<
++v||J/G/G!/KKKKK''''<<
++v||J/G/G!/KKKKK ,,z**CMM*h///F????<<&&#----F????<<&&&,,z*B*BQ*FFFFFF1	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs6   6GB5GB	GB		E GGGc                 D   t          j        |                     d                    5 }|d         j        }|d         j        }t          j        t          d          5 }|                    dddd	           d d d            n# 1 swxY w Y   t          |          dk    sJ d|vsJ |
                    d          dk    sJ |d         dk    sJ |                    d
dd           |                    d
          |                    d          dz
  k    sJ |d
         dk    sJ |                    d          |                    d          dz
  k    sJ |d         dk    sJ |                    d          dk    sJ |                    d
          dk    sJ |d
         dk    sJ |                    d
dd	           |                    d
          |                    d          dz   k    sJ |d
         dk    sJ |                    d          |                    d          dz   k    sJ |d         dk    sJ |                    d          dk    sJ |                    d
          dk    sJ |d
         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr  r   zKeyword 'ZBITPIX' is reserved r   ZBITPIXM   asdfXTENSION)afterGCOUNTr   PCOUNT)beforeZGCOUNTZPCOUNTr-   r\   r*   )r   r<   r=   r   r  r?   r   r   setr^   r  r  r  s        r!   (test_compression_header_set_before_afterz<TestCompressedImage.test_compression_header_set_before_after  sd   Ytyy--.. 	)$!W^F!W_Fk1QRRR DVW

9b&

CCCD D D D D D D D D D D D D D Dq66Q;;;;F****<<	**a////)$**** JJxHJ555<<))V\\(-C-Ca-GGGGG(#r))))<<	**fll9.E.E.IIIII)$****<<))Q....<<))Q....(#q((((JJx(J333<<))V\\(-C-Ca-GGGGG(#q((((<<	**fll9.E.E.IIIII)$))))<<))Q....<<))Q....(#q(((((;	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s6   6JB8JB	JB	G;JJJc                    t          j        t          j        dgt          j                            }d|j        d<   |j        d         dgk    sJ |                    |                     d                     t          j        |                     d                    5 }|d         j        d         dg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/2363
        r   r   zhello worldr  r   r   N)	r   r  ri   r   r   r   rn   rm   r<   r  s      r!   )test_compression_header_append_commentaryz=TestCompressedImage.test_compression_header_append_commentary  s   
 !BH = = =>> -
9z)$7777DIIk**+++Ytyy--.. 	@$7>),?????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@s   !C

CCc                    t          j        dd          }t          j        ddd          |d<   t           j                            d          |d<   t          j        |          }|                    |                     d	                     t          j	        |                     d	                    5 }|d         }t          j
        |j        d         |d         k              sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )zX
        Regression test for https://github.com/spacetelescope/PyFITS/issues/71
        )r*   X  r   r   r   r   r1  r  rd   r   N)ri   r  linspacer  r  r   r  rn   rm   r<   r   r=   )r   r  r   r   comp_hdus        r!   !test_compression_with_gzip_columnz5TestCompressedImage.test_compression_with_gzip_column  s/   
 hy	222
 Q4((A!!t!,,AS)))DIIk**+++Ytyy--.. 	6$AwH 6(-*c!f4555555		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   74C99C= C=c                    t          j        dt           j                  }t          j        |          }|j        }|j                            d           |                    |                     d                     t          j	        |                     d                    5 }||d         j        k    sJ |d         j        
                    d          dk    sJ 	 d	d	d	           d	S # 1 swxY w Y   d	S )
aP  
        Regression test for https://github.com/astropy/astropy/issues/2750

        Tests that the fake header (for the compressed image) can still be read
        even if the real header contained a duplicate ZTENSION keyword (the
        issue applies to any keyword specific to the compression convention,
        however).
        r  r   rd   )ZTENSIONIMAGEr   r   r6  r*   N)ri   rj   r   r   r  r  r   rn   rm   r<   r  )r   r  r   r   r   s        r!   *test_duplicate_compression_header_keywordsz>TestCompressedImage.test_duplicate_compression_header_keywords  s'    i28,,,S)))0111DIIk**+++Ytyy--.. 	:$T!W_,,,, 7?((4499999		: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   &:C..C25C2c                    t          j        ddt           j                  }t          j        |                                          }t          j        |                                          }|                    dd           |                    dd           t          j        |j        |j                  sJ d	S )
z
        Regression test for https://github.com/astropy/astropy/issues/4600
        and https://github.com/astropy/astropy/issues/4588

        Identical to test_scale_bzero_with_int_data() but uses a compressed
        image.
        r  rx  r   rd   rP   ry  rz  r   N)	ri   rj   rP   r   r  rJ  r  rp  r=   r{  s       r!   )test_scale_bzero_with_compressed_int_dataz=TestCompressedImage.test_scale_bzero_with_compressed_int_data  s     Ic3bh/// affhh/// affhh/// 	

7$
'''

7"
%%%{49di0000000r#   c                    t          j        ddt           j                  }t          j        |                              |                     d                     t          j        |                     d          dd          5 }d|d	         j        d
d
<   t          j	        |d	         j        d          sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )z
        Extend fix for #4600 to assignment to data

        Identical to test_scale_back_uint_assignment() but uses a compressed
        image.

        Suggested by:
        https://github.com/astropy/astropy/pull/4602#issuecomment-208713748
        r  rx  r   r   r   TrY  r   r   N)
ri   rj   r  r   r  rn   rm   r<   r=   rp  )r   rs   r   s      r!   *test_scale_back_compressed_uint_assignmentz>TestCompressedImage.test_scale_back_compressed_uint_assignment  s     Ic3bi000!$$TYY{%;%;<<<Ytyy--HNNN 	0RVDGLO;tAw|Q//////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   5C		CCc                    t          j        ddt           j                  }t          j        |          }|j                            d           t          j        t                    5  |j
         d d d            n# 1 swxY w Y   t          j        |          }|j                            d           t          j        t                    5  |j
         d d d            d S # 1 swxY w Y   d S )Nr  rx  r   ZNAXISr"  )ri   rj   r  r   r  r  popr?   r@   KeyErrorr  )r   rs   r3  s      r!   %test_compressed_header_missing_znaxisz9TestCompressedImage.test_compressed_header_missing_znaxis	  sS   Ic3bi000$Q''X&&&]8$$ 	% 	%$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%$Q''Y''']8$$ 	% 	%$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s$   )A==BBC$$C(+C(c                 N   t          j        |                     d                    5 }|d         }|j        j        d         }t          |          dk    sJ |j        dk    sJ d|j        v sJ |j        |j        d         k    sJ |j        j        d         }t          |          dk    sJ d}||_        |j        |k    sJ |j        d         |k    sJ |j        d         |k    sJ |j        d         |k    sJ d|j        d<   |j        dk    sJ |	                    | 
                    d          d	
           t          j        | 
                    d                    5 }|d         }t          |j        j        d                   dk    sJ |j        dk    sJ 	 ddd           n# 1 swxY w Y   |j        d= d|_        |j        dk    sJ t          j        t                    5  d|_        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 )z^Test that a double EXTNAME with one default value does not
        mask the non-default value.zdouble_ext.fitsr   r   r*   ccd00NEW_NAMENEW2ztmp.fitsTrA  NzRE-ADDEDrP  )r   r<   r=   r  _keyword_indicesr^   r   r   _image_headerrn   rm   r?   r@   r  )r   r   r   indicesnew_namer  r|  s          r!   %test_compressed_header_double_extnamez9TestCompressedImage.test_compressed_header_double_extname  s    Ytyy!23344 )	q'C k29=Gw<<1$$$$ 8w&&&&
****8sz)44444 j1)<Gw<<1$$$$ "HCH8x'''':i(H4444;y)X5555$Y/8;;;; %+CJy!8v%%%%LL:..$L???499Z0011 +UQx4<8CDDIIIIyF*****+ + + + + + + + + + + + + + + 
9%!CH8z))))y))                Q)	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	 )	sZ   D>H&;F."H.F2	2H5F2	68H.H6HH	H	H	
HH!Hc                    d}t          j        t          j        d          |          }|j        d         |k    sJ |j        d         |k    sJ |j        |k    sJ d}||_        |j        d         |k    sJ |j        d         |k    sJ |j        |k    sJ t          |j        j        d                   dk    sJ dS )z/Test consistent EXTNAME / hdu name interaction.r   r)  r   r   BARr   N)	r   r  ri   rj   r  r   r   r^   rF  )r   r   r   s      r!   test_compressed_header_extnamez2TestCompressedImage.test_compressed_header_extnameB  s    RYr]]>>>{9%----z)$,,,,x4{9%----z)$,,,,x43;/	:;;q@@@@@@r#   c                    t          j        t          j        d          t          j                               t          j        ddi          }t          j        t          j        d          |          }|j        d         dk    sJ dS )a  
        Regression test for https://github.com/astropy/astropy/issues/11694

        Tests that CompImageHDU can be initialized with a Header that
        contains few or no cards, and doesn't require specific cards
        such as 'BITPIX' or 'NAXIS'.
        r)  r  HELLOworldN)r   r  ri   rj   r   r   )r   r   r   s      r!   test_compressed_header_minimalz2TestCompressedImage.test_compressed_header_minimalR  sw     	ry}}T[]]CCCCgw/00RYr]]6BBBz'"g------r#   )r  r   expectedr"  r  c                    d}t          j        t          j        dd|                    }||j        |<   |                    |                     d                     ~t          j        |                     d                    5 }|d         j        |         |k    sJ |d         j        j	        |k    sJ 	 ddd           dS # 1 swxY w Y   dS )a  
        If BSCALE,BZERO is set to floating point values, the image
        should be floating-point.

        https://github.com/astropy/astropy/pull/6492

        Parameters
        ----------
        keyword : `str`
            Keyword to set to a floating-point value to trigger
            floating-point pixels.
        dtype : `numpy.dtype`
            Type of original array.
        expected : `numpy.dtype`
            Expected type of uncompressed array.
        g46?r   r)  r   r   r   N)
r   r  ri   rj   r   rn   rm   r<   r=   r   )r   r  r   rR  rC   r   s         r!   test_compressed_scaled_floatz0TestCompressedImage.test_compressed_scaled_float_  s   8 	!Ru = = =>>#
7DIIk**+++Ytyy--.. 	1#q6=)U2222q6;$00000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   2CC
C
r   c                 b   t          j        |          j        dz  }t          j        |dz
  |dz   |          }|                     d          }t          j        |          }|                    |d           t          j        |          }t           j	        
                    ||           dS )	zTest that the various integer dtypes are correctly written and read.

        Regression test for https://github.com/astropy/astropy/issues/9072

        r*   r  r   r   rd   TrA  N)ri   iinfor  rj   rm   r   r  rn   rq   ro   rp   )r   r   midr=   testfiler   news          r!   test_compressed_integersz,TestCompressedImage.test_compressed_integers  s     huoo!Q&yr38599999[))T***H---l8$$

%%dC00000r#   )r   r  )r  i4c                    t          j        d|                              dd          ddddddf         }|j        j        rJ t          j                    }t          j        ||          }t          j        ||g          }|	                    | 
                    d	                     t          j        | 
                    d	                    }t          ||           dS )
a\  
        Regression test for https://github.com/astropy/astropy/issues/2150

        This used to require changing the whole array to be C-contiguous before
        passing to CFITSIO, but we no longer need this - our explicit conversion
        to bytes in the compression codecs returns contiguous bytes for each
        tile on-the-fly.
        i  r   r  r  )orderNr*   r  r   )ri   rj   rk   flags
contiguousr   r3   r  r2   rn   rm   rq   r   )r   r   r  origr   r   hdulistactuals           r!   test_write_non_contiguous_dataz2TestCompressedImage.test_write_non_contiguous_data  s     yE***22832GG!SSqSQ:((((/##7GHHH,~..		+..///dii4455T6"""""r#   c                    t          j        |                     d                    5 }|d         j        ddddf         |d         _        |d         j        j        j        rJ |d                             |                     d                     ddd           n# 1 swxY w Y   t          j        |                     d                    5 }t          j        |                     d                    5 }t          |d         j        ddddf         |d         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 )zT
        Regression test for https://github.com/astropy/astropy/issues/9955
        r  r   Nrx  r  r   )r   r<   r=   r_  r`  rn   rm   r   r  s       r!   test_slice_and_write_comp_hduz1TestCompressedImage.test_slice_and_write_comp_hdu  s    Ytyy--.. 	4$7<dsd
3DGLAw|)4444GOODIIk22333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4
 Ytyy--.. 	G%499[1122 GeU1X]4C4#:6aFFFG G G G G G G G G G G G G G G	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	GsH   A,B  B$'B$(E:3D9-E9D=	=E D=	EEEc                     t          j        t          d          5  t          j        t          j        d          d          }d d d            n# 1 swxY w Y   |j        dk    sJ d S )Nz*The tile_size argument has been deprecatedr   r+   r,   r-   r-   r*   r   )	tile_size)r   r*   r-   )r?   r   r   r   r  ri   r  r  r   r  s     r!   $test_comp_image_deprecated_tile_sizez8TestCompressedImage.test_comp_image_deprecated_tile_size  s     \%>
 
 
 	O 	O $RXi%8%8INNND		O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O )++++++s   )AAAc                 "   t          j        t                    5 }t          j        t          d          5  t          j        t          j        d          dd           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-Cannot specify both tile_size and tile_shape.r   rh  ri  )r+   r*   r+   )rj  r  )	r?   r   r   r@   r   r   r  ri   r  )r   r   s     r!   3test_comp_image_deprecated_tile_size_and_tile_shapezGTestCompressedImage.test_comp_image_deprecated_tile_size_and_tile_shape  s    \344 	"Q     !HY''9                 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s4   B*A, B,A0	0B3A0	4BBBc                     t          j        t          j        d                    }|j        dk    sJ |j        dk    sJ d S )Nrh  )r   r   r-   r  r   r  ri   r  r  r  rk  s     r!   "test_comp_image_properties_defaultz6TestCompressedImage.test_comp_image_properties_default  sI     )!4!455)++++$000000r#   c                     t          j        t          j        d          dd          }|j        dk    sJ |j        dk    sJ d S )Nrh  r  )r*   r+   r,   r  rp  rk  s     r!   test_comp_image_properties_setz2TestCompressedImage.test_comp_image_properties_set  sY     HY(y
 
 
 )++++$000000r#   c                    t          j        d          }t          j        |          }|                    |dz             t          j        |dz  dd          5 }|d         j        d         d	k    sJ |d         j        d
         dk    sJ d|d         j        d<   d|d         j        d
<   d d d            n# 1 swxY w Y   t          j        |dz  d          5 }|d         j        d         dk    sJ |d         j        d
         dk    sJ 	 d d d            n# 1 swxY w Y   t          j        |dz            5 }t          |d         j        |           d d d            d S # 1 swxY w Y   d S )Nrh  rd   zcompressed.fitsTr   )r  rg   r   r  z1PB(0)r  z1PB(24)zPB(0)zPB(24)r  )	ri   r  r   r  rn   r<   r   r   r=   )r   tmp_pathr=   r|  r   s        r!   %test_compressed_optional_prefix_tformz9TestCompressedImage.test_compressed_optional_prefix_tform  sN    x	"" d+++X 11222Y((Dx
 
 
 	07>(+x77777>(+y8888'.DGN8$'/DGN8$	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 Y((D
 
 
 	87>(+w66667>(+x77777		8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 Yx"3344 	-at,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s7   AB;;B?B?3DD#&D#E**E.1E.N)9r  r  r  r  r?   r  r  ri   r  r   r  remote_datar  r  r  r  r  r  slowr  r  r  r  r  r  r  r
  r  r  r   r-  r/  r4  r8  r:  r<  rA  rJ  rM  rQ  r   rP   r   r0  rT  r  uint32rZ  r   r	   rd  rf  rl  rn  rq  rs  rv  rK   r#   r!   r  r  p  sV       J J J. [6RXk444hCRXk444hFRXk444hFRXj!!A%}b9RXh2.	
	 	 [\C:66C C 76	 	C( [,< ,< ,<\
 
 
 F F F01 1 16: : :A A A( [2 2 2h	 	 	- - -^#= #= #=J. . .2D D D$=2 =2 =2~2 2 2(4 4 4,O O OG G G6) ) )@@ @ @6 6 60: : :01 1 1&0 0 0"	% 	% 	%, , ,\A A A . . . [(rx,rx,rx,bh
+bh
+bh
+	

 
1 1
 
14 ["(BHbi29E 1 1 1 [%ww{<M'N'N # # #(G G G
, 
, 
,	 	 	1 1 1
1 1 1- - - - -r#   r  c                       e Zd Z ej        d          d             Zd Z e ed                    d             Z	 e ed                    d             Z
dS )	TestCompHDUSectionsT)autousec                 L   d}t          j        t          j        |                                        |                              t           j                  | _        t          j                    }t          j	        | j        |dd          }t          j                    }d|d<   d|d<   t          j	        | j        |dd          }t          j
        t          j                    ||g          }|                    |d	z             t          j        |d	z            | _        d S )
N         r  )r-   r,   r-   r  r*   r"  r  r  zsections.fits)ri   rj   prodrk   r  r   r=   r   r   r  r2   r3   rn   r<   r   )r   ru  rU  header1r|  header2r   rb  s           r!   setup_methodz TestCompHDUSections.setup_method  s    Ibgenn--55e<<CCBHMM	+-- Iwi
 
 
 +-- Iwi
 
 
 , 1 14>???2333Ih899			r#   c                 F    | j                                          d | _         d S r   )r   r>   r  s    r!   teardown_methodz#TestCompHDUSections.teardown_method  s    				r#   r~  c                     t          | j        d         j        |         | j        d         j        |                    t          | j        d         j        |         | j        |                    d S )Nr   r   r   r   r=   r   r  s     r!   test_section_slicingz(TestCompHDUSections.test_section_slicing  sY    TYq\)%0$)A,2CE2JKKKTYq\)%0$)E2BCCCCCr#   c                     t          | j        d         j        |         | j        d         j        |                    t          | j        d         j        |         | j        |         dz  dz              d S )Nr*   r  r  r  s     r!   test_section_slicing_scalingz0TestCompHDUSections.test_section_slicing_scaling  sc    TYq\)%0$)A,2CE2JKKKTYq\)%0$)E2BQ2F2LMMMMMr#   N)r  r  r  r?   fixturer  r  r   r   r  r  rK   r#   r!   r{  r{    s        V^D!!!: : "!:(   U==&&''D D ('D U==&&''N N ('N N Nr#   r{  c                     t          j        d                              d                              t           j                  } t                      }t          j                    }t          j        | |d          }|	                    |           |
                    d           t          j        |d          d         }|j        d	         d
k    sJ d S )Nr\   )r*   r+   r  r^  r   readonlyrf   r   )r   r*   r-   )ri   rj   rk   r  r   r   r   r   r  rn   seekr<   r   )r=   byte_bufferr   r   r   s        r!   test_comphdu_fileobjr    s     9Q<<''..rx88D))K[]]F

D&8
D
D
DCKKQ9[z22215D<""""""r#   c                    | dz  }| dz  }t           j                            d          dz  }t          j                    }t          j        t          j        |dz
  t                    d          }d	|j        d
<   d|j        d<   t          j        ||g          }|	                    |           t          j
        |          5 }t          j        |d         j                            t           j                  |d         j                  |d<   |	                    |           ddd           n# 1 swxY w Y   t          j
        |          5 }|d                             d           ddd           dS # 1 swxY w Y   dS )z
    Regression test for a bug that caused extensions that used BZERO and BSCALE
    that got turned into CompImageHDU to end up with BZERO/BSCALE before the
    TFIELDS.
    z
3hdus.fitsz3hdus_comp.fitsr  r  r  r   Tr  ikO  r  gffffff@r"  r   r  N	exception)ri   r  r   r3   r   r   rZ  r   r2   rn   r<   r  r=   r  ry  r   )ru  	filename1	filename2rS   x0x1hduss          r!   test_comphdu_bscaler  1  s    <'I,,I
	$$s*A			B	rxBc222	>	>	>BBIgBIh<R!!DLL 
9		  #a$$RY//Q
 
 
Q 	Y	                              
9		 $Q{###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s%   A"D33D7:D7E;;E?E?c                      t          j        t          j        dgt          j                            } |                     d           d S )Nr   r   g?rz  )r   r   ri   r   r   r  )r   s    r!   test_scale_implicit_castingr  Q  s@     -!BH555
6
6CIICIr#   c                      t          d          } t          j        |           5 }|d         }|j         d d d            d S # 1 swxY w Y   d S )Nz data/compressed_float_bzero.fitsr   )r   r   r<   r=   )r   r   r   s      r!   &test_bzero_implicit_casting_compressedr  Y  s     %%GHHH	8		 1g                 s   AAAc                     | dz  }t          j        t          j        d                    }d|j        d<   |                    |d           t          j        |          5 }|                                 d d d            d S # 1 swxY w Y   d S )Nzfloatimg_with_bzero.fitsr(  r)  r  TrA  )r   r   ri   r  r   rn   r<   rX   )ru  r   r   r   s       r!   test_bzero_mishandled_infor  h  s    
 44H
-**
+
+CCJwKKDK)))	8		 		                 s   !BB
Bc                    t          j        g d          }|                    d           t          j        |          }|                                 | dz  }|                    |           t          j        |          5 }t          |d         j	        g d           d d d            n# 1 swxY w Y   t          j        g d          }|                    d           t          j
        |          }| dz  }|                    |           t          j        |          5 }t          |d         j	        g d           d d d            d S # 1 swxY w Y   d S )	N)r   r*   r+   F)writerd   r   r   )r   g       @g      @r5  )ri   r   setflagsr   r   add_datasumrn   r<   r   r=   r  )ru  rS   ghdur   rb  s        r!   test_image_write_readonlyr  u  s    	AJJUJ=a   D+%HLL	8		 1WQZ_iii0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 	!!AJJUJ!$$$D ,&HLL	8		 7WQZ_ooo6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s$   B..B25B2(EEEc                 0   t          j        ddt           j                                      dd          }t	          j        |          }|                    | dz             t	          j        | dz            5 }|d         j        d         dk    sJ |d         j        d	         d
k    sJ |d         j        d         dk    sJ t          |d         j
        |           |d         j
        j        |j        k    sJ 	 ddd           dS # 1 swxY w Y   dS )zFTest for int8 support, https://github.com/astropy/astropy/issues/11995r  r  r   r)  z	int8.fitsr   r#  r   r  ir"  r   N)ri   rj   int8rk   r   r3   rn   r<   r   r   r=   r   )ru  imgr   r   s       r!   	test_int8r    sO   
)C27
+
+
+
3
3B
;
;C
/#

CKK;&'''	8k)	*	* /dAw~h'1,,,,Aw~g&$....Aw~h'3....T!W\3'''Aw|!SY...../ / / / / / / / / / / / / / / / / /s   9BDDD)+r[  r   r  rS  ior   	itertoolsr   numpyri   r?   
hypothesisr   hypothesis.extra.numpyr   numpy.testingr   
astropy.ior   astropy.io.fits.hdu.compressedr	   r
   r   astropy.utils.datar   r   astropy.utils.exceptionsr   r   conftestr   
test_tabler   r   r  r{  r  r  r  r  r  r  r  rK   r#   r!   <module>r     s@    				 				                         0 0 0 0 0 0 & & & & & &               
 D C C C C C C C R R R R R R R R " " " " " " & & & & & &P. P. P. P. P. P. P. P.f"D- D- D- D- D-, D- D- D-N"N "N "N "N "N "N "N "NJ# # #*$ $ $@    
 
 
7 7 7</ / / / /r#   