
    h                       % S SK Jr  S SKrS SKrS SKJr  S SKJr  S SK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  \R*                  R,                  rS
\S'   S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)    )annotationsN)Sequence)
ModuleType)AnyAnyStrCallableUnioncast   )Image
ImageColor)	deprecate)Coordsz!Callable[[], Image.core._Outline]OutlineF)
ImageDraw2	ImageFont.c                  h   \ 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.       S/S jjr   S(             S)S jjrS S0S jjr   S(         S*S jjr    S1             S2S jjr   S(         S*S jjr    S1SS.             S3S jjjrS4S jr           S5                               S6S jjr                          S7S jr           S5S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/env/lib/python3.13/site-packages/PIL/ImageDraw.py__init__ImageDraw.__init__B   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)r/   r   s     r2   getfontImageDraw.getfontl   s(    ( yy#!..0DIyyr5   c                X    Ub  SSK Jn  UR                  " U5      $ U R                  5       $ )Nr   r7   )r8   r   r9   r:   )r/   	font_sizer   s      r2   _getfontImageDraw._getfont   s*      #)))44<<>!r5   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                  (       a:  [        U[        5      (       a%  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                  (       a:  [        U[        5      (       a%  U R                  R                  X R                  5      nU R                  R                  U5      nX44$ N)r.   r,   
isinstancestrr   getcolorr$   r&   tupler'   r*   r+   )r/   r,   r.   
result_inkresult_fills        r2   _getinkImageDraw._getink   s    
;4<yy"hh  && "XX
 && c3''$--c99=C<<JsE$:$:,,//[[AC!YY//4
dC((%..tYY?D<<JtU$;$;<<00{{CD"ii006&&r5   c                l    U R                  U5      u  pdUb  U R                  R                  XX6U5        gg)zDraw an arc.N)rH   r*   draw_arc)r/   xystartendr.   widthr,   s          r2   arcImageDraw.arc   s4     LL&	?IIr#E: r5   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!   rH   r*   draw_bitmapr(   )r/   rL   bitmapr.   r,   s        r2   rT   ImageDraw.bitmap   sI     	LL&	;C?II!!"ii5 r5   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   )rH   r*   
draw_chord	r/   rL   rM   rN   r.   outlinerO   r,   fill_inks	            r2   chordImageDraw.chord   s`     W3II  C1=?s5A:II  Ca? 4>?r5   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   )rH   r*   draw_ellipser/   rL   r.   rY   rO   r,   rZ   s          r2   ellipseImageDraw.ellipse   s\     W3II""23?s5A:II""2Au5 4>?r5   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)r`   )r/   rL   radiusr.   rY   rO   
ellipse_xys          r2   circleImageDraw.circle   s@     efnbefnbefnbefnU
Zw6r5   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   rj   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      r2   	<genexpr>9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s8      %+ !GC3P+s   AA)rE   ro   cosradianssin)coordanglexydistancerO   s        r2   coord_at_angle&ImageDraw.line.<locals>.coord_at_angle  sz      %#(19q=$ % "#txxU8K/L$L M!"txxU8K/L$L M+%   r5      rm         )rO   )rz   Sequence[float]r{   floatreturnztuple[float, ...])rH   r*   
draw_linesrB   listrE   r
   r   r   rangelenro   degreesatan2piesliceline)r/   rL   r.   rO   jointr,   pointsipointrM   rN   anglesr   flippedcoords
gap_coordss      `            r2   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   )closerH   r*   draw_outline)r/   shaper.   rY   r,   rZ   s         r2   r   ImageDraw.shape9  s[     	W3II""5A6?sII""5q1  /?r5   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   )rH   r*   draw_pieslicerX   s	            r2   r   ImageDraw.piesliceG  s`     W3II##Bsa@?s5A:II##BsEB 4>?r5   c                h    U R                  U5      u  p2Ub  U R                  R                  X5        gg)z#Draw one or more individual pixels.N)rH   r*   draw_points)r/   rL   r.   r,   s       r2   r   ImageDraw.pointW  s.    LL&	?II!!"* r5   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   rj   )maskr   r   )rH   r*   draw_polygonr(   r   newsizecopyDrawpaster$   )r/   rL   r.   rY   rO   r,   rZ   r   mask_inkfill_imr*   ink_imr(   s                r2   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>?r5   c                @    [        XU5      nU R                  XtXV5        g)zDraw a regular polygon.N)!_compute_regular_polygon_verticesr   )r/   bounding_circlen_sidesrotationr.   rY   rO   rL   s           r2   regular_polygonImageDraw.regular_polygon  s     /RRw.r5   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   )rH   r*   draw_rectangler_   s          r2   	rectangleImageDraw.rectangle  s\     W3II$$R15?s5A:II$$Ra7 4>?r5   )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U-
  S-
  TU-   S-   :  a-  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)TTTTrj   )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   rk   r   rm     c              3  D   >#    U  H  u  pTU   (       d  M  Uv   M     g 7frA    )rr   r   partr   s      r2   ru   DImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>  s)      $ qz D$s    	 r   )rE   	enumerater*   r   rK   )r   partsr   r   drZ   full_xfull_yr,   r/   rO   x0x1y0y1s      r2   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)<>	 r5   Tr   F)r   boolr   None)rB   r   rE   r
   r   r   r%   roundallr`   anyr   intrH   r*   r   )r/   rL   rc   r.   rY   rO   r   r1   rr   leftrighttopbottomr   rZ   r   r   r,   r   r   r   r   s   `    ``       @@@@@@@@@r2   rounded_rectangleImageDraw.rounded_rectangle  sX    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a!b1fqj(		(("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>?r5   c                <    [        U[        5      (       a  SOSnX!;   $ )N
   
)rB   rC   )r/   textsplit_characters      r2   _multiline_checkImageDraw._multiline_check(  s    ",T3"7"7$U&&r5   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b;  SnU(       a  Ub  U" U5      OUnUb  U" UU5        UU:w  a	  U" U5        g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$ rA   )rH   )r.   r,   rZ   r/   s      r2   getinkImageDraw.text.<locals>.getink]  s.     LL.MC{+++Jr5   c                  > TR                   nUS:X  a	  T(       a  Sn/ n[        S5       H   nUR                  [        TU   5      5        M"     [        R
                  " TS   5      S   [        R
                  " TS   5      S   4n TR                  " TU/TQ7TTTUSTU US.TD6u  pgUS   US   -   US   US   -   /nUS:X  a  XfR                  S5      ph[        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%                  X6U 5        g ! [         aE     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  Nf = ff = f)
Nr   r   rj   r   T)	directionfeatureslanguagestroke_widthstroke_filledanchorr,   rM   rM   r   r   )r-   r   appendr   ro   modfgetmask2AttributeErrorgetmask	TypeErrorgetbandstructpackfillbandr(   r   r   r*   rS   )r,   r   r$   rz   r   rM   r   offsetcolor	ink_alphar|   r}   r   argsr   embedded_colorr   r   kwargsr   r/   r   rL   s               r2   	draw_text!ImageDraw.text.<locals>.draw_textd  s   ==Dq ^E1XSAZ( YYr!u%a($))BqE*:1*=>E .#}}    (%%!-"&!    qF1I-uQx&)/CD$ v~ #LLOt"KKS1!4	q),77&GGMM1$))A,&6IIaL8HI4 '
 		%%e37; " ..<<!  $  $ !D ! .<<-D..s*   8E0 0
F?;FF;7F?:F;;F?)r.   _Ink | Noner   r   )r   )r,   r   r   r   r   r   )r$   r%   r>   getr   multiline_text)r/   rL   r   r.   r   r   spacingalignr   r   r   r   stroke_fillr   r   r   r1   r   r   r,   
stroke_inks   ``` ``  ```  ```     r2   r   ImageDraw.text-  s    0 dii>GCS/!<==K!89D  &&&&  	5	8 5	8 5	8n Tl?J4?4KVK0QT
%*l3 *$cN % # r5   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      (       a  S
OS5      nU R                  SSX:S9S   U
-   U-   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/ n[        U5       G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;   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S:X  a  US	:w  a  UR                  [	        U[
        5      (       a  SOS5      nU Vs/ s H  nU R                  UUUUU	US9PM     nnU[        U5      -
  n[        U5       H5  u  nnUR                  UU4U45        UUU   U[        U5      S-
  -  -   -  nM7     OUR                  UU4U45        UU-  nGM*     X4U4$ s  snf )Nttbz/ttb direction is unsupported for multiline textlarj   z#anchor must be a 2 character stringr   tbz'anchor not supported for multiline textr   r   r   r   A)r   r   )r   r   r   r   mg       @r   r   )r   justifycenterr   z4align must be "left", "center", "right" or "justify"r       )r%   r   r>   splitrB   rC   textbbox
textlengthr   maxr   sum)r/   rL   r   r   r   r  r  r   r   r   r   r   r=   r1   widths	max_widthlinesline_spacingr   
line_widthr   r   idxr   width_differencewordswordword_widthsr   s                                r2   _prepare_multiline_text!ImageDraw._prepare_multiline_text  s   0 CCS/!>F[A7CS/!AY$;CS/!<==+D	

:dC#8#84eDMM&#tMGJ 	 D#!!- ) J MM*%Iz2I  e!9CJNl2S88CAY#CJNl22C"5)ICa5D(#;6 ayC(3..c!(( ++("(3..'!((L o%	!&6!&;

*T3*?*?3TJ !&
 !& OO"+!)!)'5 $  !&  
 $-s;/?#? (/GAtLL4+t!45KN-=Ua-PPPD  0 tSk401<CS *V U"")
s   
I )r=   c                   U R                  UUUUUUUU	U
UUU5      u  pEnU H  u  nnU R                  UUUUUUU	U
UUUS9  M!     g )N)r   r   r   r   r  r   )r#  r   )r/   rL   r   r.   r   r   r  r  r   r   r   r   r  r   r=   r  r   s                    r2   r  ImageDraw.multiline_text  s    . #::
e HBII#!!)'-   r5   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)
r/   r   r   r   r   r   r   r=   r1   r$   s
             r2   r  ImageDraw.textlengthR  st    "   &&:CS/!dii>GCS/!<==+D'vT]]~~d)xHHr5   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   rj   r   )r$   r%   r>   r   multiline_textbboxr-   getbbox)r/   rL   r   r   r   r  r  r   r   r   r   r   r=   r1   r$   bboxs                   r2   r  ImageDraw.textbboxo  s    , dii>GCS/!<==+D  &&**  (vT]]||	XV
 AwAQ"Q%a2a5$q'BqE/QQr5   c               P   U R                  UUUUUUUUU	U
UU5      u  p4nS nU Hi  u  pU R                  UUUUUUU	U
US9	nUc  UnM#  [        US   US   5      [        US   US   5      [        US   US   5      [        US   US   5      4nMk     Uc  US   US   US   US   4$ U$ )N)r   r   r   r   r   r   r   rj   r   )r#  r  minr  )r/   rL   r   r   r   r  r  r   r   r   r   r   r=   r  r-  r   	bbox_lines                    r2   r+  ImageDraw.multiline_textbbox  s   * #::
e :>HB#!!)- & 
I |  Q1.Q1.Q1.Q1.	 , <a5"Q%A1--r5   )	r'   r*   r.   r   r-   r(   r,   r$   r&   rA   )r(   Image.Imager$   
str | Noner   r   )r   GImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r=   float | Noner   r5  )r,   r  r.   r  r   ztuple[int | None, int | None])Nr   )rL   r   rM   r   rN   r   r.   r  rO   r   r   r   )rL   zSequence[int]rT   r3  r.   r  r   r   )NNr   )rL   r   rM   r   rN   r   r.   r  rY   r  rO   r   r   r   )
rL   r   r.   r  rY   r  rO   r   r   r   )rL   r   rc   r   r.   r  rY   r  rO   r   r   r   )Nr   N)
rL   r   r.   r  rO   r   r   r4  r   r   NN)r   zImage.core._Outliner.   r  rY   r  r   r   )rL   r   r.   r  r   r   )r   NNr   )r   !Sequence[Sequence[float] | float]r   r   r   r   r.   r  rY   r  rO   r   r   r   )rL   r   rc   r   r.   r  rY   r  rO   r   r   z$tuple[bool, bool, bool, bool] | Noner   r   )r   r   r   r   )NNNri   r   NNNr   NF) rL   tuple[float, float]r   r   r.   r  r   r   r   r4  r  r   r  rC   r   r4  r   list[str] | Noner   r4  r   r   r  r  r   r   r   r   r   r   r   r   )rL   r9  r   r   r   r   r   r4  r  r   r  rC   r   r4  r   r:  r   r4  r   r   r   r   r=   r6  r   z}tuple[ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont, str, list[tuple[tuple[float, float], AnyStr]]])rL   r9  r   r   r.   r  r   r   r   r4  r  r   r  rC   r   r4  r   r:  r   r4  r   r   r  r  r   r   r=   r6  r   r   )NNNNF)r   r   r   r   r   r4  r   r:  r   r4  r   r   r=   r6  r   r   )	NNri   r   NNNr   F)rL   r9  r   r   r   r   r   r4  r  r   r  rC   r   r4  r   r:  r   r4  r   r   r   r   r=   r6  r   z!tuple[float, float, float, float])__name__
__module____qualname____firstlineno__r   __annotations__r3   r:   r>   rH   rP   rT   r[   r`   re   r   r   r   r   r   r   r   r   r   r   r#  r  r  r  r+  __static_attributes__r   r5   r2   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' ! ! $%)##'$'}} } 	}} } } } } #}  !}" #}$ !%}& '}( )}* +}, 
-}~o#o# o#
o# o# o# o# o# #o# o#  !o#" #o#$  %o#&
'o#j ! ! $%)##'$'3* #'+33 3 	33 3 3 3 3 #3  !3" #3$ !%3& '3*  +3, 
-3z  $%)#$I #'II	I I #I I I  I 
IL ! $%)#$#0R& #''0R0R 0R
0R 0R 0R 0R 0R #0R 0R  !0R" #0R&  '0R( 
+)0Rv ! $%)#$#>& #''>> >
> > > > > #> >  !>" #>&  '>( 
+)> >r5   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     r2   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   r8   r   r   )r(   hintsr   r*   s       r2   rB  rB    s5     %r*"$.:??2dDr5   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)imagerL   valueborderthreshpixelr|   r}   
backgroundedge	full_edgenew_edgestrs   r.   s                   r2   	floodfillrW    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rA   rB   r   r   rr   r   s     r2   ru   4_compute_regular_polygon_vertices.<locals>.<genexpr>|  s     H1:a#u..   #%z0bounding_circle should only contain numeric datarj   r   c              3  N   #    U  H  n[        U[        [        45      v   M     g 7frA   rZ  r[  s     r2   ru   r\    s"      
1CAJq3,''1Cr]  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   rk   r   rj   )r   ro   rw   rx   ry   )r   r   centroids     r2   _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+ 	
 	
r5   c                   > TS/nT" X5      $ Nr   r   )r{   start_pointra  polygon_radiuss     r2   _compute_polygon_vertexB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex  s    %q){22r5   c                    / nSU -  nSSU-  -
  U-   n[        U 5       H%  nUR                  U5        XC-  nUS:  d  M   US-  nM'     U$ )Nrk   r   g      ?)r   r   )r   r   r   r   current_angle_s         r2   _get_angles6_compute_regular_polygon_vertices.<locals>._get_angles  s^    -sW},8wAMM-($Ms"$	  
 r5   )r   list[float]r   r   r   r9  )r{   r   r   r9  )r   r   r   r   r   rn  )
rB   r   r   r%   r   rE   r   r   r
   r   )r   r   r   r1   rg  rl  r   r{   ra  r`  rf  s           @@@r2   r   r   D  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[        [	        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rA   )abs)rr   r   firstseconds     r2   ru   _color_diff.<locals>.<genexpr>  s(     E2DQs58fQi'((2Ds   !$)rB   rE   r  r   r   )color1color2rr  rs  s     @@r2   rH  rH    sI     !//FfYE!&%00VviFE%F2DEEEr5   rA   )r(   r3  r$   r4  r   r   r7  )r(   zImage.Image | NonerF  r:  r   z)tuple[ImageDraw2.Draw | None, ModuleType]rd  )rL  r3  rL   ztuple[int, int]rM  float | tuple[int, ...]rN  zfloat | tuple[int, ...] | NonerO  r   r   r   )r   r8  r   r   r   r   r   zlist[tuple[float, float]])ru  rw  rv  rw  r   r   )'
__future__r   ro   r   collections.abcr   typesr   typingr   r   r   r	   r
   r8   r   r   
_deprecater   _typingr   r)   rY   r   r?  TYPE_CHECKINGr   r   r   rE   r   rC   _Inkr   r   rB  rW  r   rH  r   r5   r2   <module>r     s2  @ #   $  5 5  !  .3ZZ-?-?	* ?'UE#s(OS()b bJ#$ >B*:.( .2>>> #> +	>
 > 
>B@6@AD@PU@@D	F#	F-D	F
	Fr5   