Ë
    Bü´j]§  ã                  ól  — 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mZ ddlmZmZ ddlmZ dd	lmZ ej*                  j,                  Zd
ed<   dZerddlmZmZ eeeedf   ef   Z 	  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)Ú
ModuleType)ÚAnyÚAnyStrÚCallableÚUnionÚcasté   )ÚImageÚ
ImageColor)Ú	deprecate)ÚCoordsz!Callable[[], Image.core._Outline]ÚOutlineF)Ú
ImageDraw2Ú	ImageFont.c                  óþ  — 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/	 	 	 	 	 	 	 	 	 	 	 	 	 d0d„Z	 	 	 d&	 	 	 	 	 	 	 	 	 d(d„Z	 	 	 	 d/ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d1d„Zd2d„Z	 	 	 	 	 	 	 	 	 	 	 d3	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4d„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d„Z	 	 	 	 	 	 	 	 	 	 	 d3ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6d„Z	 	 	 	 	 d7ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d8d„Z	 	 	 	 	 	 	 	 	 d9ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d:d„Z	 	 	 	 	 	 	 	 	 d9ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d:d„Zy);Ú	ImageDrawNúNImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | NoneÚfontc                ó†  — |j                  «        |j                  r|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)ÚloadÚreadonlyÚ_copyÚmodeÚ
ValueErrorÚpaletteÚ_imageÚimr   ÚcoreÚdrawÚdraw_inkÚinkÚfontmodeÚfill)Úselfr'   r#   ÚblendÚmsgs        úK/root/workspace/ytshorts/venv/lib/python3.12/site-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__B   s
  € ð 	�‰Œ	Ø�;Š;Ø�H‰HŒJØˆØˆ<Ø—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                ój   — | j                   sddlm}  |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   )r   Ú r   Úload_default)r.   r   s     r1   ÚgetfontzImageDraw.getfontl   s*   € ð( �yŠyå#à.˜	×.Ñ.Ó0ˆDŒIØ�y‰yÐr3   c                óV   — |�ddl m}  |j                  |«      S | j                  «       S )Nr   r5   )r6   r   r7   r8   )r.   Ú	font_sizer   s      r1   Ú_getfontzImageDraw._getfont‡   s,   € ð Ð Ý#à)�9×)Ñ)¨)Ó4Ð4à—<‘<“>Ð!r3   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 ©N)r-   r+   Ú
isinstanceÚstrr   Úgetcolorr#   r%   Útupler&   r)   r*   )r.   r+   r-   Ú
result_inkÚresult_fills        r1   Ú_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�Ø˜;Ð&Ð&r3   c                óp   — | j                  |«      \  }}|� | j                  j                  |||||«       yy)zDraw an arc.N)rD   r)   Údraw_arc)r.   ÚxyÚstartÚendr-   Úwidthr+   s          r1   ÚarczImageDraw.arcª   s:   € ð —L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×Ñ˜r 5¨#¨s°EÕ:ð r3   c                ó¨   — |j                  «        | j                  |«      \  }}|€|}|�(| j                  j                  ||j                  |«       yy)zDraw a bitmap.N)r    rD   r)   Údraw_bitmapr'   )r.   rG   Úbitmapr-   r+   s        r1   rN   zImageDraw.bitmap·   sM   € ð 	�‰ŒØ—L‘L Ó&‰	ˆˆTØˆ;ØˆCØˆ?Ø�I‰I×!Ñ! " f§i¡i°Õ5ð r3   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a chord.Nr   r   )rD   r)   Ú
draw_chord©	r.   rG   rH   rI   r-   ÚoutlinerJ   r+   Úfill_inks	            r1   ÚchordzImageDraw.chordÂ   sn   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I× Ñ   U¨C°¸1Ô=Øˆ?˜s hš°5¸A²:Ø�I‰I× Ñ   U¨C°°a¸Õ?ð 4>˜ˆ?r3   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw an ellipse.Nr   r   )rD   r)   Údraw_ellipse©r.   rG   r-   rR   rJ   r+   rS   s          r1   Ú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>˜ˆ?r3   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)rX   )r.   rG   Úradiusr-   rR   rJ   Ú
ellipse_xys          r1   ÚcirclezImageDraw.circleà   sD   € ð ˜‘e˜f‘n b¨¡e¨f¡n°b¸±e¸f±nÀbÈÁeÈfÁnÐUˆ
Ø�‰�Z  w°Õ6r3   c                óî  ‡— | j                  |«      d   }|��R| 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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      r1   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s9   è ø€ ò %á &  3ð °C¸!²G¤§¡¨C¤ÄÇÁÈ3ÃÕPñ%ùs   ‚?A)rA   re   ÚcosÚradiansÚsin)ÚcoordÚangleÚxÚyÚdistancerJ   s        €r1   Ú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ð+ô%ó  ð r3   é´   rc   é   é   )rJ   )ro   úSequence[float]rp   ÚfloatÚreturnztuple[float, ...])rD   r)   Ú
draw_linesr>   ÚlistrA   r
   r   ry   ÚrangeÚlenre   ÚdegreesÚatan2ÚpiesliceÚline)r.   rG   r-   rJ   Újointr+   ÚpointsÚiÚpointrH   rI   Úanglesrt   ÚflippedÚcoordsÚ
gap_coordss      `            r1   r‚   zImageDraw.lineì   s&  ø€ ð �l‰l˜4Ó  Ñ#ˆØ‰?Ø�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   Â-I,Ã9AI1c                óØ   — |j                  «        | j                  ||«      \  }}|�| j                  j                  ||d«       |�$||k7  r| j                  j                  ||d«       yyy)z(Experimental) Draw a shape.Nr   r   )ÚcloserD   r)   Údraw_outline)r.   Úshaper-   rR   r+   rS   s         r1   rŽ   zImageDraw.shape9  se   € ð 	�‰ŒØŸ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×"Ñ" 5¨(°AÔ6Øˆ?˜s hšØ�I‰I×"Ñ" 5¨#¨qÕ1ð  /ˆ?r3   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a pieslice.Nr   r   )rD   r)   Údraw_pieslicerQ   s	            r1   r�   zImageDraw.piesliceG  sn   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×#Ñ# B¨¨s°H¸aÔ@Øˆ?˜s hš°5¸A²:Ø�I‰I×#Ñ# B¨¨s°C¸¸EÕBð 4>˜ˆ?r3   c                ój   — | j                  |«      \  }}|�| j                  j                  ||«       yy)z#Draw one or more individual pixels.N)rD   r)   Údraw_points)r.   rG   r-   r+   s       r1   r†   zImageDraw.pointW  s2   € à—L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×!Ñ! " cÕ*ð r3   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`   )rD   r)   Údraw_polygonr'   r   ÚnewÚsizeÚDraw)
r.   rG   r-   rR   rJ   r+   rS   ÚmaskÚmask_inkr)   s
             r1   ÚpolygonzImageDraw.polygon]  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>˜ˆ?r3   c                óF   — t        |||«      }| j                  ||||«       y)zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesrš   )r.   Úbounding_circleÚn_sidesÚrotationr-   rR   rJ   rG   s           r1   Úregular_polygonzImageDraw.regular_polygonu  s$   € ô /¨ÀÈÓRˆØ�‰�R˜˜w¨Õ.r3   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw a rectangle.Nr   r   )rD   r)   Údraw_rectanglerW   s          r1   Ú	rectanglezImageDraw.rectangle‚  sf   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×$Ñ$ R¨°1Ô5Øˆ?˜s hš°5¸A²:Ø�I‰I×$Ñ$ R¨¨a°Õ7ð 4>˜ˆ?r3   )Úcornersc               óà  ‡ ‡‡‡‡‡‡‡‡‡‡‡— t        |d   t        t        f«      r(t        t        t        t
              |«      \  \  ŠŠ\  ŠŠnt        t        t
           |«      \  ŠŠŠŠ‰‰k  rd}t        |«      ‚‰‰k  rd}t        |«      ‚‰€dŠ|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   kD  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 )Nru   ra   r   rc   é  c              3  ó2   •K  — | ]  \  }}‰|   r|–— Œ y ­wr=   © )rh   r…   Úpartr¤   s      €r1   rk   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>Õ  s&   øè ø€ ò á˜˜4ð ˜q’zô ñùs   ƒr   )rA   Ú	enumerater)   r�   rF   )r�   Úpartsrª   r¤   ÚdrS   Úfull_xÚfull_yr+   r.   rJ   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r1   Ú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°Ñ)<Ò>ñ	?r3   Trw   F)r�   Úboolrz   ÚNone)r>   r|   rA   r
   r   ry   r$   ÚroundÚallrX   Úanyr£   ÚintrD   r)   r¢   )r.   rG   rZ   r-   rR   rJ   r¤   r0   Úrr´   ÚleftÚrightÚtopÚbottomr­   rS   r®   r¯   r+   r°   r±   r²   r³   s   `    ``       @@@@@@@@@r1   Úrounded_rectanglezImageDraw.rounded_rectangle�  sW  ÿû€ ô �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œð —>‘> " 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‘˜!‘˜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>˜ˆ?r3   c                ó2   — t        |t        «      rdnd}||v S )Nú
ó   
)r>   r?   )r.   ÚtextÚsplit_characters      r1   Ú_multiline_checkzImageDraw._multiline_check  s   € Ü",¨T´3Ô"7™$¸Uˆà $Ð&Ð&r3   c                óœ  ‡ ‡‡‡‡‡‡	‡
‡‡‡— ‰r‰ j                   dvrd}t        |«      ‚‰€ ‰ j                  ‰j                  d«      «      Š‰ j	                  ‰«      r‰ j                  ‰‰|‰‰||‰‰	‰
||‰«      S dˆ fd„}dd	ˆˆˆˆˆ	ˆˆˆ
ˆ ˆˆfd„} ||«      }|�3d}|r|� ||«      n|}|� |||«       ||k7  r	 ||«       yy ||«       yy)
z
Draw text.©r   r   ú3Embedded color supported only in RGB and RGBA modesNr:   c                ó@   •— ‰j                  | «      \  }}|€|€J ‚|S |S r=   )rD   )r-   r+   rS   r.   s      €r1   ÚgetinkzImageDraw.text.<locals>.getinkQ  s0   ø€ Ø ŸL™L¨Ó.‰MˆC�Øˆ{ØÐ+Ð+Ð+Ø�ØˆJr3   c                óx  •— ‰j                   }|dk(  r‰rd}g }t        d«      D ]  }|j                  t        ‰|   «      «       Œ! t	        j
                  ‰d   «      d   t	        j
                  ‰d   «      d   f}	  ‰j                  ‰|g‰¢­‰‰‰|d‰| |dœ‰¤Ž\  }}|d   |d   z   |d   |d   z   g}|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%                  ||| «       y # t        $ rE 	  ‰j                  ‰|‰‰‰|‰| g‰¢­d|i‰¤Ž}n # t        $ r ‰j                  ‰«      }Y nw xY wY �Œw xY w)
Nr   r   r`   r   T)Ú	directionÚfeaturesÚlanguageÚstroke_widthÚstroke_filledÚanchorr+   rH   rH   rw   r…   )r,   r}   Úappendrº   re   ÚmodfÚgetmask2ÚAttributeErrorÚgetmaskÚ	TypeErrorÚgetbandÚstructÚpackÚfillbandr'   Úpaster–   r)   rM   )r+   rÐ   r#   ro   r…   rH   r˜   ÚoffsetÚcolorÚ	ink_alpharq   rr   rÒ   ÚargsrÍ   Úembedded_colorrÎ   r   ÚkwargsrÏ   r.   rÄ   rG   s               €€€€€€€€€€€r1   Ú	draw_textz!ImageDraw.text.<locals>.draw_textX  s  ø€ Ø—=‘=ˆDØ˜qÒ ¡^Ø�ØˆEÜ˜1“Xò )�Ø—‘œS  A¡›ZÕ(ð)ä—Y‘Y˜r !™uÓ% aÑ(¬$¯)©)°B°q±EÓ*:¸1Ñ*=Ð>ˆEð .Ø,˜tŸ}™}ØØð ð ñ ð (Ø%Ø%Ø!-Ø"&Ø!ØØñ ð ñ ‘��fð ˜q™ F¨1¡IÑ-¨u°Q©x¸&À¹)Ñ/CÐD�ð$ �vŠ~ð # D§L¡L°£O�t�Ü"ŸK™K¨¨SÓ1°!Ñ4�	Ø—‘˜q )Ô,Ø‘��1Ø—7‘7Ð&Ø—G‘G—M‘MØ  1 a¨$¯)©)°A©,Ñ&6¸¸D¿I¹IÀa¹LÑ8HÐIÈ4õð 'ð
 —	‘	×%Ñ% e¨T°3Õ7øô; "ò .ð.Ø'˜4Ÿ<™<ØØØ!Ø Ø Ø$ØØðð òð $ðð !ñ‘Døô !ò .ØŸ<™<¨Ó-’Dð.ýð.ús6   Á=9E+ Å+	F9Å5FÆF9ÆF2Æ/F9Æ1F2Æ2F9Æ8F9)r-   ú_Ink | Nonerz   rº   )r   )r+   rº   rÐ   ry   rz   r¶   )r#   r$   r;   ÚgetrÆ   Úmultiline_text)r.   rG   rÄ   r-   r   rÒ   ÚspacingÚalignrÍ   rÎ   rÏ   rÐ   Ústroke_fillrâ   rá   rã   r0   rË   rä   r+   Ú
stroke_inks   ``` ``  ```  ```     r1   rÄ   zImageDraw.text!  sú   ÿú€ ñ0 ˜dŸi™i¨Ñ>ØGˆCÜ˜S“/Ð!àˆ<Ø—=‘= §¡¨KÓ!8Ó9ˆDà× Ñ  Ô&Ø×&Ñ&ØØØØØØØØØØØØØóð õ 	÷5	8÷ 5	8ð 5	8ñn �T‹lˆØˆ?ØˆJÙØ4?Ð4K™V KÔ0ÐQT�
àÐ%á˜* lÔ3ð ˜*Ò$Ù˜c•Nð %ñ ˜#•ð r3   c                óˆ  — |€
|dk(  rdnd}n4t        |«      dk7  rd}t        |«      ‚|d   dv r|dk7  rd}t        |«      ‚|€| j                  |«      }|j                  t	        |t
        «      rd	nd
«      }| j                  dd||
¬«      d   |
z   |z   }|d   }g }|dk(  r+|d   }|D ]  }|j                  ||f||f«       ||z  }Œ ||fS g }d}|D ]6  }| j                  |||||	|¬«      }|j                  |«       t        ||«      }Œ8 |d   dk(  r|t        |«      dz
  |z  dz  z  }n|d   dk(  r|t        |«      dz
  |z  z  }t        |«      D �]e  \  }}|d   }|||   z
  }|dv rn&|dk(  r	||dz  z  }n|dk(  r||z  }nd}t        |«      ‚|dk(  ré|dk7  rä|t        |«      dz
  k7  rÓ|j                  t	        |t
        «      rdnd«      }t        |«      dkD  r¢|d   dk(  r	||dz  z  }n|d   dk(  r||z  }|D �cg c]  }| j                  |||||	|¬«      ‘Œ }}d|d   z   }|t        |«      z
  }t        |«      D ]5  \  }}|j                  ||f||f«       |||   |t        |«      dz
  z  z   z  }Œ7 ||z  }�Œ-|d   dk(  r	||dz  z  }n|d   dk(  r||z  }|j                  ||f||f«       ||z  }�Œh ||fS c c}w )NÚttbÚltÚlar`   z#anchor must be a 2 character stringr   Útbz'anchor not supported for multiline textrÂ   rÃ   )r   r   ÚA)rÐ   rw   r   )rÍ   rÎ   rÏ   râ   Úmg       @r­   )r¼   ÚjustifyÚcenterr½   z4align must be "left", "center", "right" or "justify"ró   ú ó    r»   Úl)r~   r$   r;   Úsplitr>   r?   ÚtextbboxrÓ   Ú
textlengthÚmaxr«   Úsum)r.   rG   rÄ   r   rÒ   rè   ré   rÍ   rÎ   rÏ   rÐ   râ   r:   r0   ÚlinesÚline_spacingr¾   r¬   r¼   r‚   ÚwidthsÚ	max_widthÚ
line_widthÚidxÚwidth_differenceÚwordsÚwordÚword_widthsÚword_anchorr…   s                                 r1   Ú_prepare_multiline_textz!ImageDraw._prepare_multiline_text   sÍ  € ð. ˆ>Ø&¨%Ò/‘T°T‰FÜ�‹[˜AÒØ7ˆCÜ˜S“/Ð!Ø�A‰Y˜$Ñ 9°Ò#5Ø;ˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDà—
‘
¤:¨d´CÔ#8™4¸eÓDˆà�M‰M˜& # t¸,ˆMÓGÈÑJØñàñð 	ð �‰eˆØˆØ˜ÒØ�a‘5ˆDØò %�Ø—‘˜t S˜k¨6°4Ð8Ô9Ø˜Ñ$‘ð%ð\ �Uˆ{ÐðU ˆFØ ˆIØò 
7�Ø!Ÿ_™_ØØØ'Ø%Ø%Ø#1ð -ó �
ð —‘˜jÔ)Ü 	¨:Ó6‘	ð
7ð �a‰y˜CÒØœ˜E›
 Q™¨,Ñ6¸Ñ<Ñ<‘Ø˜‘˜cÒ!Øœ˜E›
 Q™¨,Ñ6Ñ6�ä& uÓ-ó 5$‘	��TØ˜!‘u�Ø#,¨v°c©{Ñ#:Ð ð Ð/Ñ/ØØ˜hÒ&ØÐ,¨sÑ2Ñ2‘DØ˜gÒ%ØÐ,Ñ,‘DàP�CÜ$ S›/Ð)ð ˜YÒ&Ø(¨AÒ-Øœs 5›z¨A™~Ò-à ŸJ™J¬j¸¼sÔ.C¡sÈÓN�EÜ˜5“z A’~à! !™9¨Ò+Ø  I°¡OÑ3™DØ# A™Y¨#Ò-Ø  IÑ-˜Dð ).ö
'ð !%ð !ŸO™OØ $Ø $Ø*3Ø)1Ø)1Ø/=ð ,õ ð
'˜ð 
'ð '*¨F°1©I¡o˜Ø+4´s¸;Ó7GÑ+GÐ(Ü'0°Ó'7ò Y™G˜A˜tØ!ŸL™L¨4°¨+°{ÀDÐ)IÔJØ  K°¡NÐ5EÌÈUËÐVWÉÑ5XÑ$XÑX™DðYð ˜|Ñ+˜Ù ð ˜!‘9 Ò#ØÐ,¨sÑ2Ñ2‘DØ˜A‘Y #Ò%ØÐ,Ñ,�DØ—‘˜t S˜k¨6°4Ð8Ô9Ø�|Ñ#’ðk5$ðn �Uˆ{Ðùò7
's   Ç?J?)r:   c               ó�   — | j                  ||||||||	|
|||«      \  }}|D ]"  \  }}}| j                  |||||||	|
|||¬«       Œ$ y )N)rÍ   rÎ   rÏ   rÐ   rê   râ   )r  rÄ   )r.   rG   rÄ   r-   r   rÒ   rè   ré   rÍ   rÎ   rÏ   rÐ   rê   râ   r:   rý   r‚   s                    r1   rç   zImageDraw.multiline_text  s†   € ð. ×2Ñ2ØØØØØØØØØØØØó
‰ˆˆeð !&ò 	ÑˆB�˜Ø�I‰IØØØØØØ#Ø!Ø!Ø)Ø'Ø-ð õ ñ	r3   c               óè   — | j                  |«      rd}t        |«      ‚|r| j                  dvrd}t        |«      ‚|€| j                  |«      }|rdn| j                  }	|j                  ||	|||«      S )z@Get the length of a given string, in pixels with 1/64 precision.z&can't measure length of multiline textrÈ   rÉ   r   )rÆ   r$   r#   r;   r,   Ú	getlength)
r.   rÄ   r   rÍ   rÎ   rÏ   râ   r:   r0   r#   s
             r1   rú   zImageDraw.textlengthS  su   € ð" × Ñ  Ô&Ø:ˆCÜ˜S“/Ð!Ù˜dŸi™i¨Ñ>ØGˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDÙ'‰v¨T¯]©]ˆØ�~‰~˜d D¨)°X¸xÓHÐHr3   c               ó\  — |r| j                   dvrd}t        |«      ‚|€| j                  |«      }| j                  |«      r| j	                  |||||||||	|
|«      S |rdn| j
                  }|j                  |||||	|
|«      }|d   |d   z   |d   |d   z   |d   |d   z   |d   |d   z   fS )z2Get the bounding box of a given string, in pixels.rÈ   rÉ   r   r   r   r`   rw   )r#   r$   r;   rÆ   Úmultiline_textbboxr,   Úgetbbox)r.   rG   rÄ   r   rÒ   rè   ré   rÍ   rÎ   rÏ   rÐ   râ   r:   r0   r#   Úbboxs                   r1   rù   zImageDraw.textbboxp  sã   € ñ, ˜dŸi™i¨Ñ>ØGˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDà× Ñ  Ô&Ø×*Ñ*ØØØØØØØØØØØóð ñ (‰v¨T¯]©]ˆØ�|‰|Ø�$˜	 8¨X°|ÀVó
ˆð �A‰w˜˜A™‰  Q¡¨"¨Q©%¡°°a±¸2¸a¹5±À$ÀqÁ'ÈBÈqÉEÁ/ÐQÐQr3   c               óP  — | j                  |||||||||	|
||«      \  }}d }|D ]k  \  }}}| j                  |||||||	|
|¬«	      }|€|}Œ&t        |d   |d   «      t        |d   |d   «      t        |d   |d   «      t        |d   |d   «      f}Œm |€|d   |d   |d   |d   fS |S )N)rÍ   rÎ   rÏ   rÐ   râ   r   r   r`   rw   )r  rù   Úminrû   )r.   rG   rÄ   r   rÒ   rè   ré   rÍ   rÎ   rÏ   rÐ   râ   r:   rý   r  r‚   Ú	bbox_lines                    r1   r  zImageDraw.multiline_textbbox¢  s  € ð* ×2Ñ2ØØØØØØØØØØØØó
‰ˆˆeð :>ˆà %ò 	ÑˆB�˜ØŸ™ØØØØØ#Ø!Ø!Ø)Ø-ð &ó 
ˆIð ˆ|Ø ‘ô ˜˜Q™ ¨1¡Ó.Ü˜˜Q™ ¨1¡Ó.Ü˜˜Q™ ¨1¡Ó.Ü˜˜Q™ ¨1¡Ó.ð	‘ð	ð, ˆ<Ø�a‘5˜"˜Q™%  A¡¨¨1©Ð-Ð-Øˆr3   r=   )r'   úImage.Imager#   ú
str | Nonerz   r¶   )rz   úGImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r:   úfloat | Nonerz   r  )r+   rå   r-   rå   rz   ztuple[int | None, int | None])Nr   )rG   r   rH   ry   rI   ry   r-   rå   rJ   rº   rz   r¶   )rG   zSequence[int]rN   r  r-   rå   rz   r¶   )NNr   )rG   r   rH   ry   rI   ry   r-   rå   rR   rå   rJ   rº   rz   r¶   )
rG   r   r-   rå   rR   rå   rJ   rº   rz   r¶   )rG   rx   rZ   ry   r-   rå   rR   rå   rJ   rº   rz   r¶   )Nr   N)
rG   r   r-   rå   rJ   rº   rƒ   r  rz   r¶   ©NN)rŽ   zImage.core._Outliner-   rå   rR   rå   rz   r¶   )rG   r   r-   rå   rz   r¶   )r   NNr   )r�   ú!Sequence[Sequence[float] | float]rž   rº   rŸ   ry   r-   rå   rR   rå   rJ   rº   rz   r¶   )rG   r   rZ   ry   r-   rå   rR   rå   rJ   rº   r¤   z$tuple[bool, bool, bool, bool] | Nonerz   r¶   )rÄ   r   rz   rµ   )NNNr_   r¼   NNNr   NF) rG   útuple[float, float]rÄ   r   r-   rå   r   r   rÒ   r  rè   ry   ré   r?   rÍ   r  rÎ   úlist[str] | NonerÏ   r  rÐ   ry   rê   rå   râ   rµ   rá   r   rã   r   rz   r¶   )rG   r  rÄ   r   r   r   rÒ   r  rè   ry   ré   r?   rÍ   r  rÎ   r  rÏ   r  rÐ   ry   râ   rµ   r:   r  rz   z}tuple[ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont, list[tuple[tuple[float, float], str, AnyStr]]])rG   r  rÄ   r   r-   rå   r   r   rÒ   r  rè   ry   ré   r?   rÍ   r  rÎ   r  rÏ   r  rÐ   ry   rê   rå   râ   rµ   r:   r  rz   r¶   )NNNNF)rÄ   r   r   r   rÍ   r  rÎ   r  rÏ   r  râ   rµ   r:   r  rz   ry   )	NNr_   r¼   NNNr   F)rG   r  rÄ   r   r   r   rÒ   r  rè   ry   ré   r?   rÍ   r  rÎ   r  rÏ   r  rÐ   ry   râ   rµ   r:   r  rz   z!tuple[float, float, float, float])Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r2   r8   r;   rD   rK   rN   rT   rX   r\   r‚   rŽ   r�   r†   rš   r    r£   rÀ   rÆ   rÄ   r  rç   rú   rù   r  r©   r3   r1   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ô +ð !Ø#Øð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óX'ð !ð Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð'}àð}ð ð}ð ð	}ðð}ð ð}ð ð}ð ð}ð ð}ð #ð}ð  ð!}ð" ð#}ð$ !ð%}ð& ð'}ð( ð)}ð* ð+}ð, 
ó-}ð~|àð|ð ð|ð
ð|ð ð|ð ð|ð ð|ð ð|ð #ð|ð ð|ð  ð!|ð" ð#|ð$  ð%|ð&
ó'|ðD !ð Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð'3ð* #'ñ+3àð3ð ð3ð ð	3ðð3ð ð3ð ð3ð ð3ð ð3ð #ð3ð  ð!3ð" ð#3ð$ !ð%3ð& ð'3ð*  ð+3ð, 
ó-3ðz Ø $Ø%)Ø#Ø$ðIð #'ñIàðIðð	Ið ðIð #ðIð ðIð ðIð  ðIð 
óIðL Ø!ØØØ $Ø%)Ø#ØØ$ð#0Rð& #'ñ'0Ràð0Rð ð0Rð
ð0Rð ð0Rð ð0Rð ð0Rð ð0Rð #ð0Rð ð0Rð  ð!0Rð" ð#0Rð&  ð'0Rð( 
+ó)0Rðv Ø!ØØØ $Ø%)Ø#ØØ$ð#>ð& #'ñ'>àð>ð ð>ð
ð>ð ð>ð ð>ð ð>ð ð>ð #ð>ð ð>ð  ð!>ð" ð#>ð&  ð'>ð( 
+ô)>r3   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)ÚgetattrrÖ   r   )r'   r#   s     r1   r—   r—   ã  s7   € ð#Ø%Œw�r˜9Ó% dÓ+Ð+øÜò #Ü˜˜TÓ"Ò"ð#ús   ‚ ”,«,c                ó^   — |�t        dd«       ddlm} | � |j                  | «      nd}||fS )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   r6   r   r—   )r'   Úhintsr   r)   s       r1   r   r   ô  s9   € ð ÐÜÐ% rÔ*Ýà"$ .ˆ?ˆ:�?‰?˜2Ô°d€DØ�ÐÐr3   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   )r    Ú_color_diffr$   Ú
IndexErrorÚsetÚadd)ÚimagerG   ÚvalueÚborderÚthreshÚpixelrq   rr   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtri   r-   s                   r1   Ú	floodfillr5    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 intrw   zn_sides should be an int > 2z$bounding_circle should be a sequencec              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr=   ©r>   rº   ry   ©rh   r…   s     r1   rk   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r=   r8  r9  s     r1   rk   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   ra   r   r`   )r·   re   rl   rm   rn   )r†   r   Úcentroids     €r1   Ú_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‘+ñð ó	ð
ð 	
r3   c                ó   •— ‰dg} ‰|| «      S ©Nr   r©   )rp   Ústart_pointr>  Úpolygon_radiuss     €€r1   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex°  s   ø€ Ø% qÐ)ˆÙ˜{¨EÓ2Ð2r3   c                óŒ   — g }d| z  }dd|z  z
  |z   }t        | «      D ]#  }|j                  |«       ||z  }|dkD  sŒ|dz  }Œ% |S )Nra   r§   g      à?)r}   rÓ   )rž   rŸ   r‡   r   Úcurrent_angleÚ_s         r1   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_angles´  se   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÜ�w“ò 	%ˆAØ�M‰M˜-Ô(Ø˜WÑ$ˆMØ˜sÓ"Ø Ñ$‘ð		%ð
 ˆr3   )r†   úlist[float]r   ry   rz   r  )rp   ry   rz   r  )rž   rº   rŸ   ry   rz   rH  )
r>   rº   rØ   r$   r|   rA   r~   r¸   r
   ry   )r�   rž   rŸ   r0   rC  rG  r‡   rp   r>  r=  rB  s           @@@r1   rœ   rœ   E  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r=   )Úabs)rh   r…   ÚfirstÚseconds     €€r1   rk   z_color_diff.<locals>.<genexpr>Ð  s#   øè ø€ ÒE¨QŒs�5˜‘8˜f Q™iÑ'×(ÑEùs   ƒ!)r>   rA   rü   r}   r~   )Úcolor1Úcolor2rL  rM  s     @@r1   r&  r&  Ç  sC   ù€ ô ! ¬Ô/‰F°f°Y€EÜ! &¬%Ô0‰V°v°i€FäÔE´%¼¸F»Ó2DÔEÓEÐEr3   r=   )r'   r  r#   r  rz   r   r  )r'   zImage.Image | Noner$  r  rz   z)tuple[ImageDraw2.Draw | None, ModuleType]r@  )r*  r  rG   ztuple[int, int]r+  úfloat | tuple[int, ...]r,  zfloat | tuple[int, ...] | Noner-  ry   rz   r¶   )r�   r  rž   rº   rŸ   ry   rz   zlist[tuple[float, float]])rN  rP  rO  rP  rz   ry   )'Ú
__future__r   re   rÚ   Úcollections.abcr   Útypesr   Útypingr   r   r   r	   r
   r6   r   r   Ú
_deprecater   Ú_typingr   r(   rR   r   r  ÚTYPE_CHECKINGr   r   ry   rA   rº   r?   Ú_Inkr   r—   r   r5  rœ   r&  r©   r3   r1   ú<module>rY     s2  ðö@ #ã Û Ý $Ý ß 5Õ 5ç Ý !Ý ð .3¯Z©Z×-?Ñ-?€Ð	*Ó ?à€Ùß'àˆU�E˜#˜s˜(‘O SÐ(Ñ)€ð÷cñ côL#ð$ >BðØðØ*:ðà.óð( .2Øð>Øð>àð>ð #ð>ð +ð	>ð
 ð>ð 
ó>ðB@Ø6ð@ØADð@ØPUð@àó@ðD	FØ#ð	FØ-Dð	Fà
ô	Fr3   