§
    ¢”j‰�  ã                  ó  — 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 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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Ú	ImageTextF)ÚCallable)Ú
ModuleType)ÚAnyÚAnyStr)Ú
ImageDraw2Ú	ImageFont)Ú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úNImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | 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        ú\/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/PIL/ImageDraw.pyÚ__init__zImageDraw.__init__B   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ØˆŒ	ˆ	ˆ	ó    úGImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFontc                óR   — | j         sddlm}  |j        ¦   «         | _         | j         S )a=  
        Get the current default font.

        To set the default font for this ImageDraw instance::

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

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

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

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

        :returns: An image font.r   ©r   )r   Ú r   Úload_default)r0   r   s     r3   ÚgetfontzImageDraw.getfontj   s:   € ð( Œyð 	1à#Ð#Ð#Ð#Ð#Ð#à.˜	Ô.Ñ0Ô0ˆDŒIØŒyÐr5   Ú	font_sizeúfloat | Nonec                óZ   — |�ddl m}  |j        |¦  «        S |                      ¦   «         S )Nr   r8   )r9   r   r:   r;   )r0   r<   r   s      r3   Ú_getfontzImageDraw._getfont…   s=   € ð Ð Ø#Ð#Ð#Ð#Ð#Ð#à)�9Ô)¨)Ñ4Ô4Ð4à—<’<‘>”>Ð!r5   r-   ú_Ink | Noner/   ú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 ©N)r/   r-   Ú
isinstanceÚstrr   Úgetcolorr   r(   Útupler)   r+   r,   )r0   r-   r/   Ú
result_inkÚresult_fills        r3   Ú_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�Ø˜;Ð&Ð&r5   r   Úxyr   ÚstartÚfloatÚendÚwidthÚintc                óz   — |                       |¦  «        \  }}|� | j                             |||||¦  «         dS dS )zDraw an arc.N)rJ   r+   Údraw_arc)r0   rK   rL   rN   r/   rO   r-   s          r3   ÚarczImageDraw.arc¨   sI   € ð —L’L Ñ&Ô&‰	ˆˆTØˆ?ØŒI×Ò˜r 5¨#¨s°EÑ:Ô:Ð:Ð:Ð:ð ˆ?r5   úSequence[int]Úbitmapc                ó°   — |                      ¦   «          |                      |¦  «        \  }}|€|}|�#| j                             ||j        |¦  «         dS dS )zDraw a bitmap.N)ÚloadrJ   r+   Údraw_bitmapr   )r0   rK   rU   r/   r-   s        r3   rU   zImageDraw.bitmapµ   s^   € ð 	�Š‰ŒˆØ—L’L Ñ&Ô&‰	ˆˆTØˆ;ØˆCØˆ?ØŒI×!Ò! " f¤i°Ñ5Ô5Ð5Ð5Ð5ð ˆ?r5   Úoutlinec                óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a chord.Nr   r   )rJ   r+   Ú
draw_chord©	r0   rK   rL   rN   r/   rY   rO   r-   Úfill_inks	            r3   ÚchordzImageDraw.chordÀ   s‰   € ð Ÿš W¨dÑ3Ô3‰ˆˆXØÐØŒI× Ò   U¨C°¸1Ñ=Ô=Ð=Øˆ?˜s hš˜°5¸A²:°:ØŒI× Ò   U¨C°°a¸Ñ?Ô?Ð?Ð?Ð?ð ˆ?˜˜°:°:r5   c                óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw an ellipse.Nr   r   )rJ   r+   Údraw_ellipse©r0   rK   r/   rY   rO   r-   r]   s          r3   Ú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ð ˆ?˜˜°:°:r5   ú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)rb   )r0   rK   rd   r/   rY   rO   Ú
ellipse_xys          r3   Ú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Ð6r5   r   Újointc                ó  ‡‡— |                       |¦  «        d         }|��b| j                             ‰|‰¦  «         |dk    �rA‰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 )z6Draw a line, or a connected sequence of line segments.r   NÚcurveé   c                ó€   •— g | ]:}t          t          t                   t          ‰||d z   …         ¦  «        ¦  «        ‘Œ;S )é   )r   r   rM   rG   )Ú.0ÚirK   s     €r3   ú
<listcomp>z"ImageDraw.line.<locals>.<listcomp>ú   sK   ø€ ð ð ð àõ �X¥eœ_­e°B°q¸1¸q¹5°y´MÑ.BÔ.BÑCÔCðð ð r5   rm   r   c           
     ó¤   — g | ]M\  }}t          j        t          j        |d          |d          z
  |d         |d         z
  ¦  «        ¦  «        dz  ‘ŒNS )r   r   éh  )ÚmathÚdegreesÚatan2)rn   rL   rN   s      r3   rp   z"ImageDraw.line.<locals>.<listcomp>   sg   € ð ð ð ñ '˜E 3õ œ¥T¤Z°°A´¸¸q¼Ñ0AÀ5ÈÄ8ÈcÐRSÌfÑCTÑ%UÔ%UÑVÔVØñðð ð r5   Úcoordrc   ÚanglerM   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   rm   r   c              3  ó~   K  — | ]8\  }}||d k    rt          j        |¦  «        nt          j        |¦  «        z   V — Œ9dS )r   N)rs   ÚfloorÚceil)rn   ÚpÚp_ds      r3   ú	<genexpr>z9ImageDraw.line.<locals>.coord_at_angle.<locals>.<genexpr>  s[   è è € ð %ð %á &  3ð °C¸!²G°G¥¤¨C¡¤ ÅÄÈ3ÁÄÑPð%ð %ð %ð %ð %ð %r5   )rG   rs   ÚcosÚradiansÚsin)rv   rw   ÚxÚyÚdistancerO   s        €r3   Ú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ð+ð%ñ %ô %ñ  ô  ð r5   é´   rz   é   é   )rO   )rv   rc   rw   rM   r   rx   )rJ   r+   Ú
draw_linesrD   ÚlistrG   r   r   rM   ÚrangeÚlenÚpiesliceÚline)r0   rK   r/   rO   rh   r-   Úpointsro   ÚpointÚanglesr‡   ÚflippedÚcoordsrL   rN   Ú
gap_coordss    ` `            r3   r�   zImageDraw.lineê   s7  øø€ ð �lŠl˜4Ñ Ô  Ô#ˆØ‰?ØŒ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 ˆ?àÐ I Ið7=ð 7=r5   ÚshapeúImage.core._Outlinec                óì   — |                      ¦   «          |                      ||¦  «        \  }}|�| j                             ||d¦  «         |�$||k    r | j                             ||d¦  «         dS dS dS )z(Experimental) Draw a shape.Nr   r   )ÚcloserJ   r+   Údraw_outline)r0   r—   r/   rY   r-   r]   s         r3   r—   zImageDraw.shape7  s€   € ð 	�Š‰ŒˆØŸš W¨dÑ3Ô3‰ˆˆXØÐØŒI×"Ò" 5¨(°AÑ6Ô6Ð6Øˆ?˜s hš˜ØŒI×"Ò" 5¨#¨qÑ1Ô1Ð1Ð1Ð1ð ˆ?˜˜r5   c                óÞ   — |                       ||¦  «        \  }}|�| j                             ||||d¦  «         |�-||k    r)|dk    r%| j                             ||||d|¦  «         dS dS dS dS )zDraw a pieslice.Nr   r   )rJ   r+   Údraw_pieslicer\   s	            r3   r�   zImageDraw.piesliceE  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ð ˆ?˜˜°:°:r5   c                ót   — |                       |¦  «        \  }}|�| j                             ||¦  «         dS dS )z#Draw one or more individual pixels.N)rJ   r+   Údraw_points)r0   rK   r/   r-   s       r3   r’   zImageDraw.pointU  sA   € à—L’L Ñ&Ô&‰	ˆˆTØˆ?ØŒI×!Ò! " cÑ*Ô*Ð*Ð*Ð*ð ˆ?r5   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$   rm   )rJ   r+   Údraw_polygonr   r   ÚnewÚsizeÚDraw)
r0   rK   r/   rY   rO   r-   r]   ÚmaskÚmask_inkr+   s
             r3   ÚpolygonzImageDraw.polygon[  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ð ˆ?˜˜°:°:ð %Ð$r5   Úbounding_circleú!Sequence[Sequence[float] | float]Ún_sidesÚrotationc                óX   — t          |||¦  «        }|                      ||||¦  «         dS )zDraw a regular polygon.N)Ú!_compute_regular_polygon_verticesr§   )r0   r¨   rª   r«   r/   rY   rO   rK   s           r3   Úregular_polygonzImageDraw.regular_polygons  s3   € õ /¨ÀÈÑRÔRˆØ�Š�R˜˜w¨Ñ.Ô.Ð.Ð.Ð.r5   c                óÖ   — |                       ||¦  «        \  }}|�| j                             ||d¦  «         |�+||k    r'|dk    r#| j                             ||d|¦  «         dS dS dS dS )zDraw a rectangle.Nr   r   )rJ   r+   Údraw_rectanglera   s          r3   Ú	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ð ˆ?˜˜°:°:r5   )Úcornersr²   ú$tuple[bool, bool, bool, bool] | Nonec               ó$	  ‡ ‡‡‡‡‡‡‡‡‡‡‡— t          |d         t          t          f¦  «        r5t          t          t          t
                            |¦  «        \  \  ŠŠ\  ŠŠn%t          t          t
                   |¦  «        \  ŠŠŠŠ‰‰k     rd}t          |¦  «        ‚‰‰k     rd}t          |¦  «        ‚‰€dŠ|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)TTTTrm   )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ˆ   rr   r   rz   é  c              3  ó2   •K  — | ]\  }}‰|         ¯|V — Œd S rC   © )rn   ro   Úpartr²   s      €r3   r€   zDImageDraw.rounded_rectangle.<locals>.draw_corners.<locals>.<genexpr>Ó  sG   øè è € ð ð á˜˜4ð ˜q”zðØðð ð ð ð ð r5   r   )rG   Ú	enumerater+   r�   rR   )r�   Úpartsrº   r²   Údr]   Úfull_xÚfull_yr-   r0   rO   Úx0Úx1Úy0Úy1s      €€€€€€€€€€€€r3   Ú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°Ñ)<Ð>Ð>Ð>ð	?ð ?r5   TrŠ   F)r�   rµ   r   r   )rD   rŒ   rG   r   r   rM   r'   ÚroundÚallrb   Úanyr±   rP   rJ   r+   r°   )r0   rK   rd   r/   rY   rO   r²   r2   ÚrrÄ   ÚleftÚrightÚtopÚbottomr½   r]   r¾   r¿   r-   rÀ   rÁ   rÂ   rÃ   s   `    ``       @@@@@@@@@r3   Ú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à�Q‰Jˆå�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ð 8r5   rk   rÉ   Fútuple[float, float]ÚtextúAnyStr | ImageText.Text[AnyStr]ÚanchorÚspacingÚalignrE   Ú	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<   r/   r@   r   rP   c                óH   •— ‰                      | ¦  «        \  }}|€|€J ‚|S |S rC   )rJ   )r/   r-   r]   r0   s      €r3   ÚgetinkzImageDraw.text.<locals>.getink?  s3   ø€ Ø ŸLšL¨Ñ.Ô.‰MˆC�Øˆ{ØÐ+Ð+Ð+Ø�ØˆJr5   r   r-   rØ   rM   r   c                óº  •	— ‰j         }|dk    r‰rd}t          ‰j        ¦  «        }t          ‰j        ¦  «        }t	          j        ‰j        ¦  «        d         t	          j        ‰j        ¦  «        d         f}	  ‰j        j        ‰j        |g‰
¢R ‰‰‰|d‰j	        | |dœ‰¤Ž\  }}||d         z  }||d         z  }nj# t          $ r] 	  ‰j        j        ‰j        |‰‰‰|‰j	        | g‰
¢R d|i‰¤Ž}n/# t          $ r" ‰j                             ‰j        ¦  «        }Y nw xY w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   T)rÔ   rÕ   r×   rØ   Ústroke_filledrÑ   r-   rL   r   rL   rŠ   ro   )r.   rP   r„   r…   rs   Úmodfr   Úgetmask2rÏ   rÑ   ÚAttributeErrorÚgetmaskÚ	TypeErrorÚgetbandÚstructÚpackÚfillbandr   Úpaster£   r+   rX   )r-   rØ   r   r„   r…   rL   r¥   ÚoffsetÚcolorÚ	ink_alpharÛ   rÔ   rÚ   rÕ   Ú
image_textrÜ   r×   r�   r0   s             €€€€€€€€€r3   Ú	draw_textz!ImageDraw.text.<locals>.draw_textT  sq  ø€ Ø”}�Ø 1Ò$Ð$¨Ð$Ø!�DÝ˜œ‘K”K�Ý˜œ‘K”K�Ýœ 4¤6Ñ*Ô*¨1Ô-­t¬y¸¼Ñ/@Ô/@ÀÔ/CÐD�ð!BØ#; :¤?Ô#;Øœ	Øð$ð ð$ð $ð #,Ø!)Ø!)Ø%1Ø&*Ø#œ{ØØ#ð$ð $ð !ð$ð $‘L�D˜&ð ˜ œ‘N�AØ˜ œ‘N�A�AøÝ%ð Bð Bð BðBØ6˜zœÔ6Ø œIØ Ø%Ø$Ø$Ø(Ø œKØð ð "ð ð  ð  ð #(ð ð %ð ð  ˜˜øõ %ð Bð Bð BØ)œ×6Ò6°t´yÑAÔA˜˜˜ðBøøøøøð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¨&°$¸Ñ<Ô<Ð<Ð<Ð<s7   Á:AB> Â>
D%Ã	)C3Ã2D%Ã3)DÄD%ÄDÄD%Ä$D%)r/   r@   r   rP   )r   )r-   rP   rØ   rM   r   r   )rD   r	   ÚTextr?   Úgetr   Úembed_colorÚstrokerØ   rÙ   Ú_split)r0   rK   rÏ   r/   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÙ   rÚ   rÛ   rÜ   rß   r-   Ú
stroke_inkrð   rï   r�   s   `       ```  ```    @@r3   rÏ   zImageDraw.text  sÜ  øøøøøøøøø€ õ0 �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	r5   ©r<   r   c               óH   — |                       |||||||||	|
||||¬¦  «        S ©Nr÷   )rÏ   )r0   rK   rÏ   r/   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÙ   rÚ   r<   s                  r3   Úmultiline_textzImageDraw.multiline_text–  sI   € ð. �yŠyØØØØØØØØØØØØØØð ñ 
ô 
ð 	
r5   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)	r0   rÏ   r   rÔ   rÕ   r×   rÚ   r<   rï   s	            r3   Ú
textlengthzImageDraw.textlength¾  sr   € ð" ˆ<Ø—=’= Ñ+Ô+ˆDÝ”^ØØØŒIØØØð
ñ 
ô 
ˆ
ð ð 	%Ø×"Ò"Ñ$Ô$Ð$Ø×$Ò$Ñ&Ô&Ð&r5   ú!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)r0   rK   rÏ   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÚ   r<   rï   s                 r3   ÚtextbboxzImageDraw.textbboxÝ  sŒ   € ð, ˆ<Ø—=’= Ñ+Ô+ˆDÝ”^Ø�$˜œ	 7¨I°xÀñ
ô 
ˆ
ð ð 	%Ø×"Ò"Ñ$Ô$Ð$Øð 	,Ø×Ò˜lÑ+Ô+Ð+Ø×"Ò" 2 v¨uÑ5Ô5Ð5r5   c               óD   — |                       |||||||||	|
||¬¦  «        S rù   )r  )r0   rK   rÏ   r   rÑ   rÒ   rÓ   rÔ   rÕ   r×   rØ   rÚ   r<   s                r3   Úmultiline_textbboxzImageDraw.multiline_textbboxþ  sC   € ð* �}Š}ØØØØØØØØØØØØð ñ 
ô 
ð 	
r5   rC   )r   r   r   r   r   r   )r   r6   )r<   r=   r   r6   )r-   r@   r/   r@   r   rA   )Nr   )rK   r   rL   rM   rN   rM   r/   r@   rO   rP   r   r   )rK   rT   rU   r   r/   r@   r   r   )NNr   )rK   r   rL   rM   rN   rM   r/   r@   rY   r@   rO   rP   r   r   )
rK   r   r/   r@   rY   r@   rO   rP   r   r   )rK   rc   rd   rM   r/   r@   rY   r@   rO   rP   r   r   )Nr   N)
rK   r   r/   r@   rO   rP   rh   r   r   r   )NN)r—   r˜   r/   r@   rY   r@   r   r   )rK   r   r/   r@   r   r   )r   NNr   )r¨   r©   rª   rP   r«   rM   r/   r@   rY   r@   rO   rP   r   r   )rK   r   rd   rM   r/   r@   rY   r@   rO   rP   r²   r³   r   r   )NNNrk   rÉ   NNNr   NF) rK   rÎ   rÏ   rÐ   r/   r@   r   r   rÑ   r   rÒ   rM   rÓ   rE   rÔ   r   rÕ   rÖ   r×   r   rØ   rM   rÙ   r@   rÚ   rµ   rÛ   r   rÜ   r   r   r   )rK   rÎ   rÏ   r   r/   r@   r   r   rÑ   r   rÒ   rM   rÓ   rE   rÔ   r   rÕ   rÖ   r×   r   rØ   rM   rÙ   r@   rÚ   rµ   r<   r=   r   r   )NNNNF)rÏ   r   r   r   rÔ   r   rÕ   rÖ   r×   r   rÚ   rµ   r<   r=   r   rM   )	NNrk   rÉ   NNNr   F)rK   rÎ   rÏ   r   r   r   rÑ   r   rÒ   rM   rÓ   rE   rÔ   r   rÕ   rÖ   r×   r   rØ   rM   rÚ   rµ   r<   r=   r   rþ   )Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r4   r;   r?   rJ   rS   rU   r^   rb   rg   r�   r—   r�   r’   r§   r®   r±   rÍ   rÏ   rú   rý   r  r  r¹   r5   r3   r   r   =   sÜ  € € € € € € ð 	ð 	ð ð ð ñ ð&ð &ð &ð &ð &ðPð ð ð ð6"ð "ð "ð "ð 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ð` !ð Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð'zð zð zð zð zð@ !ð Ø!ØØØ $Ø%)Ø#ØØ#'Ø$ð'&
ð* #'ð+&
ð &
ð &
ð &
ð &
ð &
ð` Ø $Ø%)Ø#Ø$ð'ð #'ð'ð 'ð 'ð 'ð 'ð 'ðP Ø!ØØØ $Ø%)Ø#ØØ$ð#6ð& #'ð'6ð 6ð 6ð 6ð 6ð 6ðT Ø!ØØØ $Ø%)Ø#ØØ$ð#"
ð& #'ð'"
ð "
ð "
ð "
ð "
ð "
ð "
ð "
r5   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)Úgetattrrä   r   )r   r   s     r3   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)r9   r   r¤   )r   r   r+   s      r3   r	  r	  4  s;   € ð
 ÐÐÐÐÐà"$ .ˆ?ˆ:Œ?˜2ÑÔÐ°d€DØ�ÐÐr5   ÚimagerK   útuple[int, int]Úvalueúfloat | tuple[int, ...]Úborderúfloat | tuple[int, ...] | NoneÚthreshrM   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   )rW   Ú_color_diffr'   Ú
IndexErrorÚsetÚadd)r  rK   r  r  r  Úpixelr„   r…   Ú
backgroundÚedgeÚ	full_edgeÚnew_edgeÚsÚtr~   r/   s                   r3   Ú	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ª   rP   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 rC   ©rD   rP   rM   ©rn   ro   s     r3   r€   z4_compute_regular_polygon_vertices.<locals>.<genexpr>¸  s0   è è € ÐHÐH°1•:˜a¥#¥u Ñ.Ô.ÐHÐHÐHÐHÐHÐHr5   z0bounding_circle should only contain numeric datarm   r   c              3  óN   K  — | ] }t          |t          t          f¦  «        V — Œ!d S rC   r%  r&  s     r3   r€   z4_compute_regular_polygon_vertices.<locals>.<genexpr>¾  sA   è è € ð 
ð 
Ø,-�J�q�3¥˜,Ñ'Ô'ð
ð 
ð 
ð 
ð 
ð 
r5   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]rt   rM   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   rr   r   rm   )rÅ   rs   r�   r‚   rƒ   )r’   rt   Úcentroids     €r3   Ú_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”+ñð ñ	ô ð
ð 	
r5   rw   c                ó$   •— ‰dg} ‰|| ¦  «        S ©Nr   r¹   )rw   Ústart_pointr+  Úpolygon_radiuss     €€r3   Ú_compute_polygon_vertexzB_compute_regular_polygon_vertices.<locals>._compute_polygon_vertexë  s   ø€ Ø% qÐ)ˆØˆ˜{¨EÑ2Ô2Ð2r5   rª   rP   r«   c                ó˜   — g }d| z  }dd|z  z
  |z   }t          | ¦  «        D ]'}|                     |¦  «         ||z  }|dk    r|dz  }Œ(|S )Nrr   r·   g      à?)r�   Úappend)rª   r«   r“   rt   Úcurrent_angleÚ_s         r3   Ú_get_anglesz6_compute_regular_polygon_vertices.<locals>._get_anglesï  so   € ØˆØ˜‘-ˆà˜s W™}Ñ,°Ñ8ˆÝ�w‘”ð 	%ð 	%ˆAØ�MŠM˜-Ñ(Ô(Ð(Ø˜WÑ$ˆMØ˜sÒ"Ð"Ø Ñ$�øØˆr5   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r¹   r¹   )rn   rw   r0  s     €r3   rp   z5_compute_regular_polygon_vertices.<locals>.<listcomp>ÿ  s%   ø€ Ð?Ð?Ð?¨uÐ#Ð# EÑ*Ô*Ð?Ð?Ð?r5   )r’   r(  rt   rM   r   rÎ   )rw   rM   r   rÎ   )rª   rP   r«   rM   r   r(  )
rD   rP   ræ   r'   rŒ   rG   rŽ   rÆ   r   rM   )
r¨   rª   r«   r2   r5  r“   r+  r0  r*  r/  s
         @@@@r3   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ð @Ð?Ð?Ð?¸Ð?Ñ?Ô?Ð?r5   Ú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 rC   )Úabs)rn   ro   ÚfirstÚseconds     €€r3   r€   z_color_diff.<locals>.<genexpr>  s8   øè è € ÐEÐE¨Q�s�5˜”8˜f QœiÑ'Ñ(Ô(ÐEÐEÐEÐEÐEÐEr5   )rD   rG   Úsumr�   rŽ   )r7  r8  r<  r=  s     @@r3   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ÐEr5   rC   )r   r   r   r   r   r   )r   r  r   r  r-  )r  r   rK   r  r  r  r  r  r  rM   r   r   )r¨   r©   rª   rP   r«   rM   r   r"  )r7  r  r8  r  r   rM   )!Ú
__future__r   rs   rè   Úcollections.abcr   Útypingr   r9   r   r   r	   ÚTYPE_CHECKINGr
   Útypesr   r   r   r   r   Ú_typingr   r   r*   rY   r   r  r   r¤   r	  r!  r­   r  r¹   r5   r3   ú<module>rE     sÍ  ðð@ #Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à€Øð &Ø(Ð(Ð(Ð(Ð(Ð(Ø Ð Ð Ð Ð Ð Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"à'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð .3¬ZÔ-?€Ð ?Ð ?Ð ?Ñ ?ððc
ð c
ð c
ð c
ð c
ñ c
ô c
ð c
ðL#ð #ð #ð #ð #ð"ð ð ð ð ð .2Øð>ð >ð >ð >ð >ðB@ð @ð @ð @ðD	Fð 	Fð 	Fð 	Fð 	Fð 	Fr5   