§
    þÜÒj:Ž  ã                  ó  — U d dl mZ ddh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 dZer$d d	lmZmZ d d
lmZ d dlmZmZ ddlmZ ddlmZmZ ej        j        Zded<   	  G d„ d¦  «        Zd0d1d„Zd0d2d„Z	 	 d3d4d%„Zd5d,„Z d6d/„Z!dS )7é    )ÚannotationsÚmathÚstructN)Úcasté   )ÚImageÚ
ImageColorÚ	ImageFontÚ	ImageTextF)ÚCallableÚSequence)Ú
ModuleType)ÚAnyÚAnyStr©Ú
ImageDraw2)ÚCoordsÚ_Inkz!Callable[[], Image.core._Outline]ÚOutlinec                  ó¼  — e Zd ZU dZded<   dYdZd
„Zd[d„Zd\d„Z	 dYd]d„Z	 	 d^d_d„Z		 dYd`d „Z
	 	 	 dadbd"„Z	 	 	 dadcd#„Z	 	 	 daddd&„Zded(„Z	 	 	 dfdgd*„Z	 	 dhdid-„Z	 	 	 dadbd.„ZdYdjd/„Z	 	 	 dadcd0„Z	 	 	 	 dkdld6„Z	 	 	 dadcd7„Z	 	 	 	 dkdd8œdmd;„Z	 	 	 	 	 	 	 	 	 	 	 dndodQ„Z	 	 	 	 	 	 	 	 	 	 	 dnddRœdpdT„Z	 	 	 	 	 dqddRœdrdU„Z	 	 	 	 	 	 	 	 	 dsddRœdtdW„Z	 	 	 	 	 	 	 	 	 dsddRœdtdX„ZdS )uÚ	ImageDrawNúImageFont.BaseImageFont | NoneÚfontÚimúImage.ImageÚmodeú
str | NoneÚreturnÚNonec                ó  — |                      ¦   «          d}|€|j        }||j        k    r%|dk    r|j        dk    rd}nd}t          |¦  «        ‚|dk    r|j        | _        nd| _        || _        |j        | _        t          j                             | j        |¦  «        | _        || _        |dv r | j         	                    d¦  «        | _
        n| j         	                    d	¦  «        | _
        |d
v rd| _        nd| _        d| _        dS )a˜  
        Create a drawing instance.

        :param im: The image to draw in.
        :param mode: Optional mode to use for color values.  For RGB
           images, this argument can be RGB or RGBA (to blend the
           drawing into the image).  For all other modes, this argument
           must be the same as the image mode.  If omitted, the mode
           defaults to the mode of the image.
        r   NÚRGBAÚRGBr   zmode mismatchÚP)ÚIÚFéÿÿÿÿ)Ú1r#   r$   r%   r'   ÚLF)Ú_ensure_mutabler   Ú
ValueErrorÚpaletteÚ_imager   r   ÚcoreÚdrawÚdraw_inkÚinkÚfontmodeÚfill)Úselfr   r   ÚblendÚmsgs        úYC:\Users\johnn\AppData\Local\Programs\Python\Python311\Lib\site-packages\PIL/ImageDraw.pyÚ__init__zImageDraw.__init__A   s  € ð 	×ÒÑÔÐØˆØˆ<Ø”7ˆDØ�2”7Š?ˆ?Ø�vŠ~ˆ~ "¤'¨UÒ"2Ð"2Ø��à%�Ý  ‘o”oÐ%Ø�3Š;ˆ;Øœ:ˆDŒLˆLàˆDŒLØˆŒØ”%ˆŒÝ”J—O’O D¤G¨UÑ3Ô3ˆŒ	ØˆŒ	Ø�:ÐÐØ”y×)Ò)¨!Ñ,Ô,ˆDŒHˆHà”y×)Ò)¨"Ñ-Ô-ˆDŒHØÐ'Ð'Ð'àˆDŒMˆMàˆDŒMØˆŒ	ˆ	ˆ	ó    úImageFont.BaseImageFontc                óN   — | j         st          j        ¦   «         | _         | j         S )a=  
        Get the current default font.

        To set the default font for this ImageDraw instance::

            from PIL import ImageDraw, ImageFont
            draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

        To set the default font for all future ImageDraw instances::

            from PIL import ImageDraw, ImageFont
            ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf")

        If the current default font is ``None``,
        it is initialized with ``ImageFont.load_default()``.

        :returns: An image font.)r   r
   Úload_default)r3   s    r6   ÚgetfontzImageDraw.getfonti   s&   € ð( Œyð 	1å!Ô.Ñ0Ô0ˆDŒIØŒyÐr8   Ú	font_sizeúfloat | Nonec                óV   — |�t          j        |¦  «        S |                      ¦   «         S ©N)r
   r;   r<   )r3   r=   s     r6   Ú_getfontzImageDraw._getfont‚   s'   € ØÐ ÝÔ)¨)Ñ4Ô4Ð4à—<’<‘>”>Ð!r8   r0   ú_Ink | Noner2   útuple[int | None, int | None]c                óh  — d }d }|€|€| j         r	| j        }�n| j        }�n|�…t          |t          ¦  «        rt	          j        || j        ¦  «        }| j        r5t          |t          ¦  «        r | j                             || j	        ¦  «        }| j
                             |¦  «        }|�…t          |t          ¦  «        rt	          j        || j        ¦  «        }| j        r5t          |t          ¦  «        r | j                             || j	        ¦  «        }| j
                             |¦  «        }||fS r@   )r2   r0   Ú
isinstanceÚstrr	   Úgetcolorr   r+   Útupler,   r.   r/   )r3   r0   r2   Ú
result_inkÚresult_fills        r6   Ú_getinkzImageDraw._getinkˆ   s,  € ð ˆ
ØˆØˆ;˜4˜<ØŒyð &Ø"œh�‘à!œX�
‘
àˆÝ˜c¥3Ñ'Ô'ð >Ý$Ô-¨c°4´9Ñ=Ô=�CØ”<ð B¥J¨sµEÑ$:Ô$:ð BØœ,×/Ò/°°T´[ÑAÔA�CØ!œY×/Ò/°Ñ4Ô4�
ØÐÝ˜d¥CÑ(Ô(ð @Ý%Ô.¨t°T´YÑ?Ô?�DØ”<ð D¥J¨tµUÑ$;Ô$;ð DØœ<×0Ò0°°t´{ÑCÔC�DØ"œi×0Ò0°Ñ6Ô6�Ø˜;Ð&Ð&r8   r   Úxyr   ÚstartÚfloatÚendÚwidthÚintc                óŠ   — |                       |¦  «        \  }}|�&|dk    r"| j                             |||||¦  «         dS dS dS )zDraw an arc.Nr   )rK   r.   Údraw_arc)r3   rL   rM   rO   r2   rP   r0   s          r6   ÚarczImageDraw.arc¡   sU   € ð —L’L Ñ&Ô&‰	ˆˆTØˆ?˜u¨šz˜zØŒI×Ò˜r 5¨#¨s°EÑ:Ô:Ð:Ð:Ð:ð ˆ?˜z˜zr8   úSequence[int]Úbitmapc                ó°   — |                      ¦   «          |                      |¦  «        \  }}|€|}|�#| j                             ||j        |¦  «         dS dS )zDraw a bitmap.N)ÚloadrK   r.   Údraw_bitmapr   )r3   rL   rV   r2   r0   s        r6   rV   zImageDraw.bitmap®   s^   € ð 	�Š‰ŒˆØ—L’L Ñ&Ô&‰	ˆˆTØˆ;ØˆCØˆ?ØŒI×!Ò! " f¤i°Ñ5Ô5Ð5Ð5Ð5ð ˆ?r8   Úoutlinec                óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a chord.Nr   r   )rK   r.   Ú
draw_chord©	r3   rL   rM   rO   r2   rZ   rP   r0   Úfill_inks	            r6   ÚchordzImageDraw.chord¹   s‰   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI× Ò   U¨C°¸1Ñ=Ô=Ð=Øˆ?˜s hš˜°5¸A²:°:ØŒI× Ò   U¨C°°a¸Ñ?Ô?Ð?Ð?Ð?ð ˆ?˜˜°:°:r8   c                óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw an ellipse.Nr   r   )rK   r.   Údraw_ellipse©r3   rL   r2   rZ   rP   r0   r^   s          r6   ÚellipsezImageDraw.ellipseÉ   s�   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI×"Ò" 2 x°Ñ3Ô3Ð3Øˆ?˜s hš˜°5¸A²:°:ØŒI×"Ò" 2 s¨A¨uÑ5Ô5Ð5Ð5Ð5ð ˆ?˜˜°:°:r8   úSequence[float]Úradiusc                óŠ   — |d         |z
  |d         |z
  |d         |z   |d         |z   f}|                       ||||¦  «         dS )z4Draw a circle given center coordinates and a radius.r   r   N)rc   )r3   rL   re   r2   rZ   rP   Ú
ellipse_xys          r6   ÚcirclezImageDraw.circle×   sP   € ð ˜”e˜f‘n b¨¤e¨f¡n°b¸´e¸f±nÀbÈÄeÈfÁnÐUˆ
Ø�Š�Z  w°Ñ6Ô6Ð6Ð6Ð6r8   úSequence[Sequence[float]]c                ó¼   ‡— t          ‰d         t          t          f¦  «        rt          d‰¦  «        S ˆfd„t	          dt          ‰¦  «        d¦  «        D ¦   «         S )z=Normalize 1 or 2 dimensional coord sequence into 2d sequence.r   ri   c                ó`   •— g | ]*}t          d t          ‰||dz   …         ¦  «        ¦  «        ‘Œ+S )rd   é   )r   rH   )Ú.0ÚirL   s     €r6   ú
<listcomp>z/ImageDraw._normalize_coords.<locals>.<listcomp>è   sH   ø€ ð ð ð àõ Ð&­¨b°°Q¸±U°¬mÑ(<Ô(<Ñ=Ô=ðð ð r8   rl   )rE   ÚlistrH   r   ÚrangeÚlen)r3   rL   s    `r6   Ú_normalize_coordszImageDraw._normalize_coordsã   sk   ø€ å�b˜”e�d¥E˜]Ñ+Ô+ð 	ÝÐ3°RÑ8Ô8Ð8ðð ð ð å˜q¥# b¡'¤'¨1Ñ-Ô-ðñ ô ð r8   Újointc                ó`  ‡— |                       |¦  «        d         }|��‰dk    �r| j                             ||‰¦  «         |dk    �rà‰dk    �rÛ|                      |¦  «        }t	          dt          |¦  «        dz
  ¦  «        D �]¦}||         }d„ ||dz
           |f|||dz            ffD ¦   «         }	|	d         |	d         k    rŒBdˆfd„}
|	d         |	d         k    o|	d         dz
  |	d         k    p&|	d         |	d         k     o|	d         dz   |	d         k    }|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
  }}|                      ||dz
  |dz
  |¦  «         ‰dk    rq|r, |
||	d         dz   ¦  «        | |
||	d         dz   ¦  «        g}n+ |
||	d         dz
  ¦  «        | |
||	d         dz
  ¦  «        g}|                      ||d¬¦  «         �Œ dS dS dS dS dS )z6Draw a line, or a connected sequence of line segments.r   NÚcurveé   r   c           
     ó¤   — g | ]M\  }}t          j        t          j        |d          |d          z
  |d         |d         z
  ¦  «        ¦  «        dz  ‘ŒNS )r   r   éh  )r   ÚdegreesÚatan2)rm   rM   rO   s      r6   ro   z"ImageDraw.line.<locals>.<listcomp>ü   sg   € ð ð ð ñ '˜E 3õ œ¥T¤Z°°A´¸¸q¼Ñ0AÀ5ÈÄ8ÈcÐRSÌfÑCTÑ%UÔ%UÑVÔVØñðð ð r8   Úcoordrd   ÚanglerN   r   útuple[float, ...]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   rl   r   c              3  ó~   K  — | ]8\  }}||d k    rt          j        |¦  «        nt          j        |¦  «        z   V — Œ9dS )r   N)r   ÚfloorÚceil)rm   ÚpÚp_ds      r6   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s[   è è € ð %ð %á &  3ð °C¸!²G°G¥¤¨C¡¤ ÅÄÈ3ÁÄÑPð%ð %ð %ð %ð %ð %r8   )rH   r   ÚcosÚradiansÚsin)r|   r}   ÚxÚyÚdistancerP   s        €r6   Úcoord_at_anglez&ImageDraw.line.<locals>.coord_at_angle  s˜   ø€ ð  %™˜˜1Ø ™˜Ø#(¨1¡9¨q¡=˜Ý$ð %ð %ð "# H­t¬x½¼ÀUÑ8KÔ8KÑ/LÔ/LÑ$LÐ MØ!" H­t¬x½¼ÀUÑ8KÔ8KÑ/LÔ/LÑ$LÐ Mð+ð%ñ %ô %ñ  ô  ð r8   é´   rl   r€   é   é   )rP   )r|   rd   r}   rN   r   r~   )rK   r.   Ú
draw_linesrs   rq   rr   ÚpiesliceÚline)r3   rL   r2   rP   rt   r0   Úpointsrn   ÚpointÚanglesr�   ÚflippedÚcoordsrM   rO   Ú
gap_coordss      `            r6   r“   zImageDraw.lineí   så  ø€ ð �lŠl˜4Ñ Ô  Ô#ˆØ‰?˜u¨šz™zØŒI× Ò   S¨%Ñ0Ô0Ð0Ø˜ÒÑ E¨A¢I¡IØ×/Ò/°Ñ3Ô3�Ý˜q¥# f¡+¤+°¡/Ñ2Ô2ð 7=ñ 7=�AØ" 1œI�Eðð ð $ A¨¡Eœ]¨EÐ2Ø" F¨1¨q©5¤MÐ2ð+ðñ ô �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ð ð FØ&,¨Q¤i°"¡n°f¸Q´iÀ"±n˜s˜˜à&,¨Q¤i°"¡n°f¸Q´iÀ"±n˜s˜Ø—M’M &¨%°"©*°c¸B±hÀÑEÔEÐEà˜q’y�yà"ð à . ¨u°f¸Q´iÀ"±nÑ EÔ EØ %Ø . ¨u°f¸Q´iÀ"±nÑ EÔ Eð*˜J˜Jð !/ ¨u°f¸Q´iÀ"±nÑ EÔ EØ %Ø . ¨u°f¸Q´iÀ"±nÑ EÔ Eð*˜Jð
 Ÿ	š	 *¨d¸!˜	Ñ<Ô<Ð<ùðw ˆ?˜z˜zàÐ I Ið7=ð 7=r8   ÚshapeúImage.core._Outlinec                óì   — |                      ¦   «          |                      ||¦  «        \  }}|�| j                             ||d¦  «         |�$||k    r | j                             ||d¦  «         dS dS dS )z(Experimental) Draw a shape.Nr   r   )ÚcloserK   r.   Údraw_outline)r3   rš   r2   rZ   r0   r^   s         r6   rš   zImageDraw.shape3  s€   € ð 	�Š‰ŒˆØŸš W¨dÑ3Ô3‰ˆˆXØÐØŒI×"Ò" 5¨(°AÑ6Ô6Ð6Øˆ?˜s hš˜ØŒI×"Ò" 5¨#¨qÑ1Ô1Ð1Ð1Ð1ð ˆ?˜˜r8   c                óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a pieslice.Nr   r   )rK   r.   Údraw_pieslicer]   s	            r6   r’   zImageDraw.piesliceA  s‰   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI×#Ò# B¨¨s°H¸aÑ@Ô@Ð@Øˆ?˜s hš˜°5¸A²:°:ØŒI×#Ò# B¨¨s°C¸¸EÑBÔBÐBÐBÐBð ˆ?˜˜°:°:r8   c                ót   — |                       |¦  «        \  }}|�| j                             ||¦  «         dS dS )z#Draw one or more individual pixels.N)rK   r.   Údraw_points)r3   rL   r2   r0   s       r6   r•   zImageDraw.pointQ  sA   € à—L’L Ñ&Ô&‰	ˆˆTØˆ?ØŒI×!Ò! " cÑ*Ô*Ð*Ð*Ð*ð ˆ?r8   c                ó  — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�È||k    rÄ|dk    rÀ|dk    r| j                             ||d|¦  «         dS | j        �–t	          j        d| j        j        ¦  «        }|                       d¦  «        d         }t          |¦  «        }	|	j                             ||d¦  «         | j                             ||d|dz  dz
  |j        ¦  «         dS dS dS dS dS )zDraw a polygon.Nr   r   r'   rl   )rK   r.   Údraw_polygonr   r   ÚnewÚsizeÚDraw)
r3   rL   r2   rZ   rP   r0   r^   ÚmaskÚmask_inkr.   s
             r6   ÚpolygonzImageDraw.polygonW  s  € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI×"Ò" 2 x°Ñ3Ô3Ð3Øˆ?˜s hš˜°5¸A²:°:Ø˜ŠzˆzØ”	×&Ò& r¨3°°5Ñ9Ô9Ð9Ð9Ð9Ø”Ð$õ ”y  d¤g¤lÑ3Ô3�ØŸ<š<¨™?œ?¨1Ô-�Ý˜D‘z”z�Ø”	×&Ò& r¨8°QÑ7Ô7Ð7à”	×&Ò& r¨3°°5¸1±9¸q±=À$Ä'ÑJÔJÐJÐJÐJð ˆ?˜˜°:°:ð %Ð$r8   r   Úbounding_circleú!Sequence[Sequence[float] | float]Ún_sidesÚrotationc                óX   — t          |||¦  «        }|                      ||||¦  «         dS )zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesrª   )r3   r«   r­   r®   r2   rZ   rP   rL   s           r6   Úregular_polygonzImageDraw.regular_polygono  s3   € õ /¨ÀÈÑRÔRˆØ�Š�R˜˜w¨Ñ.Ô.Ð.Ð.Ð.r8   c                óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw a rectangle.Nr   r   )rK   r.   Údraw_rectanglerb   s          r6   Ú	rectanglezImageDraw.rectangle|  s�   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI×$Ò$ R¨°1Ñ5Ô5Ð5Øˆ?˜s hš˜°5¸A²:°:ØŒI×$Ò$ R¨¨a°Ñ7Ô7Ð7Ð7Ð7ð ˆ?˜˜°:°:r8   )Úcornersrµ   ú$tuple[bool, bool, bool, bool] | Nonec               ó’  ‡ ‡‡‡‡‡‡‡‡‡‡‡— ‰                       |¦  «        \  \  ŠŠ\  ŠŠ‰‰k     rd}t          |¦  «        ‚‰‰k     rd}t          |¦  «        ‚‰€dŠt          ‰‰z
  ‰‰z
  |dz  ¦  «        Št          ‰¦  «        Št          ‰¦  «        Št          ‰¦  «        Št          ‰¦  «        Šd\  ŠŠt	          ‰¦  «        rB‰‰‰z
  dz
  k    Š‰r‰‰z
  Š‰‰‰z
  dz
  k    Š‰r‰‰z
  Š‰r‰r‰                      |||‰¦  «        S ‰dk    st          ‰¦  «        s‰                      |||‰¦  «        S t          ‰dz  ¦  «        }‰  	                    ||¦  «        \  ŠŠdˆˆˆˆˆˆˆ ˆˆˆˆˆfd„}	‰��2 |	d¦  «         ‰r-‰ j
                             ‰‰|z   dz   ‰‰|z
  dz
  f‰d¦  «         n>‰|z
  dz
  ‰|z   dz   k    r,‰ 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
                             |
‰d¦  «         ‰|z
  ‰‰‰g}‰d         r|dxx         |dz   z  cc<   ‰d         r|dxx         |dz   z  cc<   ‰ j
                             |‰d¦  «         ‰��—‰‰k    �r’‰dk    �r� |	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
                             |‰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
                             |‰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
                             |
‰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
                             |‰d¦  «         dS dS dS dS dS )zDraw a rounded rectangle.z&x1 must be greater than or equal to x0z&y1 must be greater than or equal to y0N)TTTTrl   )FFr   r   r’   Úboolr   r   c                ó¬  •— ‰r‰‰‰‰z   ‰‰z   fddf‰‰‰z
  ‰‰z   ‰fddff}n�‰r‰‰‰‰z   ‰‰z   fddf‰‰z
  ‰‰‰‰z   fddff}n`t          ˆ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 ]-}| r ‰	j        j        |‰dfz   Ž  Œ ‰	j        j        |‰‰
fz   Ž  Œ.d S )NrŽ   ry   r   r€   é  c              3  ó2   •K  — | ]\  }}‰|         ¯|V — Œd S r@   © )rm   rn   Úpartrµ   s      €r6   r†   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>Ì  sG   øè è € ð ð á˜˜4ð ˜q”zðØðð ð ð ð ð r8   r   )rH   Ú	enumerater.   r    rS   )r’   Úpartsr½   rµ   Údr^   Úfull_xÚfull_yr0   r3   rP   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r6   Údraw_cornersz1ImageDraw.rounded_rectangle.<locals>.draw_corners¼  s¨  ø€ àð ð ˜"˜b 1™f b¨1¡fÐ-¨s°CÐ8Ø˜"˜q™& " q¡&¨"Ð-¨q°#Ð6ð��ð ð ð ˜"˜b 1™f b¨1¡fÐ-¨r°3Ð7Ø˜1‘f˜b " b¨1¡fÐ-¨s°BÐ7ð��õ ð ð ð ð å#,à  " b¨1¡f¨b°1©fÐ5°s¸CÐ@Ø  1™f b¨"¨b°1©fÐ5°s¸CÐ@Ø  1™f b¨1¡f¨b°"Ð5°q¸"Ð=Ø  " q¡&¨"¨q©&°"Ð5°r¸3Ð?ð	ñ$ô $ðñ ô ñ ô �ð ð ?ð ?�Øð ?Ø+�D”IÔ+¨d°hÀ°]Ñ.BÐDÐDÐDà&�D”IÔ&¨°°e°Ñ)<Ð>Ð>Ð>ð	?ð ?r8   Tr�   F)r’   r¸   r   r   )rs   r*   ÚminÚroundÚallrc   Úanyr´   rQ   rK   r.   r³   )r3   rL   re   r2   rZ   rP   rµ   r5   ÚrrÇ   ÚleftÚrightÚtopÚbottomrÀ   r^   rÁ   rÂ   r0   rÃ   rÄ   rÅ   rÆ   s   `    ``       @@@@@@@@@r6   Úrounded_rectanglezImageDraw.rounded_rectangleŠ  sÌ  øøøøøøøøøøøø€ ð "×3Ò3°BÑ7Ô7Ñ‰ˆˆR‘(�2�rØ�Š7ˆ7Ø:ˆCÝ˜S‘/”/Ð!Ø�Š7ˆ7Ø:ˆCÝ˜S‘/”/Ð!Øˆ?Ø.ˆGå��R‘˜˜b™ &¨1¡*Ñ-Ô-ˆå�2‰YŒYˆÝ�2‰YŒYˆÝ�2‰YŒYˆÝ�2‰YŒYˆØ%‰ˆ�Ýˆw‰<Œ<ð 	>Ø˜"˜r™' A™+Ò%ˆFØð à˜‘G�Ø˜"˜r™' A™+Ò%ˆFØð à˜‘G�Øð >˜&ð >à—|’| B¨¨g°uÑ=Ô=Ð=à�Š6ˆ6�˜W™œˆ6ð —>’> " d¨G°UÑ;Ô;Ð;å��Q‘‰KŒKˆØŸš W¨dÑ3Ô3‰ˆˆXð 	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ð  	?ðD ÑØˆL˜ÑÔÐàð XØ”	×(Ò(¨"¨b°1©f°q©j¸"¸bÀ1¹fÀq¹jÐ)IÈ8ÐUVÑWÔWÐWÐWØ�a‘˜!‘˜r A™v¨™zÒ)Ð)Ø”	×(Ò(¨"¨q©&°1©*°b¸"¸q¹&À1¹*ÀbÐ)IÈ8ÐUVÑWÔWÐWØð = &ð =Ø˜B  Q¡¨Ð+�Ø˜1”:ð %Ø˜�G�G”G˜q 1™uÑ$�G�G‘GØ˜1”:ð %Ø˜�G�G”G˜q 1™uÑ$�G�G‘GØ”	×(Ò(¨¨x¸Ñ;Ô;Ð;à˜a™  R¨Ð,�Ø˜1”:ð &Ø˜!�H�H”H  A¡Ñ%�H�H‘HØ˜1”:ð &Ø˜!�H�H”H  A¡Ñ%�H�H‘HØ”	×(Ò(¨°¸!Ñ<Ô<Ð<Ø‰?˜s hš™°5¸A²:±:ØˆL˜ÑÔÐàð 9Ø˜2˜r 2¨¡:°¡>Ð2�Ø˜1”:ð $Ø˜�F�F”F˜a !™e‘O�F�F‘FØ˜1”:ð $Ø˜�F�F”F˜a !™e‘O�F�F‘FØ”	×(Ò(¨¨c°1Ñ5Ô5Ð5à˜b 5™j¨1™n¨b°"Ð5�Ø˜1”:ð 'Ø˜1�I�I”I  Q¡Ñ&�I�I‘IØ˜1”:ð 'Ø˜1�I�I”I  Q¡Ñ&�I�I‘IØ”	×(Ò(¨°°aÑ8Ô8Ð8Øð 8Ø˜B  U¡
¨Q¡°Ð3�Ø˜1”:ð %Ø˜�G�G”G˜q 1™uÑ$�G�G‘GØ˜1”:ð %Ø˜�G�G”G˜q 1™uÑ$�G�G‘GØ”	×(Ò(¨¨s°AÑ6Ô6Ð6à˜e™ a™¨¨R°Ð4�Ø˜1”:ð &Ø˜!�H�H”H  A¡Ñ%�H�H‘HØ˜1”:ð &Ø˜!�H�H”H  A¡Ñ%�H�H‘HØ”	×(Ò(¨°°QÑ7Ô7Ð7Ð7Ð7ð= ˆ?˜˜°:°:ð"8ð 8r8   rw   rÍ   Fútuple[float, float]ÚtextúAnyStr | ImageText.Text[AnyStr]ÚanchorÚspacingÚalignrF   Ú	directionÚfeaturesúlist[str] | NoneÚlanguageÚstroke_widthÚstroke_fillÚembedded_colorr¸   Úargsr   Úkwargsc                ó`  ‡ ‡‡	‡
‡‡‡‡‡— t          |t          j        ¦  «        r|Šnw|€(‰                      ‰                     d¦  «        ¦  «        }t          j        ||‰ j        |‰‰	‰
¦  «        Š‰r‰                     ¦   «          |r‰                     ||¦  «         dˆ fd„} ||¦  «        }|€dS d}‰j        r‰j	        � |‰j	        ¦  «        n|}‰ 
                    |||¦  «        D ]AŠddˆˆˆˆ	ˆˆˆ
ˆˆ f	d„}|�# ||‰j        ¦  «         ||k    r ||¦  «         Œ6 ||¦  «         ŒBdS )z
Draw text.Nr=   r2   rB   r   rQ   c                óH   •— ‰                      | ¦  «        \  }}|€|€J ‚|S |S r@   )rK   )r2   r0   r^   r3   s      €r6   ÚgetinkzImageDraw.text.<locals>.getink3  s3   ø€ Ø ŸLšL¨Ñ.Ô.‰MˆC�Øˆ{ØÐ+Ð+Ð+Ø�ØˆJr8   r   r0   rÜ   rN   r   c                óÖ  •	— ‰j         }|dk    r‰rd}t          ‰j        ¦  «        }t          ‰j        ¦  «        }t	          j        ‰j        ¦  «        d         t	          j        ‰j        ¦  «        d         f}t          ‰j        t          j	        ¦  «        rD ‰j        j
        ‰j        |‰‰‰|‰j        | |g	‰
¢R ddi‰¤Ž\  }}||d         z  }||d         z  }nZ	  ‰j        j        ‰j        |‰‰‰|‰j        | g‰
¢R d|i‰¤Ž}n/# t          $ r" ‰j                             ‰j        ¦  «        }Y nw xY w|dk    r�||                     d¦  «        }}t!          j        d| ¦  «        d         }	|                     d|	¦  «         ‰j        �>‰j                             |||||j        d         z   ||j        d         z   f|¦  «         d S d S ‰j                             ||f|| ¦  «         d S )	Nr   r!   Ústroke_filledTr   rM   r�   rn   )r1   rQ   rŠ   r‹   r   ÚmodfrE   r   r
   ÚFreeTypeFontÚgetmask2rÓ   rÕ   ÚgetmaskÚ	TypeErrorÚgetbandr   ÚpackÚfillbandr   Úpaster¦   r.   rY   )r0   rÜ   r   rŠ   r‹   rM   r¨   ÚoffsetÚcolorÚ	ink_alpharß   rØ   rÞ   rÙ   Ú
image_textrà   rÛ   r“   r3   s             €€€€€€€€€r6   Ú	draw_textz!ImageDraw.text.<locals>.draw_textH  s`  ø€ Ø”}�Ø 1Ò$Ð$¨Ð$Ø!�DÝ˜œ‘K”K�Ý˜œ‘K”K�Ýœ 4¤6Ñ*Ô*¨1Ô-­t¬y¸¼Ñ/@Ô/@ÀÔ/CÐD�Ý˜jœo­yÔ/EÑFÔFð !BØ#; :¤?Ô#;Øœ	ØØ!Ø Ø Ø$ØœØØð$ð ð$ð $ð $ð '+ð$ð !ð$ð $‘L�D˜&ð ˜ œ‘N�AØ˜ œ‘N�A�AðBØ6˜zœÔ6Ø œIØ Ø%Ø$Ø$Ø(Ø œKØð ð "ð ð  ð  ð #(ð ð %ð ð  ˜˜øõ %ð Bð Bð BØ)œ×6Ò6°t´yÑAÔA˜˜˜ðBøøøà˜6’>�>ð #'¨¯ª°Q©¬˜4�EÝ &¤¨C°Ñ 5Ô 5°aÔ 8�IØ—N’N 1 iÑ0Ô0Ð0Ø”wÐ*ØœŸšØ! A q¨!¨d¬i¸¬lÑ*:¸AÀÄ	È!ÄÑ<LÐ#MÈtñô ð ð ð ð +Ð*ð
 ”I×)Ò)¨1¨a¨&°$¸Ñ<Ô<Ð<Ð<Ð<s   Ã)D Ä)D3Ä2D3)r2   rB   r   rQ   )r   )r0   rQ   rÜ   rN   r   r   )rE   r   ÚTextrA   Úgetr   Úembed_colorÚstrokerÜ   rÝ   Ú_split)r3   rL   rÓ   r2   r   rÕ   rÖ   r×   rØ   rÙ   rÛ   rÜ   rÝ   rÞ   rß   rà   rã   r0   Ú
stroke_inkró   rò   r“   s   `       ```  ```    @@r6   rÓ   zImageDraw.text  sÜ  øøøøøøøøø€ õ& �d�IœNÑ+Ô+ð 	=ØˆJˆJàˆ|Ø—}’} V§Z¢Z°Ñ%<Ô%<Ñ=Ô=�Ý"œØ�d˜DœI w°	¸8ÀXñô ˆJð ð )Ø×&Ò&Ñ(Ô(Ð(Øð =Ø×!Ò! ,°Ñ<Ô<Ð<ð	ð 	ð 	ð 	ð 	ð 	ð ˆf�T‰lŒlˆØˆ;ØˆFàˆ
ØÔ"ð 	ð Ô)Ð5ð ��zÔ-Ñ.Ô.Ð.àð ð ×%Ò% b¨&°%Ñ8Ô8ð B	ð B	ˆDð5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ð 5=ðn Ð%à�	˜* jÔ&=Ñ>Ô>Ð>ð ˜*Ò$Ð$Ø�I˜c‘N”N�Nøð �	˜#‘”��ðEB	ð B	r8   ©r=   r   c               óH   — |                       |||||||||	|
||||¬¦  «        S ©Nrú   )rÓ   )r3   rL   rÓ   r2   r   rÕ   rÖ   r×   rØ   rÙ   rÛ   rÜ   rÝ   rÞ   r=   s                  r6   Úmultiline_textzImageDraw.multiline_textŠ  sI   € ð$ �yŠyØØØØØØØØØØØØØØð ñ 
ô 
ð 	
r8   c               óÂ   — |€|                       |¦  «        }t          j        ||| j        |||¬¦  «        }|r|                     ¦   «          |                     ¦   «         S )z@Get the length of a given string, in pixels with 1/64 precision.N)rØ   rÙ   rÛ   )rA   r   rô   r   rö   Ú
get_length)	r3   rÓ   r   rØ   rÙ   rÛ   rÞ   r=   rò   s	            r6   Ú
textlengthzImageDraw.textlength­  sr   € ð ˆ<Ø—=’= Ñ+Ô+ˆDÝ”^ØØØŒIØØØð
ñ 
ô 
ˆ
ð ð 	%Ø×"Ò"Ñ$Ô$Ð$Ø×$Ò$Ñ&Ô&Ð&r8   ú!tuple[float, float, float, float]c          	     óö   — |€|                       |¦  «        }t          j        ||| j        ||||	¦  «        }|r|                     ¦   «          |
r|                     |
¦  «         |                     |||¦  «        S )z2Get the bounding box of a given string, in pixels.)rA   r   rô   r   rö   r÷   Úget_bbox)r3   rL   rÓ   r   rÕ   rÖ   r×   rØ   rÙ   rÛ   rÜ   rÞ   r=   rò   s                 r6   ÚtextbboxzImageDraw.textbboxÇ  sŒ   € ð" ˆ<Ø—=’= Ñ+Ô+ˆDÝ”^Ø�$˜œ	 7¨I°xÀñ
ô 
ˆ
ð ð 	%Ø×"Ò"Ñ$Ô$Ð$Øð 	,Ø×Ò˜lÑ+Ô+Ð+Ø×"Ò" 2 v¨uÑ5Ô5Ð5r8   c               óD   — |                       |||||||||	|
||¬¦  «        S rü   )r  )r3   rL   rÓ   r   rÕ   rÖ   r×   rØ   rÙ   rÛ   rÜ   rÞ   r=   s                r6   Úmultiline_textbboxzImageDraw.multiline_textbboxã  sC   € ð  �}Š}ØØØØØØØØØØØØð ñ 
ô 
ð 	
r8   r@   )r   r   r   r   r   r   )r   r9   )r=   r>   r   r9   )r0   rB   r2   rB   r   rC   )Nr   )rL   r   rM   rN   rO   rN   r2   rB   rP   rQ   r   r   )rL   rU   rV   r   r2   rB   r   r   )NNr   )rL   r   rM   rN   rO   rN   r2   rB   rZ   rB   rP   rQ   r   r   )
rL   r   r2   rB   rZ   rB   rP   rQ   r   r   )rL   rd   re   rN   r2   rB   rZ   rB   rP   rQ   r   r   )rL   r   r   ri   )Nr   N)
rL   r   r2   rB   rP   rQ   rt   r   r   r   )NN)rš   r›   r2   rB   rZ   rB   r   r   )rL   r   r2   rB   r   r   )r   NNr   )r«   r¬   r­   rQ   r®   rN   r2   rB   rZ   rB   rP   rQ   r   r   )rL   r   re   rN   r2   rB   rZ   rB   rP   rQ   rµ   r¶   r   r   )NNNrw   rÍ   NNNr   NF) rL   rÒ   rÓ   rÔ   r2   rB   r   r   rÕ   r   rÖ   rN   r×   rF   rØ   r   rÙ   rÚ   rÛ   r   rÜ   rN   rÝ   rB   rÞ   r¸   rß   r   rà   r   r   r   )rL   rÒ   rÓ   r   r2   rB   r   r   rÕ   r   rÖ   rN   r×   rF   rØ   r   rÙ   rÚ   rÛ   r   rÜ   rN   rÝ   rB   rÞ   r¸   r=   r>   r   r   )NNNNF)rÓ   r   r   r   rØ   r   rÙ   rÚ   rÛ   r   rÞ   r¸   r=   r>   r   rN   )	NNrw   rÍ   NNNr   F)rL   rÒ   rÓ   r   r   r   rÕ   r   rÖ   rN   r×   rF   rØ   r   rÙ   rÚ   rÛ   r   rÜ   rN   rÞ   r¸   r=   r>   r   r  )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r7   r<   rA   rK   rT   rV   r_   rc   rh   rs   r“   rš   r’   r•   rª   r±   r´   rÑ   rÓ   rý   r   r  r  r¼   r8   r6   r   r   >   sÞ  € € € € € € Ø+/€DÐ/Ð/Ð/Ñ/ð&ð &ð &ð &ð &ðPð ð ð ð2"ð "ð "ð "ð 59ð'ð 'ð 'ð 'ð 'ð< !Øð;ð ;ð ;ð ;ð ;ð KOð	6ð 	6ð 	6ð 	6ð 	6ð  !Ø#Øð@ð @ð @ð @ð @ð& !Ø#Øð6ð 6ð 6ð 6ð 6ð$ !Ø#Øð
7ð 
7ð 
7ð 
7ð 
7ðð ð ð ð !ØØ ðD=ð D=ð D=ð D=ð D=ðR !Ø#ð	2ð 2ð 2ð 2ð 2ð& !Ø#ØðCð Cð Cð Cð Cð +ð +ð +ð +ð +ð !Ø#ØðKð Kð Kð Kð Kð8 Ø Ø#Øð/ð /ð /ð /ð /ð  !Ø#Øð8ð 8ð 8ð 8ð 8ð" Ø Ø#ØðG8ð 9=ðG8ð G8ð G8ð G8ð G8ð G8ðZ !Ø/3Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ðuð uð uð uð uðv !Ø/3Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð!
ð  #'ð!!
ð !
ð !
ð !
ð !
ð !
ðL 04Ø $Ø%)Ø#Ø$ð'ð #'ð'ð 'ð 'ð 'ð 'ð 'ð< 04Ø!ØØØ $Ø%)Ø#ØØ$ð6ð #'ð6ð 6ð 6ð 6ð 6ð 6ð@ 04Ø!ØØØ $Ø%)Ø#ØØ$ð
ð #'ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r8   r   r   r   r   r   r   c                óv   — 	  t          | d¦  «        |¦  «        S # t          $ r t          | |¦  «        cY S w xY w)a‹  
    A simple 2D drawing interface for PIL images.

    :param im: The image to draw in.
    :param mode: Optional mode to use for color values.  For RGB
       images, this argument can be RGB or RGBA (to blend the
       drawing into the image).  For all other modes, this argument
       must be the same as the image mode.  If omitted, the mode
       defaults to the mode of the image.
    Úgetdraw)ÚgetattrÚAttributeErrorr   )r   r   s     r6   r§   r§     sR   € ð#Ø%�w�r˜9Ñ%Ô% dÑ+Ô+Ð+øÝð #ð #ð #Ý˜˜TÑ"Ô"Ð"Ð"Ð"ð#øøøs   ‚ ›8·8úImage.Image | Noneú)tuple[ImageDraw2.Draw | None, ModuleType]c                ó>   — ddl m} | � |j        | ¦  «        nd}||fS )zm
    :param im: The image to draw in.
    :returns: A (drawing context, drawing resource factory) tuple.
    r   r   N)Ú r   r§   )r   r   r.   s      r6   r  r    s;   € ð
 ÐÐÐÐÐà"$ .ˆ?ˆ:Œ?˜2ÑÔÐ°d€DØ�ÐÐr8   ÚimagerL   útuple[int, int]Úvalueúfloat | tuple[int, ...]Úborderúfloat | tuple[int, ...] | NoneÚthreshrN   r   c                óz  — |                       ¦   «         }|€J ‚|\  }}	 |||f         }t          ||¦  «        |k    rdS ||||f<   n# t          t          f$ r Y dS w xY w||fh}	t	          ¦   «         }
|	rÇt	          ¦   «         }|	D ]®\  }}|dz   |f|dz
  |f||dz   f||dz
  ffD ]Ž\  }}||f|
v s|dk     s|dk     rŒ	 |||f         }|
                     ||f¦  «         |€t          ||¦  «        |k    }n|||fv}|r||||f<   |                     ||f¦  «         Œx# t          t          f$ r Y Œ‹w xY wŒ¯|	}
|}	|	°ÅdS dS )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   )rX   Ú_color_diffr*   Ú
IndexErrorÚsetÚadd)r  rL   r  r  r  ÚpixelrŠ   r‹   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtr„   r2   s                   r6   Ú	floodfillr&    sõ  € ð6 �JŠJ‰LŒL€EØÐÐÐØ�D€A€qðØ˜1˜a˜4”[ˆ
Ý�u˜jÑ)Ô)¨VÒ3Ð3ØˆFØˆˆa�ˆd‰ˆøÝ�
Ð#ð ð ð Øˆˆðøøøà�ˆFˆ8€Dõ ‘”€IØ
ð Ý‘5”5ˆØð 	-ð 	-‰DˆAˆqØ˜a™% ˜ a¨!¡e¨Q Z°!°Q¸±U°¸aÀÀQÁ¸ZÐHð -ð -‘��1à�q�6˜YÐ&Ð&¨!¨aª%¨%°1°q²5°5Øð-Ø˜a ˜dœ�Að —M’M 1 a &Ñ)Ô)Ð)Ø�~Ý*¨1¨jÑ9Ô9¸VÒC˜˜à ¨°¨Ð7˜Øð -Ø&+˜˜a ˜d™Ø Ÿš a¨ VÑ,Ô,Ð,øøõ #¥JÐ/ð ð ð Ø�Dðøøøð-ð" ˆ	Øˆð+ ð ð ð ð ð s(   ŸA ¿A ÁAÁAÂ<
DÄD/Ä.D/r«   r¬   r­   rQ   r®   úlist[tuple[float, float]]c                óp  ‡‡‡‡	— t          |t          ¦  «        sd}t          |¦  «        ‚|dk     rd}t          |¦  «        ‚t          | t          t
          f¦  «        sd}t          |¦  «        ‚t          | ¦  «        dk    rKt          d„ | D ¦   «         ¦  «        sd}t          |¦  «        ‚t          d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k    rd}t          |¦  «        ‚t          dt	          | d	         ¦  «        ¦  «        Št          d| d         ¦  «        Š	nd}t          |¦  «        ‚‰	d	k    rd}t          |¦  «        ‚t          |t          t          f¦  «        sd}t          |¦  «        ‚dˆfd„Šdˆˆ	fd„Šdd„} |||¦  «        }ˆfd„|D ¦   «         S ) u‘  
    Generate a list of vertices for a 2D regular polygon.

    :param bounding_circle: The bounding circle is a sequence defined
        by a point and radius. The polygon is inscribed in this circle.
        (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``)
    :param n_sides: Number of sides
        (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon)
    :param rotation: Apply an arbitrary rotation to the polygon
        (e.g. ``rotation=90``, applies a 90 degree rotation)
    :return: List of regular polygon vertices
        (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``)

    How are the vertices computed?
    1. Compute the following variables
        - theta: Angle between the apothem & the nearest polygon vertex
        - side_length: Length of each polygon edge
        - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle)
        - polygon_radius: Polygon radius (last element of bounding_circle)
        - angles: Location of each polygon vertex in polar grid
            (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0])

    2. For each angle in angles, get the polygon vertex at that angle
        The vertex is computed using the equation below.
            X= xcos(Ï†) + ysin(Ï†)
            Y= âˆ’xsin(Ï†) + ycos(Ï†)

        Note:
            Ï† = angle in degrees
            x = 0
            y = polygon_radius

        The formula above assumes rotation around the origin.
        In our case, we are rotating around the centroid.
        To account for this, we use the formula below
            X = xcos(Ï†) + ysin(Ï†) + centroid_x
            Y = âˆ’xsin(Ï†) + ycos(Ï†) + centroid_y
    zn_sides should be an intr�   zn_sides should be an int > 2z$bounding_circle should be a sequencec              3  óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r@   ©rE   rQ   rN   ©rm   rn   s     r6   r†   z4_compute_regular_polygon_vertices.<locals>.<genexpr>˜  s0   è è € ÐHÐH°1•:˜a¥#¥u Ñ.Ô.ÐHÐHÐHÐHÐHÐHr8   z0bounding_circle should only contain numeric dataúlist[float]rl   r   c              3  óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r@   r*  r+  s     r6   r†   z4_compute_regular_polygon_vertices.<locals>.<genexpr>ž  sA   è è € ð 
ð 
Ø,-�J�q�3¥˜,Ñ'Ô'ð
ð 
ð 
ð 
ð 
ð 
r8   r   zBbounding_circle centre should contain 2D coordinates (e.g. (x, y))rN   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 floatr•   rz   r   rÒ   c                óô  •— 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   ry   r   rl   )rÉ   r   r‡   rˆ   r‰   )r•   rz   Úcentroids     €r6   Ú_apply_rotationz:_compute_regular_polygon_vertices.<locals>._apply_rotation»  sç   ø€ åØ�a”�4œ8¥D¤L°°w±Ñ$?Ô$?Ñ@Ô@Ñ@Ø˜”(�TœX¥d¤l°3¸±=Ñ&AÔ&AÑBÔBÑBñCà˜1”+ñð ñ	ô õ Ø�a”�4œ8¥D¤L°°w±Ñ$?Ô$?Ñ@Ô@Ñ@Ø˜”(�TœX¥d¤l°3¸±=Ñ&AÔ&AÑBÔBÑBñCà˜1”+ñð ñ	ô ð
ð 	
r8   r}   c                ó$   •— ‰dg} ‰|| ¦  «        S ©Nr   r¼   )r}   Ústart_pointr0  Úpolygon_radiuss     €€r6   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertexË  s   ø€ Ø% qÐ)ˆØˆ˜{¨EÑ2Ô2Ð2r8   r­   rQ   r®   c                ó˜   — g }d| z  }dd|z  z
  |z   }t          | ¦  «        D ]'}|                     |¦  «         ||z  }|dk    r|dz  }Œ(|S )Nry   rº   g      à?)rq   Úappend)r­   r®   r–   rz   Úcurrent_angleÚ_s         r6   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_anglesÏ  so   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÝ�w‘”ð 	%ð 	%ˆAØ�MŠM˜-Ñ(Ô(Ð(Ø˜WÑ$ˆMØ˜sÒ"Ð"Ø Ñ$�øØˆr8   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r¼   r¼   )rm   r}   r5  s     €r6   ro   z5_compute_regular_polygon_vertices.<locals>.<listcomp>ß  s%   ø€ Ð?Ð?Ð?¨uÐ#Ð# EÑ*Ô*Ð?Ð?Ð?r8   )r•   r,  rz   rN   r   rÒ   )r}   rN   r   rÒ   )r­   rQ   r®   rN   r   r,  )
rE   rQ   rê   r*   rp   rH   rr   rÊ   r   rN   )
r«   r­   r®   r5   r:  r–   r0  r5  r/  r4  s
         @@@@r6   r°   r°   `  sš  øøøø€ õV �g�sÑ#Ô#ð Ø(ˆÝ˜‰nŒnÐØ�‚{€{Ø,ˆÝ˜‰oŒoÐõ �o­­e }Ñ5Ô5ð Ø4ˆÝ˜‰nŒnÐå
ˆ?ÑÔ˜qÒ Ð ÝÐHÐH¸ÐHÑHÔHÑHÔHð 	"ØDˆCÝ˜S‘/”/Ð!å$(¨½¸_Ñ8MÔ8MÑ$NÔ$NÑ!ˆ�>�>Ý	ˆ_Ñ	Ô	 Ò	"Ð	"¥z°/À!Ô2DÅtÍUÀmÑ'TÔ'TÐ	"Ýð 
ð 
Ø1@ÀÔ1Cð
ñ 
ô 
ñ 
ô 
ð 	"å˜O¨AÔ.µµe°Ñ=Ô=ð	"ð EˆCÝ˜S‘/”/Ð!åˆ˜qÔ!Ñ"Ô" aÒ'Ð'ØVˆCÝ˜S‘/”/Ð!å˜¥t¨O¸AÔ,>Ñ'?Ô'?Ñ@Ô@ˆÝ˜g °qÔ'9Ñ:Ô:ˆˆð<ð 	õ ˜‰oŒoÐà˜ÒÐØ4ˆÝ˜‰oŒoÐõ �h¥¥e Ñ-Ô-ð Ø2ˆÝ˜‰oŒoÐð
ð 
ð 
ð 
ð 
ð 
ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð
ð 
ð 
ð 
ð ˆ[˜ (Ñ+Ô+€Fð @Ð?Ð?Ð?¸Ð?Ñ?Ô?Ð?r8   Úcolor1Úcolor2c                óÚ   ‡‡— 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  óT   •K  — | ]"}t          ‰|         ‰|         z
  ¦  «        V — Œ#d S r@   )Úabs)rm   rn   ÚfirstÚseconds     €€r6   r†   z_color_diff.<locals>.<genexpr>ë  s8   øè è € ÐEÐE¨Q�s�5˜”8˜f QœiÑ'Ñ(Ô(ÐEÐEÐEÐEÐEÐEr8   )rE   rH   Úsumrq   rr   )r<  r=  rA  rB  s     @@r6   r  r  â  sn   øø€ õ ! ­Ñ/Ô/Ð>ˆFˆF°f°Y€EÝ! &­%Ñ0Ô0Ð?ˆVˆV°v°i€FåÐEÐEÐEÐEÐEµ%½¸F¹¼Ñ2DÔ2DÐEÑEÔEÑEÔEÐEr8   r@   )r   r   r   r   r   r   )r   r  r   r  r2  )r  r   rL   r  r  r  r  r  r  rN   r   r   )r«   r¬   r­   rQ   r®   rN   r   r'  )r<  r  r=  r  r   rN   )"Ú
__future__r   Ú__lazy_modules__r   r   Útypingr   r  r   r	   r
   r   ÚTYPE_CHECKINGÚcollections.abcr   r   Útypesr   r   r   r   Ú_typingr   r   r-   rZ   r   r
  r   r§   r  r&  r°   r  r¼   r8   r6   ú<module>rK     sÌ  ðð@ #Ð "Ð "Ð "Ð "Ð "Ð "à˜HÐ%Ð à €€€Ø €€€Ø Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à€Øð &Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø Ð Ð Ð Ð Ð Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"àÐÐÐÐÐØ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð .3¬ZÔ-?€Ð ?Ð ?Ð ?Ñ ?ððB
ð B
ð B
ð B
ð B
ñ B
ô B
ð B
ðJ#ð #ð #ð #ð #ð"ð ð ð ð ð .2Øð>ð >ð >ð >ð >ðB@ð @ð @ð @ðD	Fð 	Fð 	Fð 	Fð 	Fð 	Fr8   