
    gF'                    :   d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
 ddlmZmZ ddZg dZddZdd	Z G d
 dej                        Zd d!dZd"dZd#dZd#dZ ej.                  ej0                  e        ej2                  ej0                  e       edk(  rq eej8                        dk  r ed        ej<                          ej8                  d   Z ee      s ed        ej<                           ej@                  e      5 Z! ede!         ede!j0                           ede!jD                           ede!jF                           edd        ee!jI                                 eej8                        dkD  rxej8                  d   Z%e!jM                  ejN                  jP                        Z! edejR                  jU                  e       de% d       e!jW                  e%ej0                         ddd       yy# 1 sw Y   yxY w)$    )annotationsN)IOTYPE_CHECKINGAnyTuplecast   )Image	ImageFilec                X    	 t        |       }| |z
  dk(  ryy# t        t        f$ r Y yw xY w)Nr   r	   )int
ValueErrorOverflowError)fis     J/var/www/openai/venv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.pyisIntr   -   s8    Fq5A:& s    )))r	      iiiic                    d| z   }dD ]  }t        ||         r y t        |d         }|t        vryt        |d         }t        |d         }t        |d         }|||z  k7  ry|S )Nc   )r	                     r   r   r   r   r   )r   r   iforms)thr   iformlabreclabbytlenbyts          r   isSpiderHeaderr%   A   sx    	A&QqT{ ' !IEF2ZF2ZF2ZF&6/"M    c                    t        | d      5 }|j                  d      }d d d        t        j                  d      }t	        |      }|dk(  r!t        j                  d|      }t	        |      }|S # 1 sw Y   RxY w)Nrb\   z>23fr   z<23f)openreadstructunpackr%   )filenamefpr   r   hdrlens        r   isSpiderImager1   U   si    	h	GGBK 
fa AAF{MM&!$"M 
	s   A00A9c                  v    e Zd ZdZdZdZddZedd       Zedd       Z	ddZ
ddZddd	Zerd
dlmZ ddZy)SpiderImageFileSPIDERzSpider 2D imageFc                   d}| j                   j                  |      }	 d| _        t        j                  d|      }t        |      }|dk(  r(d| _        t        j                  d|      }t        |      }|dk(  rd}t        |      	 d|z   }t        |d         }|dk7  rd	}t        |      t        |d
         t        |d         f| _	        t        |d         | _
        t        |d         | _        | j                  dk(  r| j                  dk(  r
|}	d| _        n| j                  dkD  r[| j                  dk(  rLt        |d
         t        |d         z  dz  | _        || _        t        |d         | _        |dz  }	d| _        nB| j                  dk(  r&| j                  dkD  r|| j                  z   }	d| _
        nd}t        |      | j                  rd| _        nd| _        d| _        dd| j$                  z   |	| j                   ddffg| _        | j                   | _        y # t        j                  $ r}d}t        |      |d }~ww xY w)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imgbytesr0   	stkoffsetrawmode_modesizetile_fp)
selfnr   r   r0   msger    r!   offsets
             r   _openzSpiderImageFile._opene   s   GGLLO	*DNfa(A#A&F{!"MM&!,'*{/!#&&  AIAaD	A:)Cc""2ZQqT*
!B%jQrU;;!! 3FDM[[1_1!4"JQqT2Q6DM DK"JDMaZFDN[[A$..1"4dnn,FDK4Cc"">>#DL"DL
Vdii/$,,19MNO	77S || 	*+Cc")	*s   A'H! !I4IIc                    | j                   S NrD   rL   s    r   n_frameszSpiderImageFile.n_frames   s    }}r&   c                     | j                   dkD  S Nr	   rT   rU   s    r   is_animatedzSpiderImageFile.is_animated   s    }}q  r&   c                @    | j                   dk  ry| j                   dz
  S )Nr	   r   )rC   rU   s    r   tellzSpiderImageFile.tell   s     >>A>>A%%r&   c                H   | j                   dk(  rd}t        |      | j                  |      sy | j                  || j                  | j                  z   z  z   | _        | j                  | _        | j                  j                  | j
                         | j                          y )Nr   z#attempt to seek in a non-stack file)
rB   EOFError_seek_checkr0   rE   rF   rK   r/   seekrQ   )rL   framerN   s      r   r_   zSpiderImageFile.seek   sx    ;;!7C3-&udmm0K'LL((T^^$

r&   c                   | j                         }t        |d   t              sJ t        t        t        t        f   |      \  }}d||k7  r|||z
  z   |z  | j                  fd      j                  d      S )Nr   r	   c                    | z  z   S rS    )r   bms    r   <lambda>z.SpiderImageFile.convert2byte.<locals>.<lambda>   s    AEAIr&   L)
getextrema
isinstancefloatr   r   pointconvert)rL   depthextremaminimummaximumrd   re   s        @@r   convert2bytezSpiderImageFile.convert2byte   s    //#'!*e,,,eUl 3W=g7*+ABLzz-.66s;;r&   r	   ImageTkc                P    ddl m} |j                  | j                         d      S )Nr	   rr      )palette) rs   
PhotoImagerq   )rL   rs   s     r   tkPhotoImagezSpiderImageFile.tkPhotoImage   s$    !!$"3"3"5s!CCr&   N)returnNone)rz   r   )rz   bool)r`   r   rz   r{   )   )rm   r   rz   Image.Image)rz   zImageTk.PhotoImage)__name__
__module____qualname__formatformat_description!_close_exclusive_fp_after_loadingrQ   propertyrV   rY   r[   r_   rq   r   rw   rs   ry   rc   r&   r   r3   r3   `   s^    F*(-%9v   ! !&	< Dr&   r3   c                   | t        |       dk  ryg }| D ]  }t        j                  j                  |      st	        d|        1	 t        j                  |      5 }|j                         }ddd       |j                  d<   |j                  |        |S # 1 sw Y   -xY w# t        $ r t        |      st	        | d       Y w xY w)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*   rq   	Exceptionr1   infoappend)filelistimglistimgims       r   loadImageSeriesr      s    3x=1,Gww~~c"OC5)*	CB__& ! "
r  N ! 	 %89:	s*   B&B.B&B#	B&&"C
Cc                   | j                   \  }}|dz  }t        d|z        }d|z  dk7  r|dz  }||z  }t        |dz        }|dk  rg S dg|z  }d|d<   t        |      |d<   t        |      |d	<   d|d
<   t        |      |d<   t        |      |d<   t        |      |d<   t        |      |d<   |dd  }|j                  d       |D cg c]  }t	        j
                  d|       c}S c c}w )Nr9   i   r   r	   r   g        g      ?r   r   r   r   r   r   r   )rI   r   rj   r   r,   pack)	r   nsamnrowr$   r"   r#   nvalueshdrvs	            r   makeSpiderHeaderr      s   JD$AXFFf}!f_F&1*oG|	%'/C CF4[CF4[CFCFDkCGFmCGFmCGFmCG ab'CJJsO),-AFKKQ---s   C(c           
        | j                   d   dk7  r| j                  d      } t        |       }t        |      dk  rd}t	        |      |j                  |       d}t        j                  | |dd| j                  z   d|ddffg       y )	Nr   r;   ru   zError creating Spider headerzF;32NFr<   r=   r	   )	moderl   r   r   OSError
writelinesr   _saverI   )r   r/   r.   r   rN   rG   s         r   r   r     s    	wwqzSZZ_
2
C
3x#~,cl MM#GOOBeVbgg%5q7Aq/JKLr&   c                    t         j                  j                  |      d   }t        |t              r|j                         n|}t        j                  t        j                  |       t        | ||       y rX   )r   r   splitextri   bytesdecoder
   register_extensionr3   r   r   )r   r/   r.   filename_extexts        r   _save_spiderr     sV    77##H-a0L#-lE#B,


C	_33S9	"b(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   rz   r   )r   ztuple[float, ...]rz   r   )r.   strrz   r   rS   )r   zlist[str] | Nonerz   zlist[SpiderImageFile] | None)r   r~   rz   zlist[bytes])r   r~   r/   z	IO[bytes]r.   zstr | bytesrz   r{   ),
__future__r   r   r,   systypingr   r   r   r   r   rw   r
   r   r   r   r%   r1   r3   r   r   r   r   register_openr   register_saver   r   argvr   exitr.   r*   r   rI   r   rh   outfile	transpose	TransposeFLIP_LEFT_RIGHTr   basenamesaverc   r&   r   <module>r      s  F # 	  
 6 6  
$(lDi)) lDh4.<M    O**O <   O**L 9z
388}qGH
xx{H"45
	H	tn$%rwwi !rwwi !l$bmmosxx=1hhqkG eoo==>B.rww/?/?/I.J KYa! GGG_334# 
	  
	s   C8HH