o
     Pj6(                     @  s  d dl mZ d dlZd dlZd dlZd dlmZmZ ddlm	Z	m
Z
 ddlmZ dZd8ddZg dZd9ddZd:ddZG dd de
j
Zd;d<ddZd=d!d"Zd>d'd(Zd>d)d*Ze	eje e	eje ed+kreejd,k r}ed- e  ejd Zeesed. e  e	 eeZ!ed/e!  ed0e!j  ed1e!j"  ed2e!j#  ed3d4d5 ee!$  eejd,krejd, Z%e!&e	j'j(Z)ed6ej*+e d7e% d4 e),e%ej W d   dS W d   dS 1 sw   Y  dS dS )?    )annotationsN)IOAny   )Image	ImageFile)DeferredErrorFfr   returnintc              	   C  s:   zt | }| | dkrW dS W dS  ttfy   Y dS w )Nr   r   )r   
ValueErrorOverflowError)r	   i r   J/home/thesage/.local/lib/python3.10/site-packages/PIL/SpiderImagePlugin.pyisInt0   s   r   )r      iiiittuple[float, ...]c                 C  st   d|  }dD ]}t || s dS qt|d }|tvrdS t|d }t|d }t|d }||| kr8dS |S )Nc   )r                     r   r   r   r   r   )r   r   iforms)r   hr   iformlabreclabbytlenbytr   r   r   isSpiderHeaderD   s   r#   filenamestrc                 C  sh   t | d}|d}W d    n1 sw   Y  td|}t|}|dkr2td|}t|}|S )Nrb\   z>23fr   z<23f)openreadstructunpackr#   )r$   fpr	   r   hdrlenr   r   r   isSpiderImageX   s   r.   c                   @  sx   e Zd ZdZdZdZdddZedd	d
Zed ddZ	dddZ
d!ddZd"d#ddZer5ddlmZ d$ddZdS )%SpiderImageFileSPIDERzSpider 2D imageFr
   Nonec           
   
   C  s  d}| j d us	J | j |}z*d| _td|}t|}|dkr.d| _td|}t|}|dkr8d}t|W n tjyM } zd}t||d }~ww d| }t|d }|dkrbd	}t|t|d
 t|d f| _	t|d | _
t|d | _| j
dkr| jdkr|}	d| _nD| j
dkr| jdkrt|d
 t|d  d | _|| _t|d | _|d }	d| _n| j
dkr| jdkr|| j }	d| _
nd}t|| jrd| _nd| _d| _tdd| j |	| jg| _| j | _d S )Nl   r   z>27fr   z<27fznot a valid Spider filer   r   znot a Spider 2D imager   r               z inconsistent stack header valueszF;32BFzF;32FFrawr   r   )r,   r)   	bigendianr*   r+   r#   SyntaxErrorerrorr   _sizeistack	imgnumber_nimagesimgbytesr-   	stkoffsetrawmode_moder   _Tilesizetile_fp)
selfnr	   r   r-   msger   r   offsetr   r   r   _openh   s`   

zSpiderImageFile._openr   c                 C  s   | j S Nr@   rI   r   r   r   n_frames   s   zSpiderImageFile.n_framesboolc                 C  s
   | j dkS Nr   rP   rQ   r   r   r   is_animated   s   
zSpiderImageFile.is_animatedc                 C  s   | j dk rdS | j d S )Nr   r   )r?   rQ   r   r   r   tell   s   

zSpiderImageFile.tellframec                 C  sr   | j dkrd}t|| |sd S t| jtr| jj| j|| j| j   | _	| j| _
| j
| j	 |   d S )Nr   z#attempt to seek in a non-stack file)r>   EOFError_seek_check
isinstancerH   r   exr-   rA   rB   r,   seekrN   )rI   rW   rK   r   r   r   r\      s   

zSpiderImageFile.seek   depthImage.Imagec                   s^   |   }t|d tsJ |\}}d||kr|||   |  |  fdddS )Nr   r   c                   s   |    S rO   r   )r   bmr   r   <lambda>   s    z.SpiderImageFile.convert2byte.<locals>.<lambda>L)
getextremarZ   floatpointconvert)rI   r^   extremaminimummaximumr   r`   r   convert2byte   s   
zSpiderImageFile.convert2byter   ImageTkImageTk.PhotoImagec                 C  s   ddl m} |j|  ddS )Nr   rm      )palette) rn   
PhotoImagerl   )rI   rn   r   r   r   tkPhotoImage   s   zSpiderImageFile.tkPhotoImageN)r
   r1   )r
   r   )r
   rS   )rW   r   r
   r1   )r]   )r^   r   r
   r_   )r
   ro   )__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrN   propertyrR   rU   rV   r\   rl   TYPE_CHECKINGrr   rn   rt   r   r   r   r   r/   c   s    
<


r/   filelistlist[str] | Nonelist[Image.Image] | Nonec              	   C  s   | du s
t | dk rdS g }| D ]Q}tj|s td|  qz"t|}t|ts.J |	 }W d   n1 s<w   Y  W n t
yV   t|sTt| d Y qw ||jd< || q|S )zJcreate a list of :py:class:`~PIL.Image.Image` objects for use in a montageNr   zunable to find z is not a Spider image filer$   )lenospathexistsprintr   r(   rZ   r/   rl   	Exceptionr.   infoappend)r}   	byte_imgsimgimbyte_imr   r   r   loadImageSeries   s*   

r   r   r_   list[bytes]c                 C  s   | j \}}td|d }td| }d| dkr|d7 }|| }t|d }|dk r,g S dg| }d|d< t||d< t||d	< d|d
< t||d< t||d< t||d< t||d< |dd  }|d dd |D S )Nr   r5   i   r   r   g        g      ?r   r   r   r   r   r   c                 S  s   g | ]}t d |qS )r	   )r*   pack).0vr   r   r   
<listcomp>  s    z$makeSpiderHeader.<locals>.<listcomp>)rF   maxr   rf   r   )r   nsamnrowr"   r    r!   nvalueshdrr   r   r   makeSpiderHeader   s*   


r   r,   	IO[bytes]str | bytesr1   c              
   C  sh   | j dkr
| d} t| }t|dk rd}t||| d}t| |tdd| j	 d|g d S )Nr7   rp   zError creating Spider headerzF;32NFr8   r9   r   )
moderh   r   r   OSError
writelinesr   _saverE   rF   )r   r,   r$   r   rK   rC   r   r   r   r     s   


&r   c                 C  sH   t j|d  }rt|tr| n|}ttj	| t
| || d S rT   )r   r   splitextrZ   bytesdecoder   register_extensionr/   rx   r   )r   r,   r$   filename_extextr   r   r   _save_spider#  s   r   __main__r   z7Syntax: python3 SpiderImagePlugin.py [infile] [outfile]z$input image must be in Spider formatzimage: zformat: zsize: zmode: z
max, min:  )endzsaving a flipped version of z as )r	   r   r
   r   )r   r   r
   r   )r$   r%   r
   r   rO   )r}   r~   r
   r   )r   r_   r
   r   )r   r_   r,   r   r$   r   r
   r1   )-
__future__r   r   r*   systypingr   r   rr   r   r   _utilr   r|   r   r   r#   r.   r/   r   r   r   r   register_openrx   register_saveru   r   argvr   exitr$   r(   r   rF   r   re   outfile	transpose	TransposeFLIP_LEFT_RIGHTtransposed_imr   basenamesaver   r   r   r   <module>   s^   "

	
w





"