
    g#                       % 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Jr  SSKJrJr  SSKJr  SS	KJr  S
\S'    \R.                  R0                  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)Sequence)
ModuleType)TYPE_CHECKINGAnyAnyStrCallableUnioncast   )Image
ImageColor)	deprecate)Coordsz(Callable[[], Image.core._Outline] | NoneOutline)
ImageDraw2	ImageFont.c                  N   \ 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        S7S jr           S8                               S9S jjr           S8S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=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        U/Users/Alptekin/Desktop/izin_takip/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)r0   r   s     r3   getfontImageDraw.getfonto   s(    ( yy#!..0DIyyr6   c                X    Ub  SSK Jn  UR                  " U5      $ U R                  5       $ )Nr   r8   )r9   r   r:   r;   )r0   	font_sizer   s      r3   _getfontImageDraw._getfont   s*      #)))44<<>!r6   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,   )r0   r-   r/   
result_inkresult_fills        r3   _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&&r6   c                l    U R                  U5      u  pdUb  U R                  R                  XX6U5        gg)zDraw an arc.N)rI   r+   draw_arc)r0   xystartendr/   widthr-   s          r3   arcImageDraw.arc   s4     LL&	?IIr#E: r6   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"   rI   r+   draw_bitmapr)   )r0   rM   bitmapr/   r-   s        r3   rU   ImageDraw.bitmap   sI     	LL&	;C?II!!"ii5 r6   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   )rI   r+   
draw_chord	r0   rM   rN   rO   r/   outlinerP   r-   fill_inks	            r3   chordImageDraw.chord   s`     W3II  C1=?s5A:II  Ca? 4>?r6   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   )rI   r+   draw_ellipser0   rM   r/   rZ   rP   r-   r[   s          r3   ellipseImageDraw.ellipse   s\     W3II""23?s5A:II""2Au5 4>?r6   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)ra   )r0   rM   radiusr/   rZ   rP   
ellipse_xys          r3   circleImageDraw.circle   s@     efnbefnbefnbefnU
Zw6r6   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   rk   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      r3   	<genexpr>9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s8      %+ !GC3P+s   AA)rF   rp   cosradianssin)coordanglexydistancerP   s        r3   coord_at_angle&ImageDraw.line.<locals>.coord_at_angle  sz      %#(19q=$ % "#txxU8K/L$L M!"txxU8K/L$L M+%   r6      rn         )rP   )r{   Sequence[float]r|   floatreturnztuple[float, ...])rI   r+   
draw_linesrC   listrF   r   r   r   rangelenrp   degreesatan2piesliceline)r0   rM   r/   rP   jointr-   pointsipointrN   rO   anglesr   flippedcoords
gap_coordss      `            r3   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   )closerI   r+   draw_outline)r0   shaper/   rZ   r-   r[   s         r3   r   ImageDraw.shape<  s[     	W3II""5A6?sII""5q1  /?r6   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   )rI   r+   draw_pieslicerY   s	            r3   r   ImageDraw.piesliceJ  s`     W3II##Bsa@?s5A:II##BsEB 4>?r6   c                h    U R                  U5      u  p2Ub  U R                  R                  X5        gg)z#Draw one or more individual pixels.N)rI   r+   draw_points)r0   rM   r/   r-   s       r3   r   ImageDraw.pointZ  s.    LL&	?II!!"* r6   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    rk   )maskr   r   )rI   r+   draw_polygonr)   r   newsizecopyDrawpaster%   )r0   rM   r/   rZ   rP   r-   r[   r   mask_inkfill_imr+   ink_imr)   s                r3   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>?r6   c                @    [        XU5      nU R                  XtXV5        g)zDraw a regular polygon.N)!_compute_regular_polygon_verticesr   )r0   bounding_circlen_sidesrotationr/   rZ   rP   rM   s           r3   regular_polygonImageDraw.regular_polygon  s     /RRw.r6   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   )rI   r+   draw_rectangler`   s          r3   	rectangleImageDraw.rectangle  s\     W3II$$R15?s5A:II$$Ra7 4>?r6   )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)TTTTrk   )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   rl   r   rn     c              3  D   >#    U  H  u  pTU   (       d  M  Uv   M     g 7frB    )rs   r   partr   s      r3   rv   DImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>  s)      $ qz D$s    	 r   )rF   	enumerater+   r   rL   )r   partsr   r   dr[   full_xfull_yr-   r0   rP   x0x1y0y1s      r3   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)<>	 r6   Tr   F)r   boolr   None)rC   r   rF   r   r   r   r&   roundallra   anyr   intrI   r+   r   )r0   rM   rd   r/   rZ   rP   r   r2   rr   leftrighttopbottomr   r[   r   r   r-   r   r   r   r   s   `    ``       @@@@@@@@@r3   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>?r6   c                <    [        U[        5      (       a  SOSnX!;   $ N
   
)rC   rD   )r0   textsplit_characters      r3   _multiline_checkImageDraw._multiline_check+  s    ",T3"7"7$U&&r6   c                Z    UR                  [        U[        5      (       a  S5      $ S5      $ r   )splitrC   rD   )r0   r   s     r3   _multiline_splitImageDraw._multiline_split0  s%    zz*T3"7"7$CCUCCr6   c                6    U R                  SSXS9S   U-   U-   $ )Nr   A)stroke_widthr   )textbbox)r0   r   spacingr   s       r3   _multiline_spacingImageDraw._multiline_spacing3  s0     MM&#tMGJ	
r6   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$ rB   )rI   )r/   r-   r[   r0   s      r3   getinkImageDraw.text.<locals>.getinko  s.     LL.MC{+++Jr6   r   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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   rk   r   )	directionfeatureslanguager   anchorr-   rN   rN   r   r   )r.   r   appendr   rp   modfgetmask2AttributeErrorgetmask	TypeErrorgetbandstructpackfillbandr)   r   r   r+   rT   )r-   r   r%   r{   r   rN   r   offsetcolor	ink_alphar}   r~   r   argsr   embedded_colorr   r   kwargsr   r0   r   rM   s               r3   	draw_text!ImageDraw.text.<locals>.draw_textv  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*   7E/ /
F>:FF:6F>9F::F>)r/   _Ink | Noner   r   )r   )r-   r   r   r   r   r   )r%   r&   r?   getr   multiline_text)r0   rM   r   r/   r   r   r   alignr   r   r   r   stroke_fillr	  r  r
  r2   r   r  r-   
stroke_inks   ``` ``  ```  ```     r3   r   ImageDraw.text?  s    0 dii>GCS/!<==K!89D  &&&&  	4	8 4	8 4	8l Tl?J4?4KVK0QT
%*l3 #q! # r6   )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lark   #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   )r0   rM   r   r/   r   r   r   r  r   r   r   r   r  r	  r>   r2   widths	max_widthlinesline_spacingr   
line_widthr   idxr   width_differences                             r3   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 *r6   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)
r0   r   r   r   r   r   r	  r>   r2   r%   s
             r3   r  ImageDraw.textlength  st    "   &&:CS/!dii>GCS/!<==+D'vT]]~~d)xHHr6   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   rk   r   )r%   r&   r?   r   multiline_textbboxr.   getbbox)r0   rM   r   r   r   r   r  r   r   r   r   r	  r>   r2   r%   bboxs                   r3   r   ImageDraw.textbbox5  s    , dii>GCS/!<==+D  &&**  (vT]]||	XV
 AwAQ"Q%a2a5$q'BqE/QQr6   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  rk   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)r0   rM   r   r   r   r   r  r   r   r   r   r	  r>   r2   r!  r"  r#  r$  r   r%  r   r/  r&  r   r'  	bbox_lines                             r3   r-  ImageDraw.multiline_textbboxg  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2C9="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--r6   )	r(   r+   r/   r   r.   r)   r-   r%   r'   rB   )r)   Image.Imager%   
str | Noner   r   )r   GImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r>   float | Noner   r7  )r-   r  r/   r  r   ztuple[int | None, int | None])Nr   )rM   r   rN   r   rO   r   r/   r  rP   r   r   r   )rM   zSequence[int]rU   r5  r/   r  r   r   )NNr   )rM   r   rN   r   rO   r   r/   r  rZ   r  rP   r   r   r   )
rM   r   r/   r  rZ   r  rP   r   r   r   )rM   r   rd   r   r/   r  rZ   r  rP   r   r   r   )Nr   N)
rM   r   r/   r  rP   r   r   r6  r   r   NN)r   zImage.core._Outliner/   r  rZ   r  r   r   )rM   r   r/   r  r   r   )r   NNr   )r   !Sequence[Sequence[float] | float]r   r   r   r   r/   r  rZ   r  rP   r   r   r   )rM   r   rd   r   r/   r  rZ   r  rP   r   r   z$tuple[bool, bool, bool, bool] | Noner   r   )r   r   r   r   )r   r   r   zlist[AnyStr])r   r7  r   r   r   r   r   r   )NNNrj   r   NNNr   NF) rM   tuple[float, float]r   r   r/   r  r   r   r   r6  r   r   r  rD   r   r6  r   list[str] | Noner   r6  r   r   r  r  r	  r   r  r   r
  r   r   r   )rM   r;  r   r   r/   r  r   r   r   r6  r   r   r  rD   r   r6  r   r<  r   r6  r   r   r  r  r	  r   r>   r8  r   r   )NNNNF)r   r   r   r   r   r6  r   r<  r   r6  r	  r   r>   r8  r   r   )	NNrj   r   NNNr   F)rM   r;  r   r   r   r   r   r6  r   r   r  rD   r   r6  r   r<  r   r6  r   r   r	  r   r>   r8  r   z!tuple[float, float, float, float]) __name__
__module____qualname____firstlineno__r   __annotations__r4   r;   r?   rI   rQ   rU   r\   ra   rf   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r-  __static_attributes__r   r6   r3   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

U

 

 	


 


  ! ! $%)##'$'{{ { 	{{ { { { { #{  !{" #{$ !%{& '{( ){* +{, 
-{B ! ! $%)##'$'Z * #'+Z Z  Z  	Z Z  Z  Z  Z  Z  #Z   !Z " #Z $ !%Z & 'Z *  +Z , 
-Z H  $%)#$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 ! $%)#$#k& #''kk k
k k k k k #k k  !k" #k&  'k( 
+)k kr6   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     r3   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   r9   r   r   )r)   hintsr   r+   s       r3   rD  rD    s5     %r*"$.:??2dDr6   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)imagerM   valueborderthreshpixelr}   r~   
backgroundedge	full_edgenew_edgestrt   r/   s                   r3   	floodfillrY    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rB   rC   r   r   rs   r   s     r3   rv   4_compute_regular_polygon_vertices.<locals>.<genexpr>o  s     H1:a#u..   #%z0bounding_circle should only contain numeric datark   r   c              3  N   #    U  H  n[        U[        [        45      v   M     g 7frB   r\  r]  s     r3   rv   r^  u  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   rl   r   rk   )r   rp   rx   ry   rz   )r   r   centroids     r3   _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+ 	
 	
r6   c                   > TS/nT" X5      $ Nr   r   )r|   start_pointrc  polygon_radiuss     r3   _compute_polygon_vertexB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex  s    %q){22r6   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$ )Nrl   r   g      ?r   )r   r   )r   r   r   r   current_angle_s         r3   _get_angles6_compute_regular_polygon_vertices.<locals>._get_angles  sa    -sW},8q'"AMM-($Ms"$	 #
 r6   )r   list[float]r   r   r   r;  )r|   r   r   r;  )r   r   r   r   r   rp  )
rC   r   r   r&   r   rF   r   r   r   r   )r   r   r   r2   ri  rn  r   r|   rc  rb  rh  s           @@@r3   r   r   7  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rB   )abs)rs   r   firstseconds     r3   rv   _color_diff.<locals>.<genexpr>  s(     H2GQs58fQi'((2Gs   !$r   )rC   rF   sumr   r   )color1color2rt  ru  s     @@r3   rJ  rJ    sK     !//FfYE!&%00VviFH%3v;2GHHHr6   rB   )r)   r5  r%   r6  r   r   r9  )r)   zImage.Image | NonerH  r<  r   z)tuple[ImageDraw2.Draw | None, ModuleType]rf  )rN  r5  rM   ztuple[int, int]rO  float | tuple[int, ...]rP  zfloat | tuple[int, ...] | NonerQ  r   r   r   )r   r:  r   r   r   r   r   zlist[tuple[float, float]])rx  rz  ry  rz  r   r   )(
__future__r   rp   r  collections.abcr   typesr   typingr   r   r   r	   r
   r   r9   r   r   
_deprecater   _typingr   rA  r*   rZ   r   r   r   r   r   rF   r   rD   _Inkr   r   rD  rY  r   rJ  r   r6   r3   <module>r     sK  @ #   $  D D  !  
2 1jj  G 'UE#s(OS()R Rj#$ >B*:.( .2>>> #> +	>
 > 
>B@6@AD@PU@@D	I#	I-D	I
	IS$  Gs   C CC