
    HR-e]                     ~    d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 ddlmZ ddlmZ  G d	 d
e          ZdS )    N)_File)Header_pad_length)fileobj_name)lazyproperty   )NonstandardExtHDU)HDUListc                   x    e Zd ZdZdZed             Zed
d            Zed
d            Z	ed             Z
d Zd	S )FitsHDUaa  
    A non-standard extension HDU for encapsulating entire FITS files within a
    single HDU of a container FITS file.  These HDUs have an extension (that is
    an XTENSION keyword) of FITS.

    The FITS file contained in the HDU's data can be accessed by the `hdulist`
    attribute which returns the contained FITS file as an `HDUList` object.
    FITSc                 d   | j                             | j                   t          j                    }|                    | j                             | j                             |                    d           | j        d         rt          j
        |          }t          j        |d          S )Nr   COMPRESS)fileobjreadonly)mode)_fileseek_data_offsetioBytesIOwritereadsize_headergzipGzipFiler
   fromfile)selfr   s     ?lib/python3.11/site-packages/astropy/io/fits/hdu/nonstandard.pyhdulistzFitsHDU.hdulist   s    
)****,,
 	djoodi00111Q<
# 	5mG444Gj9999    Fc                     t          j        |          5 }|                     ||          cddd           S # 1 swxY w Y   dS )a"  
        Like `FitsHDU.fromhdulist()`, but creates a FitsHDU from a file on
        disk.

        Parameters
        ----------
        filename : str
            The path to the file to read into a FitsHDU
        compress : bool, optional
            Gzip compress the FITS file
        )compressN)r
   r   fromhdulist)clsfilenamer$   r!   s       r    r   zFitsHDU.fromfile)   s     h'' 	?7??7X?>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s   9= =c                    t          j                    x}}|r>t          |d          rt          |j                  }nd}t          j        |d|          }|                    |           |r|                                 t          |
                                          | j        z                      d          }|                    |           |                    d           d| j        dfd	d
dt!          |                                          dfddg}t!          |          dk    rSt%          |dd                   D ];\  }}	|                    dt)          |dz             z   |	j        d|dz    f           <|                    d|df           t-          |          }
|                     t1          |          |
          S )z
        Creates a new FitsHDU from a given HDUList object.

        Parameters
        ----------
        hdulist : HDUList
            A valid Headerlet object.
        compress : bool, optional
            Gzip compress the FITS file
        r   Nwb)r   r   asciir   XTENSIONzFITS extension)BITPIX   zarray data type)NAXISr   znumber of array dimensionsNAXIS1zAxis length)PCOUNTr   znumber of parameters)GCOUNTr   znumber of groupsr   XINDzbyte offset of extension r   zUses gzip compression)header)r   r   hasattrr   r   r   r   writetocloser   tell_padding_byteencoder   r   
_extensionlengetvalue	enumerateappendstr_header_offsetr   _readfrom_internalr   )r&   r!   r$   r   bsnamepaddingcardsidxhdur3   s              r    r%   zFitsHDU.fromhdulist9   s    z||#" 	Aw(( #GM22mDtR@@@G    	MMOOO rwwyy))C,==EEgNN




 )9:,6s2;;==))=91-
 w<<!%gabbk22  SS1W-*=C!G==    	j(,CDEEE%%eBii%???r"   c                     |j         d         }|j        dk    rdS |j        }t          |t                    r|                                }|| j        k    S )Nr   r+   F)rE   keywordvalue
isinstancer?   rstripr:   )r&   r3   cardxtensions       r    match_headerzFitsHDU.match_headerr   sT    |A<:%%5:h$$ 	)((H3>))r"   c                 Z    | j         | j        | j        j        t	          | j                  fS )N)rC   ver	__class____name__r;   r   )r   s    r    _summaryzFitsHDU._summary~   s$    	48T^%<c$,>O>OPPr"   N)F)rS   
__module____qualname____doc__r:   r   r!   classmethodr   r%   rO   rT    r"   r    r   r      s          J: : \: ? ? ? [? 6@ 6@ 6@ [6@p * * [*Q Q Q Q Qr"   r   )r   r   astropy.io.fits.filer   astropy.io.fits.headerr   r   astropy.io.fits.utilr   astropy.utilsr   baser	   r!   r
   r   rY   r"   r    <module>r_      s     				 & & & & & & 6 6 6 6 6 6 6 6 - - - - - - & & & & & & # # # # # #      qQ qQ qQ qQ qQ qQ qQ qQ qQ qQr"   