U
    M»{jñ  ã                   @  s’   d dl mZ d dlZd dlZddlmZmZ dddœdd	„ZG d
d„ dejƒZG dd„ dej	ƒZ
e ejee¡ e de
¡ e ejddg¡ dS )é    )ÚannotationsNé   )ÚImageÚ	ImageFileÚbytesÚbool)ÚprefixÚreturnc                 C  s   | d d… dkS )Né   ó   SIMPLE© )r   r   r   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/PIL/FitsImagePlugin.pyÚ_accept   s    r   c                   @  sD   e Zd ZdZdZddœdd„Zdddd	œd
d„Zdddœdd„ZdS )ÚFitsImageFileZFITSÚNone)r	   c           
      C  sF  | j d k	st‚i }d}d}| j  d¡}|s6d}t|ƒ‚|d d…  ¡ }|dkrTd}nP|rb|sb�qnB|dkr¤| j  t | j  ¡ d	 ¡d	 ¡ |sž|  	|¡\}}}d}q|rªq|dd …  
d
¡d  ¡ }	|	 d¡rÞ|	dd …  ¡ }	|sþt|ƒrò|	dkrþd}t|ƒ‚|	||< q|�sd}t|ƒ‚|| j  ¡ d 7 }|d| j ||fg| _d S )NFÚ éP   zTruncated FITS fileé   )r   ó   XTENSIONTs   ENDi@  ó   /r   ó   =r   ó   TzNot a FITS filezNo image data©r   r   )ÚfpÚAssertionErrorÚreadÚOSErrorÚstripÚseekÚmathÚceilÚtellÚ_parse_headersÚsplitÚ
startswithr   ÚSyntaxErrorÚ
ValueErrorÚsizeZtile)
ÚselfÚheadersZheader_in_progressÚdecoder_nameÚheaderÚmsgÚkeywordÚoffsetÚargsÚvaluer   r   r   Ú_open   sB     

zFitsImageFile._openzdict[bytes, bytes]r   ztuple[int, int] | None)r)   r   r	   c                 C  s\   t ||d  ƒ}|dkrd S |dkr8dt ||d  ƒfS t ||d  ƒt ||d  ƒfS d S )Ns   NAXISr   r   s   NAXIS1s   NAXIS2)Úint)r(   r)   r   Znaxisr   r   r   Ú	_get_sizeH   s    zFitsImageFile._get_sizez&tuple[str, int, tuple[str | int, ...]])r)   r	   c           	      C  sþ   d}d}d}|  d¡dkrp|  d¡dkrp|d d	krp|  ||¡pBd
}t|d ƒ}|d |d  |d  }d}d}|  ||¡}|s„dS || _t||d  ƒ}|dkrªd| _n.|dkrºd| _n|dkrÊd| _n|dkrØd| _|dkrî| jddf}n|f}|||fS )Nó    Úrawr   r   s
   'BINTABLE's   ZIMAGEr   s   ZCMPTYPEs
   'GZIP_1  'r   s   BITPIXr   r   ó   ZÚ	fits_gzip)r   r   r   ÚLé   zI;16é    ÚI)iàÿÿÿiÀÿÿÿÚFéÿÿÿÿ)Úgetr3   r2   Ú_sizeÚ_modeÚmode)	r(   r)   r   r*   r.   Zno_prefix_sizeÚnumber_of_bitsr'   r/   r   r   r   r"   T   s>    ÿþ
ýzFitsImageFile._parse_headersN)Ú__name__Ú
__module__Ú__qualname__ÚformatÚformat_descriptionr1   r3   r"   r   r   r   r   r      s
   -r   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚFitsGzipDecoderTr   ztuple[int, int])Úbufferr	   c           	      C  s¸   | j d k	st‚t | j  ¡ ¡}g }d}t| jd d dƒ}t| jj	ƒD ]J}t
ƒ }t| jjƒD ](}|||d|  |d … 7 }|d7 }q\| |¡ qF|  tdd„ |d d d… D ƒƒ¡ dS )Nr   r   é   c                 S  s   g | ]}|D ]}|‘qqS r   r   )Ú.0ÚrowZpixelr   r   r   Ú
<listcomp>Ž   s       z*FitsGzipDecoder.decode.<locals>.<listcomp>r=   )r=   r   )Úfdr   ÚgzipÚ
decompressr   Úminr/   ÚrangeÚstateZysizeÚ	bytearrayZxsizeÚappendZ
set_as_rawr   )	r(   rI   r0   Úrowsr.   rB   ÚyrL   Úxr   r   r   Údecode�   s    
"zFitsGzipDecoder.decodeN)rC   rD   rE   Z	_pulls_fdrY   r   r   r   r   rH   ~   s   rH   r7   z.fitz.fits)Ú
__future__r   rO   r   r   r   r   r   r   Z	PyDecoderrH   Zregister_openrF   Zregister_decoderZregister_extensionsr   r   r   r   Ú<module>   s   g