
    (phj                       % S SK Jr  S SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
JrJrJrJrJr  SSKJrJr  SSKJr  SSKJr  S	\S
'    \R0                  R2                  r\(       a  SSKJrJr  \\\\S4   \ 4   r!  " S S5      r"SSS jjr# S     SS jjr$  S           SS jjr%        SS jr&      SS jr'g! \ a    Sr Nrf = f)    )annotationsN)
ModuleType)TYPE_CHECKINGAnyStrCallableListSequenceTupleUnioncast   )Image
ImageColor)	deprecate)Coordsz(Callable[[], Image.core._Outline] | NoneOutline)
ImageDraw2	ImageFont.c                  j   \ rS rSr% SrS\S'   S!S"S jjr  S#S jr    S$S jr S!     S%S jjr	  S&           S'S	 jjr
 S!       S(S
 jjr   S)             S*S jjr   S)         S+S jjr   S)           S,S jjr   S-         S.S jjr  S/       S0S jjr   S)             S*S jjrS!S1S jjr   S)         S+S jjr    S2             S3S jjr   S)         S+S jjr    S2SS.             S4S jjjrS5S jrS6S jrS r           S7       S8S jjr           S7SS.       S8S jjjr     S9SS.     S:S jjjr         S;SS. S<S jjjr         S;SS. S<S jjjrS rg)=	ImageDraw@   NNImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | Nonefontc                   UR                  5         UR                  (       a  UR                  5         SnUc  UR                  nX!R                  :w  a&  US:X  a  UR                  S:X  a  SnOSn[	        U5      eUS:X  a  UR
                  U l        OSU l        Xl        UR                  U l        [        R                  R                  U R                  U5      U l
        X l        US;   a!  U R                  R                  S5      U l        O U R                  R                  S	5      U l        US
;   a  SU l        OSU l        SU l        g)aX  
Create a drawing instance.

:param im: The image to draw in.
:param mode: Optional mode to use for color values.  For RGB
   images, this argument can be RGB or RGBA (to blend the
   drawing into the image).  For all other modes, this argument
   must be the same as the image mode.  If omitted, the mode
   defaults to the mode of the image.
r   NRGBARGBr   zmode mismatchP)IF)1r   r   r   r!   LF)loadreadonly_copymode
ValueErrorpalette_imageimr   coredrawdraw_inkinkfontmodefill)selfr*   r&   blendmsgs        @/var/www/html/venv/lib/python3.13/site-packages/PIL/ImageDraw.py__init__ImageDraw.__init__E   s     		;;HHJ<77D77?v~"''U"2% o%3;::DLDL%%JJOODGGU3		:yy))!,DHyy))"-DH''DMDM	    c                t    U R                   (       d  SSKJn  UR                  " 5       U l         U R                   $ )a  
Get the current default font.

To set the default font for this ImageDraw instance::

    from PIL import ImageDraw, ImageFont
    draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

To set the default font for all future ImageDraw instances::

    from PIL import ImageDraw, ImageFont
    ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

If the current default font is ``None``,
it is initialized with ``ImageFont.load_default()``.

:returns: An image font.r   r   )r    r   load_default)r1   r   s     r4   getfontImageDraw.getfonto   s(    ( yy#!..0DIyyr7   c                X    Ub  SSK Jn  UR                  " U5      $ U R                  5       $ )Nr   r9   )r:   r   r;   r<   )r1   	font_sizer   s      r4   _getfontImageDraw._getfont   s*      #)))44<<>!r7   c                   S nS nUc3  Uc0  U R                   (       a  U R                  nX44$ U R                  n X44$ Ub  [        U[        5      (       a   [        R
                  " XR                  5      nU R                  (       aD  [        U[        R                  5      (       d%  U R                  R                  XR                  5      nU R                  R                  U5      nUb  [        U[        5      (       a   [        R
                  " X R                  5      nU R                  (       aD  [        U[        R                  5      (       d%  U R                  R                  X R                  5      nU R                  R                  U5      nX44$ N)r0   r.   
isinstancestrr   getcolorr&   r(   numbersNumberr)   r,   r-   )r1   r.   r0   
result_inkresult_fills        r4   _getinkImageDraw._getink   s&    
;4<yy"hh  && "XX
 && c3''$--c99=C<<
3(G(G,,//[[AC!YY//4
dC((%..tYY?D<<
4(H(H<<00{{CD"ii006&&r7   c                l    U R                  U5      u  pdUb  U R                  R                  XX6U5        gg)zDraw an arc.N)rK   r,   draw_arc)r1   xystartendr0   widthr.   s          r4   arcImageDraw.arc   s4     LL&	?IIr#E: r7   c                    UR                  5         U R                  U5      u  pCUc  UnUb'  U R                  R                  XR                  U5        gg)zDraw a bitmap.N)r#   rK   r,   draw_bitmapr*   )r1   rO   bitmapr0   r.   s        r4   rW   ImageDraw.bitmap   sI     	LL&	;C?II!!"ii5 r7   c                    U R                  XT5      u  pxUb  U R                  R                  XX8S5        Ub,  Xx:w  a&  US:w  a  U R                  R                  XX7SU5        gggg)zDraw a chord.Nr   r   )rK   r,   
draw_chord	r1   rO   rP   rQ   r0   outlinerR   r.   fill_inks	            r4   chordImageDraw.chord   s`     W3II  C1=?s5A:II  Ca? 4>?r7   c                    U R                  X25      u  pVUb  U R                  R                  XS5        Ub+  XV:w  a%  US:w  a  U R                  R                  XSU5        gggg)zDraw an ellipse.Nr   r   )rK   r,   draw_ellipser1   rO   r0   r\   rR   r.   r]   s          r4   ellipseImageDraw.ellipse   s\     W3II""23?s5A:II""2Au5 4>?r7   c                d    US   U-
  US   U-
  US   U-   US   U-   4nU R                  XcXE5        g)z4Draw a circle given center coordinates and a radius.r   r   N)rc   )r1   rO   radiusr0   r\   rR   
ellipse_xys          r4   circleImageDraw.circle   s@     efnbefnbefnbefnU
Zw6r7   c                .  ^ U R                  U5      S   nUGbq  U R                  R                  XT5        US:X  GaM  TS:  GaE  [        US   [        [
        45      (       a  [        [        [        [              U5      nOI[        S[        U5      S5       Vs/ s H(  n[        [        [           [        XUS-    5      5      PM*     nn[        S[        U5      S-
  5       GH  nXg   nXgS-
     U4XUS-      44 V	V
s/ s HE  u  p[        R                  " [        R                  " U
S   U	S   -
  U	S   U
S   -
  5      5      S-  PMG     nn	n
US   US   :X  a  Mz        SU4S jjnUS   US   :  =(       a    US   S	-
  US   :  =(       d     US   US   :  =(       a    US   S	-   US   :  nUS   TS-  -
  S-   US   TS-  -
  S-   4US   TS-  -   S-
  US   TS-  -   S-
  4/nU(       a  US   S
-   US   S
-   pOUS   S
-
  US   S
-
  pU R                  XS
-
  U
S
-
  U5        TS:  d  GMO  U(       a  U" XS   S
-   5      UU" XS   S
-   5      /nOU" XS   S
-
  5      UU" XS   S
-
  5      /nU R                  XSS9  GM     ggggs  snf s  sn
n	f )z6Draw a line, or a connected sequence of line segments.r   Ncurve      r   h  c                   > U u  p#US-  nTS-  S-
  n[        S X$[        R                  " [        R                  " U5      5      -  4X4[        R                  " [        R                  " U5      5      -  44 5       5      $ )NZ   rm   r   c              3     #    U  H;  u  pXS :  a  [         R                  " U5      O[         R                  " U5      -   v   M=     g7fr   N)mathfloorceil).0pp_ds      r4   	<genexpr>9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s8      %+ !GC3P+s   AA)tuplers   cosradianssin)coordanglexydistancerR   s        r4   coord_at_angle&ImageDraw.line.<locals>.coord_at_angle  sz      %#(19q=$ % "#txxU8K/L$L M!"txxU8K/L$L M+%   r7      rp         )rR   )r   Sequence[float]r   floatreturnztuple[float, ...])rK   r,   
draw_linesrD   listr{   r   r	   r   rangelenrs   degreesatan2piesliceline)r1   rO   r0   rR   jointr.   pointsipointrP   rQ   anglesr   flippedcoords
gap_coordss      `            r4   r   ImageDraw.line   s    ll4 #?II  %0EAIbedE]33!(8E?";R@F "'q#b'1!5!5A Xe_eB1q5M.BC!5   q#f+/2A"IE
 $E]E2"1q5M2++JE TZZAq0A58cRSfCT%UV+   ayF1I- .7<* q	F1I-M&)c/F1I2MQ )fQi/OF1IOfQi4O  qEAI-158eai3G!3KLqEAI-158eai3G!3KLF &,Qi"nfQi"ns&,Qi"nfQi"nsMM&"*cBhEqy" .uQi"n E % .uQi"n E*J !/uQi"n E % .uQi"n E*J
 		*!	<o 3 %. s   /J?AJc                    UR                  5         U R                  X25      u  pEUb  U R                  R                  XS5        Ub#  XE:w  a  U R                  R                  XS5        ggg)z(Experimental) Draw a shape.Nr   r   )closerK   r,   draw_outline)r1   shaper0   r\   r.   r]   s         r4   r   ImageDraw.shape<  s[     	W3II""5A6?sII""5q1  /?r7   c                    U R                  XT5      u  pxUb  U R                  R                  XX8S5        Ub,  Xx:w  a&  US:w  a  U R                  R                  XX7SU5        gggg)zDraw a pieslice.Nr   r   )rK   r,   draw_pieslicer[   s	            r4   r   ImageDraw.piesliceJ  s`     W3II##Bsa@?s5A:II##BsEB 4>?r7   c                h    U R                  U5      u  p2Ub  U R                  R                  X5        gg)z#Draw one or more individual pixels.N)rK   r,   draw_points)r1   rO   r0   r.   s       r4   r   ImageDraw.pointZ  s.    LL&	?II!!"* r7   c                   U R                  X25      u  pVUb  U R                  R                  XS5        UGb  XV:w  Ga  US:w  Ga  US:X  a  U R                  R                  XSU5        gU R                  Gba  [        R
                  " SU R                  R                  5      nU R                  S5      S   nUR                  5       n	[        U	5      n
U
R                  R                  XS5        UR                  5       n[        U5      n
US-  S-
  nU
R                  R                  XSU5        UR                  XS9  [        R
                  " U R                  U R                  R                  5      n[        U5      n
U
R                  R                  XSU5        U R                  R                  UR                  SUR                  -   UR                  5        ggggg)zDraw a polygon.Nr   r   r!   rm   )maskr   r   )rK   r,   draw_polygonr*   r   newsizecopyDrawpaster&   )r1   rO   r0   r\   rR   r.   r]   r   mask_inkfill_imr,   ink_imr*   s                r4   polygonImageDraw.polygon`  sk    W3II""23?s5A:z		&&r59$ yydggll3<<?1-))+G}		&&rQ7F|	A		&&rQ>

6
0YYtyy$'',,7Bx		&&r59beeVbgg%5tww?) % 4>?r7   c                @    [        XU5      nU R                  XtXV5        g)zDraw a regular polygon.N)!_compute_regular_polygon_verticesr   )r1   bounding_circlen_sidesrotationr0   r\   rR   rO   s           r4   regular_polygonImageDraw.regular_polygon  s     /RRw.r7   c                    U R                  X25      u  pVUb  U R                  R                  XS5        Ub+  XV:w  a%  US:w  a  U R                  R                  XSU5        gggg)zDraw a rectangle.Nr   r   )rK   r,   draw_rectanglerb   s          r4   	rectangleImageDraw.rectangle  s\     W3II$$R15?s5A:II$$Ra7 4>?r7   )cornersc                 ^ ^^^^^^^^^^^ [        US   [        [        45      (       a(  [        [        [        [
              U5      u  u  mmu  mmO[        [        [
           U5      u  mmmmTT:  a  Sn[        U5      eTT:  a  Sn[        U5      eTc  SmUS-  m[        T5      m[        T5      m[        T5      m[        T5      mSu  mm[        T5      (       aO  TTT-
  S-
  :  mT(       a  TT-
  mTTT-
  S-
  :  mT(       a  TT-
  mT(       a  T(       a  T R                  XUT5      $ TS:X  d  [        T5      (       d  T R                  XUT5      $ [        TS-  5      nT R                  XC5      u  mmSUUUUUUU UUUUU4S	 jjn	TGb,  U	" S
5        T(       a.  T R                  R                  TTU-   S-   TTU-
  S-
  4TS5        O-T R                  R                  TU-   S-   TTU-
  S-
  T4TS5        T(       d  T(       d  TTTU-   T/n
TS   (       a  U
S==   US-   -  ss'   TS   (       a  U
S==   US-   -  ss'   T R                  R                  U
TS5        TU-
  TTT/nTS   (       a  US==   US-   -  ss'   TS   (       a  US==   US-   -  ss'   T R                  R                  UTS5        TGb  TT:w  Ga  TS:w  Ga  U	" S5        T(       d  TTTTT-   S-
  /nTS   (       a  US==   US-   -  ss'   TS   (       a  US==   US-   -  ss'   T R                  R                  UTS5        TTT-
  S-   TT/nTS   (       a  US==   US-   -  ss'   TS   (       a  US==   US-   -  ss'   T R                  R                  UTS5        T(       d  TTTT-   S-
  T/n
TS   (       a  U
S==   US-   -  ss'   TS   (       a  U
S==   US-   -  ss'   T R                  R                  U
TS5        TT-
  S-   TTT/nTS   (       a  US==   US-   -  ss'   TS   (       a  US==   US-   -  ss'   T R                  R                  UTS5        ggggg)zDraw a rounded rectangle.r   z&x1 must be greater than or equal to x0z&y1 must be greater than or equal to y0N)TTTTrm   )FFr   c                  > T(       a  TTTT-   TT-   4SS4TTT-
  TT-   T4SS44nO|T(       a  TTTT-   TT-   4SS4TT-
  TTTT-   4SS44nOV[        U4S j[        TTTT-   TT-   4SS4TT-
  TTTT-   4SS4TT-
  TT-
  TT4SS4TTT-
  TT-   T4SS445       5       5      nU HH  nU (       a   T	R                  R                  " UTS4-   6   M*  T	R                  R                  " UTT
4-   6   MJ     g )Nr   rn   r   rp     c              3  D   >#    U  H  u  pTU   (       d  M  Uv   M     g 7frC    )rv   r   partr   s      r4   ry   DImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>  s)      $ qz D$s    	 r   )r{   	enumerater,   r   rN   )r   partsr   r   dr]   full_xfull_yr.   r1   rR   x0x1y0y1s      r4   draw_corners1ImageDraw.rounded_rectangle.<locals>.draw_corners  s]    "b1fb1f-sC8"q&"q&"-q#6  "b1fb1f-r371fb"b1f-sB7  #, "b1fb1f5sC@ 1fb"b1f5sC@ 1fb1fb"5q"= "q&"q&"5r3?	$  II++dh].BDII&&e)<>	 r7   Tr   F)r   boolr   None)rD   r   r{   r   r	   r   r'   roundallrc   anyr   intrK   r,   r   )r1   rO   rf   r0   r\   rR   r   r3   rr   leftrighttopbottomr   r]   r   r   r.   r   r   r   r   s   `    ``       @@@@@@@@@r4   rounded_rectangleImageDraw.rounded_rectangle  s@    bedE]++!%hx&?!DHRhr2!(5/26NBB7:CS/!7:CS/!?.GQJ2Y2Y2Y2Y%w<<"r'A+%FG"r'A+%FG&||Bgu==6W >>"GU;;QKW3X 	?  	?  	?D 		(("b1fqj"b1fqj)I8UVW		(("q&1*b"q&1*b)I8UVW&BQ+1:Gq1u$G1:Gq1u$G		((x;aR,1:!HA%H1:!HA%H		((!<?sh5A:2r2:>21:Fa!eOF1:Fa!eOF		((c15b5j1nb"51:1IQ&I1:1IQ&I		((a8BU
Q31:Gq1u$G1:Gq1u$G		((sA6eaR41:!HA%H1:!HA%H		((Q7 # 4>?r7   c                <    [        U[        5      (       a  SOSnX!;   $ N
   
)rD   rE   )r1   textsplit_characters      r4   _multiline_checkImageDraw._multiline_check+  s    ",T3"7"7$U&&r7   c                Z    UR                  [        U[        5      (       a  S5      $ S5      $ r   )splitrD   rE   )r1   r   s     r4   _multiline_splitImageDraw._multiline_split0  s%    zz*T3"7"7$CCUCCr7   c                6    U R                  SSXS9S   U-   U-   $ )Nr   A)stroke_widthr   )textbbox)r1   r   spacingr   s       r4   _multiline_spacingImageDraw._multiline_spacing3  s.    MM&#tMGJ	
r7   c                  ^ ^^^^^^	^
^^^ T(       a  T R                   S;  a  Sn[        U5      eTc   T R                  TR                  S5      5      mT R	                  T5      (       a  T R                  TTUTTUUTT	T
UUT5      $ SU 4S jjnS	S
UUUUU	UUU
U UU4S jjjnU" U5      nUb5  SnU(       a  Ub  U" U5      OUnUb  U" UU5        U" US5        gU" U5        gg)z
Draw text.r   r   3Embedded color supported only in RGB and RGBA modesNr?   c                B   > TR                  U 5      u  pUc  Uc   eU$ U$ rC   )rK   )r0   r.   r]   r1   s      r4   getinkImageDraw.text.<locals>.getinkj  s.     LL.MC{+++Jr7   r   c                  > TR                   nUS:X  a	  T(       a  Sn/ n/ n[        S5       HK  nUR                  [        TU   5      5        UR                  [        R
                  " TU   5      S   5        MM      TR                  " TU/TQ7TTTUTU US.TD6u  pxUS   US   -   US   US   -   /nU(       a  US   US   -   US   US   -   /nUS:X  a  XwR                  S5      py[        R                  " SU 5      S   n
U	R                  SU
5        Uu  pTR                  b?  TR                  R                  XXUR                   S   -   XR                   S   -   4U5        g g TR"                  R%                  XGU 5        g ! [         aF     TR                  " TUTTTUTU /TQ7SU0TD6n N! [         a    TR                  T5      n  GNf = ff = f)	Nr   r   rm   )	directionfeatureslanguager   anchorr.   rP   r   rP   r   r   )r/   r   appendr   rs   modfgetmask2AttributeErrorgetmask	TypeErrorgetbandstructpackfillbandr*   r   r   r,   rV   )r.   r   stroke_offsetr&   r   rP   r   r   offsetcolor	ink_alphar   r   r   argsr   embedded_colorr   r   kwargsr   r1   r   rO   s                r4   	draw_text!ImageDraw.text.<locals>.draw_textq  s   ==Dq ^EE1XSAZ(TYYr!u-a01 .#}}    (%%!-!    qF1I-uQx&)/CD$ qM!$44eAhqAQ6QRv~ #LLOt"KKS1!4	q),77&GGMM1$))A,&6IIaL8HI4 '
 		%%e37? " ..<<!  $  $ !D ! .<<-D..s*   <7F 
GF--GGGG)r0   _Ink | Noner   r   rr   )r   r   )r&   r'   r@   getr   multiline_text)r1   rO   r   r0   r   r   r   alignr   r   r   r   stroke_fillr  r  r  r3   r   r  r.   
stroke_inks   ``` ``  ```  ```     r4   r   ImageDraw.text:  s    0 dii>GCS/!<==K!89D  &&&&  	7	8 7	8 7	8r Tl?J4?4KVK0QT
%*l3 #q! # r7   )r?   c               &   US:X  a  Sn[        U5      eUc  SnO2[        U5      S:w  a  Sn[        U5      eUS   S;   a  Sn[        U5      eUc  U R                  U5      n/ nS	nU R                  U5      nU R	                  XFU5      nU H1  nU R                  UXHXS
9nUR                  U5        [        UU5      nM3     US   nUS   S:X  a  U[        U5      S-
  U-  S-  -  nOUS   S:X  a  U[        U5      S-
  U-  -  n[        U5       H  u  nnUS	   nUUU   -
  nUS	   S:X  a	  UUS-  -  nOUS	   S:X  a  UU-  nUS:X  a  O(US:X  a	  UUS-  -  nOUS:X  a  UU-  nOSn[        U5      eU R                  UU4UUUUUU	U
UUUS9  UU-  nM     g )Nttb/ttb direction is unsupported for multiline textlarm   #anchor must be a 2 character stringr   tb'anchor not supported for multiline textr   )r   r   r   m       @r   r   r   centerr   )align must be "left", "center" or "right")r   r   r   r   r  r  )
r'   r   r@   r   r   
textlengthr   maxr   r   )r1   rO   r   r0   r   r   r   r  r   r   r   r   r  r  r?   r3   widths	max_widthlinesline_spacingr   
line_widthr   idxr   width_differences                             r4   r  ImageDraw.multiline_text  s   . CCS/!>F[A7CS/!AY$;CS/!<==+D	%%d+..tlKDd( ) J MM*%Iz2I  e!9CJNl2S88CAY#CJNl22C"5)ICa5D(6#;6 ayC(3..c!(( ("(3..'!((A o%IIs#!!)'-   <CE *r7   c                  U R                  U5      (       a  Sn[        U5      eU(       a  U R                  S;  a  Sn[        U5      eUc  U R                  U5      nU(       a  SOU R                  n	UR                  XX4U5      $ )z@Get the length of a given string, in pixels with 1/64 precision.z&can't measure length of multiline textr   r   r   )r   r'   r&   r@   r/   	getlength)
r1   r   r   r   r   r   r  r?   r3   r&   s
             r4   r$  ImageDraw.textlength  st    "   &&:CS/!dii>GCS/!<==+D'vT]]~~d)xHHr7   c               z   U(       a  U R                   S;  a  Sn[        U5      eUc  U R                  U5      nU R                  U5      (       a  U R	                  UUUUUUUUU	U
U5      $ U(       a  SOU R
                  nUR                  X.XxXU5      nUS   US   -   US   US   -   US   US   -   US   US   -   4$ )z2Get the bounding box of a given string, in pixels.r   r   r   r   r   rm   r   )r&   r'   r@   r   multiline_textbboxr/   getbbox)r1   rO   r   r   r   r   r  r   r   r   r   r  r?   r3   r&   bboxs                   r4   r   ImageDraw.textbbox3  s    " dii>GCS/!<==+D  &&**  (vT]]||	XV
 AwAQ"Q%a2a5$q'BqE/QQr7   c                  US:X  a  Sn[        U5      eUc  SnO2[        U5      S:w  a  Sn[        U5      eUS   S;   a  Sn[        U5      eUc  U R                  U5      n/ nS	nU R                  U5      nU R	                  X5U
5      nU H4  nU R                  UUUUU	US
9nUR                  U5        [        UU5      nM6     US   nUS   S:X  a  U[        U5      S-
  U-  S-  -  nOUS   S:X  a  U[        U5      S-
  U-  -  nS n[        U5       H  u  nnUS	   nXU   -
  nUS	   S:X  a	  UUS-  -  nOUS	   S:X  a  UU-  nUS:X  a  O(US:X  a	  UUS-  -  nOUS:X  a  UU-  nOSn[        U5      eU R                  UU4UUUUUU	U
US9	nUc  UnOF[        US	   US	   5      [        US   US   5      [        US   US   5      [        US   US   5      4nUU-  nM     Uc  US	   US   US	   US   4$ U$ )Nr  r  r  rm   r  r   r  r  r   )r   r   r   r  r   r!  r   r   r   r"  r   r#  )r   r   r   r   r  r   )r'   r   r@   r   r   r$  r   r%  r   r   min)r1   rO   r   r   r   r   r  r   r   r   r   r  r?   r3   r&  r'  r(  r)  r   r*  r   r4  r+  r   r,  	bbox_lines                             r4   r2  ImageDraw.multiline_textbbox`  s     CCS/!>F[A7CS/!AY$;CS/!<==+D	%%d+..tlKD#!!- ) J MM*%Iz2I  e!9CJNl2S88CAY#CJNl22C15"5)ICa5D(#;6 ayC(3..c!(( ("(3..'!((A o%s#!!)- & 
I |  Q1.Q1.Q1.Q1.	 <CU *X <a5"Q%A1--r7   )	r)   r,   r0   r   r/   r*   r.   r&   r(   rC   )r*   Image.Imager&   
str | Noner   r   )r   GImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r?   zfloat | Noner   r<  )r.   r  r0   r  r   ztuple[int | None, int | None])Nr   )rO   r   rP   r   rQ   r   r0   r  rR   r   r   r   )rO   zSequence[int]rW   r:  r0   r  r   r   )NNr   )rO   r   rP   r   rQ   r   r0   r  r\   r  rR   r   r   r   )
rO   r   r0   r  r\   r  rR   r   r   r   )rO   r   rf   r   r0   r  r\   r  rR   r   r   r   )Nr   N)
rO   r   r0   r  rR   r   r   r;  r   r   NN)r   zImage.core._Outliner0   r  r\   r  r   r   )rO   r   r0   r  r   r   )r   NNr   )r   !Sequence[Sequence[float] | float]r   r   r   r   r0   r  r\   r  rR   r   r   r   )rO   r   rf   r   r0   r  r\   r  rR   r   r   z$tuple[bool, bool, bool, bool] | Noner   r   )r   r   r   r   )r   r   r   zlist[AnyStr])NNNrl   r   NNNr   NF)rO   tuple[float, float]r   rE   r   r   r   r   )NNNNF)r   rE   r   r   r   r   )	NNrl   r   NNNr   F)r   ztuple[int, int, int, int]) __name__
__module____qualname____firstlineno__r   __annotations__r5   r<   r@   rK   rS   rW   r^   rc   rh   r   r   r   r   r   r   r   r   r   r   r   r   r  r$  r   r2  __static_attributes__r   r7   r4   r   r   @   s]    	 	V(T	P6"%"	P" 59''&1'	&'< !;; ; 	;
 ; ; 
; KO	6	6)4	6<G	6		6  !#@@ @ 	@
 @ @ @ 
@& !#66 6 	6
 6 
6$ !#
7
7 
7 	
7
 
7 
7 

7 ! K=K= K= 	K=
 K= 
K=` !#	2"2 2 	2
 
2& !#CC C 	C
 C C C 
C + !#"@"@ "@ 	"@
 "@ 
"@P  #/:/ / 	/
 / / / 
/  !#88 8 	8
 8 
8"  #J8 9=J8J8 J8 	J8
 J8 J8 6J8 
J8X'
D
  '~~ ~~, 
-~H  'Z * +Z Z  Z Z , 
-Z H I II	I 
IB +R +R 
#+Rb f f 
#f fr7   r   c                ^     [        U S5      " U5      $ ! [         a    [        X5      s $ f = f)ak  
A simple 2D drawing interface for PIL images.

:param im: The image to draw in.
:param mode: Optional mode to use for color values.  For RGB
   images, this argument can be RGB or RGBA (to blend the
   drawing into the image).  For all other modes, this argument
   must be the same as the image mode.  If omitted, the mode
   defaults to the mode of the image.
getdraw)getattrr  r   )r*   r&   s     r4   r   r     s3    #r9%d++ #""#s    ,,c                `    Ub  [        SS5        SSKJn  U b  UR                  " U 5      OSnX24$ )z
:param im: The image to draw in.
:param hints: An optional list of hints. Deprecated.
:returns: A (drawing context, drawing resource factory) tuple.
Nz'hints' parameter   r   )r   )r   r:   r   r   )r*   hintsr   r,   s       r4   rG  rG    s5     %r*"$.:??2dDr7   c                F   U R                  5       nUc   eUu  pg XVU4   n[        X(5      U::  a  gX%Xg4'   Xg41n	[	        5       n
U	(       a  [	        5       nU	 H  u  pgUS-   U4US-
  U4XgS-   4XgS-
  44 Hk  u  pX4U
;   d  US:  d  US:  a  M   X\U4   nU
R                  X45        Uc  [        X5      U:*  nOXU4;  nU(       a  X%X4'   UR                  X45        Mk  Mm     M     U	n
Un	U	(       a  M  gg! [        [        4 a     gf = f! [        [        4 a     M  f = f)a  
.. warning:: This method is experimental.

Fills a bounded region with a given color.

:param image: Target image.
:param xy: Seed position (a 2-item coordinate tuple). See
    :ref:`coordinate-system`.
:param value: Fill color.
:param border: Optional border value.  If given, the region consists of
    pixels with a color different from the border color.  If not given,
    the region consists of pixels having the same color as the seed
    pixel.
:param thresh: Optional threshold value which specifies a maximum
    tolerable difference of a pixel value from the 'background' in
    order for it to be replaced. Useful for filling regions of
    non-homogeneous, but similar, colors.
Nr   r   )r#   _color_diffr'   
IndexErrorsetadd)imagerO   valueborderthreshpixelr   r   
backgroundedge	full_edgenew_edgestrw   r0   s                   r4   	floodfillr\    sc   6 JJLEDAa4[
u)V3ad F8D I
5DAa%a!eQZ!UaQZH6Y&!a%1q5-dA MM1&)~*19VC 7&+ad aV,  I $ 	+ $ 
#  #J/ s(   C6 C6 D6D	D	D D c                  ^^	^
 [        U[        5      (       d  Sn[        U5      eUS:  a  Sn[        U5      e[        U [        [
        45      (       d  Sn[        U5      e[        U 5      S:X  aH  [        S U  5       5      (       d  Sn[        U5      e[        [        [           [	        U 5      5      Gt m	m
O[        U 5      S:X  a  [        U S   [        [
        45      (       a  [        S	 U S    5       5      (       a  [        U S
   [        [        45      (       d  Sn[        U5      e[        U S   5      S:w  a  Sn[        U5      e[        [        [           [	        U S   5      5      m	[        [        U S
   5      m
OSn[        U5      eT
S::  a  Sn[        U5      e[        U[        [        45      (       d  Sn[        U5      eSU	4S jjmSUU
4S jjnSS jnU" X5      nU Vs/ s H
  ot" U5      PM     sn$ s  snf )u  
Generate a list of vertices for a 2D regular polygon.

:param bounding_circle: The bounding circle is a sequence defined
    by a point and radius. The polygon is inscribed in this circle.
    (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``)
:param n_sides: Number of sides
    (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon)
:param rotation: Apply an arbitrary rotation to the polygon
    (e.g. ``rotation=90``, applies a 90 degree rotation)
:return: List of regular polygon vertices
    (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``)

How are the vertices computed?
1. Compute the following variables
    - theta: Angle between the apothem & the nearest polygon vertex
    - side_length: Length of each polygon edge
    - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle)
    - polygon_radius: Polygon radius (last element of bounding_circle)
    - angles: Location of each polygon vertex in polar grid
        (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0])

2. For each angle in angles, get the polygon vertex at that angle
    The vertex is computed using the equation below.
        X= xcos(φ) + ysin(φ)
        Y= −xsin(φ) + ycos(φ)

    Note:
        φ = angle in degrees
        x = 0
        y = polygon_radius

    The formula above assumes rotation around the origin.
    In our case, we are rotating around the centroid.
    To account for this, we use the formula below
        X = xcos(φ) + ysin(φ) + centroid_x
        Y = −xsin(φ) + ycos(φ) + centroid_y
zn_sides should be an intr   zn_sides should be an int > 2z$bounding_circle should be a sequencec              3  N   #    U  H  n[        U[        [        45      v   M     g 7frC   rD   r   r   rv   r   s     r4   ry   4_compute_regular_polygon_vertices.<locals>.<genexpr>c  s     H1:a#u..   #%z0bounding_circle should only contain numeric datarm   r   c              3  N   #    U  H  n[        U[        [        45      v   M     g 7frC   r_  r`  s     r4   ry   ra  i  s"      
1CAJq3,''1Crb  r   zBbounding_circle centre should contain 2D coordinates (e.g. (x, y))z[bounding_circle should contain 2D coordinates and a radius (e.g. (x, y, r) or ((x, y), r) )z$bounding_circle radius should be > 0z"rotation should be an int or floatc                  > [        U S   [        R                  " [        R                  " SU-
  5      5      -  U S   [        R                  " [        R                  " SU-
  5      5      -  -
  TS   -   S5      [        U S   [        R                  " [        R                  " SU-
  5      5      -  U S   [        R                  " [        R                  " SU-
  5      5      -  -   TS   -   S5      4$ )Nr   rn   r   rm   )r   rs   r|   r}   r~   )r   r   centroids     r4   _apply_rotation:_compute_regular_polygon_vertices.<locals>._apply_rotation  s    a488DLLw$?@@(TXXdll3=&ABBC1+ 	 a488DLLw$?@@(TXXdll3=&ABBC1+ 	
 	
r7   c                   > TS/nT" X5      $ Nr   r   )r   start_pointrf  polygon_radiuss     r4   _compute_polygon_vertexB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex  s    %q){22r7   c                    / nSU -  nSSU-  -
  U-   n[        SU 5       H%  nUR                  U5        XC-  nUS:  d  M   US-  nM'     U$ )Nrn   r   g      ?r   )r   r   )r   r   r   r   current_angle_s         r4   _get_angles6_compute_regular_polygon_vertices.<locals>._get_angles  sa    -sW},8q'"AMM-($Ms"$	 #
 r7   )r   list[float]r   r   r   r?  )r   r   r   r?  )r   r   r   r   r   rs  )rD   r   r  r'   r   r{   r   r   r   r   r   )r   r   r   r3   rl  rq  r   r   rf  re  rk  s           @@@r4   r   r   +  s   V gs##(n{,o oe}554n
?q HHHHDCS/!$(ed?6K$L!>	_		"z/!2DtUm'T'T 
1@1C
 
 
OA.e==DCS/!q!"a'VCS/!UT/!*<%=>e_Q%78< 	 o4o he--2o
 3 3
 +F 9??u#E*???s   *G>c           	        ^^ [        U [        5      (       a  U OU 4m[        U[        5      (       a  UOU4m[        UU4S j[        S[	        T5      5       5       5      $ )zB
Uses 1-norm distance to calculate difference between two values.
c              3  L   >#    U  H  n[        TU   TU   -
  5      v   M     g 7frC   )abs)rv   r   firstseconds     r4   ry   _color_diff.<locals>.<genexpr>  s(     H2GQs58fQi'((2Gs   !$r   )rD   r{   sumr   r   )color1color2rw  rx  s     @@r4   rM  rM    sK     !//FfYE!&%00VviFH%3v;2GHHHr7   rC   )r*   r:  r&   r;  r   r   r=  )r*   zImage.Image | NonerK  zlist[str] | Noner   z)tuple[ImageDraw2.Draw | None, ModuleType]ri  )rQ  r:  rO   ztuple[int, int]rR  float | tuple[int, ...]rS  zfloat | tuple[int, ...] | NonerT  r   r   r   )r   r>  r   r   r   r   r   zlist[tuple[float, float]])r{  r}  r|  r}  r   r   )(
__future__r   rs   rG   r  typesr   typingr   r   r   r   r	   r
   r   r   r:   r   r   
_deprecater   _typingr   rD  r+   r\   r   r  r   r   r   r   rE   _Inkr   r   rG  r\  r   rM  r   r7   r4   <module>r     sN  @ #     V V V  !  
2 1jj  G 'UE#s(OS()F FR#$ >B*:.( .2>>> #> +	>
 > 
>B@6@AD@PU@@D	I#	I-D	I
	I{#  Gs   C CC