+
     i)6  c                  s   ^ RI Ht ^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^RI
HtHtHtHt  ! R R4      tR R	 ltR
 R ltR R lt ! R R]P                  4      tR R ltR R lt]P,                  ! ]P.                  ]]4       ]P0                  ! ]P.                  ]4       ]P2                  ! ]P.                  . RO4       ]P4                  ! ]P.                  R4       R# )    )annotationsN)Callable)IOcast)Image	ImageFileImagePalette_binaryc                  sr    ] tR t^tRtRR R lltR R ltR R ltR R	 ltR
 R lt	R R lt
R R ltRtR# )	BoxReaderzq
A small helper class to read fields stored in JPEG2000 header boxes
and to easily step into and read sub-boxes.
c               s$    V ^8  d   QhRRRRRR/# )   fp	IO[bytes]lengthintreturnNone format   "</usr/lib64/python3.14/site-packages/PIL/Jpeg2KImagePlugin.py__annotate__BoxReader.__annotate__!   s!     # #9 #c #4 #    c                	s@    Wn         V^ 8  V n        W n        RV n        R# )r    Nr   
has_lengthr   remaining_in_box)selfr   r      &&&r   __init__ZBoxReader.__init__!   s     A+ "r   c                    V ^8  d   QhRRRR/# )r
   	num_bytesr   r   boolr   r   r   r   r   r   '   s      3 4 r   c                	s    V P                   '       d3   V P                  P                  4       V,           V P                  8  d   R # V P                  ^ 8  d   WP                  8*  # R# )FT)r   r   tellr   r   )r   r!      &&r   	_can_readZBoxReader._can_read'   sH    ???tww||~	9DKKG  A% 5 555r   c               r    )r
   r!   r   r   bytesr   r   r   r   r   r   1   s      S U r   c                	s2   V P                  V4      '       g   R p\        V4      hV P                  P                  V4      p\	        V4      V8  d   RV R\	        V4       R2p\        V4      hV P                  ^ 8  d   V ;P                  V,          un        V# )zNot enough data in headerzExpected to read z bytes but only got Z.)r%   SyntaxErrorr   readZlenZOSErrorr   )r   r!   msgdata   &&  r   _read_bytesZBoxReader._read_bytes1   s    ~~i((-Cc""ww||I&t9y %i[0DSYKqQC#,  1$!!Y.!r   c               r    )r
   field_formatstrr   ztuple[int | bytes, ...]r   r   r   r   r   r   ?   s     1 1 10G 1r   c                	s|    \         P                  ! V4      pV P                  V4      p\         P                  ! W4      # N)structZcalcsizer,   Zunpack)r   r-   sizer*   r+   r   read_fieldsZBoxReader.read_fields?   s/    |,%}}\00r   c                   V ^8  d   QhRR/# )r
   r   r	   r   r   r   r   r   r   D   s     1 1I 1r   c                	s|    V P                   pV P                  V4      p\        \        P                  ! V4      V4      # r/   )r   r,   r	   ioZBytesIO)r   r1   r*   s   &  r   
read_boxesZBoxReader.read_boxesD   s3    $$%D)400r   c               r3   )r
   r   r"   r   r   r   r   r   r   I   s      d r   c                	s    V P                   '       d9   V P                  P                  4       V P                  ,           V P                  8  # R # )T)r   r   r#   r   r   )r      &r   has_next_boxZBoxReader.has_next_boxI   s2    ???77<<>D$9$99DKKGGr   c               r3   )r
   r   r&   r   r   r   r   r   r   O   s      u r   c                	s   V P                   ^ 8  d5   V P                  P                  V P                   \        P                  4       RV n         \        \        \        \        3,          V P                  R4      4      w  rV^8X  d*   \        \        V P                  R4      ^ ,          4      p^pM^pW8  g   V P                  W,
          4      '       g   Rp\        V4      hW,
          V n         V# )r    z>I4sz>QzInvalid header lengthr   )r   r   seekosSEEK_CURr   tupler   r&   r2   r%   r'   )r   ZlboxtboxZhlenr)      &    r   next_box_typeZBoxReader.next_box_typeO   s      1$GGLL..< " %U
+T-=-=f-EF
19T--d3A67DDD;dnnT[99)Cc"" $r   r   N)r   )__name__
__module____qualname____firstlineno__Z__doc__r   r%   r,   r2   r5   r7   r>   __static_attributes__r   r   r   r	   r	      s/    
#1
1
 r   r	   c               r    )r
   r   r   r   ztuple[tuple[int, int], str]r   r   r   r   r   r   e   s      ) (C r   c                s   V P                  ^4      p\        P                  ! V4      pWP                  V^,
          4      ,           p\        P                  ! RV4      w  r$rVrx   rWW,
          Wh,
          3pV
^8X  d@   \        P                  ! RV^&4      pV^ ,          ^,          ^,           ^8  d   RpW3# Rp W3# V
^8X  d   RpW3# V
^8X  d   RpW3# V
^8X  d   RpW3# Rp\        V4      h)	zParse the JPEG 2000 codestream to extract the size and component
count from the SIZ marker segment, returning a PIL (size, mode) tuple.z>HHIIIIIIIIHz>BI;16LLARGBRGBAz"unable to determine J2K image mode)r(   r   i16ber0   Zunpack_fromr'   )r   hdrZlsizZsizZrsizZxsizZysizZxosizZyosiz_Zcsizr1   Zssizmoder)   s   &              r   _parse_codestreamrM   e   s    ''!*C==D
q!
!C=C=O=O>:DE!Q1 L$,'Dqy!!$R0GdNa!#D : D : 
 : 
 : 

 : 3#r   c               s(    V ^8  d   QhRRRRRRRR/# )r
   numr   denomexpr   zfloat | Noner   r   r   r   r   r      s(     5 5S 5 53 5< 5r   c                s^    V^ 8X  d   R# ^V ,          ^
V,          ,          RV,          ,          # )zConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
calculated as (num / denom) * 10^exp and stored in dots per meter,
to floating-point dots per inch.Ni'  r   )rN   rO   rP   r   r   _res_to_dpirQ      s*     z#IS!eem44r   c               r    )r
   r   r   r   zetuple[tuple[int, int], str, str | None, tuple[float, float] | None, ImagePalette.ImagePalette | None]r   r   r   r   r   r      s"     b. b.b.b.r   c                sL   \        V 4      pRpRpVP                  4       '       dU   VP                  4       pVR8X  d   VP                  4       pM,VR8X  g   KG  VP	                  R4      ^ ,          R8X  g   Kf  RpKj  Vf   Q hRpRpRpRpRp	Rp
VP                  4       '       Edj   VP                  4       pVR8X  d   VP	                  R4      w  rr\        V\        4      '       g   Q h\        V\        4      '       g   Q h\        V\        4      '       g   Q hW3pV^8X  d   V^,          ^8  d   R	pK  V^8X  d   R
pK  V^8X  d   RpK  V^8X  d   RpK  V^8X  d   RpK  K  VR8X  d6   V^8X  d/   VP	                  R4      w  p rV^8X  d   V^8X  d   RpEK
  EK  EK  VR8X  EdL   VR9   EdD   VP	                  R4      w  pp\        V\        4      '       g   Q h\        V\        4      '       g   Q h^ pVP	                  RRV,          ,           4       F&  p\        V\        4      '       g   Q hVV8  g   K$  TpK(  	  V^8:  d   \        P                  ! V^8X  d   RMR4      p
\        V4       Fn  p. pVP	                  RRV,          ,           4       F,  p\        V\        4      '       g   Q hVP                  V4       K.  	  V
P                  \        V4      4       Kp  	  VR
8X  d   RMRpEK`  EKc  VR8X  g   EKm  VP                  4       pVP                  4       '       g   EK  VP                  4       pVR8X  g   K2  VP	                  R4      w  pppppp\        V\        4      '       g   Q h\        V\        4      '       g   Q h\        V\        4      '       g   Q h\        V\        4      '       g   Q h\        V\        4      '       g   Q h\        V\        4      '       g   Q h\        VVV4      p\        VVV4      p Ve	   V e   VV 3p	EK  Ve   Vf   Rp!\        V!4      hWVW9V
3# )zParse the JP2 header box to extract size, component count,
color space information, and optionally DPI information,
returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4ss   jpx z	image/jpxs   ihdrz>IIHBrD   rE   rF   rG   rH   s   colrz>BBBIZCMYKs   pclrz>HBZ>ZBZPZPAs   res s   rescz>HHHHBBzMalformed JP2 header)rE   rF   )r	   r7   r>   r5   r2   
isinstancer   r   ZrangeZappendZgetcolorr;   rQ   r'   )"r   ZreaderheaderZmimetyper<   r1   rL   ZbpcZncdpipaletteZheightZwidthZmethrK   ZenumcsZneZnpcZmax_bitdepthZbitdepthZiZcolorvalueZresZtresZvrcnZvrcdZhrcnZhrcdZvrceZhrceZhresZvresr)   s"   &                                 r   _parse_jp2_headerrW      s    r]FFH




##%7?&&(FW_!!%(+w6&DD
C	B
CG




##%7?%+%7%7%@"F2fc****eS))))c3''''?DQwC$J!+qqqq W_q!'!3!3G!<D!QqyVr\ *yW_!4((/GBb#&&&&c3''''L"..scCi/@A!(C0000l*#+L B q &33cQhFERrA')E!'!3!3C394E!F)%5555U+ "G $$U5\2 # #ckst ! W_##%C""$$((*7?9<9S6D$dD$%dC0000%dC0000%dC0000%dC0000%dC0000%dC0000&tT48D&tT48D'D,<#Tl|t|$#xg--r   c                  s   a  ] tR t^tRtRtR R ltR R lt]R V 3R ll4       t	]	P                  R	 R
 l4       t	R R ltRtV ;t# )Jpeg2KImageFileZJPEG2000zJPEG 2000 (ISO 15444)c               r3   r
   r   r   r   r   r   r   r   Jpeg2KImageFile.__annotate__   s     2
 2
t 2
r   c           
     	s   V P                   P                  ^4      pVR8X  d<   RV n        \        V P                   4      w  V n        V n        V P                  4        EM!WP                   P                  ^4      ,           pVR8X  d   RV n        \        V P                   4      pVw  V n        V n        V n        q0n	        Ve   W0P                  R&   V P                   P                  ^4      P                  R4      '       ds   V P                   P                  ^4      p\        P                  ! V4      pV P                   P                  V^,
          \        P                   4       V P                  4        MRp\#        V4      h^ V n        ^ V n        R
pR
p V P                   P)                  4       p\        P*                  ! V4      P,                  p\6        P8                  ! R	RT P:                  ,           ^ T P                  T P$                  T P&                  Yu34      .T n        R#   \.         d    R
p T P                   P1                  4       pT P                   P                  ^ \2        P4                  4       T P                   P1                  4       pT P                   P                  T4        L  \.         d    R
p  Li ; ii ; i)i      OQj2k      jP  

jp2NrT   s   jp2cOQznot a JPEG 2000 filejpeg2kr   r    r    )r   r(   codecrM   _size_mode_parse_commentrW   custom_mimetyperU   infoendswithr   rI   r8   r9   r:   r'   _reducelayersfilenoZfstatZst_size	Exceptionr#   r4   ZSEEK_ENDr   _Tiler1   tile)	r   ZsigrS   rT   rJ   r   r)   fdZposs	   &        r   _openZJpeg2KImageFile._open   s	   ggll1o%%DJ%6tww%?"DJ
!Q'C=="
*4773RXO
DJ(<c<?'*IIe$77<<#,,-DEE'',,q/C$]]3/FGGLL!R[[9''),!#&&	!BXXb\))F OO"T\\4;;C	
	  	BggllnQ,S! 	s+   :H   J>.A9J))J:6J>9J::J>c               r3   rY   r   r   r   r   r   rZ   .  s     6 6 6r   c                	s    V P                   P                  ^4      pV'       g   R# V^,          pVR9   d   R# V P                   P                  ^4      p\        P                  ! V4      pV^d8X  d9   V P                   P                  V^,
          4      R,          V P                  R&   R# V P                   P                  V^,
          \        P                  4       K  )T:r
   NNcommentN)i   i   )r   r(   r   rI   rf   r8   r9   r:   )r   ZmarkerZtyprJ   r   r=   r   rd   ZJpeg2KImageFile._parse_comment.  s    WW\\!_F)Cl"'',,q/C]]3'Fd{'+ww||FQJ'?'C		)$VaZ5r   c               r3   )r
   r   zVCallable[[int | tuple[int, int], tuple[int, int, int, int] | None], Image.Image] | intr   r   r   r   r   rZ   A  s     	. 	.		.r   c                	s@   < V P                   ;'       g    \        SV `  # r/   )rh   Zsuperreduce)r   	__class__s   &r   rq   Jpeg2KImageFile.reduce@  s     ||--uw~-r   c               r    )r
   rV   r   r   r   r   r   r   r   r   rZ   M  s      C D r   c                	s    Wn         R # r/   )rh   )r   rV   r$   r   rq   rs   L  s    r   c               r3   )r
   r   zImage.core.PixelAccess | Noner   r   r   r   r   rZ   P  s     . .3 .r   c                	s   V P                   '       Ed>   V P                  '       Ed+   ^V P                  ,          pV^,	          p\        V P                  ^ ,          V,           V,          4      \        V P                  ^,          V,           V,          4      3V n        V P                   ^ ,          p\        V^,          \        4      '       g   Q hV^,          ^ ,          V P                  V P                  V^,          ^,          V^,          ^,          3p\        P                  ! V^ ,          RV P                  ,           V^,          V4      .V n         \        P                  P                  V 4      # )i   r`   )rm   rh   r   r1   rb   rR   r;   ri   r   rl   load)r   ZpowerZadjustZtZt3r=   r   rt   ZJpeg2KImageFile.loadP  s    999%EaZFTYYq\F*e34TYYq\F*e34DJ 		!AadE****A$q'4<<ad1gqtAwGB"1v		/A1Q4LMDI""''--r   )rc   rh   rb   ra   re   ri   rU   rm   )r?   r@   rA   rB   r   Zformat_descriptionro   rd   Zpropertyrq   Zsetterrt   rC   Z__classcell__)rr   s   @r   rX   rX      sO    F02
h6$ 	. 	. ]] . .r   rX   c               r    )r
   prefixr&   r   r"   r   r   r   r   r   r   b  s      E d r   c                s$    V P                  R4      # )r[   )r[   r]   )Z
startswith)ru   r6   r   _acceptrv   b  s    F r   c               s(    V ^8  d   QhRRRRRRRR/# )	r
   imzImage.Imager   r   filenamezstr | bytesr   r   r   r   r   r   r   r   l  s4     @T @Tk @Ty @TK @TD @Tr   c                s$   V P                   p\        V\        4      '       d   VP                  4       pVP	                  R 4      '       g   VP                  RR4      '       d   RpMRpVP                  RR4      pVP                  RR4      pVP                  RR4      pVP                  R	R
4      pVP                  RR4      p	V	ed   \        V	\        \        34      '       d;   \        ;QJ d    R V	 4       F  '       d   K   RM	  RM! R V	 4       4      '       g   Rp
\        V
4      hVP                  R^ 4      pVP                  RR4      pVP                  RR4      pVP                  RR4      pVP                  RR4      pVP                  RR4      pVP                  R^ 4      pVP                  RR4      pVP                  R4      p\        V\        4      '       d   VP                  4       pVP                  RR4      pRp\        VR4      '       d    VP                  4       pVVVVV	VVVVVVVVVVV3V n        \        P                  ! W\        P                   ! RRV P"                  ,           ^ V4      .4       R#   \         d    Rp Lhi ; i)s   .j2kZno_jp2Fr\   r^   offsetNtile_offset	tile_sizequality_modeZratesquality_layersc              3  sN   "   T F  p\        V\        \        34      x  K  	  R # 5ir/   )rR   r   Zfloat)Z.0Zquality_layers   & r   Z	<genexpr>Z_save.<locals>.<genexpr>~  s!      
IWJ}sEl33s   #%Tz,quality_layers must be a sequence of numbersnum_resolutionsZcodeblock_sizeprecinct_sizeirreversibleprogressionZLRCPcinema_modeZnomctsignedrp   pltrj   r_   r   r`   )ZencoderinforR   r.   Zencoderg   ZgetZlistr;   ZallZ
ValueErrorZhasattrrj   rk   Zencoderconfigr   _saverl   r1   )rw   r   rx   rf   Zkindry   rz   r{   r|   r}   r)   r~   Z	cblk_sizer   r   r   r   r   r   rp   r   rn   s   &&&                   r   r   r   l  sO   >>D(C  ??$!!TXXh%>%>XXh%F((=$/Kd+I88NG4LXX.5N!>D%=11C 
IW
CCC 
IW
 
 
 =ohh0!4O)40IHH_d3M88NE2L((=&1K((=$/K
((5!
CXXh&Fhhy!G'3.."
((5%
 C	Br8	B
 	
!B& OOBY__Xv7GDQRS-  	B	s   I? ?JJz	image/jp2)z.jp2z.j2kz.jpcz.jpfz.jpxz.j2c)Z
__future__r   r4   r9   r0   Zcollections.abcr   Ztypingr   r   Z r   r   r   r   r	   rM   rQ   rW   rX   rv   r   Zregister_openr   Zregister_saveZregister_extensionsZregister_mimer   r   r   <module>r      s     # 	 	  $  5 5G GT>5b.Ri.i)) i.X@TN   O**OW E   O**E 2   L   O**K 8r   