§
    èƒñjx±  ã                  óB  — d Z ddlmZ ddlmZmZmZ ddlZddlm	Z	m
Z
mZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZ ddlmZ  G d„ de¦  «        ZdZ G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ de¦  «        Z" G d„ de¦  «        Z# G d„ de¦  «        Z$ G d„ de¦  «        Z% G d „ d!e¦  «        Z& G d"„ d#e&¦  «        Z' G d$„ d%e&¦  «        Z( G d&„ d'e&¦  «        Z) G d(„ d)e¦  «        Z* G d*„ d+e¦  «        Z+ G d,„ d-e¦  «        Z, G d.„ d/e¦  «        Z- G d0„ d1e¦  «        Z. G d2„ d3e¦  «        Z/ G d4„ d5e¦  «        Z0 G d6„ d7e0¦  «        Z1 G d8„ d9e¦  «        Z2 G d:„ d;e¦  «        Z3 G d<„ d=e¦  «        Z4dS )>z Lines, Arrows, and Labels é    )Úannotations)ÚOptionalÚSequenceÚUnionNé   )ÚSegmentÚSegmentCircleÚ
SegmentArcÚSegmentPolyÚSegmentBezieré   )ÚElementÚElement2Term)Úgap)ÚXYÚPointÚArcdirectionÚBilateralDirectionÚ	Linestyle)Úutil)Údrawing_stackc                  ó4   ‡ — e Zd ZdZdddœZddœd
ˆ fd	„Zˆ xZS )ÚLinea   Straight Line

        Args:
            arrow: arrowhead specifier, such as '->', '<-', '<->', '-o', or '\|->'

        Keyword Args:
            arrowwidth: Width of arrowhead [default: .15]
            arrowlength: Length of arrowhead [default:  0.25]
    ç333333Ã?ç      Ð?)Ú
arrowwidthÚarrowlengthN©Úarrowr   úOptional[str]c               óÆ   •—  t          ¦   «         j        di |¤Ž | j        d         }| j        d         }| j                             t          dg|||¬¦  «        ¦  «         d S )Nr   r   ©r   r   ©r   r   r   © )ÚsuperÚ__init__ÚparamsÚsegmentsÚappendr   )Úselfr   Úkwargsr   r   Ú	__class__s        €úW/data/share/cad/hardware/.venv/lib/python3.11/site-packages/schemdraw/elements/lines.pyr&   zLine.__init__   s€   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø œK¨Ô5ˆ
Ø!œ[¨Ô7ˆØŒ×Ò�W f X°UØ0:ÈðUñ Uô Uñ 	Vô 	Vð 	Vð 	Vð 	Vó    )r   r    ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_element_defaultsr&   Ú__classcell__©r,   s   @r-   r   r      sw   ø€ € € € € ðð ð Øðð Ðð 26ð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vð Vr.   r   r   c                  ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚDataBusLinez* Straight Line with bus indication stripe c           
     óè   •—  t          ¦   «         j        di |¤Ž | j                             t	          dt
          t           dz  t          ft          dz  t           ft
          dg¦  «        ¦  «         d S )Nr"   r   r$   )r%   r&   r(   r)   r   r   Ú
bus_stroke©r*   r+   r,   s     €r-   r&   zDataBusLine.__init__'   sy   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØŒ×Ò�WØ•S�J˜; q™=­*Ð5½
À1¹ÅzÀkÐ7RÝ�&ðñô ñ 	ô 	ð 	ð 	ð 	r.   ©r0   r1   r2   r3   r&   r5   r6   s   @r-   r8   r8   %   s>   ø€ € € € € Ø4Ð4ðð ð ð ð ð ð ð ð r.   r8   c                  ó.   ‡ — e Zd ZdZddddœdˆ fd
„Zˆ xZS )ÚArrowa.   Arrow

        Args:
            double: Show arrowhead on both ends

        Keyword Args:
            arrow: arrowhead specifier, such as '->', '<-', '<->', '-o', or '\|->'
            arrowwidth: Width of arrow head [default: 0.15]
            arrowlength: Length of arrow head [default: 0.25]
    FN)Údoubler   r   r?   Úboolr   úOptional[float]r   c               ó¬   •— |r|                      dd¦  «         n|                      dd¦  «          t          ¦   «         j        di |¤Ž d| j        d<   d S )Nr   z<->ú->r"   Úcenterr$   )Ú
setdefaultr%   r&   Úanchors)r*   r?   r   r   r+   r,   s        €r-   r&   zArrow.__init__9   sm   ø€ ð
 ð 	-Ø×Ò˜g uÑ-Ô-Ð-Ð-à×Ò˜g tÑ,Ô,Ð,Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð "(ˆŒ�XÑÐÐr.   )r?   r@   r   rA   r   rA   r<   r6   s   @r-   r>   r>   .   s\   ø€ € € € € ð	ð 	ð !&Ø/3Ø04ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (r.   r>   c                  ó.   ‡ — e Zd ZdZddddœZˆ fd„Zˆ xZS )ÚGapa;   Gap for labeling port voltages, for example. Draws nothing,
        but provides place to attach a label such as ('+', 'V', '-').

        Keyword Args:
            lblloc: Label location within the gap [center]
            lblalign: Label alignment [(center, center)]
            lblofst: Offset to label [0]
    rD   )rD   rD   r   )ÚlbllocÚlblalignÚlblofstc                óœ   •—  t          ¦   «         j        di |¤Ž | j                             t	          dt
          dgd¬¦  «        ¦  «         d S )Nr"   ©r   r   F)Úvisibler$   )r%   r&   r(   r)   r   r   r;   s     €r-   r&   zGap.__init__V   sP   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØŒ×Ò�W f­c°6Ð%:ÀEÐJÑJÔJÑKÔKÐKÐKÐKr.   r/   r6   s   @r-   rH   rH   H   sc   ø€ € € € € ðð ð Ø(Øðð Ðð
Lð Lð Lð Lð Lð Lð Lð Lð Lr.   rH   c                  ó6   ‡ — e Zd ZdZdddœZdddœdˆ fd
„Zˆ xZS )ÚDotz˜ Connection Dot

        Keyword Args:
            radius: Radius of dot [default: 0.075]
            open: Draw as an open circle [default: False]
    ç333333³?F©ÚradiusÚopenNrS   rA   rT   úOptional[bool]c               óN  •—  t          ¦   «         j        di |¤Ž | j        d         rdnd}d| j        d<   d| j        d<   d| j        d<   d| j        d<   d	| j        d
<   d| j        d<   || j        d<   | j                             t          d| j        d         ¦  «        ¦  «         d S )NrT   ÚbgTr"   ÚstartrD   ÚendÚdropr   Úthetaé   ÚzorderÚfillrS   r$   )r%   r&   r'   rF   Ú	elmparamsr(   r)   r	   )r*   rS   rT   r+   r^   r,   s        €r-   r&   zDot.__init__e   s¸   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø”{ 6Ô*Ð4ˆtˆt°ˆØ &ˆŒ�WÑØ!'ˆŒ�XÑØ$ˆŒ�UÑØ!'ˆŒ�vÑØ"#ˆŒ�wÑØ#$ˆŒ�xÑ Ø!%ˆŒ�vÑØŒ×Ò�]¨6°4´;¸xÔ3HÑIÔIÑJÔJÐJÐJÐJr.   )rS   rA   rT   rU   r/   r6   s   @r-   rP   rP   [   sz   ø€ € € € € ðð ð Øðð Ðð ,0Ø(,ðKð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kð Kr.   rP   c                  ó.   ‡ — e Zd ZdZddddœZˆ fd„Zˆ xZS )Ú	Arrowheadz™ Arrowhead 
    
        Args:
            headwidth: width of arrow head [default: .15]
            headlength: length of arrow head [default: .25]
    r   r   )Ú	headwidthÚ
headlengthrK   c                ó
  •—  t          ¦   «         j        d
i |¤Ž | j        d         }| j        d         }| j                             t          | dfdg||d¬¦  «        ¦  «         d| j        d<   d| j        d<   d| j        d	<   d S )Nrb   rc   r   r"   rC   )r   r   r   rX   rD   rY   r$   )r%   r&   r'   r(   r)   r   rF   )r*   r+   rb   rc   r,   s       €r-   r&   zArrowhead.__init__�   s¬   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø”K Ô,ˆ	Ø”[ Ô.ˆ
ØŒ×Ò�WØˆ[˜!Ð˜fð&&Ø2;ÈÐ[_ðañ aô añ 	bô 	bð 	bà &ˆŒ�WÑØ!'ˆŒ�XÑØ$ˆŒ�UÑÐÐr.   r/   r6   s   @r-   ra   ra   u   sZ   ø€ € € € € ðð ð ØØðð Ðð
%ð %ð %ð %ð %ð %ð %ð %ð %r.   ra   c                  ó6   ‡ — e Zd ZdZdddœZdddœdˆ fd„Zˆ xZS )Ú	DotDotDota   Ellipsis element

        Keyword Args:
            radius: Radius of dots [default 0.075]
            open: Draw dots as open circles [default: False]

        "Ellipsis" is a reserved keyword in Python used for slicing,
        thus the name DotDotDot.
    rQ   FrR   NrS   rA   rT   rU   ÚreturnÚNonec               óŽ  •—  t          ¦   «         j        di |¤Ž | j        d         }| j        d         rdnd}|| j        d<   | j                             t          d|¦  «        ¦  «         | j                             t          d|¦  «        ¦  «         | j                             t          d|¦  «        ¦  «         d	| j        d
<   d S )NrS   rT   rW   Tr^   )ç      à?r   rM   )ç      ø?r   )r   r   rZ   r$   )r%   r&   r'   r_   r(   r)   r	   )r*   rS   rT   r+   Úrr^   r,   s         €r-   r&   zDotDotDot.__init__š   sÁ   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø”;˜xÔ(ˆØ”{ 6Ô*Ð4ˆtˆt°ˆØ!%ˆŒ�vÑØŒ×Ò�]¨7°AÑ6Ô6Ñ7Ô7Ð7ØŒ×Ò�]¨6°1Ñ5Ô5Ñ6Ô6Ð6ØŒ×Ò�]¨8°QÑ7Ô7Ñ8Ô8Ð8Ø!'ˆŒ�vÑÐÐr.   )rS   rA   rT   rU   rg   rh   r/   r6   s   @r-   rf   rf   Œ   sn   ø€ € € € € ðð ð Øðð Ðð
 ,0Ø(,ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (r.   rf   c                  ó`   ‡ — e Zd ZdZdddœd ˆ fd„Zd!d"d„Zd!d#d„Zd$d%d„Zd$d%d„Zd&ˆ fd„Z	ˆ xZ
S )'ÚWireu‘   Connect the .at() and .to() positions with lines depending on shape

        Args:
            shape: Determines shape of wire:
                `-`: straight line
                `|-`: right-angle line starting vertically
                `-|`: right-angle line starting horizontally
                'z': diagonal line with horizontal end segments
                'N': diagonal line with vertical end segments
                `n`: n- or u-shaped lines
                `c`: c- or â†„-shaped lines
            k: Distance before the wire changes directions in `n` and `c` shapes.
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o'
    ú-r   Nr   ÚshapeÚstrÚkÚfloatr   r    c               ó˜   •—  t          ¦   «         j        di |¤Ž || j        d<   || j        d<   | j                             dd¦  «         d S )Nrp   rr   Úto)é   éþÿÿÿr$   )r%   r&   Ú_userparamsrE   )r*   rp   rr   r   r+   r,   s        €r-   r&   zWire.__init__·   sY   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø$)ˆÔ˜Ñ!Ø !ˆÔ˜ÑØÔ×#Ò# D¨'Ñ2Ô2Ð2Ð2Ð2r.   r   Úxyr   ÚdxÚdyrg   ú	'Element'c                óv   — t          |¦  «        }t          |j        |z   |j        |z   f¦  «        | j        d<   | S ©z¿ Specify ending position

            Args:
                xy: Ending position of element
                dx: X-offset from xy position
                dy: Y-offset from xy position
        ru   ©r   ÚxÚyrx   ©r*   ry   rz   r{   s       r-   ru   zWire.to¾   ó:   € õ �2‰YŒYˆÝ!&¨¬¨r©	°2´4¸"±9Ð'=Ñ!>Ô!>ˆÔ˜ÑØˆr.   c                ó8   — t          ||f¦  «        | j        d<   | S ©z4 Specify ending position relative to start position Údelta©r   rx   ©r*   rz   r{   s      r-   r†   z
Wire.deltaÊ   ó   € å$)¨2¨r¨(¡O¤OˆÔ˜Ñ!Øˆr.   FrT   r@   c                ó"   — |sdnd| j         d<   | S )z% Add a dot to the end of the element TrT   Údot©rx   ©r*   rT   s     r-   r‹   zWire.dotÏ   s   € à.2Ð"> $ $¸ˆÔ˜ÑØˆr.   c                ó"   — |sdnd| j         d<   | S )z- Add a dot to the input/start of the element TrT   ÚidotrŒ   r�   s     r-   r�   z	Wire.idotÔ   s   € à/3Ð#? 4 4¸ˆÔ˜Ñ Øˆr.   ÚdwgxyÚdwgthetaútuple[Point, float]c           	     ó
  •— | j                              ¦   «          | j                              |¦  «         | j        s|                      ¦   «          d| j        d<   | j                             d|¦  «        }| j                             d|¦  «        }| j                             dd¦  «        }| j                             dd¦  «        }| j                             dd	¦  «        }| j                             d
d¦  «        }	|�|\  }
}n"|d         |d         z
  }
|d         |d         z
  }|d	k    rA| j                             t          d|
|fg|¬¦  «        ¦  «         |
dz  |dz  f| j
        d<   �nˆ|dk    rS| j                             t          d|
df|
|fg|¬¦  «        ¦  «         |
|dz  f| j
        d<   |dk    rdnd| j        d<   �n/|dk    rS| j                             t          dd|f|
|fg|¬¦  «        ¦  «         |
dz  |f| j
        d<   |
dk    rdnd| j        d<   �nÖ|dv r‚|
dk    rt          |	¦  «        }	nt          |	¦  «         }	| j                             t          d|	df|
|	z
  |f|
|fg|¬¦  «        ¦  «         |
dz  |dz  f| j
        d<   |
dk    rdnd| j        d<   �nP|dk    r�|dk    rt          |	¦  «        }	nt          |	¦  «         }	| j                             t          dd|	f|
||	z
  f|
|fg|¬¦  «        ¦  «         |
dz  |dz  f| j
        d<   |dk    rdnd| j        d<   nÉ|dk    rU| j                             t          dd|	f|
|	f|
|fg|¬¦  «        ¦  «         |
dz  |	f| j
        d<   ||	k    rdnd| j        d<   nn|dk    rU| j                             t          d|	df|	|f|
|fg|¬¦  «        ¦  «         |	|dz  f| j
        d<   |
|	k    rdnd| j        d<   nt          d|› d�¦  «        ‚| j                             dd¦  «        rB| j        d         dk    rdnd }| j                             t          |
|fd!|d"¬#¦  «        ¦  «         | j                             d$d¦  «        r@| j        d$         dk    rdnd }| j                             t          dd!|d"¬#¦  «        ¦  «         d| j        d%<   |
|f| j        d&<   t          d¦  «        | j
        d'<   t          |
|f¦  «        | j
        d(<    t!          ¦   «         j        ||fi |¤ŽS ))ú) Calculate absolute placement of Element r   r[   Úatru   r†   Nr   rp   ro   rr   r   r"   r   r   Úmidz-|éZ   é¦ÿÿÿÚ	dropthetaz|-é´   )ÚzÚZÚNÚnÚczUndefined shape parameter `z`.r‹   FrT   rW   TrQ   rv   )rS   r^   r]   r�   rI   rZ   rX   rY   )Ú
_dwgparamsÚclearÚupdateÚ_positionedÚ	_positionr'   Úgetr(   r)   r   rF   r_   ÚabsÚ
ValueErrorr	   r   r%   Ú_place)r*   r�   r‘   Ú	dwgparamsry   ru   r†   r   rp   rr   rz   r{   r^   r,   s                €r-   r¨   zWire._placeÙ   s}  ø€ àŒ×ÒÑÔÐØŒ×Ò˜yÑ)Ô)Ð)ØÔð 	Ø�NŠNÑÔÐà ˆŒ�GÑØŒ[�_Š_˜T 5Ñ)Ô)ˆØŒ[�_Š_˜T 5Ñ)Ô)ˆØ”—’ ¨Ñ.Ô.ˆØ”—’ ¨Ñ.Ô.ˆØ”—’ ¨Ñ-Ô-ˆØŒK�OŠO˜C Ñ#Ô#ˆØÐØ‰FˆB��à�A”˜˜Aœ‘ˆBØ�A”˜˜Aœ‘ˆBà�CŠ<ˆ<ØŒM× Ò ¥¨&°2°r°(Ð);À5Ð!IÑ!IÔ!IÑJÔJÐJØ#% a¡4¨¨A© ,ˆDŒL˜ÑÑØ�dŠ]ˆ]ØŒM× Ò ¥¨&°2°q°'¸BÀ¸8Ð)DÈEÐ!RÑ!RÔ!RÑSÔSÐSØ#% r¨!¡t *ˆDŒL˜ÑØ02°Q²°¨"¨"¸CˆDŒN˜;Ñ'Ñ'Ø�dŠ]ˆ]ØŒM× Ò ¥¨&°1°b°'¸BÀ¸8Ð)DÈEÐ!RÑ!RÔ!RÑSÔSÐSØ#% a¡4¨ *ˆDŒL˜ÑØ/1°Aªv¨v¨!¨!¸3ˆDŒN˜;Ñ'Ñ'Ø�jÐ Ð Ø�AŠvˆvÝ˜‘F”F��å˜‘V”V�G�ØŒM× Ò ¥¨&°1°a°&¸2¸a¹4À¸*ÀrÈ2ÀhÐ)OÐW\Ð!]Ñ!]Ô!]Ñ^Ô^Ð^Ø#% a¡4¨¨A© ,ˆDŒL˜ÑØ/1°Aªv¨v¨!¨!¸3ˆDŒN˜;Ñ'Ñ'Ø�cŠ\ˆ\Ø�AŠvˆvÝ˜‘F”F��å˜‘V”V�G�ØŒM× Ò ¥¨&°1°a°&¸2¸rÀ!¹t¸*ÀrÈ2ÀhÐ)OÐW\Ð!]Ñ!]Ô!]Ñ^Ô^Ð^Ø#% a¡4¨¨A© ,ˆDŒL˜ÑØ-/°!ªV¨V r r¸ˆDŒK˜Ñ$Ð$Ø�cŠ\ˆ\ØŒM× Ò ¥¨&°1°a°&¸2¸q¸'ÀBÈÀ8Ð)LÐTYÐ!ZÑ!ZÔ!ZÑ[Ô[Ð[Ø#% a¡4¨ )ˆDŒL˜ÑØ-/°!ªV¨V r r¸ˆDŒK˜Ñ$Ð$Ø�cŠ\ˆ\ØŒM× Ò ¥¨&°1°a°&¸1¸b¸'ÀBÈÀ8Ð)LÐTYÐ!ZÑ!ZÔ!ZÑ[Ô[Ð[Ø#$ b¨¡d )ˆDŒL˜ÑØ,.°ªF¨F q q¸ˆDŒK˜Ñ$Ð$åÐD¸5ÐDÐDÐDÑEÔEÐEàŒ;�?Š?˜5 %Ñ(Ô(ð 	]Ø-1¬[¸Ô-?À6Ò-IÐ-I T TÈtˆDØŒM× Ò ¥°°B¨xÀÈDÐYZÐ![Ñ![Ô![Ñ\Ô\Ð\ØŒ;�?Š?˜6 5Ñ)Ô)ð 	[Øœ; vÔ.°&Ò8Ð8�4�4¸dˆDØŒM× Ò ¥¨v¸eÈ$ÐWXÐ!YÑ!YÔ!YÑZÔZÐZà#(ˆŒ�xÑ Ø"$ b ˆŒ�vÑÝ % f¡¤ˆŒ�WÑÝ# R¨ H™oœoˆŒ�UÑØ�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;r.   )ro   r   )rp   rq   rr   rs   r   r    r"   ©ry   r   rz   rs   r{   rs   rg   r|   ©rz   rs   r{   rs   rg   r|   )F)rT   r@   rg   r|   ©r�   r   r‘   rs   rg   r’   )r0   r1   r2   r3   r&   ru   r†   r‹   r�   r¨   r5   r6   s   @r-   rn   rn   ¨   så   ø€ € € € € ðð ð3Ø(,ð3ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð
ð ð ð ð ð
ð ð ð ð ð
E<ð E<ð E<ð E<ð E<ð E<ð E<ð E<ð E<ð E<r.   rn   c                  óF   ‡ — e Zd ZdZddˆ fd„Zddd„Zddd„Zdˆ fd„Zˆ xZS )ÚArc2aÊ   Arc Element

        Use `at` and `to` methods to define endpoints.

        Arc2 is a quadratic Bezier curve with control point
        halfway between the endpoints, generating a
        symmetric 'C' curve.

        Args:
            k: Control point factor. Higher k means more curvature.
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o'

        Anchors:
            start
            end
            ctrl
            mid
    rj   Nrr   rs   r   r    c                óV   •—  t          ¦   «         j        di |¤Ž || _        || _        d S ©Nr$   )r%   r&   rr   r   )r*   rr   r   r+   r,   s       €r-   r&   zArc2.__init__4  s2   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒØˆŒ
ˆ
ˆ
r.   r   ry   r   rz   r{   rg   r|   c                óv   — t          |¦  «        }t          |j        |z   |j        |z   f¦  «        | j        d<   | S r~   r   r‚   s       r-   ru   zArc2.to9  rƒ   r.   c                ó8   — t          ||f¦  «        | j        d<   | S ©z Specify change in position r†   r‡   rˆ   s      r-   r†   z
Arc2.deltaE  r‰   r.   r�   r‘   r’   c           
     óf  •— || _         | j        s|                      ¦   «          t          | j                             d|¦  «        ¦  «        }t          | j                             dt          |j        dz   |j        f¦  «        ¦  «        ¦  «        }| j                             dd¦  «        }|�|\  }}n|j        |j        z
  }|j        |j        z
  }t          |dz  || j        z  z
  |dz  || j        z  z   f¦  «        }	t          |dz  || j        z  dz  z
  |dz  || j        z  dz  z   f¦  «        }
| j	         
                    t          t          d¦  «        |	t          ||f¦  «        f| j        ¬¦  «        ¦  «         |	| j        d	<   |
| j        d
<   d| j        d<   d
| j        d<   t          d¦  «        | j        d<   t          ||f¦  «        | j        d<   t          ||f¦  «        | j        d<   d}d}d}d}t          j        |
j        |	j        d¬¦  «        rd}d}n|
j        |	j        k    rd}d}t          j        |
j        |	j        d¬¦  «        rd}n+|
j        |	j        k    rd}d}d}n|
j        |	j        k     rd}d}||f| j        d<   ||f| j        d<    t#          ¦   «         j        ||fi |¤ŽS )r”   r•   ru   rv   r†   Nr   r"   r   Úctrlr–   r   r[   rI   rX   rY   rZ   ÚbottomÚleftçš™™™™™¹?ç        g{®Gáz„?)Úabs_tolrD   Útopçš™™™™™¹¿ÚrightrK   rJ   )r    r£   r¤   r   r'   r¥   r€   r�   rr   r(   r)   r   r   rF   r_   ÚmathÚiscloser%   r¨   )r*   r�   r‘   r©   ry   ru   r†   rz   r{   Úpar–   ÚvalignÚhalignÚvofstÚhofstr,   s                  €r-   r¨   zArc2._placeJ  sÆ  ø€ à#ˆŒØÔð 	Ø�NŠNÑÔÐå˜$œ+Ÿ/š/¨$°Ñ6Ô6Ñ7Ô7ˆÝ˜$œ+Ÿ/š/¨$µ°r´t¸A±v¸r¼t°nÑ0EÔ0EÑFÔFÑGÔGˆØ”—’ ¨Ñ.Ô.ˆØÐØ‰FˆB��à”˜œ‘ˆBØ”˜œ‘ˆBÝ�B�q‘D˜˜DœF™‘N B q¡D¨¨D¬F©¡NÐ3Ñ4Ô4ˆÝ�R˜‘T˜"˜TœV™) A™+Ñ% r¨!¡t¨B¨t¬v©I°a©KÑ'7Ð8Ñ9Ô9ˆØŒ×Ò�]Ý�6‰]Œ]˜B¥ r¨2 h¡¤Ð0¸¼
ðDñ Dô Dñ 	Eô 	Eð 	Eð  "ˆŒ�VÑØ!ˆŒ�UÑØ"#ˆŒ�wÑØ#(ˆŒ�xÑ Ý % f¡¤ˆŒ�WÑÝ# R¨ H™oœoˆŒ�UÑÝ!&¨¨B x¡¤ˆŒ�vÑØˆØˆØˆØˆÝŒ<˜œ˜rœt¨SÐ1Ñ1Ô1ð 	ØˆFØˆEˆEØŒU�R”TŠ\ˆ\ØˆFØˆEåŒ<˜œ˜rœt¨SÐ1Ñ1Ô1ð 	ØˆFˆFØŒU�R”TŠ\ˆ\ØˆFØˆEØˆEˆEØŒU�R”TŠ\ˆ\ØˆEØˆEà%*¨E NˆŒ�yÑ!Ø&,¨fÐ%5ˆŒ�zÑ"Ø�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;r.   )rj   N)rr   rs   r   r    r"   rª   r«   r¬   )	r0   r1   r2   r3   r&   ru   r†   r¨   r5   r6   s   @r-   r®   r®   !  sœ   ø€ € € € € ðð ð$ð ð ð ð ð ð ð

ð 
ð 
ð 
ð 
ðð ð ð ð ð
1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<r.   r®   c                  óh   ‡ — e Zd ZdZdddœZ	 	 	 	 d"dddœd#ˆ fd„Zd$d%d„Zd$d&d„Zd'ˆ fd„Zd(d!„Z	ˆ xZ
S ))ÚArc3a¼   Arc Element

        Use `at` and `to` methods to define endpoints.

        Arc3 is a cubic Bezier curve. Control points are set
        to extend the curve at the given angle for each endpoint.

        Args:
            k: Control point factor. Higher k means tighter curve.
            th1: Angle at which the arc leaves start point
            th2: Angle at which the arc leaves end point
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o'
            arrowlength: Length of arrowhead [default: 0.25]
            arrowwidth: Width of arrowhead [default: 0.2]

        Anchors:
            start
            end
            center
            ctrl1
            ctrl2
    r   çš™™™™™É?©r   r   ç      è?r¹   rš   Nrr   rs   Úth1Úth2r   r    r   rA   r   c               ó
  •—  t          ¦   «         j        di |¤Ž | j                             dt	          d¦  «        ¦  «         || _        t          j        |¦  «        | _        t          j        |¦  «        | _	        || _
        d S )Nru   rM   r$   )r%   r&   rx   rE   r   rr   r¾   ÚradiansrÊ   rË   r   ©	r*   rr   rÊ   rË   r   r   r   r+   r,   s	           €r-   r&   zArc3.__init__™  su   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØÔ×#Ò# D­%°©-¬-Ñ8Ô8Ð8ØˆŒÝ”< Ñ$Ô$ˆŒÝ”< Ñ$Ô$ˆŒØˆŒ
ˆ
ˆ
r.   r   ry   r   rz   r{   rg   r|   c                óv   — t          |¦  «        }t          |j        |z   |j        |z   f¦  «        | j        d<   | S r~   r   r‚   s       r-   ru   zArc3.to©  rƒ   r.   c                ó8   — t          ||f¦  «        | j        d<   | S r³   r‡   rˆ   s      r-   r†   z
Arc3.deltaµ  r‰   r.   r�   r‘   r’   c                ó  •— || _         | j        s|                      ¦   «          d| j        d<   t	          | j                             d|¦  «        ¦  «        }t	          | j                             d|¦  «        ¦  «        }| j                             dd¦  «        }|�|\  }}n|j        |j        z
  }|j        |j        z
  }t	          || j        z  t          j
        | j        ¦  «        z  || j        z  t          j        | j        ¦  «        z  f¦  «        }	t	          ||| j        z  t          j
        | j        ¦  «        z  z   ||| j        z  t          j        | j        ¦  «        z  z   f¦  «        }
| j                             t!          t	          d¦  «        |	|
t	          ||f¦  «        f| j        | j        d         | j        d	         ¬
¦  «        ¦  «         t	          |dz  |dz  f¦  «        | j        d<   t	          d¦  «        | j        d<   t	          ||f¦  «        | j        d<   |	| j        d<   |
| j        d<   t	          ||f¦  «        | j        d<   |                      ||¦  «          t+          ¦   «         j        ||fi |¤ŽS )r”   r   r[   r•   ru   r†   Nr"   r   r   ©r   r   r   r   rD   rX   rY   Úctrl1Úctrl2rZ   )r    r£   r¤   r'   r   r¥   r€   r�   rr   r¾   ÚcosrÊ   ÚsinrË   r(   r)   r   r   rF   r_   Ú	_setlabelr%   r¨   )r*   r�   r‘   r©   ry   ru   r†   rz   r{   Úpa1Úpa2r,   s              €r-   r¨   zArc3._placeº  sU  ø€ à#ˆŒØÔð 	Ø�NŠNÑÔÐà ˆŒ�GÑÝ˜$œ+Ÿ/š/¨$°Ñ6Ô6Ñ7Ô7ˆÝ˜$œ+Ÿ/š/¨$°Ñ6Ô6Ñ7Ô7ˆØ”—’ ¨Ñ.Ô.ˆØÐØ‰FˆB��à”˜œ‘ˆBØ”˜œ‘ˆBÝ�R˜œ‘Y�tœx¨¬Ñ1Ô1Ñ1Ø˜œ‘Y�tœx¨¬Ñ1Ô1Ñ1ð3ñ 4ô 4ˆå�R˜˜4œ6™	¥$¤(¨4¬8Ñ"4Ô"4Ñ4Ñ4Ø˜˜4œ6™	¥$¤(¨4¬8Ñ"4Ô"4Ñ4Ñ4ð6ñ 7ô 7ˆàŒ×Ò�]­E°&©M¬M¸3ÀÅUÈBÐPRÈ8Á_Ä_Ð+UØ15´Ø7;´{À=Ô7QØ6:´kÀ,Ô6OðQñ Qô Qñ 	Rô 	Rð 	Rõ "'¨¨1©¨b°©d |Ñ!4Ô!4ˆŒ�XÑÝ % f¡¤ˆŒ�WÑÝ# R¨ H™oœoˆŒ�UÑØ #ˆŒ�WÑØ #ˆŒ�WÑÝ!&¨¨B x¡¤ˆŒ�vÑØ�Š�r˜2ÑÔÐØ�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;r.   rh   c                ón   — d| j         d<   d}d}|dk    rd}d| j         d<   |dk    rd	}||f| j         d
<   dS )ú Set label position/alignment rD   rI   r·   r¶   r   r»   r¼   rK   r½   rJ   N)r_   )r*   rz   r{   rÂ   rÁ   s        r-   r×   zArc3._setlabelÚ  sY   € ð $,ˆŒ�xÑ ØˆØˆØ�Š6ˆ6ØˆFØ(,ˆDŒN˜9Ñ%Ø�Š7ˆ7ØˆFØ&,¨fÐ%5ˆŒ�zÑ"Ð"Ð"r.   )rÉ   r¹   rš   N)rr   rs   rÊ   rs   rË   rs   r   r    r   rA   r   rA   r"   rª   r«   r¬   ©rz   rs   r{   rs   rg   rh   )r0   r1   r2   r3   r4   r&   ru   r†   r¨   r×   r5   r6   s   @r-   rÆ   rÆ   ~  sæ   ø€ € € € € ðð ð. Øðð Ðð
 !Ø Ø!Ø(,ð	ð 15Ø/3ðð ð ð ð ð ð ð ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð
<ð <ð <ð <ð <ð <ð@6ð 6ð 6ð 6ð 6ð 6ð 6ð 6r.   rÆ   c                  ó>   ‡ — e Zd ZdZ	 	 	 	 ddddœdˆ fd„Zdd„Zˆ xZS )ÚAnnotatea%   Draw a curved arrow pointing to `at` position, ending at `to`
        position, with label location at the tail of the arrow
        (See also `Arc3`).

        Args:
            k: Control point factor. Higher k means tighter curve.
            th1: Angle at which the arc leaves start point
            th2: Angle at which the arc leaves end point
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o'
            arrowlength: Length of arrowhead [default: 0.25]
            arrowwidth: Width of arrowhead [default: 0.2]
    rÉ   éK   rš   ú<-NrÈ   rr   rs   rÊ   rË   r   rq   r   rA   r   c          
     óv   •—  t          ¦   «         j        d||||||dœ|¤Ž t          d¦  «        | j        d<   d S )N)rr   rÊ   rË   r   r   r   ©r   r   ru   r$   )r%   r&   r   rx   rÎ   s	           €r-   r&   zAnnotate.__init__õ  s^   ø€ ð 	�‰ŒÔð 	S˜1 #¨3°eØ%0¸Zð	Sð 	SØKQð	Sð 	Sð 	Så!& v¡¤ˆÔ˜ÑÐÐr.   rz   r{   rg   rh   c                óL  — d| j         d<   t          | j        d         ¦  «        t          | j        d         ¦  «        }}||k    r|dk     rdnd}nAt          j        t          j        |j        |j        z
  |j        |j        z
  ¦  «        ¦  «        }|dk     r|dz  }|dk     °|dk     s|d	k    rd
| j         d<   d| j         d<   dS d|cxk    rdk    rn nd| j         d<   d| j         d<   dS d|cxk     rdk    rn nd| j         d<   d| j         d<   dS d| j         d<   d| j         d<   dS )rÛ   rY   rI   rÔ   r   g     €VÀg     €V@g     €v@é-   é;  ©r·   rD   rJ   )r¸   r   rK   é‡   ©rD   r¶   ©r   r¸   éá   ©r½   rD   )r¼   r   ©rD   r»   ©r   r¼   N)r_   r   rF   r¾   ÚdegreesÚatan2r�   r€   )r*   rz   r{   Úp1Úp2rË   s         r-   r×   zAnnotate._setlabel  sj  € ð $)ˆŒ�xÑ Ý�t”| GÔ,Ñ-Ô-­u°T´\À%Ô5HÑ/IÔ/IˆBˆØ�Š8ˆ8Ø˜qš&˜&�$�$ cˆCˆCå”,�tœz¨"¬$¨r¬t©)°R´T¸"¼$±YÑ?Ô?Ñ@Ô@ˆCØ�AŠgˆgØ�4‰KˆCð �AŠgˆgð �Š8ˆ8�s˜S’y�yØ);ˆDŒN˜:Ñ&Ø(/ˆDŒN˜9Ñ%Ð%Ð%Ø�3ÐÐÒÐ˜#ÒÐÐÐÐØ)=ˆDŒN˜:Ñ&Ø(/ˆDŒN˜9Ñ%Ð%Ð%Ø�3ÐÐÒÐ˜#ÒÐÐÐÐØ)<ˆDŒN˜:Ñ&Ø(0ˆDŒN˜9Ñ%Ð%Ð%à):ˆDŒN˜:Ñ&Ø(0ˆDŒN˜9Ñ%Ð%Ð%r.   )rÉ   rß   rš   rà   )rr   rs   rÊ   rs   rË   rs   r   rq   r   rA   r   rA   rÜ   )r0   r1   r2   r3   r&   r×   r5   r6   s   @r-   rÞ   rÞ   è  s€   ø€ € € € € ðð ð !Ø Ø!Ø"ð	/ð 15Ø/3ð/ð /ð /ð /ð /ð /ð /ð /ð1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r.   rÞ   c                  ó2   ‡ — e Zd ZdZ	 	 ddddœdˆ fd„Zˆ xZS )ÚArcZaÈ   Z-Curve Arc

        Use `at` and `to` methods to define endpoints.

        ArcZ approaches the endpoints horizontally, leading to
        a 'Z' shaped curve

        Args:
            k: Control point factor. Higher k means tighter curve.
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o' [default: None]
            arrowlength: Length of arrowhead [default: 0.25]
            arrowwidth: Width of arrowhead [default: 0.2]
    rÉ   NrÈ   rr   rs   r   r    r   rA   r   c          
     óH   •—  t          ¦   «         j        d||dd||dœ|¤Ž d S )Nr   rš   ©rr   r   rÊ   rË   r   r   r$   ©r%   r&   ©r*   rr   r   r   r   r+   r,   s         €r-   r&   zArcZ.__init__*  sO   ø€ ð 	�‰ŒÔð 	#˜1Ø$ØØ Ø%0Ø$.ð	#ð 	#ð "ð	#ð 	#ð 	#ð 	#ð 	#r.   ©rÉ   N©rr   rs   r   r    r   rA   r   rA   r<   r6   s   @r-   ró   ró     óf   ø€ € € € € ðð ð !Ø(,ð#ð 15Ø/3ð#ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #ð #r.   ró   c                  ó2   ‡ — e Zd ZdZ	 	 ddddœdˆ fd„Zˆ xZS )ÚArcNaÆ   N-Curve Arc

        Use `at` and `to` methods to define endpoints.

        ArcN approaches the endpoints vertically, leading to
        a 'N' shaped curve

        Args:
            k: Control point factor. Higher k means tighter curve.
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o' [default: None]
            arrowlength: Length of arrowhead [default: 0.25]
            arrowwidth: Width of arrowhead [default: 0.2]
    rÉ   NrÈ   rr   rs   r   r    r   rA   r   c          
     óH   •—  t          ¦   «         j        d||dd||dœ|¤Ž d S )Nr—   r˜   rõ   r$   rö   r÷   s         €r-   r&   zArcN.__init__H  sO   ø€ ð 	�‰ŒÔð 	#˜1Ø$ØØ Ø%0Ø$.ð	#ð 	#ð "ð	#ð 	#ð 	#ð 	#ð 	#r.   rø   rù   r<   r6   s   @r-   rü   rü   :  rú   r.   rü   c                  ó\   ‡ — e Zd ZdZdddœZ	 	 ddddœdˆ fd„Zddd„Zdd d„Zd!ˆ fd„Zˆ xZ	S )"ÚArcLoopa   Loop Arc

        Use `at` and `to` methods to define endpoints.

        ArcLoop is an arc drawn as part of a circle.

        Args:
            radius: Radius of the arc
            arrow: arrowhead specifier, such as '->', '<-', '<->', or '-o' [default: None]
            arrowlength: Length of arrowhead [default: 0.25]
            arrowwidth: Width of arrowhead [default: 0.2]

        Anchors:
            start
            end
            mid
            BL
            BR
            TL
            TR
    r   rÇ   rÈ   ç333333ã?NrS   rs   r   r    r   rA   r   c               óV   •—  t          ¦   «         j        di |¤Ž || _        || _        d S r°   )r%   r&   rS   r   )r*   rS   r   r   r   r+   r,   s         €r-   r&   zArcLoop.__init__r  s4   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒØˆŒ
ˆ
ˆ
r.   r   ry   r   rz   r{   rg   r|   c                óv   — t          |¦  «        }t          |j        |z   |j        |z   f¦  «        | j        d<   | S r~   r   r‚   s       r-   ru   z
ArcLoop.to}  rƒ   r.   c                ó8   — t          ||f¦  «        | j        d<   | S r…   r‡   rˆ   s      r-   r†   zArcLoop.delta‰  r‰   r.   r�   r‘   r’   c           
     ó  •‡ ‡— |‰ _         ‰ j        s‰                      ¦   «          d‰ j        d<   t	          ‰ j                             d|¦  «        ¦  «        }t	          ‰ j                             d|¦  «        ¦  «        }‰ j                             dd¦  «        }|�|\  }}n|j        |j        z
  }|j        |j        z
  }|dz  }	|dz  }
t          j	        |dz  |dz  z   ¦  «        }	 t	          |	t          j	        ‰ j
        dz  |dz  dz  z
  ¦  «        | |z  z  z   |
t          j	        ‰ j
        dz  |dz  dz  z
  ¦  «        ||z  z  z   f¦  «        Šn*# t          $ r}t          d‰ j
        › �¦  «        |‚d}~ww xY wt          j	        |	dz  |
dz  z   ¦  «        }t          j        |
|	¦  «        }t          j        |‰ j
        z  ¦  «        }||z
  }||z   }t          j        t          j        |z   |¦  «        }ˆˆ fd	„|D ¦   «         }ˆˆ fd
„|D ¦   «         }‰ j                             t'          t)          t+          ||¦  «        ¦  «        ‰ j        ‰ j        d         ‰ j        d         ¬¦  «        ¦  «         t/          |¦  «        dz  }t	          d¦  «        ‰ j        d<   t	          |d         |d         f¦  «        ‰ j        d<   t	          ||         ||         f¦  «        ‰ j        d<   t	          t3          |¦  «        t3          |¦  «        f¦  «        ‰ j        d<   t	          t5          |¦  «        t3          |¦  «        f¦  «        ‰ j        d<   t	          t3          |¦  «        t5          |¦  «        f¦  «        ‰ j        d<   t	          t5          |¦  «        t5          |¦  «        f¦  «        ‰ j        d<   d‰ j        d<   |‰ j        d<   d‰ j        d<   ||         |d         k     r
d‰ j        d<    t9          ¦   «         j        ||fi |¤ŽS )z  Calculate placement of Element r   r[   r•   ru   r†   Nr   z#No solution to ArcLoop with radius c                óX   •— g | ]&}‰j         ‰j        t          j        |¦  «        z  z   ‘Œ'S r$   )r€   rS   r¾   rÕ   ©Ú.0ÚtirD   r*   s     €€r-   ú
<listcomp>z"ArcLoop._place.<locals>.<listcomp>­  ó/   ø€ Ð?Ð?Ð?°rˆVŒX˜œ¥d¤h¨r¡l¤lÑ2Ñ2Ð?Ð?Ð?r.   c                óX   •— g | ]&}‰j         ‰j        t          j        |¦  «        z  z   ‘Œ'S r$   )r�   rS   r¾   rÖ   r  s     €€r-   r	  z"ArcLoop._place.<locals>.<listcomp>®  r
  r.   r   r   rÒ   r"   rX   éÿÿÿÿrY   r–   ÚBLÚBRÚTLÚTRrI   rZ   )r   rÇ   rK   )r   g      Ð¿)r    r£   r¤   r'   r   r¥   r€   r�   r¾   ÚsqrtrS   r§   rï   Úacosr   ÚlinspaceÚpir(   r)   r   ÚlistÚzipr   ÚlenrF   ÚminÚmaxr_   r%   r¨   )r*   r�   r‘   r©   ry   ru   r†   rz   r{   ÚxaÚyaÚqÚerrÚdaÚthetaaÚthdaÚtheta1Útheta2Útr€   r�   r–   rD   r,   s   `                     @€r-   r¨   zArcLoop._placeŽ  së  øøø€ à#ˆŒØÔð 	Ø�NŠNÑÔÐà ˆŒ�GÑÝ˜$œ+Ÿ/š/¨$°Ñ6Ô6Ñ7Ô7ˆÝ˜$œ+Ÿ/š/¨$°Ñ6Ô6Ñ7Ô7ˆØ”—’ ¨Ñ.Ô.ˆØÐØ‰FˆB��à”˜œ‘ˆBØ”˜œ‘ˆBà�‰TˆØ�‰TˆÝŒI�b˜!‘e˜b !™e‘mÑ$Ô$ˆð	[Ý˜R¥$¤)¨D¬K¸©N¸aÀ¹cÀA¹XÑ,EÑ"FÔ"FÈ2È#ÈaÉ%Ñ"PÑPØ¥$¤)¨D¬K¸©N¸aÀ¹cÀA¹XÑ,EÑ"FÔ"FÈ"ÈQÉ$Ñ"OÑOðRñ Sô SˆFˆFøåð 	[ð 	[ð 	[ÝÐPÀ4Ä;ÐPÐPÑQÔQÐWZÐZøøøøð	[øøøõ ŒY�r˜1‘u˜r 1™u‘}Ñ%Ô%ˆÝ”˜B Ñ#Ô#ˆÝŒy˜˜DœK™Ñ(Ô(ˆØ˜$‘ˆØ˜$‘ˆÝŒM�$œ' &™.¨&Ñ1Ô1ˆØ?Ð?Ð?Ð?Ð?¸QÐ?Ñ?Ô?ˆØ?Ð?Ð?Ð?Ð?¸QÐ?Ñ?Ô?ˆØŒ×Ò�W¥T­#¨a°©)¬)¡_¤_¸D¼JØ15´¸]Ô1KØ04´¸LÔ0IðKñ Kô Kñ 	Lô 	Lð 	Lõ �!‰fŒf�a‰iˆÝ % f¡¤ˆŒ�WÑÝ# Q r¤U¨A¨b¬E NÑ3Ô3ˆŒ�UÑÝ# Q s¤V¨Q¨s¬VÐ$4Ñ5Ô5ˆŒ�UÑÝ"¥C¨¡F¤F­C°©F¬FÐ#3Ñ4Ô4ˆŒ�TÑÝ"¥C¨¡F¤F­C°©F¬FÐ#3Ñ4Ô4ˆŒ�TÑÝ"¥C¨¡F¤F­C°©F¬FÐ#3Ñ4Ô4ˆŒ�TÑÝ"¥C¨¡F¤F­C°©F¬FÐ#3Ñ4Ô4ˆŒ�TÑØ#(ˆŒ�xÑ Ø!#ˆŒ�vÑØ$+ˆŒ�yÑ!ØˆSŒ6�A�a”DŠ=ˆ=Ø(1ˆDŒN˜9Ñ%Ø�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;s   Ã)A*E Å
E;ÅE6Å6E;)r   N)rS   rs   r   r    r   rA   r   rA   r"   rª   r«   r¬   )
r0   r1   r2   r3   r4   r&   ru   r†   r¨   r5   r6   s   @r-   rÿ   rÿ   X  sË   ø€ € € € € ðð ð, Øðð Ðð
 "%Ø(,ð	ð 15Ø/3ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
ð 
ð 
ð 
ð 
ðð ð ð ð ð
1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<ð 1<r.   rÿ   c                  ó&   ‡ — e Zd ZdZddˆ fd„Zˆ xZS )ÚLabelz€ Label element.

        For more options, use `Label().label()` method.

        Args:
            label: text to display.
    NÚlabelr    c                ó”   •—  t          ¦   «         j        di |¤Ž d| j        d<   d| j        d<   |r|                      |¦  «         d S d S )NrD   rI   r   rK   r$   )r%   r&   r_   r&  )r*   r&  r+   r,   s      €r-   r&   zLabel.__init__Ê  sb   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø#+ˆŒ�xÑ Ø$%ˆŒ�yÑ!Øð 	Ø�JŠJ�uÑÔÐÐÐð	ð 	r.   ©N)r&  r    r<   r6   s   @r-   r%  r%  Â  sL   ø€ € € € € ðð ðð ð ð ð ð ð ð ð ð ð r.   r%  c                  ó<   ‡ — e Zd ZdZddddddœZddd	œdˆ fd„Zˆ xZS )ÚTaga   Tag/flag element for labeling signal names.

        Because text size is unknown until drawn, must specify width
        manually to fit a given text label.

        Args:
            width: Width of the tag [default: 1.5]
            height: Height of the tag [default: 0.625]
    rk   g      ä?rD   é   r   )ÚwidthÚheightrI   ÚfontsizerK   N)r,  r-  r,  rA   r-  rg   rh   c          
     óø   •—  t          ¦   «         j        di |¤Ž | j        d         }| j        d         }|dz  }| j                             t          d||f||f|| f|| fg¦  «        ¦  «         d| j        d<   d S )Nr,  r-  r   r"   rX   r$   )r%   r&   r'   r(   r)   r   rF   )r*   r,  r-  r+   ÚwÚhr,   s         €r-   r&   zTag.__init__ã  s¤   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø”;˜wÔ'ˆØ”;˜xÔ(ˆØ�‰EˆØŒ×Ò�[¨&Ø+,¨a¨&Ø+,¨a¨&Ø+,¨q¨b¨'Ø+,¨q¨b¨'ð	*3ñ 4ô 4ñ 	5ô 	5ð 	5ð
 !'ˆŒ�WÑÐÐr.   )r,  rA   r-  rA   rg   rh   r/   r6   s   @r-   r*  r*  Ò  sw   ø€ € € € € ðð ð ØØØØðð Ðð +/Ø+0ð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r.   r*  c            
      ód   ‡ — e Zd ZdZdddddddd	d
dœ	Zd	d	d	d	d	d	dœd ˆ fd„Zd!d"ˆ fd„Zˆ fd„Zˆ xZS )#ÚCurrentLabelaþ   Current label arrow drawn above an element

        Use `.at()` method to place the label over an
        existing element.

        Args:
            reverse: Reverse the arrow direction
            ofst: Offset distance from centerline of element [default: 0.4]
            length: Length of the arrow [default: 2]
            top: Draw arrow on top or bottom of element [default: True]
            headlength: Length of arrowhead [default: 0.3]
            headwidth: Width of arrowhead [default: 0.2]
    r   r   TFç333333Ó?rÇ   rD   Nr¼   )	ÚofstÚlengthr»   Úreverserc   rb   ÚanchorrZ   Úlblofost)r6  r»   r7  r5  rc   rb   r6  rA   r»   rU   r7  r5  rc   rb   c               ó\   •—  t          ¦   «         j        di |¤Ž d| j        d<   d| _        d S )Nr"   rD   r»   r$   )r%   r&   rF   Ú_side)	r*   r6  r»   r7  r5  rc   rb   r+   r,   s	           €r-   r&   zCurrentLabel.__init__  s9   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø!'ˆŒ�XÑØˆŒ
ˆ
ˆ
r.   r   ry   úXY | tuple['Element', str]rz   rs   r{   rg   r|   c                ót  •— t          |t          ¦  «        �r|j                             dd¦  «        }| j                             dd¦  «        sdddddœ                     |d¦  «        }|j                             dd	¦  «        r1ddd
œ                     ||¦  «        }|d
vr|                      ¦   «          |j                             dd	¦  «        r|d
v r|                      ¦   «          |dk    r|                      ¦   «          |j        j        }|                     d	¬¦  «        }|dk    r1t          |j	        |j
        z   dz  |j        f¦  «        }d| j        d<   n®|dk    r1t          |j	        |j
        z   dz  |j        f¦  «        }d| j        d<   nw|dk    r6t          |j	        |j        |j        z   dz  f¦  «        }d| j        d<   |dz  }n;|dk    r5t          |j
        |j        |j        z   dz  f¦  «        }d| j        d<   |dz  }|j                             |¦  «        }|| _        t          ¦   «                              |¦  «         |                      |¦  «         d|j        v r-|                      |j                             d¦  «        ¦  «         n!t          ¦   «                              |¦  «         | S )a1   Specify CurrentLabel position.

            If xy is an Element, arrow will be centered
            along element and its color will also be
            inherited.

            Args:
                xy: The absolute (x, y) position or an
                Element instance to center the arrow over
        Úilabelr»   Tr¶   r½   r·   )r»   r¶   r·   r½   r7  F)r·   r½   Úflip)Úincludetextr   rI   Úbotr—   Úcolor)Ú
isinstancer   r'   r¥   r7  Ú	transformr[   Úget_bboxr   ÚxmaxÚxminÚymaxr_   Úyminr;  r%   r•   rx   rB  )	r*   ry   rz   r{   Úsider[   ÚbboxÚposr,   s	           €r-   r•   zCurrentLabel.at  s©  ø€ õ �b�'Ñ"Ô"ñ -	Ø”9—=’= ¨5Ñ1Ô1ˆDØ”;—?’? 5¨$Ñ/Ô/ð :Ø'Ø"'Ø 'Ø!'ð)ð )÷ *-ª¨T°5Ñ)9Ô)9ð ð
 Œy�}Š}˜Y¨Ñ.Ô.ð #Ø 'Ø!'ð)ð )ß),ª¨T°4©¬ð àÐ0Ð0Ð0Ø—L’L‘N”N�NàŒy�}Š}˜V UÑ+Ô+ð °Ð8IÐ0IÐ0IØ—’‘”�à�vŠ~ˆ~Ø—’‘”�à”LÔ&ˆEØ—;’;¨5�;Ñ1Ô1ˆDØ�uŠ}ˆ}Ý˜dœi¨$¬)Ñ3°QÑ6¸¼	ÐBÑCÔC�Ø+0�”˜xÑ(Ð(Ø˜Ò!Ð!Ý˜dœi¨$¬)Ñ3°QÑ6¸¼	ÐBÑCÔC�Ø+0�”˜xÑ(Ð(Ø˜’�Ý˜dœi¨$¬)°d´iÑ*?ÀÑ)BÐCÑEÔE�Ø+0�”˜xÑ(Ø˜‘��Ø˜’�Ý˜dœi¨$¬)°d´iÑ*?ÀÑ)BÐCÑEÔE�Ø+0�”˜xÑ(Ø˜‘�à”,×(Ò(¨Ñ-Ô-ˆCØˆDŒJÝ‰GŒG�JŠJ�s‰OŒOˆOà�JŠJ�uÑÔÐØ˜"œ.Ð(Ð(Ø—
’
˜2œ>×-Ò-¨gÑ6Ô6Ñ7Ô7Ð7øå‰GŒG�JŠJ�r‰NŒNˆNØˆr.   c                óî  •— | j         d         }| j         d         }| j        dv r| }| j                              dd¦  «        dz  }| j                              dd¦  «        }| j        d	v rH|d
k    s|dk    r<| j                             dd¦  «        }dddœ                     |¦  «        | j        d<   nT| j        dv rKd
|cxk     rdk    r>n n;| j                             dd¦  «        }dddœ                     |¦  «        | j        d<   | dz  |f|dz  |f}	}| j         d         }
| j         d         }| j                             t          ||	fd|
|¬¦  «        ¦  «          t          ¦   «         j        ||fi |¤ŽS )Nr5  r6  )r¶   r[   r   éh  rI   r»   )r½   r—   é  rA  )rA  r»   )r»   r·   r¶   r   rb   rc   rC   r#   )	r'   r;  r¥   r_   r(   r)   r   r%   r¨   )r*   r�   r‘   r©   r5  r6  r[   ÚlocÚaÚbrb   rc   r,   s               €r-   r¨   zCurrentLabel._placeT  s®  ø€ ØŒ{˜6Ô"ˆØ”˜XÔ&ˆØŒ:˜Ð#Ð#Ø�5ˆDà”—’ ¨Ñ+Ô+¨cÑ1ˆØŒk�oŠo˜h¨Ñ.Ô.ˆàŒ:˜Ð"Ð"¨°ª¨°u¸s²{°{Ø”.×$Ò$ X¨uÑ5Ô5ˆCØ/4Ø/4ð(6ð (6ß69²c¸#±h´hð ŒN˜8Ñ$Ð$ð ŒZÐ4Ð4Ð4¸"¸uÐ:KÐ:KÒ:KÐ:KÈÒ:KÐ:KÐ:KÐ:KÐ:KØ”.×$Ò$ X¨uÑ5Ô5ˆCØ/4Ø/4ð(6ð (6ß69²c¸#±h´hð ŒN˜8Ñ$ð �˜‘	˜4Ð  6¨!¡8¨TÐ"2ˆ1ˆØ”K Ô,ˆ	Ø”[ Ô.ˆ
ØŒ×Ò�W a¨ V°4ÀIÐ[eÐfÑfÔfÑgÔgÐgØ�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;r.   )r6  rA   r»   rU   r7  rU   r5  rA   rc   rA   rb   rA   r"   )ry   r<  rz   rs   r{   rs   rg   r|   ©	r0   r1   r2   r3   r4   r&   r•   r¨   r5   r6   s   @r-   r3  r3  ó  sÌ   ø€ € € € € ðð ð ØØØØØØØØð
ð 
Ðð ,0Ø'+Ø+/Ø)-Ø/3Ø.2ðð ð ð ð ð ð ð ð9ð 9ð 9ð 9ð 9ð 9ð 9ðv<ð <ð <ð <ð <ð <ð <ð <ð <r.   r3  c                  óJ   ‡ — e Zd ZdZdddœZ	 	 	 ddddœdˆ fd„Zdˆ fd„Zˆ xZS )ÚCurrentLabelInlinea—   Current direction arrow, inline with element.

        Use `.at()` method to place arrow on an Element instance

        Args:
            direction: arrow direction 'in' or 'out' of element
            ofst: Offset along lead length
            start: Arrow at start or end of element
            headlength: Length of arrowhead [default: 0.3]
            headwidth: Width of arrowhead [default: 0.3]
    r4  )rc   rb   Úinçš™™™™™é?TNÚ	directionr   r5  rs   rX   r@   rc   rA   rb   c          	     ój  •—  t          ¦   «         j        di |¤Ž d| j        d<   d | j        d<   d| j        d<   |}| j        d         }|dk    r|| j        d         z  }| }|r| }| }| j                             t          |df||z   dffd| j        d	         | j        d         ¬
¦  «        ¦  «         d S )Nr   rK   rZ   r\   r]   rc   rV  rC   rb   r#   r$   )r%   r&   r_   r'   r(   r)   r   )
r*   rX  r5  rX   rc   rb   r+   r€   rz   r,   s
            €r-   r&   zCurrentLabelInline.__init__~  s÷   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø$%ˆŒ�yÑ!Ø!%ˆŒ�vÑØ#$ˆŒ�xÑ àˆØŒ[˜Ô&ˆØ˜ÒÐØ�”˜\Ô*Ñ*ˆAØ�ˆBàð 	Ø�ˆAØ�ˆBàŒ×Ò�W q¨! f¨q°©t°Q¨iÐ%8Ø+/Ø04´¸KÔ0HØ15´¸\Ô1JðLñ Lô Lñ 	Mô 	Mð 	Mð 	Mð 	Mr.   ry   úXY | Elementrg   r|   c                ól  •— t          |t          ¦  «        r|t          ¦   «                              |j        ¦  «         |                      |j        j        ¦  «         d|j        v r-|                      |j         	                    d¦  «        ¦  «         n!t          ¦   «                              |¦  «         | S )a?   Specify CurrentLabelInline position.

            If xy is an Element, arrow will be placed
            along the element's leads and the arrow color will
            be inherited.

            Args:
                xy: The absolute (x, y) position or an
                Element instance to place the arrow on
        rB  )
rC  r   r%   r•   rD   r[   rD  rx   rB  r¥   )r*   ry   r,   s     €r-   r•   zCurrentLabelInline.atš  sŽ   ø€ õ �b�'Ñ"Ô"ð 	Ý‰GŒG�JŠJ�r”yÑ!Ô!Ð!Ø�JŠJ�r”|Ô)Ñ*Ô*Ð*Ø˜"œ.Ð(Ð(Ø—
’
˜2œ>×-Ò-¨gÑ6Ô6Ñ7Ô7Ð7øå‰GŒG�JŠJ�r‰NŒNˆNØˆr.   )rV  rW  T)
rX  r   r5  rs   rX   r@   rc   rA   rb   rA   ©ry   rZ  rg   r|   )r0   r1   r2   r3   r4   r&   r•   r5   r6   s   @r-   rU  rU  n  s¥   ø€ € € € € ð
ð 
ð Øðð Ðð
 26Ø"Ø#ðMð
 04Ø.2ðMð Mð Mð Mð Mð Mð Mð Mð8ð ð ð ð ð ð ð ð ð r.   rU  c                  ó^   ‡ — e Zd ZdZddddddddœZddddddd	œdˆ fd„Zdˆ fd„Zˆ fd„Zˆ xZS )ÚZLabela   Right-angle arrow, often used to indicate impedance
        looking in to a node

        Use `.at()` method to place the label over an
        existing element.

        Args:
            ofst: Vertical offset from centerline of element
            hofst: Horizontal offset from center of element
            length: Length of the arrow tail [default: 1]
            lengthtip: Length of the arrow tip [default: 0.5]
            headlength: Arrowhead length [default: 0.25]
            headwidth: Arrowhead width [default: 0.15]
    rj   gš™™™™™Ù?r   r   r   N)r5  rÄ   r6  Ú	lengthtiprc   rb   rZ   )r5  rÄ   r6  r_  rc   rb   r5  rA   rÄ   r6  r_  rc   rb   c               óx   •—  t          ¦   «         j        di |¤Ž |                      d¦  «         d| j        d<   d S )NrD   r"   r$   )r%   r&   r8  rF   )	r*   r5  rÄ   r6  r_  rc   rb   r+   r,   s	           €r-   r&   zZLabel.__init__Ç  sF   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø�Š�HÑÔÐØ!'ˆŒ�XÑÐÐr.   ry   rZ  rg   r|   c                óP  •— t          |t          ¦  «        rî	 |j        }nU# t          $ rH |                     ¦   «         }t          |j        |j        z   dz  |j        |j	        z   dz  f¦  «        }Y nw xY wt          ¦   «                              |¦  «         |j        j        }|dz  dk    r|dz  dk    r|dz  }|                      |¦  «         d|j        v r-|                      |j                             d¦  «        ¦  «         n!t          ¦   «                              |¦  «         | S )a,   Specify Element position.

            If xy is an Element, arrow will be centered
            along element and its color will also be
            inherited.

            Args:
                xy: The absolute (x, y) position or an
                Element instance to center the arrow over
        r   rN  r—   rO  rš   rB  )rC  r   rD   ÚAttributeErrorrE  r   rF  rG  rH  rI  r%   r•   rD  r[   rx   rB  r¥   )r*   ry   rL  rK  r[   r,   s        €r-   r•   z	ZLabel.atÓ  s$  ø€ õ �b�'Ñ"Ô"ð 	ðTØ”i��øÝ!ð Tð Tð TØ—{’{‘}”}�Ý˜dœi¨$¬)Ñ3°QÑ6¸¼ÀTÄYÑ9NÐPQÑ8QÐRÑSÔS���ðTøøøõ ‰GŒG�JŠJ�s‰OŒOˆOà”LÔ&ˆEØ˜‘˜rÒ!Ð! u¨s¡{°sÒ&:Ð&:Ø˜‘�Ø�JŠJ�uÑÔÐØ˜"œ.Ð(Ð(Ø—
’
˜2œ>×-Ò-¨gÑ6Ô6Ñ7Ô7Ð7øå‰GŒG�JŠJ�r‰NŒNˆNØˆs   ˜   AA2Á1A2c           	     ó  •— || _         | j        s|                      ¦   «          t          | j        d          | j        d         f¦  «        }t          | j        d          | j        d         z
  | j        d         f¦  «        }t          | j        d          | j        d         z
  | j        d         | j        d         z
  f¦  «        }|| j        d<   || j        d<   | j                             t          |||fd| j        d         | j        d	         ¬
¦  «        ¦  «         d| j	        d<   | j         
                    dd¦  «        }| j         
                    d¦  «        r|dz  }|dz  }|dz   dz  }|dk     s|dk    rd| j	        d<   d| j	        d<   n^d|cxk    rdk    rn nd| j	        d<   d| j	        d<   n9d|cxk     rdk    rn nd| j	        d<   d| j	        d<   nd| j	        d<   d| j	        d<    t          ¦   «         j        ||fi |¤ŽS )NrÄ   r5  r_  r6  ÚheadÚtailrC   rb   rc   r#   rI   r[   r   r?  rš   r—   rN  rä   rå   ræ   rJ   rí   rK   rç   rè   ré   rê   rë   rì   )r    r£   r¤   r   r'   rF   r(   r)   r   r_   r¥   r%   r¨   )	r*   r�   r‘   r©   rQ  rR  rŸ   Úthr,   s	           €r-   r¨   zZLabel._placeñ  sK  ø€ Ø#ˆŒØÔð 	Ø�NŠNÑÔÐå�D”K Ô(Ð(¨$¬+°fÔ*=Ð>Ñ?Ô?ˆÝ�D”K Ô(Ð(¨¬°[Ô)AÑAØ”;˜vÔ&ð(ñ )ô )ˆå�D”K Ô(Ð(¨¬°[Ô)AÑAØ”;˜vÔ& t¤{°8Ô'<Ñ<ð>ñ ?ô ?ˆà ˆŒ�VÑØ ˆŒ�VÑàŒ×Ò�W a¨¨A Y°dØ04´¸KÔ0HØ15´¸\Ô1JðLñ Lô Lñ 	Mô 	Mð 	Mð
 $*ˆŒ�xÑ ØŒ[�_Š_˜W aÑ(Ô(ˆØŒ;�?Š?˜6Ñ"Ô"ð 	Ø�#‰IˆBà
ˆb‰ˆØ�‰f˜‰^ˆà�Š7ˆ7�b˜3’h�hØ);ˆDŒN˜:Ñ&Ø(0ˆDŒN˜9Ñ%Ð%Ø�2ˆ_ˆ_Š_ˆ_˜Š_ˆ_ˆ_ˆ_ˆ_Ø)=ˆDŒN˜:Ñ&Ø(/ˆDŒN˜9Ñ%Ð%Ø�2ˆ_ˆ_Š_ˆ_˜Š_ˆ_ˆ_ˆ_ˆ_Ø)<ˆDŒN˜:Ñ&Ø(/ˆDŒN˜9Ñ%Ð%à):ˆDŒN˜:Ñ&Ø(0ˆDŒN˜9Ñ%à�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;r.   )r5  rA   rÄ   rA   r6  rA   r_  rA   rc   rA   rb   rA   r\  rS  r6   s   @r-   r^  r^  ¯  sÀ   ø€ € € € € ðð ð ØØØØØØðð Ðð *.Ø*.Ø+/Ø.2Ø/3Ø.2ð
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(ð 
(ðð ð ð ð ð ð<'<ð '<ð '<ð '<ð '<ð '<ð '<ð '<ð '<r.   r^  c                  ó8   ‡ — e Zd ZdZddddœZ	 	 	 ddˆ fd„Zˆ xZS )Ú	LoopArrowa   Loop arrow, for mesh analysis notation

        Args:
            direction: loop direction 'cw' or 'ccw'
            theta1: Angle of start of loop arrow
            theta2: Angle of end of loop arrow
            width: Width of loop
            height: Height of loop
    rD   r   )rI   rK   r[   Úcwé#   éÝÿÿÿç      ð?rX  r   r!  rs   r"  r,  r-  c           
     ó¨   •—  t          ¦   «         j        di |¤Ž | j                             t	          d|||||¬¦  «        ¦  «         d| j        d<   d S )Nr"   )r   r!  r"  r,  r-  rD   r$   )r%   r&   r(   r)   r
   rF   )r*   rX  r!  r"  r,  r-  r+   r,   s          €r-   r&   zLoopArrow.__init__*  so   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"àŒ×Ò�ZØ˜)¨F¸6Ø ð(ñ (ô (ñ 	)ô 	)ð 	)ð "(ˆŒ�XÑÐÐr.   )ri  rj  rk  rl  rl  )
rX  r   r!  rs   r"  rs   r,  rs   r-  rs   r/   r6   s   @r-   rh  rh    so   ø€ € € € € ðð ð ØØðð Ðð
 26Ø58Ø58ð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(r.   rh  c                  ó.   ‡ — e Zd ZdZ	 	 	 	 ddˆ fd„Zˆ xZS )ÚLoopCurrenta±   Loop current label, for mesh analysis notation,
        placed within a box of 4 existing elements.

        Args:
            elm_list: List of 4 elements surrounding loop, in
                      order (top, right, bottom, left)
            direction: loop direction 'cw' or 'ccw'
            theta1: Angle of start of loop arrow
            theta2: Angle of end of loop arrow
            pad: Distance from elements to loop
    Nri  rj  rk  rÇ   Úelm_listúOptional[Sequence[Element]]rX  r   r!  rs   r"  Úpadc                óô  •— |€J ‚t          j        d ¦  «         |d                              dd¬¦  «        }|d                              dd¬¦  «        }|d                              dd¬¦  «        }	|d                              dd¬¦  «        }
|j        |z
  }|	j        |z   }|
j        |z   }|j        |z
  }||z   dz  ||z   dz  f}||z
  }||z
  } t          ¦   «         j        |||||fi |¤Ž || j	        d<   d S )	Nr   TF©rD  r@  r   r   rv   r•   )
r   Úpush_elementrE  rI  rH  rF  rG  r%   r&   rx   )r*   rp  rX  r!  r"  rr  r+   Úbbox1Úbbox2Úbbox3Úbbox4r»   rA  r·   ÚrghtrD   r,  r-  r,   s                     €r-   r&   zLoopCurrent.__init__B  s(  ø€ ð Ð#Ð#Ð#ÝÔ" 4Ñ(Ô(Ð(Ø˜”×$Ò$¨tÀÐ$ÑGÔGˆØ˜”×$Ò$¨tÀÐ$ÑGÔGˆØ˜”×$Ò$¨tÀÐ$ÑGÔGˆØ˜”×$Ò$¨tÀÐ$ÑGÔGˆØŒj˜3ÑˆØŒj˜3ÑˆØŒz˜CÑˆØŒz˜CÑˆØ˜‘9˜a‘- # c¡'¨1¡Ð-ˆØ�t‘ˆØ�s‘ˆØ�‰ŒÔ˜ F¨F°E¸6ÐLÐLÀVÐLÐLÐLØ!'ˆÔ˜ÑÐÐr.   )Nri  rj  rk  rÇ   )
rp  rq  rX  r   r!  rs   r"  rs   rr  rs   r<   r6   s   @r-   ro  ro  6  s\   ø€ € € € € ð
ð 
ð @DØ+/Ø58Ø!ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (ð (r.   ro  c                  ó<   ‡ — e Zd ZdZddiZ	 	 dddddœdˆ fd„Zˆ xZS )ÚRectaÔ   Rectangle Element

        Used mainly for buliding more complex elements. Corner
        arguments are relative to Element coordinates, not Drawing
        coordinates.

        Args:
            corner1: Position of top-left corner
            corner2: Position of bottom-right corner
            fill: Color to fill if not None [default: inherit]
            lw: Line width [default: inherit]
            ls: Line style '-', '--', ':', etc. [default: inherit]
    r]   r   r"   râ   N)r^   ÚlwÚlsÚcorner1r   Úcorner2r^   r    r}  rA   r~  úOptional[Linestyle]c          	     óÖ   •—  t          ¦   «         j        di |¤Ž |d         |d         f}|d         |d         f}| j                             t	          |||||gd¬¦  «        ¦  «         d S )Nr   r   )r]   r$   )r%   r&   r(   r)   r   )
r*   r  r€  r^   r}  r~  r+   Úc1aÚc2ar,   s
            €r-   r&   zRect.__init__h  s{   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø�qŒz˜7 1œ:Ð&ˆØ�qŒz˜7 1œ:Ð&ˆØŒ×Ò�W g¨s°G¸SÀ'Ð%JÐSTÐUÑUÔUÑVÔVÐVÐVÐVr.   )r"   râ   )
r  r   r€  r   r^   r    r}  rA   r~  r�  r/   r6   s   @r-   r|  r|  W  s…   ø€ € € € € ðð ð 	�!ðÐð  &Ø%ðWð (,Ø'+Ø+/ðWð Wð Wð Wð Wð Wð Wð Wð Wð Wð Wð Wr.   r|  c                  ó>   ‡ — e Zd ZdZddddœZ	 dddddœdˆ fd„Zˆ xZS )ÚEncirclea>   Draw ellipse around all elements in the list

        Args:
            elm_list: List of elements to enclose
            padx: Horizontal distance from elements to loop [default: .2]
            pady: Vertical distance from elements to loop [default: .2]
            includelabels: Include labels in the ellipse
    rÇ   r   )ÚpadxÚpadyr[   NT)r‡  rˆ  Úincludelabelsrp  rq  r‡  rA   rˆ  r‰  r@   c          	     óª  •— t          j        d ¦  «          t          ¦   «         j        di |¤Ž |€J ‚t          j        }t          j         }t          j        }t          j         }	|D ]m}
|
                     d|¬¦  «        }t          ||j        ¦  «        }t          ||j
        ¦  «        }t          ||j        ¦  «        }t          |	|j        ¦  «        }	Œn|| j        d         z  }|| j        d         z  }|| j        d         z  }|	| j        d         z  }	||z   dz  |	|z   dz  f}||z
  }|	|z
  }|| j        d<   | j                             t#          d||dd	¬
¦  «        ¦  «         t	          j        t          j        dz  ¦  «        }t	          j        t          j        dz  ¦  «        }t	          j        t          j        dz  ¦  «        }t	          j        t          j        dz  ¦  «        }d|dz  f| j        d<   d| dz  f| j        d<   |dz  df| j        d<   | dz  df| j        d<   |dz  |z  | dz  |z  f| j        d<   | dz  |z  | dz  |z  f| j        d<   | dz  |z  |dz  |z  f| j        d<   |dz  |z  |dz  |z  f| j        d<   |dz  |z  |dz  |z  f| j        d<   | dz  |z  |dz  |z  f| j        d<   |dz  |z  | dz  |z  f| j        d<   | dz  |z  | dz  |z  f| j        d<   |dz  |z  |dz  |z  f| j        d<   | dz  |z  |dz  |z  f| j        d<   |dz  |z  | dz  |z  f| j        d<   | dz  |z  | dz  |z  f| j        d<   d S )NTrt  r‡  rˆ  r   r•   r"   r   rN  )r!  r"  r\   é   r�   ÚSÚEÚWÚSEÚSWÚNWÚNEÚENEÚWNWÚESEÚWSWÚNNEÚNNWÚSSEÚSSWr$   )r   ru  r%   r&   r¾   ÚinfrE  r  rG  r  rF  rI  rH  r'   rx   r(   r)   r
   rÖ   r  rÕ   rF   )r*   rp  r‡  rˆ  r‰  r+   rG  rF  rI  rH  ÚelementrK  rD   r0  r1  Úsinpi4Úcospi4Úsinpi8Úcospi8r,   s                      €r-   r&   zEncircle.__init__„  sÄ  ø€ õ 	Ô" 4Ñ(Ô(Ð(Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØÐ#Ð#Ð#ÝŒxˆÝ”ˆyˆÝŒxˆÝ”ˆyˆØð 	(ð 	(ˆGØ×#Ò#¨dÀÐ#ÑNÔNˆDÝ�t˜TœYÑ'Ô'ˆDÝ�t˜TœYÑ'Ô'ˆDÝ�t˜TœYÑ'Ô'ˆDÝ�t˜TœYÑ'Ô'ˆDˆDØ�”˜FÔ#Ñ#ˆØ�”˜FÔ#Ñ#ˆØ�”˜FÔ#Ñ#ˆØ�”˜FÔ#Ñ#ˆØ�t‘)˜Q‘  d¡¨A¡Ð-ˆØ�‰IˆØ�‰IˆØ!'ˆÔ˜ÑØŒ×Ò�Z¨°°1¸QÀsÐKÑKÔKÑLÔLÐLÝ”�$œ' !™)Ñ$Ô$ˆÝ”�$œ' !™)Ñ$Ô$ˆÝ”�$œ' !™)Ñ$Ô$ˆÝ”�$œ' !™)Ñ$Ô$ˆØ  !¡˜HˆŒ�SÑØ   1¡˜IˆŒ�SÑØ˜q™S !˜HˆŒ�SÑØ˜R ™T 1˜IˆŒ�SÑØ ™c &™j¨1¨"¨Q©$¨v©+Ð6ˆŒ�TÑØ ˜b ™d 6™k¨A¨2¨a©4°©;Ð7ˆŒ�TÑØ ˜b ™d 6™k¨1¨Q©3¨v©:Ð6ˆŒ�TÑØ ™c &™j¨!¨A©#¨f©*Ð5ˆŒ�TÑØ  ™s 6™z¨1¨Q©3¨v©:Ð6ˆŒ�UÑØ !˜r !™t F™{¨A¨a©C°©JÐ7ˆŒ�UÑØ  ™s 6™z¨A¨2¨a©4°©;Ð7ˆŒ�UÑØ !˜r !™t F™{¨Q¨B¨q©D°©KÐ8ˆŒ�UÑØ  ™s 6™z¨1¨Q©3¨v©:Ð6ˆŒ�UÑØ !˜r !™t F™{¨A¨a©C°©JÐ7ˆŒ�UÑØ  ™s 6™z¨A¨2¨a©4°©;Ð7ˆŒ�UÑØ !˜r !™t F™{¨Q¨B¨q©D°©KÐ8ˆŒ�UÑÐÐr.   r(  )rp  rq  r‡  rA   rˆ  rA   r‰  r@   r/   r6   s   @r-   r†  r†  v  s~   ø€ € € € € ðð ð ØØðð Ðð :>ð09ð *.Ø)-Ø'+ð09ð 09ð 09ð 09ð 09ð 09ð 09ð 09ð 09ð 09ð 09ð 09r.   r†  c                  óB   ‡ — e Zd ZdZdddddœZ	 ddddddœdˆ fd„Zˆ xZS )ÚEncircleBoxa€   Draw rounded box around all elements in the list

        Args:
            elm_list: List elements to enclose
            cornerraidus: radius of corner rounding [default: 0.3]
            padx: Horizontal distance from elements to loop [default: 0.2]
            pady: Vertical distance from elements to loop [default: 0.2]
            includelabels: Include labels in the box
    r4  rÇ   r   )Úcornerradiusr‡  rˆ  r[   NT)r£  r‡  rˆ  r‰  rp  rq  r£  rs   r‡  rA   rˆ  r‰  r@   c               ó´  •— t          j        d ¦  «          t          ¦   «         j        di |¤Ž |€J ‚t          j        }t          j         }t          j        }	t          j         }
|D ]m}|                     d|¬¦  «        }t          ||j        ¦  «        }t          ||j
        ¦  «        }t          |	|j        ¦  «        }	t          |
|j        ¦  «        }
Œn|| j        d         z  }|| j        d         z  }|	| j        d         z  }	|
| j        d         z  }
||z   dz  |
|	z   dz  f}||z
  }|
|	z
  }|| j        d<   t          | dz  |dz  f|dz  |dz  f|dz  | dz  f| dz  | dz  fg| j        d         ¬¦  «        g| _        | j        d         | j        d         t	          j        d¦  «        z  dz  z
  }|dz  |z
  |dz  |z
  f| j        d	<   | dz  |z   |dz  |z
  f| j        d
<   |dz  |z
  | dz  |z   f| j        d<   | dz  |z   | dz  |z   f| j        d<   d|dz  f| j        d<   d| dz  f| j        d<   |dz  df| j        d<   | dz  df| j        d<   d S )NTrt  r‡  rˆ  r   r•   r£  )r£  r’  r‘  r�  r�  r   r�   rŒ  r�  rŽ  r$   )r   ru  r%   r&   r¾   r›  rE  r  rG  r  rF  rI  rH  r'   rx   r   r(   r  rF   )r*   rp  r£  r‡  rˆ  r‰  r+   rG  rF  rI  rH  rœ  rK  rD   r0  r1  rr   r,   s                    €r-   r&   zEncircleBox.__init__Ç  sÃ  ø€ õ 	Ô" 4Ñ(Ô(Ð(Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØÐ#Ð#Ð#ÝŒxˆÝ”ˆyˆÝŒxˆÝ”ˆyˆØð 	(ð 	(ˆGØ×#Ò#¨dÀÐ#ÑNÔNˆDÝ�t˜TœYÑ'Ô'ˆDÝ�t˜TœYÑ'Ô'ˆDÝ�t˜TœYÑ'Ô'ˆDÝ�t˜TœYÑ'Ô'ˆDˆDØ�”˜FÔ#Ñ#ˆØ�”˜FÔ#Ñ#ˆØ�”˜FÔ#Ñ#ˆØ�”˜FÔ#Ñ#ˆØ�t‘)˜Q‘  d¡¨A¡Ð-ˆØ�‰IˆØ�‰IˆØ!'ˆÔ˜ÑÝ$Øˆb�‰d�A�a‘Cˆ[˜1˜Q™3  !¡˜* q¨¡s¨Q¨B¨q©D k°Q°B°q±D¸1¸"¸Q¹$°<Ð@Øœ ^Ô4ð6ñ 6ô 6ð 7ˆŒð ŒK˜Ô'¨$¬+°nÔ*EÅdÄiÐPQÁlÄlÑ*RÐSTÑ*TÑTˆØ ™c !™e Q q¡S¨¡U˜^ˆŒ�TÑØ ˜b ™d 1™f a¨¡c¨!¡e˜_ˆŒ�TÑØ ™c !™e a R¨¡T¨!¡V˜_ˆŒ�TÑØ ˜b ™d 1™f q b¨¡d¨1¡fÐ-ˆŒ�TÑØ  !¡˜HˆŒ�SÑØ   1¡˜IˆŒ�SÑØ˜q™S !˜HˆŒ�SÑØ˜R ™T 1˜IˆŒ�SÑÐÐr.   r(  )
rp  rq  r£  rs   r‡  rA   rˆ  rA   r‰  r@   r/   r6   s   @r-   r¢  r¢  ·  s„   ø€ € € € € ðð ð ØØØð	ð Ðð :>ð(&ð (+Ø)-Ø)-Ø'+ð(&ð (&ð (&ð (&ð (&ð (&ð (&ð (&ð (&ð (&ð (&ð (&r.   r¢  )5r3   Ú
__future__r   Útypingr   r   r   r¾   r(   r   r	   r
   r   r   Úelementsr   r   Útwotermr   Útypesr   r   r   r   r   Ú r   r   r   r:   r8   r>   rH   rP   ra   rf   rn   r®   rÆ   rÞ   ró   rü   rÿ   r%  r*  r3  rU  r^  rh  ro  r|  r†  r¢  r$   r.   r-   ú<module>r«     sB  ðØ !Ð !à "Ð "Ð "Ð "Ð "Ð "Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø €€€à UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðVð Vð Vð Vð Vˆ<ñ Vô Vð Vð* €
ðð ð ð ð �,ñ ô ð ð(ð (ð (ð (ð (ˆDñ (ô (ð (ð4Lð Lð Lð Lð Lˆ,ñ Lô Lð Lð&Kð Kð Kð Kð Kˆ'ñ Kô Kð Kð4%ð %ð %ð %ð %�ñ %ô %ð %ð.(ð (ð (ð (ð (�ñ (ô (ð (ð8v<ð v<ð v<ð v<ð v<ˆ7ñ v<ô v<ð v<ðrZ<ð Z<ð Z<ð Z<ð Z<ˆ7ñ Z<ô Z<ð Z<ðzg6ð g6ð g6ð g6ð g6ˆ7ñ g6ô g6ð g6ðT11ð 11ð 11ð 11ð 11ˆtñ 11ô 11ð 11ðh#ð #ð #ð #ð #ˆ4ñ #ô #ð #ð<#ð #ð #ð #ð #ˆ4ñ #ô #ð #ð<g<ð g<ð g<ð g<ð g<ˆgñ g<ô g<ð g<ðTð ð ð ð ˆGñ ô ð ð 'ð 'ð 'ð 'ð 'ˆ'ñ 'ô 'ð 'ðBx<ð x<ð x<ð x<ð x<�7ñ x<ô x<ð x<ðv>ð >ð >ð >ð >˜ñ >ô >ð >ðBi<ð i<ð i<ð i<ð i<ˆWñ i<ô i<ð i<ðX(ð (ð (ð (ð (�ñ (ô (ð (ð6(ð (ð (ð (ð (�)ñ (ô (ð (ðBWð Wð Wð Wð Wˆ7ñ Wô Wð Wð>>9ð >9ð >9ð >9ð >9ˆwñ >9ô >9ð >9ðB8&ð 8&ð 8&ð 8&ð 8&�'ñ 8&ô 8&ð 8&ð 8&ð 8&r.   