Ë
    ñEj‚“  ã                  óâ   — d dl mZ d dlZd dlZd dlZd dlmZmZ ddlm	Z	m
Z
 ddlmZ 	  G d„ d«      Zddd	„Z	 e	j                  j                   Zdd
„Zddd„Z	 	 dd„Zdd„Zy# e$ r dZY Œw xY w)é    )ÚannotationsN)ÚSequenceÚcasté   )ÚImageÚ
ImageColor)ÚCoordsc                  ó„  — e Zd ZdZddd„Z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œ	 	 	 d!d„Zd(d„Zd)d„Zd„ Z	 	 	 	 	 	 	 	 	 	 	 d*	 d&d„Z	 	 	 	 	 	 	 	 	 	 	 d*ddœ	 d&d„Z	 	 	 	 	 d+ddœd„Z	 	 	 	 	 	 	 	 	 d,ddœ	 d-d„Z	 	 	 	 	 	 	 	 	 d,ddœ	 d-d„Zy).Ú	ImageDrawNc                ó†  — |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        úP/var/www/html/peoplehubportal/venv/lib/python3.12/site-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__5   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                óh   — | 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   ©Ú	ImageFont)ÚfontÚ r+   Úload_default)r#   r+   s     r&   ÚgetfontzImageDraw.getfont_   s(   € ð$ �yŠyå#à!×.Ñ.Ó0ˆDŒIØ�y‰yÐr(   c                ó\   — |�ddl m} |j                  |«      }|S | j                  «       }|S )Nr   r*   )r-   r+   r.   r/   )r#   Ú	font_sizer+   r,   s       r&   Ú_getfontzImageDraw._getfontx   s4   € ØÐ Ý#à×)Ñ)¨)Ó4ˆDð ˆð —<‘<“>ˆDØˆr(   c                óÎ  — |€.|€,| 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   )r#   r    r"   s      r&   Ú_getinkzImageDraw._getink�   s  € Øˆ;˜4˜<Ø�yŠyØ—x‘x�ð  �DˆyÐð —h‘h�ð �DˆyÐð ˆÜ˜c¤3Ô'Ü$×-Ñ-¨c°4·9±9Ó=�CØ—<’<¬
°3¼¿¹Ô(GØŸ,™,×/Ñ/°°T·[±[ÓA�CØ—i‘i×(Ñ(¨Ó-�ØÐÜ˜d¤CÔ(Ü%×.Ñ.¨t°T·Y±YÓ?�DØ—<’<¬
°4¼¿¹Ô(HØŸ<™<×0Ñ0°°t·{±{ÓC�DØ—y‘y×)Ñ)¨$Ó/�Ø�DˆyÐr(   c                óp   — | j                  |«      \  }}|� | j                  j                  |||||«       yy)zDraw an arc.N)r:   r   Údraw_arc)r#   ÚxyÚstartÚendr"   Úwidthr    s          r&   ÚarczImageDraw.arc–   s8   € à—L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×Ñ˜r 5¨#¨s°EÕ:ð r(   c                ó¨   — |j                  «        | j                  |«      \  }}|€|}|�(| j                  j                  ||j                  |«       yy)zDraw a bitmap.N)r   r:   r   Údraw_bitmapr   )r#   r=   Úbitmapr"   r    s        r&   rD   zImageDraw.bitmapœ   sK   € à�‰ŒØ—L‘L Ó&‰	ˆˆTØˆ;ØˆCØˆ?Ø�I‰I×!Ñ! " f§i¡i°Õ5ð r(   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a chord.Nr   r   )r:   r   Ú
draw_chord©r#   r=   r>   r?   r"   Úoutliner@   r    s           r&   ÚchordzImageDraw.chord¥   sl   € à—L‘L ¨$Ó/‰	ˆˆTØÐØ�I‰I× Ñ   U¨C°°qÔ9Øˆ?˜s dš{¨u¸ªzØ�I‰I× Ñ   U¨C°°a¸Õ?ð 0:˜{ˆ?r(   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw an ellipse.Nr   r   )r:   r   Údraw_ellipse©r#   r=   r"   rH   r@   r    s         r&   ÚellipsezImageDraw.ellipse­   sd   € à—L‘L ¨$Ó/‰	ˆˆTØÐØ�I‰I×"Ñ" 2 t¨QÔ/Øˆ?˜s dš{¨u¸ªzØ�I‰I×"Ñ" 2 s¨A¨uÕ5ð 0:˜{ˆ?r(   c                óà  ‡— | j                  |«      d   }|��K| 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ˆ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�Œ0|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   rQ   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      r&   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>Õ   s9   è ø€ ò %á &  3ð °C¸!²G¤§¡¨C¤ÄÇÁÈ3ÃÕPñ%ùs   ‚?A)ÚtuplerW   ÚcosÚradiansÚsin)ÚcoordÚangleÚxÚyÚdistancer@   s        €r&   Ú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ð+ô%ó  ð r(   é´   rT   é   é   )r@   )r:   r   Ú
draw_linesr5   Úlistr^   r   r   ÚfloatÚrangeÚlenrW   ÚdegreesÚatan2ÚpiesliceÚline)r#   r=   r"   r@   Újointr    ÚpointsÚiÚpointr>   r?   Úanglesrg   ÚflippedÚcoordsÚ
gap_coordss      `            r&   rs   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ó 5=�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Ò-à ô
ð ˜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¸!˜	Ö<ñk5=ð %.Ðð ùòùós   Â-I%Ã9AI*c                óØ   — |j                  «        | j                  ||«      \  }}|�| j                  j                  ||d«       |�$||k7  r| j                  j                  ||d«       yyy)z(Experimental) Draw a shape.Nr   r   )Úcloser:   r   Údraw_outline)r#   Úshaper"   rH   r    s        r&   r   zImageDraw.shapeú   sc   € à�‰ŒØ—L‘L ¨$Ó/‰	ˆˆTØÐØ�I‰I×"Ñ" 5¨$°Ô2Øˆ?˜s dš{Ø�I‰I×"Ñ" 5¨#¨qÕ1ð  +ˆ?r(   c                óÎ   — | j                  ||«      \  }}|�| j                  j                  ||||d«       |�-||k7  r'|dk7  r!| j                  j                  ||||d|«       yyyy)zDraw a pieslice.Nr   r   )r:   r   Údraw_pieslicerG   s           r&   rr   zImageDraw.pieslice  sn   € ð —L‘L ¨$Ó/‰	ˆˆTØÐØ�I‰I×#Ñ# B¨¨s°D¸!Ô<Øˆ?˜s dš{¨u¸ªzØ�I‰I×#Ñ# B¨¨s°C¸¸EÕBð 0:˜{ˆ?r(   c                ój   — | j                  |«      \  }}|�| j                  j                  ||«       yy)z#Draw one or more individual pixels.N)r:   r   Údraw_points)r#   r=   r"   r    s       r&   rw   zImageDraw.point  s2   € à—L‘L Ó&‰	ˆˆTØˆ?Ø�I‰I×!Ñ! " cÕ*ð r(   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   rQ   )Úmask©r   r   )r:   r   Údraw_polygonr   r   ÚnewÚsizeÚcopyÚDrawÚpaster   )r#   r=   r"   rH   r@   r    r…   Úmask_inkÚfill_imr   Úink_imr   s               r&   ÚpolygonzImageDraw.polygon  s{  € à—L‘L ¨$Ó/‰	ˆˆTØÐØ�I‰I×"Ñ" 2 t¨QÔ/Ø‰?˜s d›{¨u¸«zØ˜Š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Õ?ð) %ð 0:˜{ˆ?r(   c                óF   — t        |||«      }| j                  ||||«       y)zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr�   )r#   Úbounding_circleÚn_sidesÚrotationr"   rH   r@   r=   s           r&   Úregular_polygonzImageDraw.regular_polygon1  s$   € ô /¨ÀÈÓRˆØ�‰�R˜˜w¨Õ.r(   c                óÆ   — | j                  ||«      \  }}|�| j                  j                  ||d«       |�+||k7  r%|dk7  r| j                  j                  ||d|«       yyyy)zDraw a rectangle.Nr   r   )r:   r   Údraw_rectanglerL   s         r&   Ú	rectanglezImageDraw.rectangle8  sd   € à—L‘L ¨$Ó/‰	ˆˆTØÐØ�I‰I×$Ñ$ R¨¨qÔ1Øˆ?˜s dš{¨u¸ªzØ�I‰I×$Ñ$ R¨¨a°Õ7ð 0:˜{ˆ?r(   )Ú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 ‰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)TTTTrQ   )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 )Nrh   rR   r   rT   é  c              3  ó2   •K  — | ]  \  }}‰|   r|–— Œ y ­wr4   © )rZ   rv   Úpartrš   s      €r&   r]   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>~  s&   øè ø€ ò á˜˜4ð ˜q’zô ñùs   ƒr   )r^   Ú	enumerater   r�   r<   )rr   Úpartsr    rš   Údr"   Úfull_xÚfull_yr    r#   r@   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r&   Údraw_cornersz1ImageDraw.rounded_rectangle.<locals>.draw_cornersn  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°d¸A°YÑ.>Ò@à&�D—I‘I×&Ñ&¨°°e°Ñ)<Ò>ñ	?r(   Trj   F©ÚreturnÚNone)r5   rl   r^   r   r   rm   r   ÚroundÚallrM   Úanyr™   r:   r   r˜   )r#   r=   Úradiusr"   rH   r@   rš   r%   Úrrª   ÚleftÚrightÚtopÚbottomr£   r¤   r¥   r    r¦   r§   r¨   r©   s   `  ` ``       @@@@@@@@r&   Ú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Ó;Ð;à�‰FˆØ—L‘L ¨$Ó/‰	ˆˆT÷ 	?÷  	?ð  	?ðD ÑÙ˜ÔáØ—	‘	×(Ñ(¨"¨b°1©f°q©j¸"¸bÀ1¹fÀq¹jÐ)IÈ4ÐQRÕSà—	‘	×(Ñ(¨"¨q©&°1©*°b¸"¸q¹&À1¹*ÀbÐ)IÈ4ÐQRÔSÙ¡&Ø˜B  Q¡¨Ð+�Ø˜1’:Ø˜“G˜q 1™uÑ$“GØ˜1’:Ø˜“G˜q 1™uÑ$“GØ—	‘	×(Ñ(¨¨t°QÔ7à˜a™  R¨Ð,�Ø˜1’:Ø˜!“H  A¡Ñ%“HØ˜1’:Ø˜!“H  A¡Ñ%“HØ—	‘	×(Ñ(¨°°aÔ8Ø‰?˜s d›{¨u¸«zÙ˜ÔáØ˜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ð ð# 0:˜{ˆ?r(   c                ó2   — t        |t        «      rdnd}||v S ©Nú
ó   
)r5   r6   ©r#   ÚtextÚsplit_characters      r&   Ú_multiline_checkzImageDraw._multiline_checkÅ  s   € Ü",¨T´3Ô"7™$¸Uˆà $Ð&Ð&r(   c                óL   — t        |t        «      rdnd}|j                  |«      S r¹   )r5   r6   Úsplitr¼   s      r&   Ú_multiline_splitzImageDraw._multiline_splitÊ  s!   € Ü",¨T´3Ô"7™$¸Uˆà�z‰z˜/Ó*Ð*r(   c                ó>   — | j                  dd||¬«      d   |z   |z   S )Nr†   ÚA)Ústroke_widthrj   )Útextbbox)r#   r,   ÚspacingrÅ   s       r&   Ú_multiline_spacingzImageDraw._multiline_spacingÏ  s0   € à�M‰M˜& # t¸,ˆMÓGÈÑJØñàñð	
r(   c                ó�  ‡ ‡‡‡‡‡‡	‡
‡‡‡— ‰r‰ j                   dvrd}t        |«      ‚‰€ ‰ j                  ‰j                  d«      «      Š‰ j	                  ‰«      r‰ j                  ‰‰|‰‰||‰‰	‰
||‰«      S ˆ 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 modesNr1   c                ó8   •— ‰j                  | «      \  }} |€| S |S r4   )r:   )r"   r    r#   s     €r&   ÚgetinkzImageDraw.text.<locals>.getink  s$   ø€ ØŸ™ TÓ*‰IˆC�Øˆ{Ø�ØˆJr(   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   rQ   )Ú	directionÚfeaturesÚlanguagerÅ   Úanchorr    r>   r   r>   rj   rv   )r!   rn   ÚappendÚintrW   ÚmodfÚgetmask2ÚAttributeErrorÚgetmaskÚ	TypeErrorÚgetbandÚstructÚpackÚfillbandr   rŒ   r‰   r   rC   )r    rÅ   Ústroke_offsetr   rb   r>   rv   r…   ÚoffsetÚcolorÚ	ink_alphard   re   rÒ   ÚargsrÏ   Úembedded_colorrÐ   r,   ÚkwargsrÑ   r#   r½   r=   s                €€€€€€€€€€€r&   Ú	draw_textz!ImageDraw.text.<locals>.draw_text  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rV   r«   )r   r   r2   Úgetr¿   Úmultiline_text)r#   r=   r½   r"   r,   rÒ   rÇ   ÚalignrÏ   rÐ   rÑ   rÅ   Ústroke_fillrã   râ   rä   r%   rÍ   rå   r    Ú
stroke_inks   ``` ``  ```  ```     r&   r½   zImageDraw.textÖ  sð   ÿú€ ñ& ˜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Õ!ñ ˜#•ð r(   )r1   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ÚlarQ   ú#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   ro   r2   rÂ   rÈ   Ú
textlengthrÓ   Úmaxr¡   r½   )r#   r=   r½   r"   r,   rÒ   rÇ   rè   rÏ   rÐ   rÑ   rÅ   ré   rã   r1   r%   ÚwidthsÚ	max_widthÚlinesÚline_spacingrs   Ú
line_widthrµ   Úidxr³   Úwidth_differences                             r&   rç   zImageDraw.multiline_textP  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"	 r(   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   r2   r!   Ú	getlength)
r#   r½   r,   rÏ   rÐ   rÑ   rã   r1   r%   r   s
             r&   rö   zImageDraw.textlength§  su   € ð × Ñ  Ô&Ø:ˆCÜ˜S“/Ð!Ù˜dŸi™i¨Ñ>ØGˆCÜ˜S“/Ð!àˆ<Ø—=‘= Ó+ˆDÙ'‰v¨T¯]©]ˆØ�~‰~˜d D¨)°X¸xÓHÐHr(   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   rQ   rj   )r   r   r2   r¿   Úmultiline_textbboxr!   Úgetbbox)r#   r=   r½   r,   rÒ   rÇ   rè   rÏ   rÐ   rÑ   rÅ   rã   r1   r%   r   Úbboxs                   r&   rÆ   zImageDraw.textbbox¿  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ÐQr(   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î   rQ   rï   r   rð   rñ   r   )rÏ   rÐ   rÑ   rã   rò   ró   r£   r²   r³   rô   r´   rõ   )rÏ   rÐ   rÑ   rÅ   rã   rj   )r   ro   r2   rÂ   rÈ   rö   rÓ   r÷   r¡   rÆ   Úmin)r#   r=   r½   r,   rÒ   rÇ   rè   rÏ   rÐ   rÑ   rÅ   rã   r1   r%   rø   rù   rú   rû   rs   rü   rµ   r  rý   r³   rþ   Ú	bbox_lines                             r&   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©Ð-Ð-Øˆr(   r4   )r   úImage.Imager   ú
str | Noner¬   r­   )r1   zfloat | None)r¬   ztuple[int | None, int | None])Nr   )r=   r	   r¬   r­   )r=   zSequence[int]r¬   r­   )NNr   )Nr   N©NNr«   )r   NNr   )r¬   Úbool)r¬   zlist[str | bytes])NNNrP   r³   NNNr   NF)NNNNF)	NNrP   r³   NNNr   F)r¬   ztuple[int, int, int, int])Ú__name__Ú
__module__Ú__qualname__r,   r'   r/   r2   r:   rA   rD   rI   rM   rs   r   rr   rw   r�   r–   r™   r·   r¿   rÂ   rÈ   r½   rç   rö   rÆ   r  rŸ   r(   r&   r   r   2   sÂ  „ Ø€Dô(òTó2ôô*;ô6ô@ô6ôC=ôJ2ð FGðCØðCà	óCô+ô@ð> TUð/à	ó/ô8ð DEðC8ØQUñC8ØðC8à	óC8óJ'ó
+ò

ð ØØØØØØØØØØðxð" 
ó#xð| ØØØØØØØØØØðU ð  ñ!U ð" 
ó#U ðt ØØØØðIð ôIð8 ØØØØØØØØð+Rð ñ+Rð 
#ó+Rðb ØØØØØØØØðfð ñfð 
#ôfr(   r   c                ó\   — 	 | j                  |«      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.
    )Úgetdrawr×   r   )r   r   s     r&   r‹   r‹   U  s2   € ð#Ø�z‰z˜$ÓÐøÜò #Ü˜˜TÓ"Ò"ð#ús   ‚ “+ª+c                ó|   — d}|rd|v r	 ddl m} |€ddl m} | r|j	                  | «      } | |fS # t        $ r Y Œ*w xY w)a  
    (Experimental) A more advanced 2D drawing interface for PIL images,
    based on the WCK interface.

    :param im: The image to draw in.
    :param hints: An optional list of hints.
    :returns: A (drawing context, drawing resource factory) tuple.
    NÚnicestr   )Ú_imagingagg)Ú
ImageDraw2)r-   r  ÚImportErrorr  r‹   )r   ÚhintsÚhandlers      r&   r  r  m  sT   € ð €GÙ�H Ñ%ð	Ý0ð €Ý+Ù	Ø�\‰\˜"ÓˆØˆwˆ;Ðøô ò 	Ùð	ús   Š/ ¯	;º;c                ó   — | 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Ï  
    (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)Úimager=   ÚvalueÚborderÚthreshÚpixelrd   re   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtr[   r"   s                   r&   Ú	floodfillr(  …  s}  € ð& �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;Ã&C8Ã7C8Ã;DÄDc                óh  ‡‡	‡
— t        |t        «      sd}t        |«      ‚|dk  rd}t        |«      ‚t        | t        t
        f«      sd}t        |«      ‚t        | «      dk(  r| �^ Š	Š
n!t        | «      dk(  r| \  Š	Š
nd}t        |«      ‚t        d„ g ‰	¢‰
‘­D «       «      sd}t        |«      ‚t        ‰	«      dk(  s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 tuple 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 intrj   zn_sides should be an int > 2z$bounding_circle should be a sequencerQ   z[bounding_circle should contain 2D coordinates and a radius (e.g. (x, y, r) or ((x, y), r) )c              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr4   )r5   rÔ   rm   )rZ   rv   s     r&   r]   z4_compute_regular_polygon_vertices.<locals>.<genexpr>ÿ  s   è ø€ ÒP¨qŒz˜!œc¤5˜\×*ÑPùs   ‚ "z0bounding_circle should only contain numeric datazBbounding_circle centre should contain 2D coordinates (e.g. (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   rR   r   rQ   )r®   rW   r_   r`   ra   )rw   rp   Úcentroids     €r&   Ú_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‘+ñð ó	ð
ð 	
r(   c                ó   •— ‰dg} ‰|| «      S ©Nr   rŸ   )rc   Ústart_pointr-  Úpolygon_radiuss     €€r&   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertex!  s   ø€ Ø% qÐ)ˆÙ˜{¨EÓ2Ð2r(   c                óŽ   — g }d| z  }dd|z  z
  |z   }t        d| «      D ]#  }|j                  |«       ||z  }|dkD  sŒ|dz  }Œ% |S )NrR   r�   g      à?r   )rn   rÓ   )r”   r•   rx   rp   Úcurrent_angleÚ_s         r&   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_angles%  sh   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÜ�q˜'Ó"ò 	%ˆAØ�M‰M˜-Ô(Ø˜WÑ$ˆMØ˜sÓ"Ø Ñ$‘ð		%ð
 ˆr(   )rw   úlist[float]rp   rm   r¬   útuple[int, int])rc   rm   r¬   r8  )r”   rÔ   r•   rm   r¬   r7  )	r5   rÔ   rÙ   r   rl   r^   ro   r¯   rm   )r“   r”   r•   r%   r2  r6  rx   rc   r-  r,  r1  s           @@@r&   r’   r’   ½  sJ  ú€ ôV �gœsÔ#Ø(ˆÜ˜‹nÐØ�‚{Ø,ˆÜ˜‹oÐô �o¬¬e }Ô5Ø4ˆÜ˜‹nÐä
ˆ?Ó˜qÒ Ø$3Ñ!ˆ‘>Ü	ˆ_Ó	 Ò	"Ø#2Ñ ˆ‘.ð<ð 	ô ˜‹oÐäÑPÐ4O°hÐ4OÀÑ4OÔPÔPØ@ˆÜ˜‹oÐäˆx‹=˜AÒØRˆÜ˜‹oÐà˜ÒØ4ˆÜ˜‹oÐô �h¤¤e Ô-Ø2ˆÜ˜‹oÐõ
ö 3ó
ñ ˜ (Ó+€Fð 9?Ö?¨uÑ# EÕ*Ò?Ð?ùÒ?s   ÄD/c           	     ó’   ‡ ‡— t        ‰t        «      r(t        ˆ ˆfd„t        dt	        ‰«      «      D «       «      S t        ‰ ‰z
  «      S )zJ
    Uses 1-norm distance to calculate difference between two values.
    c              3  óF   •K  — | ]  }t        ‰|   ‰|   z
  «      –— Œ y ­wr4   )Úabs)rZ   rv   Úcolor1Úcolor2s     €€r&   r]   z_color_diff.<locals>.<genexpr>=  s#   øè ø€ ÒM°!”3�v˜a‘y 6¨!¡9Ñ,×-ÑMùs   ƒ!r   )r5   r^   Úsumrn   ro   r;  )r<  r=  s   ``r&   r  r  8  s:   ù€ ô �&œ%Ô ÜÔM´u¸QÄÀFÃÓ7LÔMÓMÐMä�6˜F‘?Ó#Ð#r(   r4   )r   r	  r¬   r   r
  r/  )r  r  r¬   r­   )r¬   zlist[tuple[float, float]])r=  zfloat | tuple[int, ...]r¬   rm   )Ú
__future__r   rW   r8   rÛ   Útypingr   r   r-   r   r   Ú_typingr	   r   r‹   r   rH   ÚOutliner×   r  r(  r’   r  rŸ   r(   r&   ú<module>rC     s�   ðõ@ #ã Û Û ß !ç Ý ð÷`ñ `ôF#ð$Ø�j‰j× Ñ €Gó
ô05ðpx@àóx@ôv$øð_ ò Ø‚Gðús   ºA$ Á$A.Á-A.