Ë
    6Š·j[Š  ã                  óN  — U d dl mZ d dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
mZmZ dZer"d dlmZ d d	lmZ d d
lmZmZ ddlmZ ddlmZmZ e	j.                  j0                  Zded<   	  G d„ d«      Zddd„Zddd„Z	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z y)é    )ÚannotationsN)ÚSequence)Úcasté   )ÚImageÚ
ImageColorÚ	ImageFontÚ	ImageTextF)ÚCallable)Ú
ModuleType)ÚAnyÚAnyStr©Ú
ImageDraw2)ÚCoordsÚ_Inkz!Callable[[], Image.core._Outline]ÚOutlinec                  ó²  — e Zd ZU dZded<   ddd„Z	 	 dd„Zdd„Z	 d	 	 	 	 	 d d„Z	 	 d!	 	 	 	 	 	 	 	 	 	 	 d"d„Z		 d	 	 	 	 	 	 	 d#d	„Z
	 	 	 d$	 	 	 	 	 	 	 	 	 	 	 	 	 d%d
„Z	 	 	 d$	 	 	 	 	 	 	 	 	 d&d„Z	 	 	 d$	 	 	 	 	 	 	 	 	 	 	 d'd„Z	 	 	 d(	 	 	 	 	 	 	 	 	 d)d„Z	 	 d*	 	 	 	 	 	 	 d+d„Z	 	 	 d$	 	 	 	 	 	 	 	 	 	 	 	 	 d%d„Zdd,d„Z	 	 	 d$	 	 	 	 	 	 	 	 	 d&d„Z	 	 	 	 d-	 	 	 	 	 	 	 	 	 	 	 	 	 d.d„Z	 	 	 d$	 	 	 	 	 	 	 	 	 d&d„Z	 	 	 	 d-ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d/d„Z	 	 	 	 	 	 	 	 	 	 	 d0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1d„Z	 	 	 	 	 	 	 	 	 	 	 d0ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2d„Z	 	 	 	 	 d3ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4d„Z	 	 	 	 	 	 	 	 	 d5ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6d„Z	 	 	 	 	 	 	 	 	 d5ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6d„Zy)7Ú	ImageDrawNúImageFont.BaseImageFont | NoneÚfontc                óN  — |j                  «        d}|€|j                  }||j                  k7  r$|dk(  r|j                  dk(  rd}nd}t        |«      ‚|dk(  r|j                  | _        nd| _        || _        |j
                  | _        t        j                  j                  | j
                  |«      | _        || _        |dv r!| j                  j                  d«      | _
        n | j                  j                  d	«      | _
        |d
v rd| _        d| _        yd| _        d| _        y)a˜  
        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)Ú_ensure_mutableÚmodeÚ
ValueErrorÚpaletteÚ_imageÚimr   ÚcoreÚdrawÚdraw_inkÚinkÚfontmodeÚfill)Úselfr&   r"   ÚblendÚmsgs        úC/root/workspace/.venv/lib/python3.12/site-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__@   sý   € ð 	×ÑÔØˆØˆ<Ø—7‘7ˆDØ�2—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                ód   — | j                   st        j                  «       | _         | j                   S )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	   Úload_default)r-   s    r0   ÚgetfontzImageDraw.getfonth   s%   € ð( �yŠyä!×.Ñ.Ó0ˆDŒIØ�y‰yÐr2   c                óP   — |�t        j                  |«      S | j                  «       S ©N)r	   r4   r5   )r-   Ú	font_sizes     r0   Ú_getfontzImageDraw._getfont�   s%   € ØÐ Ü×)Ñ)¨)Ó4Ð4à—<‘<“>Ð!r2   c                ó®  — d }d }|€.|€,| j                   r| j                  }||fS | j                  }||fS |��t        |t        «      r t	        j
                  || j                  «      }| j                  r6t        |t        «      r&| j                  j                  || j                  «      }| j                  j                  |«      }|��t        |t        «      r t	        j
                  || j                  «      }| j                  r6t        |t        «      r&| j                  j                  || j                  «      }| j                  j                  |«      }||fS r7   )r,   r*   Ú
isinstanceÚstrr   Úgetcolorr"   r$   Útupler%   r(   r)   )r-   r*   r,   Ú
result_inkÚresult_fills        r0   Ú_getinkzImageDraw._getink‡   s   € ð ˆ
ØˆØˆ;˜4˜<Ø�yŠyØ"Ÿh™h�ð  ˜;Ð&Ð&ð "ŸX™X�
ð ˜;Ð&Ð&ð ˆÜ˜c¤3Ô'Ü$×-Ñ-¨c°4·9±9Ó=�CØ—<’<¤J¨s´EÔ$:ØŸ,™,×/Ñ/°°T·[±[ÓA�CØ!ŸY™Y×/Ñ/°Ó4�
ØÐÜ˜d¤CÔ(Ü%×.Ñ.¨t°T·Y±YÓ?�DØ—<’<¤J¨t´UÔ$;ØŸ<™<×0Ñ0°°t·{±{ÓC�DØ"Ÿi™i×0Ñ0°Ó6�Ø˜;Ð&Ð&r2   c                ó|   — | j                  |«      \  }}|�&|dk7  r | j                  j                  |||||«       yyy)zDraw an arc.Nr   )rA   r(   Údraw_arc)r-   ÚxyÚstartÚendr,   Úwidthr*   s          r0   ÚarczImageDraw.arc    sB   € ð —L‘L Ó&‰	ˆˆTØˆ?˜u¨šzØ�I‰I×Ñ˜r 5¨#¨s°EÕ:ð  *ˆ?r2   c                ó¨   — |j                  «        | j                  |«      \  }}|€|}|�(| j                  j                  ||j                  |«       yy)zDraw a bitmap.N)ÚloadrA   r(   Údraw_bitmapr&   )r-   rD   Úbitmapr,   r*   s        r0   rL   zImageDraw.bitmap­   sM   € ð 	�‰ŒØ—L‘L Ó&‰	ˆˆTØˆ;ØˆCØˆ?Ø�I‰I×!Ñ! " f§i¡i°Õ5ð r2   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a chord.Nr   r   )rA   r(   Ú
draw_chord©	r-   rD   rE   rF   r,   ÚoutlinerG   r*   Úfill_inks	            r0   ÚchordzImageDraw.chord¸   sn   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I× Ñ   U¨C°¸1Ô=Øˆ?˜s hš°5¸A²:Ø�I‰I× Ñ   U¨C°°a¸Õ?ð 4>˜ˆ?r2   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw an ellipse.Nr   r   )rA   r(   Údraw_ellipse©r-   rD   r,   rP   rG   r*   rQ   s          r0   ÚellipsezImageDraw.ellipseÈ   sf   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×"Ñ" 2 x°Ô3Øˆ?˜s hš°5¸A²:Ø�I‰I×"Ñ" 2 s¨A¨uÕ5ð 4>˜ˆ?r2   c                óh   — |d   |z
  |d   |z
  |d   |z   |d   |z   f}| j                  ||||«       y)z4Draw a circle given center coordinates and a radius.r   r   N)rV   )r-   rD   Úradiusr,   rP   rG   Ú
ellipse_xys          r0   ÚcirclezImageDraw.circleÖ   sD   € ð ˜‘e˜f‘n b¨¡e¨f¡n°b¸±e¸f±nÀbÈÁeÈfÁnÐUˆ
Ø�‰�Z  w°Õ6r2   c                óü  ‡— | j                  |«      d   }|��Y‰dk7  �rR| j                  j                  ||‰«       |dk(  �r.‰dkD  �r't        |d   t        t
        f«      rt        t        t        t              |«      }nGt        dt        |«      d«      D �cg c](  }t        t        t           t        |||dz    «      «      ‘Œ* }}t        dt        |«      dz
  «      D �]‹  }||   }||dz
     |f|||dz      ffD �	�
cg c]C  \  }	}
t        j                  t        j                  |
d   |	d   z
  |	d   |
d   z
  «      «      dz  ‘ŒE }}	}
|d   |d   k(  rŒw	 	 	 	 	 	 dˆfd„}|d   |d   kD  xr |d   d	z
  |d   kD  xs |d   |d   k  xr |d   d	z   |d   kD  }|d   ‰dz  z
  dz   |d   ‰dz  z
  dz   f|d   ‰dz  z   dz
  |d   ‰dz  z   dz
  fg}|r|d   d
z   |d   d
z   }
}	n|d   d
z
  |d   d
z
  }
}	| j                  ||	d
z
  |
d
z
  |«       ‰dkD  s�Œ7|r  |||d   d
z   «      | |||d   d
z   «      g}n |||d   d
z
  «      | |||d   d
z
  «      g}| j                  ||d¬«       �ŒŽ yyyyyc c}w c c}
}	w )z6Draw a line, or a connected sequence of line segments.r   NÚcurveé   é   r   éh  c                óü   •— | \  }}|dz  }‰dz  dz
  }t        d„ ||t        j                  t        j                  |«      «      z  f||t        j                  t        j                  |«      «      z  ffD «       «      S )NéZ   r^   r   c              3  ó†   K  — | ]9  \  }}||d kD  rt        j                  |«      nt        j                  |«      z   –— Œ; y­w)r   N)ÚmathÚfloorÚceil)Ú.0ÚpÚp_ds      r0   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>
  s9   è ø€ ò %á &  3ð °C¸!²G¤§¡¨C¤ÄÇÁÈ3ÃÕPñ%ùs   ‚?A)r>   rc   ÚcosÚradiansÚsin)ÚcoordÚangleÚxÚyÚdistancerG   s        €r0   Úcoord_at_anglez&ImageDraw.line.<locals>.coord_at_angle  s€   ø€ ð  %™˜˜1Ø ™˜Ø#(¨1¡9¨q¡=˜Ü$ñ %ð "# H¬t¯x©x¼¿¹ÀUÓ8KÓ/LÑ$LÐ MØ!" H¬t¯x©x¼¿¹ÀUÓ8KÓ/LÑ$LÐ Mð+ô%ó  ð r2   é´   ra   é   é   )rG   )rm   úSequence[float]rn   ÚfloatÚreturnztuple[float, ...])rA   r(   Ú
draw_linesr;   Úlistr>   r   r   rw   ÚrangeÚlenrc   ÚdegreesÚatan2ÚpiesliceÚline)r-   rD   r,   rG   Újointr*   ÚpointsÚiÚpointrE   rF   Úanglesrr   ÚflippedÚcoordsÚ
gap_coordss      `            r0   r€   zImageDraw.lineâ   s.  ø€ ð �l‰l˜4Ó  Ñ#ˆØ‰?˜u¨›zØ�I‰I× Ñ   S¨%Ô0Ø˜Ó E¨A£Iä˜b ™e¤d¬E ]Ô3Ü!¤(¬8´E©?Ñ";¸RÓ@‘Fô "' q¬#¨b«'°1Ó!5öàô œX¤e™_¬e°B°q¸1¸q¹5°MÓ.BÕCð�Fð ô ˜q¤# f£+°¡/Ó2ó 7=�AØ" 1™I�Eð
 $ A¨¡E™]¨EÐ2Ø" F¨1¨q©5¡MÐ2ð+÷ñ '˜E 3ô Ÿ™¤T§Z¡Z°°A±¸¸q¹Ñ0AÀ5ÈÁ8ÈcÐRSÉfÑCTÓ%UÓVØóð�Fñ ð ˜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°f¸Q±iÀ"±nÓ EØ %Ù .¨u°f¸Q±iÀ"±nÓ Eð*™Jñ !/¨u°f¸Q±iÀ"±nÓ EØ %Ù .¨u°f¸Q±iÀ"±nÓ Eð*˜Jð
 Ÿ	™	 *¨d¸!˜	Ö<ño7=ð %.Ðð  *ˆ?ùòùós   Â-I3Ã?AI8c                óØ   — |j                  «        | j                  ||«      \  }}|�| j                  j                  ||d«       |�$||k7  r| j                  j                  ||d«       yyy)z(Experimental) Draw a shape.Nr   r   )ÚcloserA   r(   Údraw_outline)r-   Úshaper,   rP   r*   rQ   s         r0   rŒ   zImageDraw.shape/  se   € ð 	�‰ŒØŸ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×"Ñ" 5¨(°AÔ6Øˆ?˜s hšØ�I‰I×"Ñ" 5¨#¨qÕ1ð  /ˆ?r2   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a pieslice.Nr   r   )rA   r(   Údraw_pieslicerO   s	            r0   r   zImageDraw.pieslice=  sn   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×#Ñ# B¨¨s°H¸aÔ@Øˆ?˜s hš°5¸A²:Ø�I‰I×#Ñ# B¨¨s°C¸¸EÕBð 4>˜ˆ?r2   c                ój   — | j                  |«      \  }}|�| j                  j                  ||«       yy)z#Draw one or more individual pixels.N)rA   r(   Údraw_points)r-   rD   r,   r*   s       r0   r„   zImageDraw.pointM  s2   € à—L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×!Ñ! " cÕ*ð r2   c                ó  — | j                  ||«      \  }}|�| j                  j                  ||d«       |�Ó||k7  rÍ|dk7  rÇ|dk(  r| j                  j                  ||d|«       y| j                  �–t	        j
                  d| j                  j                  «      }| j                  d«      d   }t        |«      }	|	j                  j                  ||d«       | j                  j                  ||d|dz  dz
  |j                  «       yyyyy)zDraw a polygon.Nr   r   r   r^   )rA   r(   Údraw_polygonr&   r   ÚnewÚsizeÚDraw)
r-   rD   r,   rP   rG   r*   rQ   ÚmaskÚmask_inkr(   s
             r0   ÚpolygonzImageDraw.polygonS  sí   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×"Ñ" 2 x°Ô3Øˆ?˜s hš°5¸A²:Ø˜ŠzØ—	‘	×&Ñ& r¨3°°5Õ9Ø—‘Ð$ô —y‘y  d§g¡g§l¡lÓ3�ØŸ<™<¨›?¨1Ñ-�Ü˜D“z�Ø—	‘	×&Ñ& r¨8°QÔ7à—	‘	×&Ñ& r¨3°°5¸1±9¸q±=À$Ç'Á'ÕJð %ð 4>˜ˆ?r2   c                óF   — t        |||«      }| j                  ||||«       y)zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr˜   )r-   Úbounding_circleÚn_sidesÚrotationr,   rP   rG   rD   s           r0   Úregular_polygonzImageDraw.regular_polygonk  s$   € ô /¨ÀÈÓRˆØ�‰�R˜˜w¨Õ.r2   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw a rectangle.Nr   r   )rA   r(   Údraw_rectanglerU   s          r0   Ú	rectanglezImageDraw.rectanglex  sf   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×$Ñ$ R¨°1Ô5Øˆ?˜s hš°5¸A²:Ø�I‰I×$Ñ$ R¨¨a°Õ7ð 4>˜ˆ?r2   )Úcornersc               ó  ‡ ‡‡‡‡‡‡‡‡‡‡‡— t        |d   t        t        f«      r(t        t        t        t
              |«      \  \  ŠŠ\  ŠŠnt        t        t
           |«      \  ŠŠŠŠ‰‰k  rd}t        |«      ‚‰‰k  rd}t        |«      ‚‰€dŠt        ‰‰z
  ‰‰z
  |dz  «      Št        ‰«      Št        ‰«      Št        ‰«      Št        ‰«      Šd\  ŠŠt        ‰«      r<‰‰‰z
  dz
  k\  Š‰r‰‰z
  Š‰‰‰z
  dz
  k\  Š‰r‰‰z
  Š‰r‰r‰ j                  |||‰«      S ‰dk(  st        ‰«      s‰ j                  |||‰«      S t        ‰dz  «      }‰ j                  ||«      \  ŠŠdˆˆˆˆˆˆˆ ˆˆˆˆˆfd	„}	‰�� |	d
«       ‰r.‰ j                  j!                  ‰‰|z   dz   ‰‰|z
  dz
  f‰d«       n>‰|z
  dz
  ‰|z   dz   k\  r-‰ j                  j!                  ‰|z   dz   ‰‰|z
  dz
  ‰f‰d«       ‰s¢‰s ‰‰‰|z   ‰g}
‰d   r|
dxx   |dz   z  cc<   ‰d   r|
dxx   |dz   z  cc<   ‰ j                  j!                  |
‰d«       ‰|z
  ‰‰‰g}‰d   r|dxx   |dz   z  cc<   ‰d   r|dxx   |dz   z  cc<   ‰ j                  j!                  |‰d«       ‰��h‰‰k7  �ra‰dk7  �rZ |	d«       ‰s¦‰‰‰‰‰z   dz
  g}‰d   r|dxx   |dz   z  cc<   ‰d   r|dxx   |dz   z  cc<   ‰ j                  j!                  |‰d«       ‰‰‰z
  dz   ‰‰g}‰d   r|dxx   |dz   z  cc<   ‰d   r|dxx   |dz   z  cc<   ‰ j                  j!                  |‰d«       ‰s§‰‰‰‰z   dz
  ‰g}
‰d   r|
dxx   |dz   z  cc<   ‰d   r|
dxx   |dz   z  cc<   ‰ j                  j!                  |
‰d«       ‰‰z
  dz   ‰‰‰g}‰d   r|dxx   |dz   z  cc<   ‰d   r|dxx   |dz   z  cc<   ‰ j                  j!                  |‰d«       yyyyy)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)TTTTr^   )FFr   c                óÀ  •— ‰r‰‰‰‰z   ‰‰z   fddf‰‰‰z
  ‰‰z   ‰fddff}nv‰r‰‰‰‰z   ‰‰z   fddf‰‰z
  ‰‰‰‰z   fddff}nUt        ˆfd„t        ‰‰‰‰z   ‰‰z   fddf‰‰z
  ‰‰‰‰z   fddf‰‰z
  ‰‰z
  ‰‰fddf‰‰‰z
  ‰‰z   ‰fddff«      D «       «      }|D ]A  }| r ‰	j                  j                  |‰dfz   Ž  Œ$ ‰	j                  j                  |‰‰
fz   Ž  ŒC y )Nrs   r_   r   ra   é  c              3  ó2   •K  — | ]  \  }}‰|   r|–— Œ y ­wr7   © )rf   rƒ   Úpartr¢   s      €r0   ri   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>Ë  s&   øè ø€ ò á˜˜4ð ˜q’zô ñùs   ƒr   )r>   Ú	enumerater(   rŽ   rC   )r   Úpartsr¨   r¢   ÚdrQ   Úfull_xÚfull_yr*   r-   rG   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r0   Údraw_cornersz1ImageDraw.rounded_rectangle.<locals>.draw_corners»  sf  ø€ áð ˜"˜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Ð?ð	ó$ôó �ð ò ?�ÙØ+�D—I‘I×+Ñ+¨d°hÀ°]Ñ.BÒDà&�D—I‘I×&Ñ&¨°°e°Ñ)<Ò>ñ	?r2   Tru   F)r   Úboolrx   ÚNone)r;   rz   r>   r   r   rw   r#   ÚminÚroundÚallrV   Úanyr¡   ÚintrA   r(   r    )r-   rD   rX   r,   rP   rG   r¢   r/   Úrr²   ÚleftÚrightÚtopÚbottomr«   rQ   r¬   r­   r*   r®   r¯   r°   r±   s   `    ``       @@@@@@@@@r0   Úrounded_rectanglezImageDraw.rounded_rectangle†  sh  ÿû€ ô �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ä��R‘˜˜b™ &¨1¡*Ó-ˆä�2‹YˆÜ�2‹YˆÜ�2‹YˆÜ�2‹YˆØ%‰ˆ�ÜˆwŒ<Ø˜"˜r™' A™+Ñ%ˆFÙà˜‘G�Ø˜"˜r™' A™+Ñ%ˆFÙà˜‘G�Ù™&à—|‘| B¨¨g°uÓ=Ð=à�Š6œ˜Wœð —>‘> " d¨G°UÓ;Ð;ä��Q‘‹KˆØŸ™ W¨dÓ3‰ˆˆX÷ 	?÷  	?ð  	?ðD ÑÙ˜ÔáØ—	‘	×(Ñ(¨"¨b°1©f°q©j¸"¸bÀ1¹fÀq¹jÐ)IÈ8ÐUVÕWØ�a‘˜!‘˜r A™v¨™zÒ)Ø—	‘	×(Ñ(¨"¨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>˜ˆ?r2   c                óN  ‡ ‡‡	‡
‡‡‡‡‡— t        |t        j                  «      r|Šnm|€ ‰ j                  ‰j	                  d«      «      }t        j                  ||‰ j
                  |‰‰	‰
«      Š‰r‰j                  «        |r‰j                  ||«       dˆ fd„} ||«      }|€yd}‰j                  r ‰j                  � |‰j                  «      n|}‰j                  |||«      D ]=  Šddˆˆˆˆ	ˆˆˆ
ˆˆ f	d„}|�" ||‰j                  «       ||k7  sŒ- ||«       Œ6 ||«       Œ? y)z
Draw text.Nr8   c                ó@   •— ‰j                  | «      \  }}|€|€J ‚|S |S r7   )rA   )r,   r*   rQ   r-   s      €r0   ÚgetinkzImageDraw.text.<locals>.getink2  s0   ø€ Ø ŸL™L¨Ó.‰MˆC�Øˆ{ØÐ+Ð+Ð+Ø�ØˆJr2   c                ó>  •	— ‰j                   }|dk(  r‰rd}t        ‰j                  «      }t        ‰j                  «      }t	        j
                  ‰j                  «      d   t	        j
                  ‰j                  «      d   f}t        ‰j                  t        j                  «      rR ‰j                  j                  ‰j                  |‰‰‰|‰j                  | |g	‰
¢­ddi‰¤Ž\  }}||d   z  }||d   z  }n>	  ‰j                  j                  ‰j                  |‰‰‰|‰j                  | g‰
¢­d|i‰¤Ž}|dk(  r�||j                  d«      }}t!        j"                  d| «      d   }	|j%                  d|	«       ‰j&                  �B‰j&                  j)                  |||||j*                  d   z   ||j*                  d   z   f|«       y y ‰j,                  j/                  ||f|| «       y # t        $ r( ‰j                  j                  ‰j                  «      }Y Œâw xY w)	Nr   r   Ústroke_filledTr   rE   ru   rƒ   )r+   r¹   ro   rp   rc   Úmodfr;   r   r	   ÚFreeTypeFontÚgetmask2ÚtextÚanchorÚgetmaskÚ	TypeErrorÚgetbandÚstructÚpackÚfillbandr&   Úpaster”   r(   rK   )r*   Ústroke_widthr"   ro   rp   rE   r–   ÚoffsetÚcolorÚ	ink_alphaÚargsÚ	directionÚembedded_colorÚfeaturesÚ
image_textÚkwargsÚlanguager€   r-   s             €€€€€€€€€r0   Ú	draw_textz!ImageDraw.text.<locals>.draw_textG  s  ø€ Ø—}‘}�Ø 1Ò$©Ø!�DÜ˜Ÿ™“K�Ü˜Ÿ™“K�ÜŸ™ 4§6¡6Ó*¨1Ñ-¬t¯y©y¸¿¹Ó/@ÀÑ/CÐD�Ü˜jŸo™o¬y×/EÑ/EÔFØ#; :§?¡?×#;Ñ#;ØŸ	™	ØØ!Ø Ø Ø$ØŸ™ØØð$ð ò$ð '+ð$ð !ñ$‘L�D˜&ð ˜ ™‘N�AØ˜ ™‘N‘AðBØ6˜zŸ™×6Ñ6Ø ŸI™IØ Ø%Ø$Ø$Ø(Ø ŸK™KØð ð "ò ð #(ð ð %ñ ˜ð ˜6’>ð #'¨¯©°Q«˜4�EÜ &§¡¨C°Ó 5°aÑ 8�IØ—N‘N 1 iÔ0Ø—w‘wÐ*ØŸ™Ÿ™Ø! A q¨!¨d¯i©i¸©lÑ*:¸AÀÇ	Á	È!ÁÑ<LÐ#MÈtõð +ð
 —I‘I×)Ñ)¨1¨a¨&°$¸Õ<øô %ò BØ)Ÿ™×6Ñ6°t·y±yÓAšðBús   Ã<=G+ Ç+.HÈH)r,   ú_Ink | Nonerx   r¹   )r   )r*   r¹   rÑ   rw   rx   r´   )r;   r
   ÚTextr9   Úgetr"   Úembed_colorÚstrokerÑ   Ústroke_fillÚ_split)r-   rD   rÈ   r,   r   rÉ   ÚspacingÚalignrÖ   rØ   rÛ   rÑ   râ   r×   rÕ   rÚ   rÂ   r*   Ú
stroke_inkrÜ   rÙ   r€   s   `       ```  ```    @@r0   rÈ   zImageDraw.text  s&  ÿø€ ô& �dœIŸN™NÔ+Ø‰Jàˆ|Ø—}‘} V§Z¡Z°Ó%<Ó=�Ü"Ÿ™Ø�d˜DŸI™I w°	¸8ÀXóˆJñ Ø×&Ñ&Ô(ÙØ×!Ñ! ,°Ô<õ	ñ �T‹lˆØˆ;Øàˆ
Ø×"Ò"ð ×)Ñ)Ð5ñ �z×-Ñ-Ô.àð ð ×%Ñ% b¨&°%Ó8ò B	ˆD÷5=ö 5=ðn Ð%á˜* j×&=Ñ&=Ô>ð ˜*Ó$Ù˜c•Nñ ˜#•ñEB	r2   ©r8   c               ó@   — | j                  |||||||||	|
||||¬«      S ©Nrç   )rÈ   )r-   rD   rÈ   r,   r   rÉ   rä   rå   rÖ   rØ   rÛ   rÑ   râ   r×   r8   s                  r0   Úmultiline_textzImageDraw.multiline_text‰  sD   € ð$ �y‰yØØØØØØØØØØØØØØð ó 
ð 	
r2   c               ó¶   — |€| j                  |«      }t        j                  ||| j                  |||¬«      }|r|j	                  «        |j                  «       S )z@Get the length of a given string, in pixels with 1/64 precision.)rÖ   rØ   rÛ   )r9   r
   rÞ   r"   rà   Ú
get_length)	r-   rÈ   r   rÖ   rØ   rÛ   r×   r8   rÙ   s	            r0   Ú
textlengthzImageDraw.textlength¬  s[   € ð ˆ<Ø—=‘= Ó+ˆDÜ—^‘^ØØØ�I‰IØØØô
ˆ
ñ Ø×"Ñ"Ô$Ø×$Ñ$Ó&Ð&r2   c          	     óâ   — |€| j                  |«      }t        j                  ||| j                  ||||	«      }|r|j	                  «        |
r|j                  |
«       |j                  |||«      S )z2Get the bounding box of a given string, in pixels.)r9   r
   rÞ   r"   rà   rá   Úget_bbox)r-   rD   rÈ   r   rÉ   rä   rå   rÖ   rØ   rÛ   rÑ   r×   r8   rÙ   s                 r0   ÚtextbboxzImageDraw.textbboxÆ  so   € ð" ˆ<Ø—=‘= Ó+ˆDÜ—^‘^Ø�$˜Ÿ	™	 7¨I°xÀó
ˆ
ñ Ø×"Ñ"Ô$ÙØ×Ñ˜lÔ+Ø×"Ñ" 2 v¨uÓ5Ð5r2   c               ó<   — | j                  |||||||||	|
||¬«      S ré   )rð   )r-   rD   rÈ   r   rÉ   rä   rå   rÖ   rØ   rÛ   rÑ   r×   r8   s                r0   Úmultiline_textbboxzImageDraw.multiline_textbboxâ  s>   € ð  �}‰}ØØØØØØØØØØØØð ó 
ð 	
r2   r7   )r&   úImage.Imager"   ú
str | Nonerx   r´   )rx   úImageFont.BaseImageFont)r8   úfloat | Nonerx   rõ   )r*   rÝ   r,   rÝ   rx   ztuple[int | None, int | None])Nr   )rD   r   rE   rw   rF   rw   r,   rÝ   rG   r¹   rx   r´   )rD   zSequence[int]rL   ró   r,   rÝ   rx   r´   )NNr   )rD   r   rE   rw   rF   rw   r,   rÝ   rP   rÝ   rG   r¹   rx   r´   )
rD   r   r,   rÝ   rP   rÝ   rG   r¹   rx   r´   )rD   rv   rX   rw   r,   rÝ   rP   rÝ   rG   r¹   rx   r´   )Nr   N)
rD   r   r,   rÝ   rG   r¹   r�   rô   rx   r´   )NN)rŒ   zImage.core._Outliner,   rÝ   rP   rÝ   rx   r´   )rD   r   r,   rÝ   rx   r´   )r   NNr   )r›   ú!Sequence[Sequence[float] | float]rœ   r¹   r�   rw   r,   rÝ   rP   rÝ   rG   r¹   rx   r´   )rD   r   rX   rw   r,   rÝ   rP   rÝ   rG   r¹   r¢   z$tuple[bool, bool, bool, bool] | Nonerx   r´   )NNNr]   r»   NNNr   NF) rD   útuple[float, float]rÈ   zAnyStr | ImageText.Text[AnyStr]r,   rÝ   r   r   rÉ   rô   rä   rw   rå   r<   rÖ   rô   rØ   úlist[str] | NonerÛ   rô   rÑ   rw   râ   rÝ   r×   r³   rÕ   r   rÚ   r   rx   r´   )rD   rø   rÈ   r   r,   rÝ   r   r   rÉ   rô   rä   rw   rå   r<   rÖ   rô   rØ   rù   rÛ   rô   rÑ   rw   râ   rÝ   r×   r³   r8   rö   rx   r´   )NNNNF)rÈ   r   r   r   rÖ   rô   rØ   rù   rÛ   rô   r×   r³   r8   rö   rx   rw   )	NNr]   r»   NNNr   F)rD   rø   rÈ   r   r   r   rÉ   rô   rä   rw   rå   r<   rÖ   rô   rØ   rù   rÛ   rô   rÑ   rw   r×   r³   r8   rö   rx   z!tuple[float, float, float, float])Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r1   r5   r9   rA   rH   rL   rR   rV   rZ   r€   rŒ   r   r„   r˜   rž   r¡   r¿   rÈ   rê   rí   rð   rò   r§   r2   r0   r   r   =   s)  … Ø+/€DÐ
(Ó/ô&ðPà	 óó2"ð 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ô +ð !Ø#ØðKàðKð ðKð ð	Kð
 ðKð 
óKð8 Ø Ø#Øð/à:ð/ð ð/ð ð	/ð
 ð/ð ð/ð ð/ð 
ó/ð  !Ø#Øð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ð` !Ø/3Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ðuàðuð .ðuð ð	uð
 -ðuð ðuð ðuð ðuð ðuð #ðuð ðuð ðuð !ðuð ðuð ðuð  ð!uð" 
ó#uðv !Ø/3Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð!
ð  #'ñ!!
àð!
ð ð!
ð ð	!
ð
 -ð!
ð ð!
ð ð!
ð ð!
ð ð!
ð #ð!
ð ð!
ð ð!
ð !ð!
ð ð!
ð   ð!!
ð" 
ó#!
ðL 04Ø $Ø%)Ø#Ø$ð'ð #'ñ'àð'ð -ð'ð ð	'ð
 #ð'ð ð'ð ð'ð  ð'ð 
ó'ð< 04Ø!ØØØ $Ø%)Ø#ØØ$ð6ð #'ñ6àð6ð ð6ð -ð	6ð
 ð6ð ð6ð ð6ð ð6ð #ð6ð ð6ð ð6ð ð6ð  ð6ð 
+ó6ð@ 04Ø!ØØØ $Ø%)Ø#ØØ$ð
ð #'ñ
àð
ð ð
ð -ð	
ð
 ð
ð ð
ð ð
ð ð
ð #ð
ð ð
ð ð
ð ð
ð  ð
ð 
+ô
r2   r   c                ó^   — 	  t        | d«      |«      S # t        $ r t        | |«      cY S w xY w)a‹  
    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)ÚgetattrÚAttributeErrorr   )r&   r"   s     r0   r•   r•     s7   € ð#Ø%Œw�r˜9Ó% dÓ+Ð+øÜò #Ü˜˜TÓ"Ò"ð#ús   ‚ ”,«,c                óB   — ddl m} | � |j                  | «      nd}||fS )zm
    :param im: The image to draw in.
    :returns: A (drawing context, drawing resource factory) tuple.
    r   r   N)Ú r   r•   )r&   r   r(   s      r0   rÿ   rÿ     s(   € õ
 à"$ .ˆ?ˆ:�?‰?˜2Ô°d€DØ�ÐÐr2   c                ó(  — | j                  «       }|€J ‚|\  }}	 |||f   }t        ||«      |k  ry||||f<   ||fh}	t	        «       }
|	rŸt	        «       }|	D ]ˆ  \  }}|dz   |f|dz
  |f||dz   f||dz
  ffD ]f  \  }}||f|
v s
|dk  s|dk  rŒ	 |||f   }|
j                  ||f«       |€t        ||«      |k  }n|||fv}|sŒM||||f<   |j                  ||f«       Œh ŒŠ |	}
|}	|	rŒžyy# t        t        f$ r Y yw xY w# t        t        f$ r Y Œšw xY w)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   )rJ   Ú_color_diffr#   Ú
IndexErrorÚsetÚadd)ÚimagerD   ÚvalueÚborderÚthreshÚpixelro   rp   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtrg   r,   s                   r0   Ú	floodfillr    s‰  € ð6 �J‰J‹L€EØÐÐÐØ�D€A€qðØ˜1˜a˜4‘[ˆ
Ü�u˜jÓ)¨VÒ3ØØˆˆa�ˆd‰ð �ˆFˆ8€Dô “€IÙ
Ü“5ˆØò 	-‰DˆAˆqØ˜a™% ˜ a¨!¡e¨Q Z°!°Q¸±U°¸aÀÀQÁ¸ZÐHò -‘��1à�q�6˜YÑ&¨!¨aª%°1°q²5Øð-Ø˜a ˜d™�Að —M‘M 1 a &Ô)Ø�~Ü*¨1¨jÓ9¸VÑC™à ¨°¨Ð7˜ÚØ&+˜˜a ˜d™Ø Ÿ™ a¨ VÕ,ñ!-ð	-ð$ ˆ	Øˆô+ øô œ
Ð#ò Ùðûô #¤JÐ/ò Ùðús(   ›C* ²C* ÂC?Ã*C<Ã;C<Ã?DÄDc                óª  ‡‡	‡
— t        |t        «      sd}t        |«      ‚|dk  rd}t        |«      ‚t        | t        t
        f«      sd}t        |«      ‚t        | «      dk(  rCt        d„ | D «       «      sd}t        |«      ‚t        t        t           t	        | «      «      �^ Š	Š
nÄt        | «      dk(  r©t        | d   t        t
        f«      r�t        d	„ | d   D «       «      rt        | d
   t        t        f«      sd}t        |«      ‚t        | d   «      dk7  rd}t        |«      ‚t        t        t           t	        | d   «      «      Š	t        t        | d
   «      Š
nd}t        |«      ‚‰
dk  rd}t        |«      ‚t        |t        t        f«      sd}t        |«      ‚dˆ	fd„Šdˆˆ
fd„}dd„} |||«      }|D �cg c]
  } ||«      ‘Œ c}S c c}w )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 intru   zn_sides should be an int > 2z$bounding_circle should be a sequencec              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr7   ©r;   r¹   rw   ©rf   rƒ   s     r0   ri   z4_compute_regular_polygon_vertices.<locals>.<genexpr>—  s   è ø€ ÒH°1”:˜a¤#¤u ×.ÑHùó   ‚ "z0bounding_circle should only contain numeric datar^   r   c              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr7   r  r  s     r0   ri   z4_compute_regular_polygon_vertices.<locals>.<genexpr>�  s    è ø€ ò 
Ø,-ŒJ�qœ3¤˜,×'ñ
ù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                óÐ  •— t        | d   t        j                  t        j                  d|z
  «      «      z  | d   t        j                  t        j                  d|z
  «      «      z  z
  ‰d   z   d«      t        | d   t        j                  t        j                  d|z
  «      «      z  | d   t        j                  t        j                  d|z
  «      «      z  z   ‰d   z   d«      fS )Nr   r_   r   r^   )r¶   rc   rj   rk   rl   )r„   r}   Úcentroids     €r0   Ú_apply_rotationz:_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‘+ñð ó	ð
ð 	
r2   c                ó   •— ‰dg} ‰|| «      S ©Nr   r§   )rn   Ústart_pointr  Úpolygon_radiuss     €€r0   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertexÊ  s   ø€ Ø% qÐ)ˆÙ˜{¨EÓ2Ð2r2   c                óŒ   — g }d| z  }dd|z  z
  |z   }t        | «      D ]#  }|j                  |«       ||z  }|dkD  sŒ|dz  }Œ% |S )Nr_   r¥   g      à?)r{   Úappend)rœ   r�   r…   r}   Úcurrent_angleÚ_s         r0   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_anglesÎ  se   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÜ�w“ò 	%ˆAØ�M‰M˜-Ô(Ø˜WÑ$ˆMØ˜sÓ"Ø Ñ$‘ð		%ð
 ˆr2   )r„   úlist[float]r}   rw   rx   rø   )rn   rw   rx   rø   )rœ   r¹   r�   rw   rx   r(  )
r;   r¹   rË   r#   rz   r>   r|   r·   r   rw   )r›   rœ   r�   r/   r"  r'  r…   rn   r  r  r!  s           @@@r0   rš   rš   _  sÄ  ú€ ôV �gœsÔ#Ø(ˆÜ˜‹nÐØ�‚{Ø,ˆÜ˜‹oÐô �o¬¬e }Ô5Ø4ˆÜ˜‹nÐä
ˆ?Ó˜qÒ ÜÑH¸ÔHÔHØDˆCÜ˜S“/Ð!ä$(¬¬e©´d¸?Ó6KÓ$LÑ!ˆ‘>Ü	ˆ_Ó	 Ò	"¤z°/À!Ñ2DÄtÌUÀmÔ'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ó
ñ ˜ (Ó+€Fð 9?Ö?¨uÑ# EÕ*Ò?Ð?ùÒ?s   Æ>Gc                ó¨   ‡‡— t        | t        «      r| n| fŠt        |t        «      r|n|fŠt        ˆˆfd„t        t	        ‰«      «      D «       «      S )zJ
    Uses 1-norm distance to calculate difference between two values.
    c              3  óF   •K  — | ]  }t        ‰|   ‰|   z
  «      –— Œ y ­wr7   )Úabs)rf   rƒ   ÚfirstÚseconds     €€r0   ri   z_color_diff.<locals>.<genexpr>ê  s#   øè ø€ ÒE¨QŒs�5˜‘8˜f Q™iÑ'×(ÑEùs   ƒ!)r;   r>   Úsumr{   r|   )Úcolor1Úcolor2r,  r-  s     @@r0   r  r  á  sC   ù€ ô ! ¬Ô/‰F°f°Y€EÜ! &¬%Ô0‰V°v°i€FäÔE´%¼¸F»Ó2DÔEÓEÐEr2   r7   )r&   ró   r"   rô   rx   r   )r&   zImage.Image | Nonerx   z)tuple[ImageDraw2.Draw | None, ModuleType]r  )r	  ró   rD   ztuple[int, int]r
  úfloat | tuple[int, ...]r  zfloat | tuple[int, ...] | Noner  rw   rx   r´   )r›   r÷   rœ   r¹   r�   rw   rx   zlist[tuple[float, float]])r/  r1  r0  r1  rx   rw   )!Ú
__future__r   rc   rÍ   Úcollections.abcr   Útypingr   r  r   r   r	   r
   ÚTYPE_CHECKINGr   Útypesr   r   r   r   Ú_typingr   r   r'   rP   r   rý   r   r•   rÿ   r  rš   r  r§   r2   r0   ú<module>r8     sþ   ðö@ #ã Û Ý $Ý ç 5Ó 5à€ÙÝ(Ý ß"åß%ð .3¯Z©Z×-?Ñ-?€Ð	*Ó ?ð÷B
ñ B
ôJ#ô"ð .2Øð>Øð>àð>ð #ð>ð +ð	>ð
 ð>ð 
ó>ðB@Ø6ð@ØADð@ØPUð@àó@ðD	FØ#ð	FØ-Dð	Fà
ô	Fr2   