a :jg@sddlmZddlZddlZddlmZmZddddd ZGd d d ejZGd d d ej Z e ej eee de eej ddgdS)) annotationsN)Image ImageFilebytesbool)prefixreturncCs|dddkS)NSIMPLE)rr r =/usr/local/lib/python3.9/site-packages/PIL/FitsImagePlugin.py_acceptsrc@sDeZdZdZdZddddZdddd d d Zdd d ddZdS) FitsImageFileZFITSNone)r c CsJ|jdusJi}d}d}|jd}|s6d}t||dd}|dvrTd}nP|rb|sbqnB|dkr|jt|jd d |s||\}}}d}q|rq|dd d d } | d r| d d} |st |r| dkrd}t || ||<q|sd}t |||jd7}t|d|j||g|_dS)NFPzTruncated FITS file)r XTENSIONTsENDi@ /r=rTzNot a FITS filez No image datarr)fpreadOSErrorstripseekmathceiltell_parse_headerssplit startswithr SyntaxError ValueErrorrZ_TilesizeZtile) selfheadersZheader_in_progress decoder_nameheadermsgkeywordoffsetargsvaluer r r _opensB    zFitsImageFile._openzdict[bytes, bytes]rztuple[int, int] | None)r(rr cCs\t||d}|dkrdS|dkr8dt||dfSt||dt||dfSdS)NsNAXISrrsNAXIS1sNAXIS2)int)r'r(rZnaxisr r r _get_sizeHs zFitsImageFile._get_sizez&tuple[str, int, tuple[str | int, ...]])r(r c Csd}d}d}|ddkrp|ddkrp|dd krp|||pBd }t|d }|d|d |d }d}d}|||}|sdS||_t||d }|d krd|_n.|dkrd|_n|dkrd|_n|dvrd|_|dkr|jddf}n|f}|||fS)Nrawrrs 'BINTABLE'sZIMAGErsZCMPTYPEs 'GZIP_1 'rsBITPIXrrZ fits_gzip)rrr LzI;16 I)iiF)getr2r1_size_modemode) r'r(rr)r-Zno_prefix_sizenumber_of_bitsr&r.r r r r!Ts>     zFitsImageFile._parse_headersN)__name__ __module__ __qualname__formatformat_descriptionr0r2r!r r r r rs - rc@s eZdZdZdddddZdS)FitsGzipDecoderTz$bytes | Image.SupportsArrayInterfaceztuple[int, int])bufferr c Cs|jdusJt|j}g}d}t|jddd}t|jjD]J}t }t|jj D](}|||d||d7}|d7}q\| |qF| t dd|dddDdS)NrrcSsg|]}|D]}|q qSr r ).0rowZpixelr r r r3z*FitsGzipDecoder.decode..r<)r<r)fdgzip decompressrminr.rangestateZysize bytearrayZxsizeappendZ set_as_rawr) r'rHr/rowsr-rAyrKxr r r decodes  "zFitsGzipDecoder.decodeN)rBrCrDZ _pulls_fdrXr r r r rG~srGr6z.fitz.fits) __future__rrNrrrrrrZ PyDecoderrGZ register_openrEZregister_decoderZregister_extensionsr r r r  s g