§
    Å‡tj[Š  ã                  ó  — U d dl mZ d dlZd dlZd dlmZ d dlmZ ddlm	Z	m
Z
mZmZ dZer"d dlmZ d d	lmZ d d
lmZmZ ddlmZ ddlmZmZ e	j        j        Zded<   	  G d„ d¦  «        Zd/d0d„Zd/d1d„Z	 	 d2d3d$„Zd4d+„Zd5d.„Z dS )6é    )ÚannotationsN)ÚSequence)Úcasté   )ÚImageÚ
ImageColorÚ	ImageFontÚ	ImageTextF)ÚCallable)Ú
ModuleType)ÚAnyÚAnyStr©Ú
ImageDraw2)ÚCoordsÚ_Inkz!Callable[[], Image.core._Outline]ÚOutlinec                  ó´  — e Zd ZU dZded<   dWdXd
„ZdYd„ZdZd„Z	 dWd[d„Z	 	 d\d]d„Z		 dWd^d „Z
	 	 	 d_d`d"„Z	 	 	 d_dad#„Z	 	 	 d_dbd&„Z	 	 	 dcddd(„Z	 	 dedfd+„Z	 	 	 d_d`d,„ZdWdgd-„Z	 	 	 d_dad.„Z	 	 	 	 dhdid4„Z	 	 	 d_dad5„Z	 	 	 	 dhdd6œdjd9„Z	 	 	 	 	 	 	 	 	 	 	 dkdldO„Z	 	 	 	 	 	 	 	 	 	 	 dkddPœdmdR„Z	 	 	 	 	 dnddPœdodS„Z	 	 	 	 	 	 	 	 	 dpddPœdqdU„Z	 	 	 	 	 	 	 	 	 dpddPœdqdV„ZdS )rÚ	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        úK/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__@   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)r1   s    r4   ÚgetfontzImageDraw.getfonth   s&   € ð( Œyð 	1å!Ô.Ñ0Ô0ˆDŒIØŒyÐr6   Ú	font_sizeúfloat | Nonec                óV   — |�t          j        |¦  «        S |                      ¦   «         S ©N)r	   r9   r:   )r1   r;   s     r4   Ú_getfontzImageDraw._getfont�   s'   € ØÐ ÝÔ)¨)Ñ4Ô4Ð4à—<’<‘>”>Ð!r6   r.   ú_Ink | Noner0   ú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>   )r0   r.   Ú
isinstanceÚstrr   Úgetcolorr   r)   Útupler*   r,   r-   )r1   r.   r0   Ú
result_inkÚresult_fills        r4   Ú_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�Ø˜;Ð&Ð&r6   r   Úxyr   ÚstartÚfloatÚendÚwidthÚintc                óŠ   — |                       |¦  «        \  }}|�&|dk    r"| j                             |||||¦  «         dS dS dS )zDraw an arc.Nr   )rI   r,   Údraw_arc)r1   rJ   rK   rM   r0   rN   r.   s          r4   ÚarczImageDraw.arc    sU   € ð —L’L Ñ&Ô&‰	ˆˆTØˆ?˜u¨šz˜zØŒI×Ò˜r 5¨#¨s°EÑ:Ô:Ð:Ð:Ð:ð ˆ?˜z˜zr6   úSequence[int]Úbitmapc                ó°   — |                      ¦   «          |                      |¦  «        \  }}|€|}|�#| j                             ||j        |¦  «         dS dS )zDraw a bitmap.N)ÚloadrI   r,   Údraw_bitmapr   )r1   rJ   rT   r0   r.   s        r4   rT   zImageDraw.bitmap­   s^   € ð 	�Š‰ŒˆØ—L’L Ñ&Ô&‰	ˆˆTØˆ;ØˆCØˆ?ØŒI×!Ò! " f¤i°Ñ5Ô5Ð5Ð5Ð5ð ˆ?r6   Úoutlinec                óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a chord.Nr   r   )rI   r,   Ú
draw_chord©	r1   rJ   rK   rM   r0   rX   rN   r.   Úfill_inks	            r4   ÚchordzImageDraw.chord¸   s‰   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI× Ò   U¨C°¸1Ñ=Ô=Ð=Øˆ?˜s hš˜°5¸A²:°:ØŒI× Ò   U¨C°°a¸Ñ?Ô?Ð?Ð?Ð?ð ˆ?˜˜°:°:r6   c                óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw an ellipse.Nr   r   )rI   r,   Údraw_ellipse©r1   rJ   r0   rX   rN   r.   r\   s          r4   Ú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ð ˆ?˜˜°:°:r6   ú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)ra   )r1   rJ   rc   r0   rX   rN   Ú
ellipse_xys          r4   Ú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Ð6r6   Újointc                ó(  ‡‡— |                       |¦  «        d         }|��i‰dk    �rd| j                             ‰|‰¦  «         |dk    �rC‰dk    �r>t          ‰d         t          t
          f¦  «        r,t          t          t          t                            ‰¦  «        }n*ˆfd„t          dt          ‰¦  «        d¦  «        D ¦   «         }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é   c                ó€   •— g | ]:}t          t          t                   t          ‰||d z   …         ¦  «        ¦  «        ‘Œ;S )é   )r   r   rL   rF   )Ú.0ÚirJ   s     €r4   ú
<listcomp>z"ImageDraw.line.<locals>.<listcomp>ò   sK   ø€ ð ð ð àõ �X¥eœ_­e°B°q¸1¸q¹5°y´MÑ.BÔ.BÑCÔCðð ð r6   rl   r   c           
     ó¤   — g | ]M\  }}t          j        t          j        |d          |d          z
  |d         |d         z
  ¦  «        ¦  «        dz  ‘ŒNS )r   r   éh  )ÚmathÚdegreesÚatan2)rm   rK   rM   s      r4   ro   z"ImageDraw.line.<locals>.<listcomp>ø   sg   € ð ð ð ñ '˜E 3õ œ¥T¤Z°°A´¸¸q¼Ñ0AÀ5ÈÄ8ÈcÐRSÌfÑCTÑ%UÔ%UÑVÔVØñðð ð r6   Úcoordrb   ÚanglerL   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)rr   ÚfloorÚceil)rm   ÚpÚp_ds      r4   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>
  s[   è è € ð %ð %á &  3ð °C¸!²G°G¥¤¨C¡¤ ÅÄÈ3ÁÄÑPð%ð %ð %ð %ð %ð %r6   )rF   rr   ÚcosÚradiansÚsin)ru   rv   ÚxÚyÚdistancerN   s        €r4   Ú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ð+ð%ñ %ô %ñ  ô  ð r6   é´   ry   é   é   )rN   )ru   rb   rv   rL   r   rw   )rI   r,   Ú
draw_linesrC   ÚlistrF   r   r   rL   ÚrangeÚlenÚpiesliceÚline)r1   rJ   r0   rN   rg   r.   Úpointsrn   ÚpointÚanglesr†   ÚflippedÚcoordsrK   rM   Ú
gap_coordss    ` `            r4   r�   zImageDraw.lineâ   sC  øø€ ð �lŠl˜4Ñ Ô  Ô#ˆØ‰?˜u¨šz™zØŒI× Ò   S¨%Ñ0Ô0Ð0Ø˜ÒÑ E¨A¢I¡Iå˜b œe¥d­E ]Ñ3Ô3ð Ý!¥(­8µE¬?Ô";¸RÑ@Ô@�F�Fðð ð ð å!& q­#¨b©'¬'°1Ñ!5Ô!5ðñ ô �Fõ ˜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¸!˜	Ñ<Ô<Ð<ùðE ˆ?˜z˜zàÐ I Ið7=ð 7=r6   ÚshapeúImage.core._Outlinec                óì   — |                      ¦   «          |                      ||¦  «        \  }}|�| j                             ||d¦  «         |�$||k    r | j                             ||d¦  «         dS dS dS )z(Experimental) Draw a shape.Nr   r   )ÚcloserI   r,   Údraw_outline)r1   r–   r0   rX   r.   r\   s         r4   r–   zImageDraw.shape/  s€   € ð 	�Š‰ŒˆØŸš W¨dÑ3Ô3‰ˆˆXØÐØŒI×"Ò" 5¨(°AÑ6Ô6Ð6Øˆ?˜s hš˜ØŒI×"Ò" 5¨#¨qÑ1Ô1Ð1Ð1Ð1ð ˆ?˜˜r6   c                óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a pieslice.Nr   r   )rI   r,   Údraw_pieslicer[   s	            r4   rŽ   zImageDraw.pieslice=  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ð ˆ?˜˜°:°:r6   c                ót   — |                       |¦  «        \  }}|�| j                             ||¦  «         dS dS )z#Draw one or more individual pixels.N)rI   r,   Údraw_points)r1   rJ   r0   r.   s       r4   r‘   zImageDraw.pointM  sA   € à—L’L Ñ&Ô&‰	ˆˆTØˆ?ØŒI×!Ò! " cÑ*Ô*Ð*Ð*Ð*ð ˆ?r6   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   )rI   r,   Údraw_polygonr   r   ÚnewÚsizeÚDraw)
r1   rJ   r0   rX   rN   r.   r\   ÚmaskÚmask_inkr,   s
             r4   ÚpolygonzImageDraw.polygonS  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ð ˆ?˜˜°:°:ð %Ð$r6   r   Úbounding_circleú!Sequence[Sequence[float] | float]Ún_sidesÚrotationc                óX   — t          |||¦  «        }|                      ||||¦  «         dS )zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr¦   )r1   r§   r©   rª   r0   rX   rN   rJ   s           r4   Úregular_polygonzImageDraw.regular_polygonk  s3   € õ /¨ÀÈÑRÔRˆØ�Š�R˜˜w¨Ñ.Ô.Ð.Ð.Ð.r6   c                óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw a rectangle.Nr   r   )rI   r,   Údraw_rectangler`   s          r4   Ú	rectanglezImageDraw.rectanglex  s�   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI×$Ò$ R¨°1Ñ5Ô5Ð5Øˆ?˜s hš˜°5¸A²:°:ØŒI×$Ò$ R¨¨a°Ñ7Ô7Ð7Ð7Ð7ð ˆ?˜˜°:°:r6   )Úcornersr±   ú$tuple[bool, bool, bool, bool] | Nonec               óN	  ‡ ‡‡‡‡‡‡‡‡‡‡‡— t          |d         t          t          f¦  «        r5t          t          t          t
                            |¦  «        \  \  ŠŠ\  ŠŠn%t          t          t
                   |¦  «        \  ŠŠŠŠ‰‰k     rd}t          |¦  «        ‚‰‰k     rd}t          |¦  «        ‚‰€dŠt          ‰‰z
  ‰‰z
  |dz  ¦  «        Št          ‰¦  «        Št          ‰¦  «        Št          ‰¦  «        Št          ‰¦  «        Šd\  ŠŠt          ‰¦  «        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.r   z&x1 must be greater than or equal to x0z&y1 must be greater than or equal to y0N)TTTTrl   )FFr   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‡   rq   r   ry   é  c              3  ó2   •K  — | ]\  }}‰|         ¯|V — Œd S r>   © )rm   rn   Úpartr±   s      €r4   r   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>Ë  sG   øè è € ð ð á˜˜4ð ˜q”zðØðð ð ð ð ð r6   r   )rF   Ú	enumerater,   rœ   rQ   )rŽ   Úpartsr¹   r±   Údr\   Úfull_xÚfull_yr.   r1   rN   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r4   Ú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°Ñ)<Ð>Ð>Ð>ð	?ð ?r6   Tr‰   F)rŽ   r´   r   r   )rC   r‹   rF   r   r   rL   r(   ÚminÚroundÚallra   Úanyr°   rO   rI   r,   r¯   )r1   rJ   rc   r0   rX   rN   r±   r3   ÚrrÃ   ÚleftÚrightÚtopÚbottomr¼   r\   r½   r¾   r.   r¿   rÀ   rÁ   rÂ   s   `    ``       @@@@@@@@@r4   Úrounded_rectanglezImageDraw.rounded_rectangle†  s  øøøøøøøøøøøø€ õ �b˜”e�d¥E˜]Ñ+Ô+ð 	7Ý!%¥h­x½¬Ô&?ÀÑ!DÔ!DÑ‰HˆR�‘h�r˜2˜2å!¥(­5¤/°2Ñ6Ô6‰NˆB��B˜Ø�Š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ð 8r6   rj   rÉ   Fútuple[float, float]ÚtextúAnyStr | ImageText.Text[AnyStr]ÚanchorÚspacingÚalignrD   Ú	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;   r0   r@   r   rO   c                óH   •— ‰                      | ¦  «        \  }}|€|€J ‚|S |S r>   )rI   )r0   r.   r\   r1   s      €r4   ÚgetinkzImageDraw.text.<locals>.getink2  s3   ø€ Ø ŸLšL¨Ñ.Ô.‰MˆC�Øˆ{ØÐ+Ð+Ð+Ø�ØˆJr6   r   r.   rØ   rL   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   rK   r‰   rn   )r/   rO   rƒ   r„   rr   ÚmodfrC   r   r	   ÚFreeTypeFontÚgetmask2rÏ   rÑ   ÚgetmaskÚ	TypeErrorÚgetbandÚstructÚpackÚfillbandr   Úpaster¢   r,   rW   )r.   rØ   r   rƒ   r„   rK   r¤   ÚoffsetÚcolorÚ	ink_alpharÛ   rÔ   rÚ   rÕ   Ú
image_textrÜ   r×   r�   r1   s             €€€€€€€€€r4   Ú	draw_textz!ImageDraw.text.<locals>.draw_textG  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)r0   r@   r   rO   )r   )r.   rO   rØ   rL   r   r   )rC   r
   ÚTextr?   Úgetr   Úembed_colorÚstrokerØ   rÙ   Ú_split)r1   rJ   rÏ   r0   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rß   r.   Ú
stroke_inkrð   rï   r�   s   `       ```  ```    @@r4   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	r6   ©r;   r   c               óH   — |                       |||||||||	|
||||¬¦  «        S ©Nr÷   )rÏ   )r1   rJ   rÏ   r0   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÙ   rÚ   r;   s                  r4   Úmultiline_textzImageDraw.multiline_text‰  sI   € ð$ �yŠyØØØØØØØØØØØØØØð ñ 
ô 
ð 	
r6   c               óÂ   — |€|                       |¦  «        }t          j        ||| j        |||¬¦  «        }|r|                     ¦   «          |                     ¦   «         S )z@Get the length of a given string, in pixels with 1/64 precision.N)rÔ   rÕ   r×   )r?   r
   rñ   r   ró   Ú
get_length)	r1   rÏ   r   rÔ   rÕ   r×   rÚ   r;   rï   s	            r4   Ú
textlengthzImageDraw.textlength¬  sr   € ð ˆ<Ø—=’= Ñ+Ô+ˆDÝ”^ØØØŒIØØØð
ñ 
ô 
ˆ
ð ð 	%Ø×"Ò"Ñ$Ô$Ð$Ø×$Ò$Ñ&Ô&Ð&r6   ú!tuple[float, float, float, float]c          	     óö   — |€|                       |¦  «        }t          j        ||| j        ||||	¦  «        }|r|                     ¦   «          |
r|                     |
¦  «         |                     |||¦  «        S )z2Get the bounding box of a given string, in pixels.)r?   r
   rñ   r   ró   rô   Úget_bbox)r1   rJ   rÏ   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÚ   r;   rï   s                 r4   ÚtextbboxzImageDraw.textbboxÆ  sŒ   € ð" ˆ<Ø—=’= Ñ+Ô+ˆDÝ”^Ø�$˜œ	 7¨I°xÀñ
ô 
ˆ
ð ð 	%Ø×"Ò"Ñ$Ô$Ð$Øð 	,Ø×Ò˜lÑ+Ô+Ð+Ø×"Ò" 2 v¨uÑ5Ô5Ð5r6   c               óD   — |                       |||||||||	|
||¬¦  «        S rù   )r  )r1   rJ   rÏ   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÚ   r;   s                r4   Úmultiline_textbboxzImageDraw.multiline_textbboxâ  sC   € ð  �}Š}ØØØØØØØØØØØØð ñ 
ô 
ð 	
r6   r>   )r   r   r   r   r   r   )r   r7   )r;   r<   r   r7   )r.   r@   r0   r@   r   rA   )Nr   )rJ   r   rK   rL   rM   rL   r0   r@   rN   rO   r   r   )rJ   rS   rT   r   r0   r@   r   r   )NNr   )rJ   r   rK   rL   rM   rL   r0   r@   rX   r@   rN   rO   r   r   )
rJ   r   r0   r@   rX   r@   rN   rO   r   r   )rJ   rb   rc   rL   r0   r@   rX   r@   rN   rO   r   r   )Nr   N)
rJ   r   r0   r@   rN   rO   rg   r   r   r   )NN)r–   r—   r0   r@   rX   r@   r   r   )rJ   r   r0   r@   r   r   )r   NNr   )r§   r¨   r©   rO   rª   rL   r0   r@   rX   r@   rN   rO   r   r   )rJ   r   rc   rL   r0   r@   rX   r@   rN   rO   r±   r²   r   r   )NNNrj   rÉ   NNNr   NF) rJ   rÎ   rÏ   rÐ   r0   r@   r   r   rÑ   r   rÒ   rL   rÓ   rD   rÔ   r   rÕ   rÖ   r×   r   rØ   rL   rÙ   r@   rÚ   r´   rÛ   r   rÜ   r   r   r   )rJ   rÎ   rÏ   r   r0   r@   r   r   rÑ   r   rÒ   rL   rÓ   rD   rÔ   r   rÕ   rÖ   r×   r   rØ   rL   rÙ   r@   rÚ   r´   r;   r<   r   r   )NNNNF)rÏ   r   r   r   rÔ   r   rÕ   rÖ   r×   r   rÚ   r´   r;   r<   r   rL   )	NNrj   rÉ   NNNr   F)rJ   rÎ   rÏ   r   r   r   rÑ   r   rÒ   rL   rÓ   rD   rÔ   r   rÕ   rÖ   r×   r   rØ   rL   rÚ   r´   r;   r<   r   rþ   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r5   r:   r?   rI   rR   rT   r]   ra   rf   r�   r–   rŽ   r‘   r¦   r­   r°   rÍ   rÏ   rú   rý   r  r  r¸   r6   r4   r   r   =   sÊ  € € € € € € Ø+/€DÐ/Ð/Ð/Ñ/ð&ð &ð &ð &ð &ðPð ð ð ð2"ð "ð "ð "ð 59ð'ð 'ð 'ð 'ð 'ð< !Øð;ð ;ð ;ð ;ð ;ð KOð	6ð 	6ð 	6ð 	6ð 	6ð  !Ø#Øð@ð @ð @ð @ð @ð& !Ø#Øð6ð 6ð 6ð 6ð 6ð$ !Ø#Øð
7ð 
7ð 
7ð 
7ð 
7ð !ØØ ðK=ð K=ð K=ð K=ð K=ð` !Ø#ð	2ð 2ð 2ð 2ð 2ð& !Ø#ØðCð Cð Cð Cð Cð +ð +ð +ð +ð +ð !Ø#ØðKð Kð Kð Kð Kð8 Ø Ø#Øð/ð /ð /ð /ð /ð  !Ø#Øð8ð 8ð 8ð 8ð 8ð" Ø Ø#ØðJ8ð 9=ðJ8ð J8ð J8ð J8ð J8ð J8ð` !Ø/3Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ðuð uð uð uð uðv !Ø/3Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð!
ð  #'ð!!
ð !
ð !
ð !
ð !
ð !
ðL 04Ø $Ø%)Ø#Ø$ð'ð #'ð'ð 'ð 'ð 'ð 'ð 'ð< 04Ø!ØØØ $Ø%)Ø#ØØ$ð6ð #'ð6ð 6ð 6ð 6ð 6ð 6ð@ 04Ø!ØØØ $Ø%)Ø#ØØ$ð
ð #'ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r6   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     r4   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      r4   r	  r	    s;   € ð
 ÐÐÐÐÐà"$ .ˆ?ˆ:Œ?˜2ÑÔÐ°d€DØ�ÐÐr6   ÚimagerJ   útuple[int, int]Úvalueúfloat | tuple[int, ...]Úborderúfloat | tuple[int, ...] | NoneÚthreshrL   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   )rV   Ú_color_diffr(   Ú
IndexErrorÚsetÚadd)r  rJ   r  r  r  Úpixelrƒ   r„   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtr}   r0   s                   r4   Ú	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©   rO   rª   úlist[tuple[float, float]]c                ó¼  ‡‡‡‡	— t          |t          ¦  «        sd}t          |¦  «        ‚|dk     rd}t          |¦  «        ‚t          | t          t
          f¦  «        sd}t          |¦  «        ‚t          | ¦  «        dk    r\t          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k    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„} |||¦  «        }ˆ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>   ©rC   rO   rL   ©rm   rn   s     r4   r   z4_compute_regular_polygon_vertices.<locals>.<genexpr>—  s0   è è € ÐHÐH°1•:˜a¥#¥u Ñ.Ô.ÐHÐHÐHÐHÐHÐHr6   z0bounding_circle should only contain numeric datarl   r   c              3  óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S r>   r'  r(  s     r4   r   z4_compute_regular_polygon_vertices.<locals>.<genexpr>�  sA   è è € ð 
ð 
Ø,-�J�q�3¥˜,Ñ'Ô'ð
ð 
ð 
ð 
ð 
ð 
r6   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 floatr‘   úlist[float]rs   rL   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   rq   r   rl   )rÅ   rr   r€   r�   r‚   )r‘   rs   Úcentroids     €r4   Ú_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”+ñð ñ	ô ð
ð 	
r6   rv   c                ó$   •— ‰dg} ‰|| ¦  «        S ©Nr   r¸   )rv   Ústart_pointr-  Úpolygon_radiuss     €€r4   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertexÊ  s   ø€ Ø% qÐ)ˆØˆ˜{¨EÑ2Ô2Ð2r6   r©   rO   rª   c                ó˜   — g }d| z  }dd|z  z
  |z   }t          | ¦  «        D ]'}|                     |¦  «         ||z  }|dk    r|dz  }Œ(|S )Nrq   r¶   g      à?)rŒ   Úappend)r©   rª   r’   rs   Úcurrent_angleÚ_s         r4   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_anglesÎ  so   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÝ�w‘”ð 	%ð 	%ˆAØ�MŠM˜-Ñ(Ô(Ð(Ø˜WÑ$ˆMØ˜sÒ"Ð"Ø Ñ$�øØˆr6   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r¸   r¸   )rm   rv   r2  s     €r4   ro   z5_compute_regular_polygon_vertices.<locals>.<listcomp>Þ  s%   ø€ Ð?Ð?Ð?¨uÐ#Ð# EÑ*Ô*Ð?Ð?Ð?r6   )r‘   r*  rs   rL   r   rÎ   )rv   rL   r   rÎ   )r©   rO   rª   rL   r   r*  )
rC   rO   ræ   r(   r‹   rF   r�   rÆ   r   rL   )
r§   r©   rª   r3   r7  r’   r-  r2  r,  r1  s
         @@@@r4   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‘/”/Ð!å$(­­e¬µd¸?Ñ6KÔ6KÑ$LÔ$LÑ!ˆ�>‘>Ý	ˆ_Ñ	Ô	 Ò	"Ð	"¥z°/À!Ô2DÅtÍUÀmÑ'TÔ'TÐ	"Ýð 
ð 
Ø1@ÀÔ1Cð
ñ 
ô 
ñ 
ô 
ð 	"å˜O¨AÔ.µµe°Ñ=Ô=ð	"ð EˆCÝ˜S‘/”/Ð!åˆ˜qÔ!Ñ"Ô" aÒ'Ð'ØVˆCÝ˜S‘/”/Ð!å��Uœ¥T¨/¸!Ô*<Ñ%=Ô%=Ñ>Ô>ˆÝ�e _°QÔ%7Ñ8Ô8ˆˆð<ð 	õ ˜‰oŒoÐà˜ÒÐØ4ˆÝ˜‰oŒoÐõ �h¥¥e Ñ-Ô-ð Ø2ˆÝ˜‰oŒoÐð
ð 
ð 
ð 
ð 
ð 
ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð
ð 
ð 
ð 
ð ˆ[˜ (Ñ+Ô+€Fð @Ð?Ð?Ð?¸Ð?Ñ?Ô?Ð?r6   Ú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     €€r4   r   z_color_diff.<locals>.<genexpr>ê  s8   øè è € ÐEÐE¨Q�s�5˜”8˜f QœiÑ'Ñ(Ô(ÐEÐEÐEÐEÐEÐEr6   )rC   rF   ÚsumrŒ   r�   )r9  r:  r>  r?  s     @@r4   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ÐEr6   r>   )r   r   r   r   r   r   )r   r  r   r  r/  )r  r   rJ   r  r  r  r  r  r  rL   r   r   )r§   r¨   r©   rO   rª   rL   r   r$  )r9  r  r:  r  r   rL   )!Ú
__future__r   rr   rè   Úcollections.abcr   Útypingr   r  r   r   r	   r
   ÚTYPE_CHECKINGr   Útypesr   r   r   r   Ú_typingr   r   r+   rX   r   r  r   r£   r	  r#  r¬   r  r¸   r6   r4   ú<module>rG     sÍ  ðð@ #Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à€Øð &Ø(Ð(Ð(Ð(Ð(Ð(Ø Ð Ð Ð Ð Ð Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"àÐÐÐÐÐØ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð .3¬ZÔ-?€Ð ?Ð ?Ð ?Ñ ?ððB
ð B
ð B
ð B
ð B
ñ B
ô B
ð B
ðJ#ð #ð #ð #ð #ð"ð ð ð ð ð .2Øð>ð >ð >ð >ð >ðB@ð @ð @ð @ðD	Fð 	Fð 	Fð 	Fð 	Fð 	Fr6   