ó
    "%vg#¥  ã                  ó¤  • % 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é@   NúNImageFont.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        Ú//usr/lib/python3/dist-packages/PIL/ImageDraw.pyÚ__init__ÚImageDraw.__init__E   sù   € ð 	�‰Œ	Ø�;�;Ø�H‰HŒJØˆØ‰<Ø—7‘7ˆDØ—7‘7‹?Ø�v‹~ "§'¡'¨UÓ"2Ø‘à%�Ü  “oÐ%Ø�3‹;ØŸ:™:ˆD�LàˆDŒLØŒØ—%‘%ˆŒÜ—J‘J—O‘O D§G¡G¨UÓ3ˆŒ	ØŒ	Ø�:ÓØ—y‘y×)Ñ)¨!Ó,ˆD�Hà—y‘y×)Ñ)¨"Ó-ˆDŒHØÐ'Ó'àˆD�MàˆDŒMØˆ�	ó    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(   € ð( �y�yå#à!×.Ò.Ó0ˆDŒIØ�y‰yÐ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™<Ø�y�yØ"Ÿh™h�ð  Ð&Ð&ð "ŸX™X‘
ð Ð&Ð&ð ‰Ü˜c¤3×'Ñ'Ü$×-Ò-¨c·9±9Ó=�CØ—<—<¤J¨s´E×$:Ñ$:ØŸ,™,×/Ñ/°·[±[ÓA�CØ!ŸY™Y×/Ñ/°Ó4�
ØÑÜ˜d¤C×(Ñ(Ü%×.Ò.¨t·Y±YÓ?�DØ—<—<¤J¨t´U×$;Ñ$;ØŸ<™<×0Ñ0°·{±{ÓC�DØ"Ÿi™i×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   € ð —L‘L Ó&‰	ˆØ‰?Ø�I‰I×Ñ˜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   € ð 	�‰ŒØ—L‘L Ó&‰	ˆØ‰;ØˆCØ‰?Ø�I‰I×!Ñ! "§i¡i°Õ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‰ˆØÑØ�I‰I× Ñ  ¨C¸1Ô=Ø‰?˜s›°5¸A³:Ø�I‰I× Ñ  ¨C°a¸Õ?ð 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‰ˆØÑØ�I‰I×"Ñ" 2°Ô3Ø‰?˜s›°5¸A³:Ø�I‰I×"Ñ" 2¨A¨uÕ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@   € ð ˜‘e˜f‘n b¨¡e¨f¡n°b¸±e¸f±nÀbÈÁeÈfÁnÐUˆ
Ø�‰�Z wÕ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X†U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
-   p©OUS   S
-
  US   S
-
  p©U R                  XéS
-
  U
S
-
  U5        TS:”  d  GMO  U(       a  U" X‹S   S
-   5      UU" X‹S   S
-   5      /nOU" X‹S   S
-
  5      UU" X‹S   S
-
  5      /nU R                  XòS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      $ )NéZ   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   ø€ ð  %™˜Ø ™˜Ø#(¨1¡9¨q¡=˜Ü$ñ %ð "#¬t¯xªx¼¿ºÀUÓ8KÓ/LÑ$LÐ MØ!"¬t¯xªx¼¿ºÀUÓ8KÓ/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  ø€ ð �l‰l˜4Ó  Ñ#ˆØŠ?Ø�I‰I× Ñ  ¨%Ô0Ø˜Ô E¨A¤Iä˜b ™e¤d¬E ]×3Ñ3Ü!¤(¬8´E©?Ñ";¸RÓ@‘Fô "' q¬#¨b«'°1Ô!5óâ!5˜Aô œX¤e™_¬e°B¸1¸q¹5°MÓ.BÖCÙ!5ð ð ô ˜q¤# f£+°¡/×2�AØ"™I�Eð
 $¨¡E™]¨EÐ2Ø"¨1¨q©5¡MÐ2ñ+ôò+™J˜Eô Ÿš¤T§Z¢Z°°A±¸¸q¹Ñ0AÀ5ÈÁ8ÈcÐRSÉfÑCTÓ%UÓVØôñ+ð ñ ð ˜a‘y F¨1¡IÓ-á ðØ.ðØ7<ðà*÷ð ˜q™	 F¨1¡IÑ-×M°&¸±)¸c±/ÀFÈ1ÁIÑ2M÷Qà  ™) f¨Q¡iÑ/×O°F¸1±IÀ±OÀfÈQÁiÑ4Oð ð ˜q™ E¨A¡IÑ-°Ñ1°5¸±8¸eÀa¹iÑ3GÈ!Ñ3KÐLØ˜q™ E¨A¡IÑ-°Ñ1°5¸±8¸eÀa¹iÑ3GÈ!Ñ3KÐLð�Fö Ø&,¨Q¡i°"¡n°f¸Q±iÀ"±n™sà&,¨Q¡i°"¡n°f¸Q±iÀ"±n˜sØ—M‘M &°"©*°c¸B±hÀÔEà˜q–yæ"á .¨u¸Q±iÀ"±nÓ EØ %Ù .¨u¸Q±iÀ"±nÓ Eð*™Jñ !/¨u¸Q±iÀ"±nÓ EØ %Ù .¨u¸Q±iÀ"±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‰ˆØÑØ�I‰I×"Ñ" 5°AÔ6Ø‰?˜s›Ø�I‰I×"Ñ" 5¨qÕ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‰ˆØÑØ�I‰I×#Ñ# B¨s¸aÔ@Ø‰?˜s›°5¸A³:Ø�I‰I×#Ñ# B¨s¸¸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.   € à—L‘L Ó&‰	ˆØ‰?Ø�I‰I×!Ñ! "Õ*ð 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                  X¹S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‰ˆØÑØ�I‰I×"Ñ" 2°Ô3ØŠ?˜sœ°5¸A´:Ø˜‹zØ—	‘	×&Ñ& r°°5Õ9Ø—‘Ò$ô —y’y  d§g¡g§l¡lÓ3�ØŸ<™<¨›?¨1Ñ-�àŸ)™)›+�Ü˜G“}�Ø—	‘	×&Ñ& r°QÔ7àŸ™›�Ü˜F“|�Ø ™	 A™�Ø—	‘	×&Ñ& r°Q¸Ô>à—
‘
˜6�
Ñ0ä—Y’Y˜tŸy™y¨$¯'©'¯,©,Ó7�Ü˜B“x�Ø—	‘	×&Ñ& r°°5Ô9Ø—‘—‘˜bŸe™e V¨b¯g©gÑ%5°t·w±wÕ?ð) %ð 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ˆØ�‰�R˜wÕ.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‰ˆØÑØ�I‰I×$Ñ$ R°1Ô5Ø‰?˜s›°5¸A³:Ø�I‰I×$Ñ$ R¨a°Õ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)   øé € ð ò$™˜ð ˜q•z÷ ‘Dò$ùs   ƒ —	 r   )rF   Ú	enumerater+   rŸ   rL   )rŽ   ÚpartsrÃ   r½   Údr[   Úfull_xÚfull_yr-   r0   rP   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r3   Údraw_cornersÚ1ImageDraw.rounded_rectangle.<locals>.draw_cornersÔ  s]  ø€ æð ˜"˜b 1™f b¨1¡fÐ-¨s°CÐ8Ø˜"˜q™& " q¡&¨"Ð-¨q°#Ð6ð‘ö ð ˜"˜b 1™f b¨1¡fÐ-¨r°3Ð7Ø˜1‘f˜b " b¨1¡fÐ-¨s°BÐ7ð‘ô ô ä#,à  " b¨1¡f¨b°1©fÐ5°s¸CÐ@Ø  1™f b¨"¨b°1©fÐ5°s¸CÐ@Ø  1™f b¨1¡f¨b°"Ð5°q¸"Ð=Ø  " q¡&¨"¨q©&°"Ð5°r¸3Ð?ð	ô$óó �ó �ÞØ—I‘I×+Ò+¨d°hÀ°]Ñ.BÓDà—I‘I×&Ò&¨°°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˜‘eœd¤E˜]×+Ñ+Ü!%¤h¬x¼©Ñ&?ÀÓ!DÑ‰HˆR�‘h�r™2ä!¤(¬5¡/°2Ó6‰NˆB��B˜Ø�‹7Ø:ˆCÜ˜S“/Ð!Ø�‹7Ø:ˆCÜ˜S“/Ð!Ø‰?Ø.ˆGà�Q‰Jˆä�2‹YˆÜ�2‹YˆÜ�2‹YˆÜ�2‹YˆØ%‰ˆ�Üˆw�<‰<Ø˜"˜r™' A™+Ñ%ˆFÞà˜‘G�Ø˜"˜r™' A™+Ñ%ˆFÞà˜‘G�Þž&à—|‘| B¨g°uÓ=Ð=à�‹6œ˜WŸ™ð —>‘> "¨G°UÓ;Ð;ä��Q‘‹KˆØŸ™ WÓ3‰ˆˆX÷ 	?÷  	?ò  	?ðD ÒÙ˜ÔæØ—	‘	×(Ñ(¨"¨b°1©f°q©j¸"¸bÀ1¹fÀq¹jÐ)IÈ8ÐUVÕWØ�a‘˜!‘˜b 1™f q™jÓ(Ø—	‘	×(Ñ(¨"¨q©&°1©*°b¸"¸q¹&À1¹*ÀbÐ)IÈ8ÐUVÔWÞ¦&Ø˜B  Q¡¨Ð+�Ø˜1—:Ø˜“G˜q 1™uÑ$“GØ˜1—:Ø˜“G˜q 1™uÑ$“GØ—	‘	×(Ñ(¨¨x¸Ô;à˜a™  R¨Ð,�Ø˜1—:Ø˜!“H  A¡Ñ%“HØ˜1—:Ø˜!“H  A¡Ñ%“HØ—	‘	×(Ñ(¨°¸!Ô<ØŠ?˜s hœ°5¸A´:Ù˜ÔæØ˜2˜r 2¨¡:°¡>Ð2�Ø˜1—:Ø˜“F˜a !™e‘O“FØ˜1—:Ø˜“F˜a !™e‘O“FØ—	‘	×(Ñ(¨¨c°1Ô5à˜b 5™j¨1™n¨b°"Ð5�Ø˜1—:Ø˜1“I  Q¡Ñ&“IØ˜1—:Ø˜1“I  Q¡Ñ&“IØ—	‘	×(Ñ(¨°°aÔ8ÞØ˜B  U¡
¨Q¡°Ð3�Ø˜1—:Ø˜“G˜q 1™uÑ$“GØ˜1—:Ø˜“G˜q 1™uÑ$“GØ—	‘	×(Ñ(¨¨s°AÔ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   € Ü",¨T´3×"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%   € Ø�z‰z¤*¨T´3×"7Ñ"7˜$ÓCÐC¸UÓ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   € ð �M‰M˜& # tˆMÐ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.   ø€ Ø ŸL™L¨Ó.‰MˆCØ‰{ØÑ+Ð+Ð+Ø�Øˆ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  p«TR                  b?  TR                  R                  XŠXºUR                   S   -   X¶R                   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  Nûf = 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Ü˜1–X�Ø—‘œS  A¡›ZÖ(ñ ä—Y’Y˜r !™uÓ% aÑ(¬$¯)ª)°B°q±EÓ*:¸1Ñ*=Ð>ˆEð.Ø#Ÿ}š}ØØð ð ñ ð (Ø%Ø%Ø!-Ø!ØØñ ð ñ ‘�ð ˜q™ F¨1¡IÑ-¨u°Q©x¸&À¹)Ñ/CÐD�ð$ �v‹~ð #§L¡L°£O�tÜ"ŸKšK¨¨SÓ1°!Ñ4�	Ø—‘˜q )Ô,Ø‘�Ø—7‘7Ñ&Ø—G‘G—M‘MØ 1¨$¯)©)°A©,Ñ&6¸¿I¹IÀa¹LÑ8HÐIÈ4õð 'ð
 —	‘	×%Ñ% e°3Õ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 ˜dŸi™i¨Ó>ØGˆCÜ˜S“/Ð!à‰<Ø—=‘= §¡¨KÓ!8Ó9ˆDà× Ñ  ×&Ñ&Ø×&Ñ&ØØØØØØØØØØØØØóð ÷ 	÷4	8÷ 4	8ó 4	8ñl �T‹lˆØ‰?ØˆJÞØ4?Ñ4K™V KÔ0ÐQT�
àÑ%á˜* 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XHXšS
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  € ð. ˜ÓØCˆCÜ˜S“/Ð!à‰>Ø‰FÜ�‹[˜AÓØ7ˆCÜ˜S“/Ð!Ø�A‰Y˜$ÓØ;ˆCÜ˜S“/Ð!à‰<Ø—=‘= Ó+ˆDàˆØˆ	Ø×%Ñ% dÓ+ˆØ×.Ñ.¨t¸lÓKˆÛˆDØŸ™Ø�d¸(ð )ð ˆJð �M‰M˜*Ô%Ü˜I zÓ2ŠIñ ð �‰eˆØ�!‰9˜ÓØ”C˜“J ‘N lÑ2°SÑ8Ñ8‰CØ�A‰Y˜#ÓØ”C˜“J ‘N lÑ2Ñ2ˆCä" 5Ö)‰IˆC�Ø�a‘5ˆDØ(¨6°#©;Ñ6Ðð �a‰y˜CÓØÐ(¨3Ñ.Ñ.‘Ø˜‘˜cÓ!ØÐ(Ñ(�ð ˜‹ØØ˜(Ó"ØÐ(¨3Ñ.Ñ.‘Ø˜'Ó!ØÐ(Ñ(‘àA�Ü  “oÐ%à�I‰IØ�s�ØØØØØ#Ø!Ø!Ø)Ø'Ø-ð ñ ð �<ÑŠCòE *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“/Ð!Þ˜dŸi™i¨Ó>ØGˆCÜ˜S“/Ð!à‰<Ø—=‘= Ó+ˆDÞ'‰v¨T¯]©]ˆØ�~‰~˜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.XxXšU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à   € ö, ˜dŸi™i¨Ó>ØGˆCÜ˜S“/Ð!à‰<Ø—=‘= Ó+ˆDà× Ñ  ×&Ñ&Ø×*Ñ*ØØØØØØØØØØØóð ö (‰v¨T¯]©]ˆØ�|‰|Ø˜	¨XÀVó
ˆð �A‰w˜˜A™‰  Q¡¨"¨Q©%¡°°a±¸2¸a¹5±À$ÀqÁ'ÈBÈqÉEÁ/Ð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Xþ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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ª  € ð* ˜ÓØCˆCÜ˜S“/Ð!à‰>Ø‰FÜ�‹[˜AÓØ7ˆCÜ˜S“/Ð!Ø�A‰Y˜$ÓØ;ˆCÜ˜S“/Ð!à‰<Ø—=‘= Ó+ˆDàˆØˆ	Ø×%Ñ% dÓ+ˆØ×.Ñ.¨t¸lÓKˆÛˆDØŸ™ØØØ#Ø!Ø!Ø-ð )ð ˆJð �M‰M˜*Ô%Ü˜I zÓ2ŠIñ ð �‰eˆØ�!‰9˜ÓØ”C˜“J ‘N lÑ2°SÑ8Ñ8‰CØ�A‰Y˜#ÓØ”C˜“J ‘N lÑ2Ñ2ˆCà9=ˆä" 5Ö)‰IˆC�Ø�a‘5ˆDØ(°#©;Ñ6Ðð �a‰y˜CÓØÐ(¨3Ñ.Ñ.‘Ø˜‘˜cÓ!ØÐ(Ñ(�ð ˜‹ØØ˜(Ó"ØÐ(¨3Ñ.Ñ.‘Ø˜'Ó!ØÐ(Ñ(‘àA�Ü  “oÐ%àŸ™Ø�s�ØØØØ#Ø!Ø!Ø)Ø-ð &ð 
ˆIð ‰|Ø ‘ô ˜˜Q™ ¨1¡Ó.Ü˜˜Q™ ¨1¡Ó.Ü˜˜Q™ ¨1¡Ó.Ü˜˜Q™ ¨1¡Ó.ð	�ð �<ÑŠCñU *ðX ‰<Ø�a‘5˜"˜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8ôX'ô
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   € ð#Ü�r˜9Ô% 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Ô°d€DØÐÐ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  pÍXÍ4U
;   d  US:  d  US:  a  M   X\U4   nU
R                  XÍ45        Uc  [        Xè5      U:*  nOXâU4;  nU(       a  X%XÍ4'   UR                  XÍ4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 �J‰J‹L€EØÑÐÐØ�D€AðØ˜a˜4‘[ˆ
Ü�uÓ)¨VÓ3ØØˆaˆd‰ð ˆFˆ8€Dô “€IÞ
Ü“5ˆÛ‰DˆAØ˜a™% ˜ a¨!¡e¨Q Z°!¸±U°¸aÀQÁ¸ZÓH‘�à�6˜YÓ&¨!¨a«%°1°q³5Ùð-Ø ˜d™�Að —M‘M 1 &Ô)Ø‘~Ü*¨1Ó9¸VÑC™à °¨Ñ7˜ÞØ&+˜a˜d™Ø Ÿ™ a VÖ,ñ ó 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"   é € ð 
Ú1C¨AŒJ�qœ3¤˜,×'Ð'Ò1Cùr_  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‘œ4Ÿ8š8¤D§L¢L°°w±Ó$?Ó@Ñ@Ø˜‘(œTŸXšX¤d§l¢l°3¸±=Ó&AÓBÑBñCà˜1‘+ñð ó	ô Ø�a‘œ4Ÿ8š8¤D§L¢L°°w±Ó$?Ó@Ñ@Ø˜‘(œTŸXšX¤d§l¢l°3¸±=Ó&AÓBÑBñCà˜1‘+ñð ó	ð
ð 	
r6   c                ó   >• TS/nT" X5      $ ©Nr   rÂ   )r|   Ústart_pointrc  Úpolygon_radiuss     €€r3   Ú_compute_polygon_vertexÚB_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_anglesÚ6_compute_regular_polygon_vertices.<locals>._get_angles¦  sa   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÜ�q˜'Ö"ˆAØ�M‰M˜-Ô(ØÑ$ˆ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 �gœs×#Ñ#Ø(ˆÜ˜‹nÐØ�ƒ{Ø,ˆÜ˜‹oÐô �o¬¬e }×5Ñ5Ø4ˆÜ˜‹nÐä
ˆ?Ó˜qÓ ÜÑH¹ÓH×HÑHØDˆCÜ˜S“/Ð!ä$(¬¬e©´d¸?Ó6KÓ$LÑ!ˆ‘>Ü	ˆ_Ó	 Ó	"¤z°/À!Ñ2DÄtÌUÀm×'TÑ'TÜñ 
Ø1@ÀÒ1Có
÷ 
ñ 
ä˜O¨AÑ.´´e°×=Ñ=ØDˆCÜ˜S“/Ð!äˆ˜qÑ!Ó" aÓ'ØVˆCÜ˜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(   øé € ÐHÒ2G¨QŒs�5˜‘8˜f Q™iÑ'×(Ð(Ò2Gùs   ƒ!$r   )rC   rF   ÚsumrŠ   r‹   )Úcolor1Úcolor2rt  ru  s     @@r3   rJ  rJ  ¹  sK   ù€ ô ! ¬×/Ñ/‰F°f°Y€EÜ! &¬%×0Ñ0‰V°v°i€FäÕH´%¸¼3¸v»;Ô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ðØ�j‰j× Ñ €Gö ß'àˆU�E˜#˜s˜(‘O SÐ(Ñ)€ð÷Rñ Röj#ð$ >BðØðØ*:ðà.õð( .2Øð>Øð>àð>ð #ð>ð +ð	>ð
 ð>ð 
õ>ðB@Ø6ð@ØADð@ØPUð@àô@ðD	IØ#ð	IØ-Dð	Ià
õ	IøðS$ ó Ø‚Gðús   ÁC ÃCÃC