Ë
    D·jj¡  ã                  óŒ  — U d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
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 d	ed
<   	 ej0                  j2                  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# e$ r dZY Œdw xY w)é    )ÚannotationsN)Ú
ModuleType)ÚTYPE_CHECKINGÚAnyStrÚCallableÚListÚSequenceÚTupleÚUnionÚcasté   )ÚImageÚ
ImageColor)Ú	deprecate)ÚCoordsz(Callable[[], Image.core._Outline] | NoneÚOutline)Ú
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	 	 	 	 d0	 	 	 	 	 	 	 	 	 	 	 	 	 d1d„Z	 	 	 d'	 	 	 	 	 	 	 	 	 d)d„Z	 	 	 	 d0ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 d2d„Zd3d„Zd4d„Zd„ Z	 	 	 	 	 	 	 	 	 	 	 d5	 	 	 	 	 	 	 d6d„Z	 	 	 	 	 	 	 	 	 	 	 d5d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        ú[/var/www/html/ai-video-generator/backend/venv/lib/python3.12/site-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__E   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)r0   r   s     r3   ÚgetfontzImageDraw.getfonto   s*   € ð( �yŠyå#à.˜	×.Ñ.Ó0ˆDŒIØ�y‰yÐr5   c                óV   — |�ddl m}  |j                  |«      S | j                  «       S )Nr   r7   )r8   r   r9   r:   )r0   Ú	font_sizer   s      r3   Ú_getfontzImageDraw._getfontŠ   s,   € ð Ð Ý#à)�9×)Ñ)¨)Ó4Ð4à—<‘<“>Ð!r5   c                óÖ  — d }d }|€.|€,| j                   r| j                  }||fS | j                  }||fS |�—t        |t        «      r t	        j
                  || j                  «      }| j                  r@t        |t        j                  «      s&| j                  j                  || j                  «      }| j                  j                  |«      }|�—t        |t        «      r t	        j
                  || j                  «      }| j                  r@t        |t        j                  «      s&| j                  j                  || j                  «      }| j                  j                  |«      }||fS ©N)r/   r-   Ú
isinstanceÚstrr   Úgetcolorr%   r'   ÚnumbersÚNumberr(   r+   r,   )r0   r-   r/   Ú
result_inkÚresult_fills        r3   Ú_getinkzImageDraw._getink”   s(  € ð ˆ
ØˆØˆ;˜4˜<Ø�yŠyØ"Ÿh™h�ð  ˜;Ð&Ð&ð "ŸX™X�
ð ˜;Ð&Ð&ð ˆÜ˜c¤3Ô'Ü$×-Ñ-¨c°4·9±9Ó=�CØ—<’<¬
°3¼¿¹Ô(GØŸ,™,×/Ñ/°°T·[±[ÓA�CØ!ŸY™Y×/Ñ/°Ó4�
ØÐÜ˜d¤CÔ(Ü%×.Ñ.¨t°T·Y±YÓ?�DØ—<’<¬
°4¼¿¹Ô(HØŸ<™<×0Ñ0°°t·{±{ÓC�DØ"Ÿi™i×0Ñ0°Ó6�Ø˜;Ð&Ð&r5   c                óp   — | j                  |«      \  }}|� | j                  j                  |||||«       yy)zDraw an arc.N)rG   r+   Údraw_arc)r0   ÚxyÚstartÚendr/   Úwidthr-   s          r3   ÚarczImageDraw.arc­   s:   € ð —L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×Ñ˜r 5¨#¨s°EÕ:ð r5   c                ó¨   — |j                  «        | j                  |«      \  }}|€|}|�(| j                  j                  ||j                  |«       yy)zDraw a bitmap.N)r"   rG   r+   Údraw_bitmapr)   )r0   rJ   Úbitmapr/   r-   s        r3   rQ   zImageDraw.bitmapº   sM   € ð 	�‰ŒØ—L‘L Ó&‰	ˆˆTØˆ;ØˆCØˆ?Ø�I‰I×!Ñ! " f§i¡i°Õ5ð r5   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a chord.Nr   r   )rG   r+   Ú
draw_chord©	r0   rJ   rK   rL   r/   ÚoutlinerM   r-   Úfill_inks	            r3   ÚchordzImageDraw.chordÅ   sn   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I× Ñ   U¨C°¸1Ô=Øˆ?˜s hš°5¸A²:Ø�I‰I× Ñ   U¨C°°a¸Õ?ð 4>˜ˆ?r5   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw an ellipse.Nr   r   )rG   r+   Údraw_ellipse©r0   rJ   r/   rU   rM   r-   rV   s          r3   Ú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>˜ˆ?r5   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)r[   )r0   rJ   Úradiusr/   rU   rM   Ú
ellipse_xys          r3   ÚcirclezImageDraw.circleã   sD   € ð ˜‘e˜f‘n b¨¡e¨f¡n°b¸±e¸f±nÀbÈÁeÈfÁnÐUˆ
Ø�‰�Z  w°Õ6r5   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   rc   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      r3   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s9   è ø€ ò %á &  3ð °C¸!²G¤§¡¨C¤ÄÇÁÈ3ÃÕPñ%ùs   ‚?A)Útupleri   ÚcosÚradiansÚsin)ÚcoordÚangleÚxÚyÚdistancerM   s        €r3   Ú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ð+ô%ó  ð r5   é´   rf   é   é   )rM   )rt   úSequence[float]ru   ÚfloatÚreturnztuple[float, ...])rG   r+   Ú
draw_linesr@   Úlistrp   r   r	   r~   ÚrangeÚlenri   ÚdegreesÚatan2ÚpiesliceÚline)r0   rJ   r/   rM   Újointr-   ÚpointsÚiÚpointrK   rL   Úanglesry   ÚflippedÚcoordsÚ
gap_coordss      `            r3   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   )ÚcloserG   r+   Údraw_outline)r0   Úshaper/   rU   r-   rV   s         r3   r“   zImageDraw.shape<  se   € ð 	�‰ŒØŸ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×"Ñ" 5¨(°AÔ6Øˆ?˜s hšØ�I‰I×"Ñ" 5¨#¨qÕ1ð  /ˆ?r5   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a pieslice.Nr   r   )rG   r+   Údraw_pieslicerT   s	            r3   r†   zImageDraw.piesliceJ  sn   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×#Ñ# B¨¨s°H¸aÔ@Øˆ?˜s hš°5¸A²:Ø�I‰I×#Ñ# B¨¨s°C¸¸EÕBð 4>˜ˆ?r5   c                ój   — | j                  |«      \  }}|�| j                  j                  ||«       yy)z#Draw one or more individual pixels.N)rG   r+   Údraw_points)r0   rJ   r/   r-   s       r3   r‹   zImageDraw.pointZ  s2   € à—L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×!Ñ! " cÕ*ð r5   c                ó¾  — | j                  ||«      \  }}|�| j                  j                  ||d«       |��¦||k7  �rŸ|dk7  �r˜|dk(  r| j                  j                  ||d|«       y| j                  ��ft	        j
                  d| j                  j                  «      }| j                  d«      d   }|j                  «       }	t        |	«      }
|
j                  j                  ||d«       |j                  «       }t        |«      }
|dz  dz
  }|
j                  j                  ||d|«       |j                  ||	¬«       t	        j
                  | j                  | j                  j                  «      }t        |«      }
|
j                  j                  ||d|«       | j                  j                  |j                  d|j                  z   |j                  «       yyyyy)zDraw a polygon.Nr   r   r    rc   )Úmask©r   r   )rG   r+   Údraw_polygonr)   r   ÚnewÚsizeÚcopyÚDrawÚpaster%   )r0   rJ   r/   rU   rM   r-   rV   r™   Úmask_inkÚfill_imr+   Úink_imr)   s                r3   Ú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Ñ-�àŸ)™)›+�Ü˜G“}�Ø—	‘	×&Ñ& r¨8°QÔ7àŸ™›�Ü˜F“|�Ø ™	 A™�Ø—	‘	×&Ñ& r¨8°Q¸Ô>à—
‘
˜6¨�
Ô0ä—Y‘Y˜tŸy™y¨$¯'©'¯,©,Ó7�Ü˜B“x�Ø—	‘	×&Ñ& r¨3°°5Ô9Ø—‘—‘˜bŸe™e V¨b¯g©gÑ%5°t·w±wÕ?ð) %ð 4>˜ˆ?r5   c                óF   — t        |||«      }| j                  ||||«       y)zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr¤   )r0   Úbounding_circleÚn_sidesÚrotationr/   rU   rM   rJ   s           r3   Úregular_polygonzImageDraw.regular_polygon„  s$   € ô /¨ÀÈÓRˆØ�‰�R˜˜w¨Õ.r5   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw a rectangle.Nr   r   )rG   r+   Údraw_rectanglerZ   s          r3   Ú	rectanglezImageDraw.rectangle‘  sf   € ð Ÿ™ W¨dÓ3‰ˆˆXØÐØ�I‰I×$Ñ$ R¨°1Ô5Øˆ?˜s hš°5¸A²:Ø�I‰I×$Ñ$ R¨¨a°Õ7ð 4>˜ˆ?r5   )Ú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-‰ 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)TTTTrc   )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 )Nrz   rd   r   rf   é  c              3  ó2   •K  — | ]  \  }}‰|   r|–— Œ y ­wr?   © )rl   rŠ   Úpartr®   s      €r3   ro   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>ä  s&   øè ø€ ò á˜˜4ð ˜q’zô ñùs   ƒr   )rp   Ú	enumerater+   r•   rI   )r†   Úpartsr´   r®   ÚdrV   Úfull_xÚfull_yr-   r0   rM   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r3   Ú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°Ñ)<Ò>ñ	?r5   Tr|   F)r†   Úboolr   ÚNone)r@   r�   rp   r   r	   r~   r&   ÚroundÚallr[   Úanyr­   ÚintrG   r+   r¬   )r0   rJ   r]   r/   rU   rM   r®   r2   Úrr¾   ÚleftÚrightÚtopÚbottomr·   rV   r¸   r¹   r-   rº   r»   r¼   r½   s   `    ``       @@@@@@@@@r3   Úrounded_rectanglezImageDraw.rounded_rectangleŸ  s?  ÿû€ ô �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à—	‘	×(Ñ(¨"¨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>˜ˆ?r5   c                ó2   — t        |t        «      rdnd}||v S ©Nú
ó   
)r@   rA   )r0   ÚtextÚsplit_characters      r3   Ú_multiline_checkzImageDraw._multiline_check+  s   € Ü",¨T´3Ô"7™$¸Uˆà $Ð&Ð&r5   c                óP   — |j                  t        |t        «      rd«      S d«      S rÌ   )Úsplitr@   rA   )r0   rÏ   s     r3   Ú_multiline_splitzImageDraw._multiline_split0  s"   € Ø�z‰z¤*¨T´3Ô"7˜$ÓCÐC¸UÓCÐCr5   c                ó>   — | j                  dd||¬«      d   |z   |z   S )Nrš   ÚA)Ústroke_widthr|   )Útextbbox)r0   r   Úspacingr×   s       r3   Ú_multiline_spacingzImageDraw._multiline_spacing3  s0   € à�M‰M˜& # t¸,ˆMÓGÈÑJØñàñð	
r5   c                ó’  ‡ ‡‡‡‡‡‡	‡
‡‡‡— ‰r‰ j                   dvrd}t        |«      ‚‰€ ‰ j                  ‰j                  d«      «      Š‰ j	                  ‰«      r‰ j                  ‰‰|‰‰||‰‰	‰
||‰«      S dˆ fd„}d	d
ˆˆˆˆˆ	ˆˆˆ
ˆ ˆˆfd„} ||«      }|�.d}|r|� ||«      n|}|� |||«        ||d«       y ||«       yy)z
Draw text.©r   r   ú3Embedded color supported only in RGB and RGBA modesNr<   c                ó@   •— ‰j                  | «      \  }}|€|€J ‚|S |S r?   )rG   )r/   r-   rV   r0   s      €r3   ÚgetinkzImageDraw.text.<locals>.getinkj  s0   ø€ Ø ŸL™L¨Ó.‰MˆC�Øˆ{ØÐ+Ð+Ð+Ø�ØˆJr5   r   c                ó’  •— ‰j                   }|dk(  r‰rd}g }g }t        d«      D ]I  }|j                  t        ‰|   «      «       |j                  t	        j
                  ‰|   «      d   «       ŒK 	  ‰j                  ‰|g‰¢­‰‰‰|‰| |dœ‰¤Ž\  }}|d   |d   z   |d   |d   z   g}|r|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   rc   )Ú	directionÚfeaturesÚlanguager×   Úanchorr-   rK   r   rK   r|   rŠ   )r.   r‚   ÚappendrÄ   ri   ÚmodfÚgetmask2ÚAttributeErrorÚgetmaskÚ	TypeErrorÚgetbandÚstructÚpackÚfillbandr)   r    r�   r+   rP   )r-   r×   Ústroke_offsetr%   rt   rK   rŠ   r™   ÚoffsetÚcolorÚ	ink_alpharv   rw   rä   Úargsrá   Úembedded_colorrâ   r   Úkwargsrã   r0   rÏ   rJ   s                €€€€€€€€€€€r3   Ú	draw_textz!ImageDraw.text.<locals>.draw_textq  s,  ø€ Ø—=‘=ˆDØ˜qÒ ¡^Ø�ØˆEØˆEÜ˜1“Xò 2�Ø—‘œS  A¡›ZÔ(Ø—‘œTŸY™Y r¨!¡uÓ-¨aÑ0Õ1ð2ð.Ø,˜tŸ}™}ØØð ð ñ ð (Ø%Ø%Ø!-Ø!ØØñ ð ñ ‘��fð ˜q™ F¨1¡IÑ-¨u°Q©x¸&À¹)Ñ/CÐD�ñ$ Ø˜q™ M°!Ñ$4Ñ4°e¸A±hÀÈqÑAQÑ6QÐR�Ø�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   Á38E8 Å8	GÆF"Æ!GÆ"F?Æ<GÆ>F?Æ?GÇG)r/   ú_Ink | Noner   rÄ   rh   )r   rÀ   )r%   r&   r=   ÚgetrÑ   Úmultiline_text)r0   rJ   rÏ   r/   r   rä   rÙ   Úalignrá   râ   rã   r×   Ústroke_fillrô   ró   rõ   r2   rß   rö   r-   Ú
stroke_inks   ``` ``  ```  ```     r3   rÏ   zImageDraw.text:  sð   ÿú€ ñ0 ˜dŸi™i¨Ñ>ØGˆCÜ˜S“/Ð!àˆ<Ø—=‘= §¡¨KÓ!8Ó9ˆDà× Ñ  Ô&Ø×&Ñ&ØØØØØØØØØØØØØóð õ 	÷7	8÷ 7	8ð 7	8ñr �T‹lˆØˆ?ØˆJÙØ4?Ð4K™V KÔ0ÐQT�
àÐ%á˜* lÔ3ñ ˜#˜qÕ!ñ ˜#•ð r5   )r<   c               ó  — |dk(  rd}t        |«      ‚|€d}n/t        |«      dk7  rd}t        |«      ‚|d   dv rd}t        |«      ‚|€| j                  |«      }g }d	}| j                  |«      }| j	                  |||«      }|D ]5  }| j                  ||||	|
¬
«      }|j                  |«       t        ||«      }Œ7 |d   }|d   dk(  r|t        |«      dz
  |z  dz  z  }n|d   dk(  r|t        |«      dz
  |z  z  }t        |«      D ]  \  }}|d	   }|||   z
  }|d	   dk(  r	||dz  z  }n|d	   dk(  r||z  }|dk(  rn&|dk(  r	||dz  z  }n|dk(  r||z  }nd}t        |«      ‚| j                  ||f||||||	|
|||¬«       ||z  }Œ� y )NÚttbú/ttb direction is unsupported for multiline textÚlarc   ú#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   rJ   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ù   zImageDraw.multiline_textº  s'  € ð. ˜ÒØCˆCÜ˜S“/Ð!àˆ>Ø‰FÜ�‹[˜AÒØ7ˆCÜ˜S“/Ð!Ø�A‰Y˜$ÑØ;ˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDàˆØˆ	Ø×%Ñ% dÓ+ˆØ×.Ñ.¨t°W¸lÓKˆØò 	3ˆDØŸ™Ø�d i¸(ÈXð )ó ˆJð �M‰M˜*Ô%Ü˜I zÓ2‰Ið	3ð �‰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"	 r5   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)
r0   rÏ   r   rá   râ   rã   rô   r<   r2   r%   s
             r3   r  zImageDraw.textlength  su   € ð" × Ñ  Ô&Ø:ˆCÜ˜S“/Ð!Ù˜dŸi™i¨Ñ>ØGˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDÙ'‰v¨T¯]©]ˆØ�~‰~˜d D¨)°X¸xÓHÐHr5   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   rc   r|   )r%   r&   r=   rÑ   Úmultiline_textbboxr.   Úgetbbox)r0   rJ   rÏ   r   rä   rÙ   rú   rá   râ   rã   r×   rô   r<   r2   r%   Úbboxs                   r3   rØ   zImageDraw.textbbox3  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ÐQr5   c               óØ  — |dk(  rd}t        |«      ‚|€d}n/t        |«      dk7  rd}t        |«      ‚|d   dv rd}t        |«      ‚|€| j                  |«      }g }d	}| j                  |«      }| j	                  |||
«      }|D ]6  }| j                  |||||	|¬
«      }|j                  |«       t        ||«      }Œ8 |d   }|d   dk(  r|t        |«      dz
  |z  dz  z  }n|d   dk(  r|t        |«      dz
  |z  z  }d }t        |«      D ]È  \  }}|d	   }|||   z
  }|d	   dk(  r	||dz  z  }n|d	   dk(  r||z  }|dk(  rn&|dk(  r	||dz  z  }n|dk(  r||z  }nd}t        |«      ‚| j                  ||f||||||	|
|¬«	      }|€|}nFt        |d	   |d	   «      t        |d   |d   «      t        |d   |d   «      t        |d   |d   «      f}||z  }ŒÊ |€|d	   |d   |d	   |d   fS |S )Nrþ   rÿ   r   rc   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   rJ   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  zImageDraw.multiline_textbbox`  s¸  € ð  ˜ÒØCˆCÜ˜S“/Ð!àˆ>Ø‰FÜ�‹[˜AÒØ7ˆCÜ˜S“/Ð!Ø�A‰Y˜$ÑØ;ˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDàˆØˆ	Ø×%Ñ% dÓ+ˆØ×.Ñ.¨t°W¸lÓKˆØò 
	3ˆDØŸ™ØØØ#Ø!Ø!Ø-ð )ó ˆJð �M‰M˜*Ô%Ü˜I zÓ2‰Ið
	3ð �‰eˆØ�!‰9˜ÒØ”C˜“J ‘N lÑ2°SÑ8Ñ8‰CØ�A‰Y˜#ÒØ”C˜“J ‘N lÑ2Ñ2ˆCà15ˆä" 5Ó)ò *	 ‰IˆC�Ø�a‘5ˆDØ(¨6°#©;Ñ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©Ð-Ð-Øˆr5   r?   )r)   úImage.Imager%   ú
str | Noner   rÀ   )r   úGImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont)r<   zfloat | Noner   r  )r-   r÷   r/   r÷   r   ztuple[int | None, int | None])Nr   )rJ   r   rK   r~   rL   r~   r/   r÷   rM   rÄ   r   rÀ   )rJ   zSequence[int]rQ   r  r/   r÷   r   rÀ   )NNr   )rJ   r   rK   r~   rL   r~   r/   r÷   rU   r÷   rM   rÄ   r   rÀ   )
rJ   r   r/   r÷   rU   r÷   rM   rÄ   r   rÀ   )rJ   r}   r]   r~   r/   r÷   rU   r÷   rM   rÄ   r   rÀ   )Nr   N)
rJ   r   r/   r÷   rM   rÄ   rˆ   r  r   rÀ   ©NN)r“   zImage.core._Outliner/   r÷   rU   r÷   r   rÀ   )rJ   r   r/   r÷   r   rÀ   )r   NNr   )r§   ú!Sequence[Sequence[float] | float]r¨   rÄ   r©   r~   r/   r÷   rU   r÷   rM   rÄ   r   rÀ   )rJ   r   r]   r~   r/   r÷   rU   r÷   rM   rÄ   r®   z$tuple[bool, bool, bool, bool] | Noner   rÀ   )rÏ   r   r   r¿   )rÏ   r   r   zlist[AnyStr])NNNrb   rÆ   NNNr   NF)rJ   útuple[float, float]rÏ   rA   r   r   r   rÀ   )NNNNF)rÏ   rA   r   r   r   r~   )	NNrb   rÆ   NNNr   F)r   ztuple[int, int, int, int])Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r4   r:   r=   rG   rN   rQ   rW   r[   r_   r‡   r“   r†   r‹   r¤   rª   r­   rÊ   rÑ   rÔ   rÚ   rÏ   rù   r  rØ   r  r³   r5   r3   r   r   @   sW  … ð 	ð 	Ø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ò
ð ð ØØØØØØØØØð'~àð~ð ð~ðð~ð, 
ó-~ðH ð ØØØØØØØØØð'Z ð* ñ+Z àðZ ð ðZ ððZ ð, 
ó-Z ðH ØØØØðIð ñIàðIðð	Ið 
óIðB ØØØØØØØØð+Rð ñ+Rð 
#ó+Rðb ØØØØØØØØðfð ñfð 
#ôfr5   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     r3   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   r8   r   rŸ   )r)   Úhintsr   r+   s       r3   r%  r%  Ú  s9   € ð ÐÜÐ% rÔ*Ýà"$ .ˆ?ˆ:�?‰?˜2Ô°d€DØ�ÐÐr5   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)ÚimagerJ   ÚvalueÚborderÚthreshÚpixelrv   rw   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtrm   r/   s                   r3   Ú	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 intr|   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Ä   r~   ©rl   rŠ   s     r3   ro   z4_compute_regular_polygon_vertices.<locals>.<genexpr>c  s   è ø€ ÒH°1”:˜a¤#¤u ×.ÑHùó   ‚ "z0bounding_circle should only contain numeric datarc   r   c              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr?   r=  r>  s     r3   ro   z4_compute_regular_polygon_vertices.<locals>.<genexpr>i  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   rd   r   rc   )rÁ   ri   rq   rr   rs   )r‹   r„   Úcentroids     €r3   Ú_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‘+ñð ó	ð
ð 	
r5   c                ó   •— ‰dg} ‰|| «      S ©Nr   r³   )ru   Ústart_pointrC  Úpolygon_radiuss     €€r3   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex–  s   ø€ Ø% qÐ)ˆÙ˜{¨EÓ2Ð2r5   c                óŽ   — g }d| z  }dd|z  z
  |z   }t        d| «      D ]#  }|j                  |«       ||z  }|dkD  sŒ|dz  }Œ% |S )Nrd   r±   g      à?r   )r‚   rå   )r¨   r©   rŒ   r„   Úcurrent_angleÚ_s         r3   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_anglesš  sh   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÜ�q˜'Ó"ò 	%ˆAØ�M‰M˜-Ô(Ø˜WÑ$ˆMØ˜sÓ"Ø Ñ$‘ð		%ð
 ˆr5   )r‹   úlist[float]r„   r~   r   r  )ru   r~   r   r  )r¨   rÄ   r©   r~   r   rM  )r@   rÄ   rê   r&   r�   rp   rƒ   rÂ   r   r   r~   )r§   r¨   r©   r2   rH  rL  rŒ   ru   rC  rB  rG  s           @@@r3   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        dt	        ‰«      «      D «       «      S )zJ
    Uses 1-norm distance to calculate difference between two values.
    c              3  óF   •K  — | ]  }t        ‰|   ‰|   z
  «      –— Œ y ­wr?   )Úabs)rl   rŠ   ÚfirstÚseconds     €€r3   ro   z_color_diff.<locals>.<genexpr>¶  s#   øè ø€ ÒH¨QŒs�5˜‘8˜f Q™iÑ'×(ÑHùs   ƒ!r   )r@   rp   Úsumr‚   rƒ   )Úcolor1Úcolor2rQ  rR  s     @@r3   r+  r+  ­  sE   ù€ ô ! ¬Ô/‰F°f°Y€EÜ! &¬%Ô0‰V°v°i€FäÔH´%¸¼3¸v»;Ó2GÔHÓHÐHr5   r?   )r)   r  r%   r  r   r   r  )r)   zImage.Image | Noner)  zlist[str] | Noner   z)tuple[ImageDraw2.Draw | None, ModuleType]rE  )r/  r  rJ   ztuple[int, int]r0  úfloat | tuple[int, ...]r1  zfloat | tuple[int, ...] | Noner2  r~   r   rÀ   )r§   r  r¨   rÄ   r©   r~   r   zlist[tuple[float, float]])rT  rV  rU  rV  r   r~   )(Ú
__future__r   ri   rC   rì   Útypesr   Útypingr   r   r   r   r	   r
   r   r   r8   r   r   Ú
_deprecater   Ú_typingr   r#  r*   rU   r   rè   r   r   r~   rÄ   rA   Ú_Inkr   rŸ   r%  r:  r¦   r+  r³   r5   r3   ú<module>r]     sN  ðö@ #ã Û Û Ý ß V× VÓ Vç Ý !Ý ð 
2Ó 1ðØ�j‰j× Ñ €Gñ ß'àˆU�E˜#˜s˜(‘O SÐ(Ñ)€ð÷Fñ FôR#ð$ >BðØðØ*:ðà.óð( .2Øð>Øð>àð>ð #ð>ð +ð	>ð
 ð>ð 
ó>ðB@Ø6ð@ØADð@ØPUð@àó@ðD	IØ#ð	IØ-Dð	Ià
ô	Iøð{# ò Ø‚Gðús   ÁB9 Â9CÃC