§
    èƒñj�œ  ã                  ó¬  — d 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 ddlZddl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 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#m$Z$ ddl%m&Z' 	 ddl(m&Z) n# e*$ r dZ)Y nw xY wej+        ej+        fZ,e G d„ d¦  «        ¦   «         Z- G d„ d¦  «        Z. G d„ de.¦  «        Z/ G d„ de.¦  «        Z0dS )z Schemdraw base Element class é    )Úannotations)ÚSequenceÚMutableMappingÚAnyÚUnionÚOptional)ÚChainMap)Ú	dataclassNé   )Údefault_canvas)ÚSegmentÚSegmentTextÚSegmentCircleÚBBoxÚSegmentType)Ú	Transform)Úutil)ÚPoint)ÚXYÚ	LinestyleÚHalignÚValignÚLabelLoc)Údrawing_stack)Úvalidate_colorÚvalidate_linestyle)ÚFigurec                  óœ   — e Zd ZU dZded<   dZded<   dZded<   dZd	ed
<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dS )ÚLabelz Element Label Parameters. ústr | Sequence[str]ÚlabelNzLabelLoc | NoneÚlocúXY | float | NoneÚofstzHalign | NoneÚhalignzValign | NoneÚvalignFúbool | floatÚrotatezfloat | NoneÚfontsizez
str | NoneÚfontÚmathfontÚcolor)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r"   r$   r%   r&   r(   r)   r*   r+   r,   © ó    úZ/data/share/cad/hardware/.venv/lib/python3.11/site-packages/schemdraw/elements/elements.pyr   r      s½   € € € € € € à%Ð%ØÐÐÑØ€CÐÐÐÑØ"€DÐ"Ð"Ð"Ñ"Ø €FÐ Ð Ð Ñ Ø €FÐ Ð Ð Ñ Ø €FÐ Ð Ð Ñ Ø!€HÐ!Ð!Ð!Ñ!Ø€DÐÐÐÑØ€HÐÐÐÑØ€EÐÐÐÑÐÐr3   r   c                  óŠ  ‡ — e Zd ZU dZi Zded<    e¦   «         Zded<   d_d„Zˆ fd	„Z	d
„ Z
d`d„Zdad„Zdad„Zdad„Zdad„Zdbd„Zdcd„Zddded„Zdfdgd"„Zdfdgd#„Zdfdgd$„Zdad%„Zdad&„Zdhd(„Zdid*„Zdjd-„Zdkd/„Zdldmd2„Z	 	 dndod8„Zdpd;„Zdad<„Z	 	 	 	 	 	 	 	 	 dqdrdM„Z d_dN„Z!d_dO„Z"dsdT„Z#dtdU„Z$dudvdW„Z%dudwdY„Z&dudxdZ„Z'd[„ Z(d\„ Z)d]„ Z*d_d^„Z+ˆ xZ,S )yÚElementa=   Standard circuit element.

        Keyword Arguments are equivalent to calling
        setter methods.

        Args:
            d: Drawing direction ('up', 'down', 'left', 'right')

        Attributes:
            anchors: Dictionary of anchor positions in element
                coordinates
            absanchors: Dictionary of anchor positions in absolute
                drawing coordinates
            segments: List of drawing primitives making up the element
            transform: Transformation from element to drawing coordinates
            absdrop: Drop position in drawing coordinates, set after the
                element is added to a drawing
            defaults: Default parameters for the element

        Anchor names are dynmically added as attributes after placing the
        element in a Drawing.
    zdict[str, Any]Ú_element_defaultszChainMap[str, Any]ÚdefaultsÚreturnÚNonec                ór  — | j                              |¦  «         t          d¦  «        | _        g | _        i | _        i | _        g | _        t          dd¦  «        | _	        d| _
        d| j         v r3| j                              d| j                              d¦  «        ¦  «         t          j        | ¦  «         d S )N©r   r   r   FÚxyÚat)Ú_userparamsÚupdater   Ú_localshiftÚ_userlabelsÚanchorsÚ
absanchorsÚsegmentsr   Ú	transformÚ_positionedÚ
setdefaultÚpopr   Úpush_element)ÚselfÚkwargss     r4   Ú__init__zElement.__init__E   s¬   € ØÔ×Ò Ñ'Ô'Ð'Ý$ V™}œ}ˆÔØ(*ˆÔàOQˆŒØ46ˆŒØ+-ˆŒÝ" 1 fÑ-Ô-ˆŒØ ˆÔà�4Ô#Ð#Ð#ØÔ×'Ò'¨¨dÔ.>×.BÒ.BÀ4Ñ.HÔ.HÑIÔIÐIåÔ" 4Ñ(Ô(Ð(Ð(Ð(r3   c                ó  •— t          ¦   «                              | ¦  «        }i |_        i |_        d„ |                     ¦   «         D ¦   «         |_        t          |j        |j        |j        |j        ¦  «        |_        |S )z< Create a new Element instance, building chainmap of params c                ó   — i | ]
\  }}|®||“ŒS ©Nr2   )Ú.0ÚnameÚvalues      r4   ú
<dictcomp>z#Element.__new__.<locals>.<dictcomp>Z   s#   € Ð^Ð^Ð^©;¨4°ÈEÐL]˜4 ÐL]ÐL]ÐL]r3   )	ÚsuperÚ__new__Ú
_dwgparamsÚ	elmparamsÚitemsr?   r	   r8   Úparams)ÚclsÚargsrL   ÚnewÚ	__class__s       €r4   rV   zElement.__new__U   se   ø€ å‰gŒg�oŠo˜cÑ"Ô"ˆØˆŒØˆŒØ^Ð^¸&¿,º,¹.¼.Ð^Ñ^Ô^ˆŒÝ˜cœo¨s¬}¸c¼lÈCÌNÑ[Ô[ˆŒ
Øˆ
r3   c                ó|  — t          | j        ¦  «        dk    r�t          | j        d         d¦  «        ru| j        d         j        | j        ur1| j        d         j                             | j        ¦  «        | _        dS | j        d         j                             ¦   «         | _        dS t          ¦   «         | _        dS )zr Initialize an Element subclass, building chainmap of default parameters
            from parent classes.
        é   r8   N)ÚlenÚ__mro__Úhasattrr7   r8   Ú	new_childr	   ©rK   s    r4   Ú__init_subclass__zElement.__init_subclass__^   s™   € õ ˆtŒ|ÑÔ˜qÒ Ð ¥W¨T¬\¸!¬_¸jÑ%IÔ%IÐ ØŒ|˜AŒÔ0¸Ô8NÐNÐNØ $¤¨Q¤Ô 8× BÒ BÀ4ÔCYÑ ZÔ Z�”��à $¤¨Q¤Ô 8× BÒ BÑ DÔ D�”��å$™JœJˆDŒMˆMˆMr3   rR   Ústrr   c                óÈ  — g d¢}||t          t          | ¦  «                             di ¦  «                             ¦   «         ¦  «        z   v r9|t          | ¦  «                             di ¦  «        vrt	          j        | ¦  «         |t          | ¦  «                             di ¦  «        v r(t          | ¦  «                             d¦  «        |         S t          |› d�¦  «        ‚)z, Allow getting anchor position as attribute )ÚstartÚendÚcenterÚistartÚiendÚNÚSÚEÚWÚNEÚNWÚSEÚSWÚNNEÚNNWÚENEÚWNWÚSSEÚSSWÚESEÚWSWrC   rD   z not defined in Element)ÚlistÚvarsÚgetÚkeysr   rJ   ÚAttributeError)rK   rR   Úanchornamess      r4   Ú__getattr__zElement.__getattr__j   sÓ   € ðOð Oð Oˆð �K¥$¥t¨D¡z¤z§~¢~°iÀÑ'DÔ'D×'IÒ'IÑ'KÔ'KÑ"LÔ"LÑLÐLÐLØ�˜T™
œ
Ÿš |°RÑ8Ô8Ð8Ð8åÔ*¨4Ñ0Ô0Ð0à•4˜‘:”:—>’> ,°Ñ3Ô3Ð3Ð3Ý˜‘:”:—>’> ,Ñ/Ô/°Ô5Ð5Ý Ð=Ð=Ð=Ñ>Ô>Ð>r3   ú	'Element'c                ór   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   | S )ú Set the direction to up Údú,Duplicated direction parameter in element. `ú` changed to `up`.Úup©r?   ÚwarningsÚwarnre   s    r4   r‹   z
Element.upx   sG   € à�$Ô"Ð"Ð"ÝŒMÐrÈÔIYÐZ]ÔI^ÐrÐrÐrÑsÔsÐsØ $ˆÔ˜ÑØˆr3   c                ór   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   | S )ú Set the direction to down rˆ   r‰   ú` changed to `down`.ÚdownrŒ   re   s    r4   r’   zElement.down   ó\   € à�$Ô"Ð"Ð"ÝŒMð KØ#Ô/°Ô4ðKð Kð Kñ Lô Lð Là &ˆÔ˜ÑØˆr3   c                ór   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   | S )ú Set the direction to left rˆ   r‰   ú` changed to `left`.ÚleftrŒ   re   s    r4   r—   zElement.left‡   r“   r3   c                ór   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   | S )ú Set the direction to right rˆ   r‰   ú` changed to `right`.ÚrightrŒ   re   s    r4   r›   zElement.right�   s\   € à�$Ô"Ð"Ð"ÝŒMð LØ#Ô/°Ô4ðLð Lð Lñ Mô Mð Mà 'ˆÔ˜ÑØˆr3   ÚthetaÚfloatc                óx   — d| j         v r&t          j        d| j         d         › d|› d�¦  «         || j         d<   | S )z, Set the drawing direction angle in degrees rˆ   z+Duplicate direciton parameter in element: `z` replaced with `theta=ú`rœ   rŒ   )rK   rœ   s     r4   rœ   zElement.theta—   sk   € à�$Ô"Ð"Ð"ÝŒMð VØ#Ô/°Ô4ðVð VØMRðVð Vð Vñ Wô Wð Wà$)ˆÔ˜Ñ!Øˆr3   ÚdropúUnion[str, Point]c                ó   — || j         d<   | S )zt Set the drop position - where to leave the current drawing position after
            placing this element
        r    ©r?   )rK   r    s     r4   r    zElement.dropŸ   s   € ð $(ˆÔ˜Ñ Øˆr3   r   r=   úXY | tuple['Element', str]ÚdxÚdyc                óV  — d| j         v r&t          j        d| j         d         › d|› d�¦  «         t          |d         t          ¦  «        r&|| j         d<   |dk    s|dk    rt          d¦  «        ‚n8t          |¦  «        }t          |j        |z   |j        |z   f¦  «        | j         d<   | S )z} Set the element xy position

            Args:
                xy: (x,y) position or tuple of (Element, anchorname)
        r>   z&Duplicate `at` parameter in element: `ú` changed to `ú`.r`   r   z(dx and dy must be zero for anchorname XY)	r?   r�   rŽ   Ú
isinstancerg   Ú
ValueErrorr   ÚxÚy©rK   r=   r¥   r¦   s       r4   r>   z
Element.at¦   sÜ   € ð �4Ô#Ð#Ð#ÝŒMð KØ"Ô.¨tÔ4ðKð KØDFðKð Kð Kñ Lô Lð Lå�b˜”e�SÑ!Ô!ð 	CØ%'ˆDÔ˜TÑ"Ø�QŠwˆw˜" š'˜'Ý Ð!KÑLÔLÐLð "õ �r‘”ˆBÝ%*¨B¬D°2©I°r´t¸b±yÐ+AÑ%BÔ%BˆDÔ˜TÑ"Øˆr3   r`   Úscalec                ó8   — t          ||f¦  «        | j        d<   | S )z$ Apply scale/zoom factor to element Úzoom)r   r?   )rK   r¯   s     r4   r¯   zElement.scale¸   s    € å#(¨%°¨Ñ#8Ô#8ˆÔ˜Ñ Øˆr3   c                ó’   — | j                              dt          d¦  «        ¦  «        }t          ||j        f¦  «        | j         d<   | S )z( Apply horizontal scale/zoom to element r±   ©r`   r`   )r?   r€   r   r­   ©rK   r¯   Úoldscales      r4   ÚscalexzElement.scalex½   sA   € àÔ#×'Ò'¨µ°f±´Ñ>Ô>ˆÝ#(¨%°´Ð)<Ñ#=Ô#=ˆÔ˜Ñ Øˆr3   c                ó’   — | j                              dt          d¦  «        ¦  «        }t          |j        |f¦  «        | j         d<   | S )z& Apply vertical scale/zoom to element r±   r³   )r?   r€   r   r¬   r´   s      r4   ÚscaleyzElement.scaleyÃ   sA   € àÔ#×'Ò'¨µ°f±´Ñ>Ô>ˆÝ#(¨(¬*°eÐ)<Ñ#=Ô#=ˆÔ˜Ñ Øˆr3   c                ó   — d| j         d<   | S )z Apply flip up/down TÚflipr£   re   s    r4   rº   zElement.flipÉ   s   € à#'ˆÔ˜Ñ Øˆr3   c                óZ   — d| j         v r| j         d          | j         d<   n
d| j         d<   | S )z Apply reverse left/right ÚreverseTr£   re   s    r4   r¼   zElement.reverseÎ   s=   € à˜Ô(Ð(Ð(Ø.2Ô.>¸yÔ.IÐ*IˆDÔ˜YÑ'Ð'à*.ˆDÔ˜YÑ'Øˆr3   Úanchorc                óx   — d| j         v r&t          j        d| j         d         › d|› d�¦  «         || j         d<   | S )z| Specify anchor for placement. The anchor will be
            aligned with the position specified by `at()` method.
        r½   z(Duplicate anchor parameter in element: `r¨   r©   rŒ   )rK   r½   s     r4   r½   zElement.anchorÖ   so   € ð �tÔ'Ð'Ð'ÝŒMð SØ"Ô.¨xÔ8ðSð SØHNðSð Sð Sñ Tô Tð Tð &,ˆÔ˜Ñ"Øˆr3   r,   c                ó8   — t          |¦  «         || j        d<   | S )zq Sets the element color

            Args:
                color: color name or hex value (ie '#FFFFFF')
        r,   ©r   r?   ©rK   r,   s     r4   r,   zElement.colorá   s$   € õ 	�uÑÔÐØ$)ˆÔ˜Ñ!Øˆr3   Úlsr   c                ó8   — t          |¦  «         || j        d<   | S )zo Sets the element line style

            Args:
                ls: Line style ('-', ':', '--', '-.').
        rÂ   )r   r?   )rK   rÂ   s     r4   Ú	linestylezElement.linestyleë   s$   € õ 	˜2ÑÔÐØ!#ˆÔ˜ÑØˆr3   Úlwc                ó   — || j         d<   | S )zW Sets the element line width

            Args:
                lw: Line width
        rÅ   r£   )rK   rÅ   s     r4   Ú	linewidthzElement.linewidthõ   s   € ð "$ˆÔ˜ÑØˆr3   Tú
bool | strc                ó8   — t          |¦  «         || j        d<   | S )z¯ Sets the element fill color.

            Args:
                color: Color string name or hex value, or
                `True` to fill with the element line color.
        ÚfillrÀ   rÁ   s     r4   rÊ   zElement.fillþ   s$   € õ 	�uÑÔÐØ#(ˆÔ˜Ñ Øˆr3   NúOptional[str]rÊ   úOptional[Linestyle]úOptional[float]c                ó¾   — |�|                       |¦  «         |�|                      |¦  «         |�|                      |¦  «         |�|                      |¦  «         | S )zç Apply all style parameters

            Args:
                color: Color string or hex value
                fill: Color string or hex
                ls: Line style ('-', ':', '--', '-.')
                lw: Line width
        )r,   rÊ   rÄ   rÇ   )rK   r,   rÊ   rÂ   rÅ   s        r4   ÚstylezElement.style	  sd   € ð ÐØ�JŠJ�uÑÔÐØÐØ�IŠI�d‰OŒOˆOØˆ>Ø�NŠN˜2ÑÔÐØˆ>Ø�NŠN˜2ÑÔÐØˆr3   ÚzorderÚintc                ó   — || j         d<   | S )zh Sets the element zorder. Higher zorders will be drawn above
            lower zorder elements.
        rÐ   r£   )rK   rÐ   s     r4   rÐ   zElement.zorder  s   € ð &,ˆÔ˜Ñ"Øˆr3   c                ó   — d| j         d<   | S )zD Do not move the Drawing `here` position after placing this element FÚmove_curr£   re   s    r4   ÚholdzElement.hold$  s   € à',ˆÔ˜Ñ$Øˆr3   Fr!   r    r"   úOptional[LabelLoc]r$   r#   r%   úOptional[Halign]r&   úOptional[Valign]r(   r'   r)   r*   r+   c                óž   — |sd}nt          |t          ¦  «        rd}| j                             t	          |||||||||	|
¦
  «
        ¦  «         | S )a†   Add a label to the Element.

            Args:
                label: The text string or list of strings. If list, each string will
                    be evenly spaced along the element (e.g. ['-', 'V', '+'])
                loc: Label position within the Element. Either ('top', 'bottom', 'left',
                    'right'), or the name of an anchor within the Element.
                ofst: Offset from default label position
                halign: Horizontal text alignment ('center', 'left', 'right')
                valign: Vertical text alignment ('center', 'top', 'bottom')
                rotate: True to rotate label with element, or specify rotation
                    angle in degrees
                fontsize: Size of label font
                font: Name/font-family of label text
                mathfont: Name/font-family of math text
                color: Color of label
        r   T)rª   ÚboolrB   Úappendr   )rK   r!   r"   r$   r%   r&   r(   r)   r*   r+   r,   s              r4   r!   zElement.label)  sd   € ð8 ð 	ØˆFˆFÝ˜¥Ñ%Ô%ð 	ØˆFØÔ×Ò¥ e¨S°$¸ÀÈÐPXÐZ^Ð`hÐjoÑ pÔ pÑqÔqÐqØˆr3   c                ó   — d| j         v rit          | j         d         d         t          ¦  «        rC| j         d         \  }}||j        v r|j        |         }nt	          d|› �¦  «        ‚|| j         d<   |                      ¦   «          d| _        dS )zo Convert relative positions to absolute coordinates in self.params,
            and apply flip/reverse
        r>   r`   zUnknown anchor name TN)r?   rª   rg   rD   ÚKeyErrorÚ_flipreverserG   )rK   ÚelementÚposr=   s       r4   Ú	_positionzElement._positionL  s    € ð
 �4Ô#Ð#Ð#­
°4Ô3CÀDÔ3IÈ!Ô3LÍcÑ(RÔ(RÐ#ØÔ+¨DÔ1‰LˆG�SØ�gÔ(Ð(Ð(ØÔ'¨Ô,��åÐ;°cÐ;Ð;Ñ<Ô<Ð<Ø%'ˆDÔ˜TÑ"à×ÒÑÔÐØˆÔÐÐr3   c                ó|  ‡— | j                              dd¦  «        rf| j        D ]}|                     ¦   «          Œ| j                             ¦   «         D ].\  }}t          |¦  «                             ¦   «         | j        |<   Œ/| j                              dd¦  «        rœd| j        v r| j        d         d         Šn#|                      d¬¦  «        \  }}}}||z   dz  Šˆfd„| j        D ¦   «          | j                             ¦   «         D ]1\  }}t          |¦  «         	                    ‰¦  «        | j        |<   Œ0d	S d	S )
z5 Flip and/or reverse element's segments if necessary rº   Fr¼   rk   r   ©Úincludetextr   c                ó:   •— g | ]}|                      ‰¦  «        ‘ŒS r2   )Ú	doreverse)rQ   ÚsÚcenterxs     €r4   ú
<listcomp>z(Element._flipreverse.<locals>.<listcomp>j  s%   ø€ Ð9Ð9Ð9 aˆQ�[Š[˜Ñ!Ô!Ð9Ð9Ð9r3   N)
r?   r€   rE   ÚdofliprC   rY   r   rº   Úget_bboxÚmirrorx)rK   rç   rR   ÚptÚxminÚ_Úxmaxrè   s          @r4   rÞ   zElement._flipreverse\  s]  ø€ àÔ×Ò ¨Ñ.Ô.ð 	6Ø”]ð ð �Ø—’‘
”
�
�
Ø œL×.Ò.Ñ0Ô0ð 6ð 6‘��bÝ%*¨2¡Y¤Y§^¢^Ñ%5Ô%5�”˜TÑ"Ð"àÔ×Ò 	¨5Ñ1Ô1ð 	@Ø˜4œ<Ð'Ð'Øœ, xÔ0°Ô3��à#'§=¢=¸U =Ñ#CÔ#CÑ ��a˜˜qØ $™;¨™/�Ø9Ð9Ð9Ð9¨4¬=Ð9Ñ9Ô9Ð9Ø œL×.Ò.Ñ0Ô0ð @ð @‘��bÝ%*¨2¡Y¤Y×%6Ò%6°wÑ%?Ô%?�”˜TÑ"Ð"ð	@ð 	@ð@ð @r3   Údwgxyr   Údwgthetaútuple[Point, float]c                ó2
  — | j                              ¦   «          | j                              |¦  «         | j        s|                      ¦   «          | j                             dd¦  «        }| j                             d| j                             dd¦  «        ¦  «        }| j                             d|¦  «        }|                      d¬¦  «        | _        d	| j        v r|}nÆ| j                             d
¦  «        �‘| j                             d
¦  «        }t          |¦  «         
                    d¦  «                             ¦   «         rt          t          |¦  «        ¦  «        }nAdddddœ|d                              ¦   «                  }n| j                             d|¦  «        }|� t          | j        |         ¦  «         | _        t#          ||| j        |¦  «        | _        | j                             dd¦  «        }	| j                             d| j                             dd¦  «        ¦  «        }
| j                             dd¦  «        }| j                             dd¦  «        }| j                             dd¦  «        | j                             dd¦  «        | j                             dd¦  «        | j                             dd¦  «        | j                             dd¦  «        dœ}d | j        v r| j                             d ¦  «        ||	<   |                     ¦   «         D ]'\  }}|� |r|nd}|                      |||
||¬!¦  «         Œ(| j        D ]}|                      ||¦  «         Œ| j                             ¦   «         D ]'\  }}| j                             |¦  «        | j        |<   Œ(| j                             d"¦  «        | j        d#<   | j                             d$d¦  «        }|�6|| j        v r-| j                             | j        |         ¦  «        |f| _        nì|�Ô| j                             d%d&¦  «        r¹| j                             d'd¦  «        �;| j                             |¦  «        | j                             d'd(¦  «        f| _        ny| j                             dd¦  «        dk    r"| j                             |¦  «        |f| _        n8| j                             |¦  «        |f| _        nt          |¦  «        |f| _        | j        S ))a›   Calculate element position within the drawing
        
            Args:
                dwgxy: Current XY position within drawing
                dwgtheta: Current theta in the drawing
                dwgparams: Default parameters of the drawing
            
            Returns:
                xy: New XY position after placing the element
                theta: New theta after placing the element
        r½   Nr±   r¯   r`   r>   Frã   Úendptsrˆ   ú-éZ   r   é´   é  ©ÚuÚrÚlrˆ   rœ   ÚlbllocÚtopÚlblsizer)   é   Ú	lblrotater,   ÚblackÚtoplabelÚbotlabelÚlftlabelÚrgtlabelÚclabel)rÿ   ÚbotÚlftÚrgtrk   r!   )r)   r(   r,   r<   r=   r    rÔ   TÚ	dropthetag        )rW   Úclearr@   rG   rá   rZ   r€   rë   Úbboxrg   ÚlstripÚ	isnumericr�   Úlowerr   rC   rA   r   rF   rY   r!   rB   Ú_place_labelrD   Úabsdrop)rK   rñ   rò   Ú	dwgparamsr½   r±   r=   rœ   rˆ   rþ   r   r  ÚlblcolorÚkwlabelsr"   r!   r(   rR   rà   r    s                       r4   Ú_placezElement._placen  s‰  € ð 	Œ×ÒÑÔÐØŒ×Ò˜yÑ)Ô)Ð)ØÔð 	Ø�NŠNÑÔÐà”—’ ¨4Ñ0Ô0ˆØŒ{�Š˜v t¤{§¢°wÀÑ'BÔ'BÑCÔCˆØŒ[�_Š_˜T 5Ñ)Ô)ˆð —M’M¨e�MÑ4Ô4ˆŒ	ð �t”{Ð"Ð"ØˆEˆEØŒ[�_Š_˜SÑ!Ô!Ð-Ø”—’ Ñ$Ô$ˆAÝ�1‰vŒv�}Š}˜SÑ!Ô!×+Ò+Ñ-Ô-ð LÝ�c !™fœf™œ��à  q¨s¸Ð=Ð=¸aÀ¼d¿jºj¹l¼lÔK��à”K—O’O G¨XÑ6Ô6ˆEàÐÝ % d¤l°6Ô&:Ñ ;Ô ;Ð;ˆDÔÝ" 5¨"¨dÔ.>ÀÑEÔEˆŒð ”—’ ¨5Ñ1Ô1ˆØ”+—/’/ )¨T¬[¯_ª_¸ZÈÑ-LÔ-LÑMÔMˆØ”K—O’O K°Ñ7Ô7ˆ	Ø”;—?’? 7¨GÑ4Ô4ˆà”;—?’? :¨tÑ4Ô4Ø”;—?’? :¨tÑ4Ô4Ø”;—?’? :¨tÑ4Ô4Ø”;—?’? :¨tÑ4Ô4Ø”k—o’o h°Ñ5Ô5ðð ˆð �d”kÐ!Ð!Ø#œ{Ÿš¨wÑ7Ô7ˆH�VÑð #Ÿ.š.Ñ*Ô*ð 	Xð 	X‰JˆC�ØÐ Ø#,Ð3˜%˜%°!�Ø—
’
˜5 #°ÀÈh�
ÑWÔWÐWøàÔ%ð 	,ð 	,ˆEØ×Ò˜e UÑ+Ô+Ð+Ð+ð œ×+Ò+Ñ-Ô-ð 	Bð 	B‰IˆD�#Ø$(¤N×$<Ò$<¸SÑ$AÔ$AˆDŒO˜DÑ!Ð!Ø $¤× 8Ò 8¸Ñ @Ô @ˆŒ˜ÑàŒ{�Š˜v tÑ,Ô,ˆØÐ ¨¬Ð 4Ð 4àœ>×3Ò3°D´LÀÔ4FÑGÔGÈÐNˆDŒLˆLØÐ $¤+§/¢/°*¸dÑ"CÔ"CÐØŒ{�Š˜{¨DÑ1Ô1Ð=à#œ~×7Ò7¸Ñ=Ô=¸t¼{¿ºÈ{Ð\^Ñ?_Ô?_Ð_�”�Ø”—’ ¨$Ñ/Ô/°1Ò4Ð4à#œ~×7Ò7¸Ñ=Ô=¸xÐG�”�à#œ~×7Ò7¸Ñ=Ô=¸uÐD�”�å  ™<œ<¨Ð1ˆDŒLØŒ|Ðr3   c                óŽ  — t           j        x}}t           j         x}}| j        D ]�}|st          |t          ¦  «        rŒ|r|                     | j        ¦  «        }|                     ¦   «         \  }}	}
}t          ||¦  «        }t          ||
¦  «        }t          ||	¦  «        }t          ||¦  «        }Œ�t          ||||¦  «        S )aÏ   Get element bounding box

            Args:
                transform: Apply the element transform to the bbox
                    to get bounds in Drawing coordinates
                includetext: Consider text when calculating bounding
                    box. Text width and height can vary by font,
                    so this produces an estimate of bounds.

            Returns:
                Corners of the bounding box, (xmin, ymin, xmax, ymax)
        )ÚmathÚinfrE   rª   r   ÚxformrF   rë   ÚminÚmaxr   )rK   rF   rä   rî   Úyminrð   ÚymaxÚsegmentÚsegxminÚsegyminÚsegxmaxÚsegymaxs               r4   rë   zElement.get_bboxÄ  sÒ   € õ ”hÐˆˆtÝ”x�iÐˆˆtØ”}ð 		&ð 		&ˆGØð ¥:¨gµ{Ñ#CÔ#Cð ØØð 8Ø!Ÿ-š-¨¬Ñ7Ô7�Ø18×1AÒ1AÑ1CÔ1CÑ.ˆG�W˜g wÝ�t˜WÑ%Ô%ˆDÝ�t˜WÑ%Ô%ˆDÝ�t˜WÑ%Ô%ˆDÝ�t˜WÑ%Ô%ˆDˆDå�D˜$  dÑ+Ô+Ð+r3   r   c                ó:  — |j         €d|_         nZ|j         du r?||_         |j         dz   dz  |_         d|j         cxk     rdk     rn n#|xj         dz  c_         n|j         dz   dz  |_         |j        € | j                             dd	¦  «        |_        d
d
ddddd	dœ                     |j        |j        ¦  «        |_        |dz  dk    rT|dz  dk    rK|j        d	k    rd
|_        n8|j        d
k    rd	|_        n%|j        dk    rd|_        n|j        dk    rd|_        |S )zž Calculate position of label
        
            Args:
                label: The label to position
                theta: Element drawing direction
        Nr   Téh  r÷   rù   rø   rþ   rÿ   Úbottomr—   r›   )r	  ÚBr
  ÚLr  ÚRÚT)r(   r"   rZ   r€   )rK   r!   rœ   s      r4   Ú_position_labelzElement._position_labelà  s\  € ð Œ<ÐØˆEŒLˆLØŒ\˜TÐ!Ð!Ø ˆEŒLØ!œL¨3Ñ.°#Ñ5ˆEŒLØ�E”LÐ&Ð&Ò&Ð& 3Ò&Ð&Ð&Ð&Ð&Ø�” Ñ#�”øà!œL¨3Ñ.°#Ñ5ˆEŒLð Œ9ÐØœŸš¨°%Ñ8Ô8ˆEŒIð %Ø"Ø"Ø Ø#Ø!Øð!ð !÷ "%¢ U¤Y°´	Ñ!:Ô!:ð 	Œ	ð �C‰K˜2ÒÐ 5¨3¡;°3Ò"6Ð"6ØŒy˜EÒ!Ð!Ø$�”	�	Ø”˜hÒ&Ð&Ø!�”	�	Ø”˜fÒ$Ð$Ø#�”	�	Ø”˜gÒ%Ð%Ø"�”	Øˆr3   útuple[Halign, Valign, Point]c           	     ó~  — |j         }|€J ‚t          |j         t          t          f¦  «        rt	          |j         |j         f¦  «        }nt	          |¦  «        }|j        dk    rd}d}�nQ|j        �rc|j        | j        v �rT|                      d¬¦  «        \  }}}}	dx}}t          j	        | j        |j                 d         |d¬¦  «        rd}n2t          j	        | j        |j                 d         |d¬¦  «        rd	}nd}t          j	        | j        |j                 d
         |d¬¦  «        rd}n2t          j	        | j        |j                 d
         |	d¬¦  «        rd}nd}t          |j         t          t          f¦  «        rO|j         }
d|
f|
 |
f|
 df|
 |
 fd|
 f|
|
 f|
df|
|
fdœ 
                    ||fd|
f¦  «        }t	          |¦  «        }næ||j        z
  }|dz   |dz   |dz   dœ 
                    |j        |¦  «        }|dz   dz  }g d¢}|t          t          |dz  dz  ¦  «        dz  ¦  «                 \  }}t          |j         t          t          f¦  «        rY|j        dk    rd|j          f}n4|j        d	k    r|j          df}n|j        dk    r
|j         df}n	d|j         f}t	          |¦  «        }|||fS )a�   Calculate label alignment and offset based on angle and location
            relative to the element

            Args:
                label: The label to position
                theta: Element drawing direction

            Returns:
                Align: suggested horizontal and vertical alignment
                Offset: suggested horizontal and vertical offset from label position
        Nrk   Frã   r   g333333Ã?)Úabs_tolr›   r—   r`   rÿ   r'  ))rk   r'  )r›   r'  )r›   rk   )r›   rÿ   )rk   rÿ   )r—   rÿ   )r—   rk   )r—   r'  r÷   rø   rù   )r—   r'  r›   r&  é   )r$   rª   r�   rÑ   r   r"   rC   rë   r  Úiscloser€   r(   Úround)rK   r!   rœ   ÚnewofstÚ	newhalignÚ	newvalignÚx1Úy1Úx2Úy2ÚpofstÚthÚrotaligns                r4   Ú_align_labelzElement._align_label
  s.  € ð ”*ˆØÐ"Ð"Ð"Ý�e”j¥5­# ,Ñ/Ô/ð 	%Ý˜UœZ¨¬Ð4Ñ5Ô5ˆGˆGå˜G‘n”nˆGàŒ9˜Ò Ð Ø (ˆIØ (ˆI‰IàŒYñ G	)˜5œ9¨¬Ð4Ñ4à!Ÿ]š]°u˜]Ñ=Ô=‰NˆB��B˜Ø$,Ð,ˆI˜	ÝŒ|˜DœL¨¬Ô3°AÔ6¸ÀCÐHÑHÔHð %à#�	�	Ý”˜dœl¨5¬9Ô5°aÔ8¸"ÀcÐJÑJÔJð %à"�	�	ð %�	åŒ|˜DœL¨¬Ô3°AÔ6¸ÀCÐHÑHÔHð %à!�	�	Ý”˜dœl¨5¬9Ô5°aÔ8¸"ÀcÐJÑJÔJð %à$�	�	ð %�	õ ˜%œ*¥u­c lÑ3Ô3ð )Øœ
�à+,¨e¨*Ø+0¨&°%¨Ø+0¨&°!¨Ø(- v°¨vÐ&6Ø()¨E¨6 {Ø&+¨e¨V _Ø).°¨
Ø).°¨ð	ð 	÷ ’#�y )Ð,¨q°%¨jÑ9Ô9ð õ   ™.œ.�øð ˜œÑ%ˆBØ˜R™%Ø˜s™FØ˜c™6ð#ð #ç#&¢3 u¤y°"Ñ#5Ô#5ð ð �S‘&˜C‘ˆBð5$ð 5$ð 5$ˆHð $,­Cµ°r¸#±v¸q±jÑ0AÔ0AÀAÑ0EÑ,FÔ,FÔ#GÑ ˆI�yõ ˜%œ*¥u­c lÑ3Ô3ð 	)Ø”9 Ò(Ð(Ø  5¤: +Ð.�G�GØ”Y &Ò(Ð(Ø %¤
˜{¨AÐ.�G�GØ”Y 'Ò)Ð)Ø$œz¨1˜o�G�Gà  %¤*˜o�GÝ ™.œ.�Ø˜) WÐ,Ð,r3   c                óÐ  — t          |j        |j        |j        |j        |j        |j        |j        |j        |j	        |j
        ¦
  «
        }|j        €&| j                             dd¦  «        d         |_        |j        €&| j                             dd¦  «        d         |_        |j        € | j                             dd¦  «        |_        |                      ||¦  «        }|                      ||¦  «        \  }}}|j        �|j        n||_        |j        �|j        n||_        ||_        |j
        r|j
        n| j                             d¦  «        |j        r|j        n| j                             d	¦  «        |j	        r|j	        n| j                             d
¦  «        |j        r|j        n| j                             dd¦  «        |j        |j        f|j        dœ}| j        j        }| j        j        }| j        j        }	| j        j        }
t)          j        ||z   |	z   |
z   ¦  «        sdx}x}x}	}
t-          |j        t.          t0          f¦  «        �r¾|j        dk    r�||z
  t3          |j        ¦  «        dz   z  }t5          |j        ¦  «        D ]M\  }}t7          |||dz   z  z   |	f¦  «        }| j                             t=          ||j        z   |fi |¤Ž¦  «         ŒNdS |j        dk    r�||z
  t3          |j        ¦  «        dz   z  }t5          |j        ¦  «        D ]M\  }}t7          |||dz   z  z   |
f¦  «        }| j                             t=          ||j        z   |fi |¤Ž¦  «         ŒNdS |j        dk    r�|	|
z
  t3          |j        ¦  «        dz   z  }t5          |j        ¦  «        D ]M\  }}t7          ||
||dz   z  z   f¦  «        }| j                             t=          ||j        z   |fi |¤Ž¦  «         ŒNdS |j        dk    r�|	|
z
  t3          |j        ¦  «        dz   z  }t5          |j        ¦  «        D ]M\  }}t7          ||
||dz   z  z   f¦  «        }| j                             t=          ||j        z   |fi |¤Ž¦  «         ŒNdS |j        dk    r||z
  t3          |j        ¦  «        dz   z  }t5          |j        ¦  «        D ]O\  }}t7          |||dz   z  z   df¦  «        }| j                             t=          ||j        z   |fi |¤Ž¦  «         ŒNdS dS t-          |j        t>          ¦  «        �r6|j        r.|j        | j         v r t7          | j         |j                 ¦  «        }nÌ|j        dk    rt7          ||z   dz  |	f¦  «        }n©|j        dk    rt7          ||z   dz  |
f¦  «        }n†|j        dk    rt7          ||	|
z   dz  f¦  «        }nc|j        dk    rt7          ||	|
z   dz  f¦  «        }n@|j        dk    rt7          ||z   dz  |	|
z   dz  f¦  «        }ntC          d|j        › �¦  «        ‚| j                             t=          ||j        z   |j        fi |¤Ž¦  «         dS dS )z´ Adds the label SegmentText to the element, after element placement

            Args:
                label: The Label to add
                theta: Current drawing angle
        NÚlblalign)NNr   r`   Úlblofstgš™™™™™¹?r,   r*   r+   r)   r  )r,   r*   r+   r)   ÚalignÚrotationrÿ   r'  r—   r›   rk   r   zUndefined location )"r   r!   r"   r$   r%   r&   r(   r)   r*   r+   r,   rZ   r€   r,  r=  r  rð   rî   r  r  r  Úisfiniterª   r~   Útuplera   Ú	enumerater   rE   rÛ   r   rg   rC   r«   )rK   r!   rœ   r%   r&   r$   Úsegment_paramsrð   rî   r  r  ÚxdivÚiÚlbltxtr=   Úydivs                   r4   r  zElement._place_labelk  sÎ  € õ �e”k 5¤9¨e¬j¸%¼,Ø”l E¤L°%´.Ø”j %¤.°%´+ñ?ô ?ˆð Œ<ÐØœ;Ÿ?š?¨:°|ÑDÔDÀQÔGˆEŒLØŒ<ÐØœ;Ÿ?š?¨:°|ÑDÔDÀQÔGˆEŒLàŒ:ÐØœŸš¨°BÑ7Ô7ˆEŒJà×$Ò$ U¨EÑ2Ô2ˆØ#×0Ò0°¸Ñ>Ô>Ñˆ�˜Ø',¤|Ð'?�u”|�|ÀVˆŒØ',¤|Ð'?�u”|�|ÀVˆŒØˆŒ
ð %*¤KÐM�U”[�[°T´[·_²_ÀWÑ5MÔ5MØ"'¤*ÐI�E”J�J°$´+·/²/À&Ñ2IÔ2IØ*/¬.ÐY˜œ˜¸d¼k¿oºoÈjÑ>YÔ>YØ*/¬.Ð]˜œ˜¸d¼k¿oºoÈjÐZ\Ñ>]Ô>]Ø”l E¤LÐ1Øœð&ð &ˆð ŒyŒ~ˆØŒyŒ~ˆØŒyŒ~ˆØŒyŒ~ˆÝŒ}˜T $™Y t™^¨DÑ0Ñ1Ô1ð 	+Ø(*Ð*ˆDÐ*�4Ð*˜$ å�e”k¥D­% =Ñ1Ô1ñ *	\ØŒy˜EÒ!Ð!Ø˜T™	¥C¨¬Ñ$4Ô$4°QÑ$6Ñ7�Ý!*¨5¬;Ñ!7Ô!7ð _ð _‘I�A�vÝ  T¨1¨Q©3¡Z¡°Ð6Ñ7Ô7�BØ”M×(Ò(­°R¸¼
±]ÀFÐ)]Ð)]ÈnÐ)]Ð)]Ñ^Ô^Ð^Ð^ð_ð _ð ”˜hÒ&Ð&Ø˜T™	¥C¨¬Ñ$4Ô$4°QÑ$6Ñ7�Ý!*¨5¬;Ñ!7Ô!7ð _ð _‘I�A�vÝ  T¨1¨Q©3¡Z¡°Ð6Ñ7Ô7�BØ”M×(Ò(­°R¸¼
±]ÀFÐ)]Ð)]ÈnÐ)]Ð)]Ñ^Ô^Ð^Ð^ð_ð _ð ”˜fÒ$Ð$Ø˜T™	¥C¨¬Ñ$4Ô$4°QÑ$6Ñ7�Ý!*¨5¬;Ñ!7Ô!7ð _ð _‘I�A�vÝ  d¨4°°1±©:¡oÐ6Ñ7Ô7�BØ”M×(Ò(­°R¸¼
±]ÀFÐ)]Ð)]ÈnÐ)]Ð)]Ñ^Ô^Ð^Ð^ð_ð _ð ”˜gÒ%Ð%Ø˜T™	¥C¨¬Ñ$4Ô$4°QÑ$6Ñ7�Ý!*¨5¬;Ñ!7Ô!7ð _ð _‘I�A�vÝ  d¨4°°1±©:¡oÐ6Ñ7Ô7�BØ”M×(Ò(­°R¸¼
±]ÀFÐ)]Ð)]ÈnÐ)]Ð)]Ñ^Ô^Ð^Ð^ð_ð _ð ”˜hÒ&Ð&Ø˜T™	¥C¨¬Ñ$4Ô$4°QÑ$6Ñ7�Ý!*¨5¬;Ñ!7Ô!7ð _ð _‘I�A�vÝ  T¨1¨Q©3¡Z¡°Ð3Ñ4Ô4�BØ”M×(Ò(­°R¸¼
±]ÀFÐ)]Ð)]ÈnÐ)]Ð)]Ñ^Ô^Ð^Ð^ð	 'Ð&ð_ð _õ ˜œ¥SÑ)Ô)ñ 	\ØŒyð D˜UœY¨$¬,Ð6Ð6Ý˜4œ<¨¬	Ô2Ñ3Ô3��Ø”˜eÒ#Ð#Ý˜T $™Y¨™M¨4Ð0Ñ1Ô1��Ø”˜hÒ&Ð&Ý˜T $™Y¨™M¨4Ð0Ñ1Ô1��Ø”˜fÒ$Ð$Ý˜D 4¨¡9¨a¡-Ð0Ñ1Ô1��Ø”˜gÒ%Ð%Ý˜D 4¨¡9¨a¡-Ð0Ñ1Ô1��Ø”˜hÒ&Ð&Ý˜T $™Y¨™M¨D°©I°q©=Ð9Ñ:Ô:��å Ð!B°u´yÐ!BÐ!BÑCÔCÐCØŒM× Ò ¥¨R°´
©]¸E¼KÐ!ZÐ!ZÈ>Ð!ZÐ!ZÑ[Ô[Ð[Ð[Ð[ð	\ð 	\r3   c                óB  — t           j         dk    rt          ¦   «         }n$t          |                      d¬¦  «        ¬¦  «        }| j        s|                      dd¦  «         |                     |                      d¬¦  «        ¦  «         |                      |¦  «         |S )z@ Draw the element on a new figure. Useful for _repr_ functions. Ú
matplotlibT)rF   )r  r<   r   )r   Ú	mplFigureÚ	svgFigurerë   rG   r  Úset_bboxÚ_draw©rK   Úfigs     r4   Ú_draw_on_figurezElement._draw_on_figureÁ  sŒ   € åÔ(¨LÒ8Ð8Ý‘+”+ˆCˆCå §¢¸ Ñ!>Ô!>Ð?Ñ?Ô?ˆCØÔð 	#Ø�KŠK˜ Ñ"Ô"Ð"Ø�Š�T—]’]¨T�]Ñ2Ô2Ñ3Ô3Ð3Ø�
Š
�3‰ŒˆØˆ
r3   c                óz   — |                       ¦   «         }|                     d¬¦  «                             ¦   «         S )z  SVG representation for Jupyter Úsvg©Úext)rS  ÚgetimageÚdecoderQ  s     r4   Ú
_repr_svg_zElement._repr_svg_Í  s3   € à×"Ò"Ñ$Ô$ˆØ�|Š| ˆ|Ñ&Ô&×-Ò-Ñ/Ô/Ð/r3   c                óz   — t           j         dk    rdS |                      ¦   «         }|                     d¬¦  «        S )z  PNG representation for Jupyter rU  NÚpngrV  )r   rS  rX  rQ  s     r4   Ú
_repr_png_zElement._repr_png_Ò  s:   € åÔ(¨EÒ1Ð1Ø�4Ø×"Ò"Ñ$Ô$ˆØ�|Š| ˆ|Ñ&Ô&Ð&r3   c                óâ  — t          | j        ¦  «        dk    r|                      dd¦  «         | j        D ]} |j        || j        fi | j        ¤Ž Œ| j                             dd¦  «        r‚|                      ¦   «         }t          |j	        |j
        f|j        |j
        f|j        |j        f|j	        |j        f|j	        |j
        ffdd¬¦  «                             || j        ¦  «         dS dS )	z Draw the element on a Figure r   r<   ÚelmbboxFÚblueg      à?)r,   rÅ   N)ra   rE   r  ÚdrawrF   rZ   r€   rë   r   rî   r  rð   r  )rK   rR  r   r  s       r4   rP  zElement._drawÙ  s  € åˆtŒ}ÑÔ Ò"Ð"Ø�KŠK˜ Ñ"Ô"Ð"Ø”}ð 	=ð 	=ˆGØˆGŒL˜˜dœnÐ<Ð<°´Ð<Ð<Ð<Ð<àŒ;�?Š?˜9 eÑ,Ô,ð 	Dà—=’=‘?”?ˆDÝ�d”i ¤Ð+¨d¬i¸¼Ð-CØ”i ¤Ð+¨d¬i¸¼Ð-CÀdÄiÐQUÔQZÐE[ð]à! bð*ñ *ô *ç*.ª$¨s°D´NÑ*CÔ*CÐ*CÐ*CÐ*Cð	Dð 	Dr3   )r9   r:   )rR   rg   r9   r   )r9   r…   )rœ   r�   r9   r…   )r    r¡   r9   r…   r<   )r=   r¤   r¥   r�   r¦   r�   r9   r…   )r`   )r¯   r�   r9   r…   )r½   rg   r9   r…   )r,   rg   r9   r…   )rÂ   r   r9   r…   )rÅ   r�   r9   r…   )T)r,   rÈ   r9   r…   )NNNN)
r,   rË   rÊ   rË   rÂ   rÌ   rÅ   rÍ   r9   r…   )rÐ   rÑ   r9   r…   )	NNNNFNNNN)r!   r    r"   rÖ   r$   r#   r%   r×   r&   rØ   r(   r'   r)   rÍ   r*   rË   r+   rË   r,   rË   ©rñ   r   rò   r�   r9   ró   )FT)r   )r!   r   rœ   r�   r9   r   )r!   r   rœ   r�   r9   r-  )r!   r   rœ   r�   r9   r:   )-r-   r.   r/   r0   r7   r1   r	   r8   rM   rV   rf   r„   r‹   r’   r—   r›   rœ   r    r>   r¯   r¶   r¸   rº   r¼   r½   r,   rÄ   rÇ   rÊ   rÏ   rÐ   rÕ   r!   rá   rÞ   r  rë   r,  r=  r  rS  rZ  r]  rP  Ú__classcell__©r^   s   @r4   r6   r6   ,   s”  ø€ € € € € € ðð ð, )+ÐÐ*Ð*Ð*Ñ*Ø#+ 8¡:¤:€HÐ-Ð-Ð-Ñ-ð)ð )ð )ð )ð ð ð ð ð ð
'ð 
'ð 
'ð?ð ?ð ?ð ?ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ðð ð ð ð ð$ð ð ð ð ð
ð ð ð ð ðð ð ð ð ðð ð ð ð
ð ð ð ð	ð 	ð 	ð 	ðð ð ð ðð ð ð ðð ð ð ð	ð 	ð 	ð 	ð 	ð HLØDHðð ð ð ð ð(ð ð ð ðð ð ð ð )-Ø(,Ø)-Ø)-Ø%*Ø*.Ø$(Ø(,Ø%)ð!ð !ð !ð !ð !ðF ð  ð  ð  ð @ð @ð @ð @ð$Tð Tð Tð Tðl,ð ,ð ,ð ,ð8(ð (ð (ð (ð (ðT_-ð _-ð _-ð _-ð _-ðBT\ð T\ð T\ð T\ð T\ðl
ð 
ð 
ð0ð 0ð 0ð
'ð 'ð 'ðDð Dð Dð Dð Dð Dð Dð Dr3   r6   c                  ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚElementDrawingzx Create an element from a Drawing

        Args:
            drawing: The Drawing instance to convert to an element
    c                óâ   •—  t          ¦   «         j        di |¤Ž || _        | j                             ¦   «         | _        | j        j        | _        | j        j        | j        d<   d| j        d<   d S )Nr    r›   rˆ   r2   )rU   rM   ÚdrawingÚget_segmentsrE   rC   Ú_hererX   )rK   rh  rL   r^   s      €r4   rM   zElementDrawing.__init__î  sk   ø€ Ø�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ØˆŒØœ×1Ò1Ñ3Ô3ˆŒØ”|Ô+ˆŒØ!%¤Ô!3ˆŒ�vÑØ%ˆŒ�sÑÐÐr3   )r-   r.   r/   r0   rM   rc  rd  s   @r4   rf  rf  è  sB   ø€ € € € € ðð ð
&ð &ð &ð &ð &ð &ð &ð &ð &r3   rf  c                  óš   ‡ — e Zd ZdZdddœZd(d)d„Zd*d„Zd+d„Zd,d-d„Zd,d-d„Z	d,d-d„Z
d,d-d„Zd.d„Zd/d„Zd0d1d!„Zd0d1d"„Zd2ˆ fd&„Zd'„ Zˆ xZS )3ÚElement2TermzÃ Two terminal element. The element leads can be automatically
        extended to the start and ending positions.

        Anchors:
            * start
            * center
            * end
    Nç333333³?)Ú	leadcolorÚ	dotradiusr   r=   r   r¥   r�   r¦   r9   ú'Element2Term'c                óv   — t          |¦  «        }t          |j        |z   |j        |z   f¦  «        | j        d<   | S )zÇ Sets ending position of element

            Args:
                xy: Ending position of element
                dx: X-offset from xy position
                dy: Y-offset from xy position
        Úto)r   r¬   r­   r?   r®   s       r4   rr  zElement2Term.to  s:   € õ �2‰YŒYˆÝ!&¨¬¨r©	°2´4¸"±9Ð'=Ñ!>Ô!>ˆÔ˜ÑØˆr3   r¬   úfloat | XY | Elementc                ó   — || j         d<   | S )z= Sets ending x-position of element (for horizontal elements) Útoxr£   )rK   r¬   s     r4   ru  zElement2Term.tox  ó   € à"#ˆÔ˜ÑØˆr3   r­   c                ó   — || j         d<   | S )z; Sets ending y-position of element (for vertical elements) Útoyr£   )rK   r­   s     r4   rx  zElement2Term.toy  rv  r3   ÚlengthrÍ   r…   c                óŠ   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   |r
|| j         d<   | S )r‡   rˆ   r‰   rŠ   r‹   rý   rŒ   ©rK   ry  s     r4   r‹   zElement2Term.up  s\   € à�$Ô"Ð"Ð"ÝŒMÐrÈÔIYÐZ]ÔI^ÐrÐrÐrÑsÔsÐsØ $ˆÔ˜ÑØð 	+Ø$*ˆDÔ˜SÑ!Øˆr3   c                óŠ   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   |r
|| j         d<   | S )r�   rˆ   r‰   r‘   r’   rý   rŒ   r{  s     r4   r’   zElement2Term.down#  ó\   € à�$Ô"Ð"Ð"ÝŒMÐtÈÔIYÐZ]ÔI^ÐtÐtÐtÑuÔuÐuØ &ˆÔ˜ÑØð 	+Ø$*ˆDÔ˜SÑ!Øˆr3   c                óŠ   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   |r
|| j         d<   | S )r•   rˆ   r‰   r–   r—   rý   rŒ   r{  s     r4   r—   zElement2Term.left,  r}  r3   c                óŠ   — d| j         v r#t          j        d| j         d         › d�¦  «         d| j         d<   |r
|| j         d<   | S )r™   rˆ   r‰   rš   r›   rý   rŒ   r{  s     r4   r›   zElement2Term.right5  s\   € à�$Ô"Ð"Ð"ÝŒMÐuÈÔIYÐZ]ÔI^ÐuÐuÐuÑvÔvÐvØ 'ˆÔ˜ÑØð 	+Ø$*ˆDÔ˜SÑ!Øˆr3   c                ó   — || j         d<   | S )z Sets total length of element rý   r£   r{  s     r4   ry  zElement2Term.length>  s   € à &ˆÔ˜ÑØˆr3   ri   rj   c                ó   — ||f| j         d<   | S )z$ Sets absolute endpoints of element rõ   r£   ©rK   ri   rj   s      r4   Ú	endpointszElement2Term.endpointsC  s   € à&+¨S \ˆÔ˜Ñ"Øˆr3   FÚopenrÚ   c                ó"   — |sdnd| j         d<   | S )z% Add a dot to the end of the element Tr„  Údotr£   ©rK   r„  s     r4   r†  zElement2Term.dotH  s   € à.2Ð"> $ $¸ˆÔ˜ÑØˆr3   c                ó"   — |sdnd| j         d<   | S )z- Add a dot to the input/start of the element Tr„  Úidotr£   r‡  s     r4   r‰  zElement2Term.idotM  s   € à/3Ð#? 4 4¸ˆÔ˜Ñ Øˆr3   rñ   rò   ró   c                óH  •— | j                              ¦   «          | j                              |¦  «         | j        s|                      ¦   «          | j                             d| j                             dd¦  «        ¦  «        }| j                             dd¦  «        }| j                             dd¦  «        }| j                             dd¦  «        }| j                             dd¦  «        }| j                             d	d¦  «        }	| j                             d
| j                             dd¦  «        ¦  «        }
t          | j                             d|¦  «        ¦  «        }| j                             d|¦  «        }|�"t          j	        |d         |d         ¦  «        }n¨|�t          j	        ||¦  «        }n�| j                             d¦  «        �v| j                             d¦  «        }t          |¦  «                             d¦  «                             ¦   «         r|}n%dddddœ|d                              ¦   «                  }|�t          |d         ¦  «        }|�#t          j        |d         |d         ¦  «        }�n|�t          j        ||¦  «        }nê|�zt          |t           t"          f¦  «        rt#          |¦  «        }n|d         }t          ||d         f¦  «        }t          j        ||¦  «        }|j        |k    rdnd}|| j        d<   nn|�lt          |t           t"          f¦  «        r|}n|d         }t          |d         |f¦  «        }t          j        ||¦  «        }|j        |k    rdnd}|| j        d<   | j        d         j        d         | j        d<   | j        d         j        d         | j        d<   | j                             dd¦  «        �r6t          | j        d         t0          ¦  «        sJ ‚| j        d         j        }t          j        |d         |d         ¦  «        }t5          j        |Ž }	 |||
d         z  z
  dz  |
d         z  }n# t8          $ r |||
z  z
  dz  |
z  }Y nw xY w|dk    rµt          |d         ¦  «        t          |df¦  «        z
  }t          |d         ¦  «        t          |df¦  «        z   }| | _        |g| j        d         j        z   |gz   | j        d         _        |dk    r.| j                             d¦  «        x}r|| j        d         _        n>t          |d         ¦  «        }t          |d         ¦  «        }t          d¦  «        | _        t?          | j        ¦  «        D ]Š\  }}tA          |dd¦  «        d k    r.tC          d|¦  «        }| "                    |¦  «        | j        |<   ŒHtA          |dd¦  «        d!k    r-tC          d|¦  «        }| "                    |¦  «        | j        |<   Œ‹nJt          | j        d         j        d         ¦  «        }t          | j        d         j        d         ¦  «        }| j                             d"d#¦  «        r[| j        d"         d$k    rd%nd}| j                             d&d'¦  «        }| j         #                    tI          |||d¬(¦  «        ¦  «         | j                             d)d#¦  «        r[| j        d)         d$k    rd%nd}| j                             d&d'¦  «        }| j         #                    tI          |||d¬(¦  «        ¦  «         |  %                    ||¦  «         |	�'| j        t          | j        |	         ¦  «        z
  | _        tC          ||| j        |
¬*¦  «        }i | _&        tO          | j        ¦  «        dk    rX| (                    d¦  «        | j&        d!<   | (                    d¦  «        | j&        d <   | (                    d¦  «        | j&        d+<   n]| (                    |¦  «        | j&        d!<   | (                    |¦  «        | j&        d <   | (                    ||z   dz  ¦  «        | j&        d+<   || j        d,<    tS          ¦   «         j*        ||fi |¤ŽS )-z5 Calculate element placement, adding lead extensions rý   Úunité   rõ   Nrr  ru  rx  r½   r±   r¯   r`   r>   rœ   r   rˆ   rö   r÷   rø   rù   rú   i¦ÿÿÿrl   éÿÿÿÿrm   ÚextendTr   rn  r<   Úendrefrj   ri   r†  Fr„  Úbgro  rm  )ÚradiusrÊ   rÐ   r‰  )r±   rk   r    )+rW   r  r@   rG   rá   rZ   r€   r   r   Úanglerg   r  r  r  Údistrª   rÑ   r�   r¬   rX   r­   rE   ÚpathrC   r   Údeltar  ÚhypotÚ	TypeErrorrA   r,   rE  Úgetattrr   r  rÛ   r   Ú_place_anchorsrD   ra   rF   rU   r  )rK   rñ   rò   r  Útotlenrõ   rr  ru  rx  r½   r±   r=   rœ   rˆ   r¬   Úendptr­   Úin_pathÚdzÚin_lenÚlead_lenri   rj   rn  rH  r   r  rÊ   r‘  rF   r^   s                                 €r4   r  zElement2Term._placeR  sù  ø€ àŒ×ÒÑÔÐØŒ×Ò˜yÑ)Ô)Ð)ØÔð 	Ø�NŠNÑÔÐà”—’  d¤k§o¢o°f¸aÑ&@Ô&@ÑAÔAˆØ”—’ ¨4Ñ0Ô0ˆØŒ[�_Š_˜T 4Ñ(Ô(ˆØŒk�oŠo˜e TÑ*Ô*ˆØŒk�oŠo˜e TÑ*Ô*ˆØ”—’ ¨4Ñ0Ô0ˆØŒ{�Š˜v t¤{§¢°wÀÑ'BÔ'BÑCÔCˆÝ�4”;—?’? 4¨Ñ/Ô/Ñ0Ô0ˆð ”—’ ¨Ñ2Ô2ˆØÐÝ”J˜v aœy¨&°¬)Ñ4Ô4ˆEˆEØˆ^Ý”J˜r 2Ñ&Ô&ˆEˆEØŒ[�_Š_˜SÑ!Ô!Ð-Ø”—’ Ñ$Ô$ˆAÝ�1‰vŒv�}Š}˜SÑ!Ô!×+Ò+Ñ-Ô-ð LØ��à  q¨s¸Ð=Ð=¸aÀ¼d¿jºj¹l¼lÔK�ð ÐÝ�v˜a”yÑ!Ô!ˆBàÐÝ”Y˜v aœy¨&°¬)Ñ4Ô4ˆF‰FØˆ^å”Y˜r 2Ñ&Ô&ˆFˆFØˆ_å˜#¥¥U˜|Ñ,Ô,ð Ý˜#‘J”J��à˜”F�Ý˜1˜b œe˜*Ñ%Ô%ˆEÝ”Y˜r 5Ñ)Ô)ˆFØœ4 !š8˜8�C�C¨ˆEØ&+ˆDŒN˜7Ñ#Ð#Øˆ_å˜#¥¥U˜|Ñ,Ô,ð Ø��à˜”F�Ý˜2˜aœ5 !˜*Ñ%Ô%ˆEÝ”Y˜r 5Ñ)Ô)ˆFØœ4 !š8˜8�C�C¨ˆEØ&+ˆDŒN˜7Ñ#à!%¤¨qÔ!1Ô!6°qÔ!9ˆŒ�XÑØ#œ}¨QÔ/Ô4°RÔ8ˆŒ�VÑØŒ;�?Š?˜8 TÑ*Ô*ñ "	3Ý˜dœm¨AÔ.µÑ8Ô8Ð8Ð8Ð8Ø”m AÔ&Ô+ˆGÝ”˜G BœK¨°¬Ñ4Ô4ˆBÝ”Z �_ˆFð;à" V¨D°¬G¡^Ñ3°QÑ6¸¸a¼Ñ@��øÝð ;ð ;ð ;Ø" V¨D¡[Ñ0°!Ñ3°dÑ:���ð;øøøð ˜!Š|ˆ|Ý˜g aœjÑ)Ô)­E°8¸Q°-Ñ,@Ô,@Ñ@�Ý˜G BœKÑ(Ô(­5°(¸A°Ñ+?Ô+?Ñ?�Ø$) 6�Ô Ø).¨°$´-ÀÔ2BÔ2GÑ(GÈ3È%Ñ(O�”˜aÔ Ô%Ø˜A’:�:°´·²ÀÑ0LÔ0LÐ#L 9�:Ø-6�D”M !Ô$Ô*øõ ˜g aœjÑ)Ô)�Ý˜G BœKÑ(Ô(�Ý#(¨¡=¤=�Ô õ (¨¬Ñ6Ô6ð <ð <‘
��7Ý˜7 H¨dÑ3Ô3°uÒ<Ð<Ý% a¨Ñ-Ô-�EØ'.§}¢}°UÑ';Ô';�D”M !Ñ$Ð$Ý˜W h°Ñ5Ô5¸Ò@Ð@Ý% a¨Ñ/Ô/�EØ'.§}¢}°UÑ';Ô';�D”M !Ñ$øð<õ ˜$œ-¨Ô*Ô/°Ô2Ñ3Ô3ˆEÝ˜œ aÔ(Ô-¨bÔ1Ñ2Ô2ˆCàŒ;�?Š?˜5 %Ñ(Ô(ð 	YØ-1¬[¸Ô-?À6Ò-IÐ-I T TÈtˆDØ”[—_’_ [°%Ñ8Ô8ˆFØŒM× Ò ¥¨s¸6ÈÐUVÐ!WÑ!WÔ!WÑXÔXÐXØŒ;�?Š?˜6 5Ñ)Ô)ð 	[Øœ; vÔ.°&Ò8Ð8�4�4¸dˆDØ”[—_’_ [°%Ñ8Ô8ˆFØŒM× Ò ¥¨u¸VÈ$ÐWXÐ!YÑ!YÔ!YÑZÔZÐZà×Ò˜E 3Ñ'Ô'Ð'ØÐØ#Ô/µ°d´lÀ6Ô6JÑ0KÔ0KÑKˆDÔÝ˜e R¨Ô)9ÀÐEÑEÔEˆ	àˆŒÝˆtŒ}ÑÔ Ò"Ð"Ø'0×':Ò':¸6Ñ'BÔ'BˆDŒO˜GÑ$Ø%.×%8Ò%8¸Ñ%@Ô%@ˆDŒO˜EÑ"Ø(1×(;Ò(;¸FÑ(CÔ(CˆDŒO˜HÑ%Ð%à'0×':Ò':¸5Ñ'AÔ'AˆDŒO˜GÑ$Ø%.×%8Ò%8¸Ñ%=Ô%=ˆDŒO˜EÑ"Ø(1×(;Ò(;¸UÀ3¹YÈ¹MÑ(JÔ(JˆDŒO˜HÑ%à!ˆŒ�FÑØ�u‰wŒwŒ~˜b %Ð5Ð5¨9Ð5Ð5Ð5s   ÑQ' Ñ'RÒRc                ó‚   — t          |¦  «        | j        d<   t          |¦  «        | j        d<   ||z   dz  | j        d<   dS )z8 Allow positioning anchors before the element is placed ri   rj   r   rk   N)r   rC   r‚  s      r4   r™  zElement2Term._place_anchorsÎ  s@   € å % e¡¤ˆŒ�WÑÝ# C™jœjˆŒ�UÑØ"'¨¡)¨Q¡ˆŒ�XÑÐÐr3   r<   )r=   r   r¥   r�   r¦   r�   r9   rp  )r¬   rs  r9   rp  )r­   rs  r9   rp  rP   )ry  rÍ   r9   r…   )ry  r�   r9   rp  )ri   r   rj   r   r9   rp  )F)r„  rÚ   r9   rp  rb  )r-   r.   r/   r0   r7   rr  ru  rx  r‹   r’   r—   r›   ry  rƒ  r†  r‰  r  r™  rc  rd  s   @r4   rl  rl  ÷  sq  ø€ € € € € ðð ð Øðð Ðð
ð 
ð 
ð 
ð 
ðð ð ð ð
ð ð ð ð
ð ð ð ð ðð ð ð ð ðð ð ð ð ðð ð ð ð ðð ð ð ð
ð ð ð ð
ð ð ð ð ð
ð ð ð ð ð
z6ð z6ð z6ð z6ð z6ð z6ðx/ð /ð /ð /ð /ð /ð /r3   rl  )1r0   Ú
__future__r   Útypingr   r   r   r   r   Úcollectionsr	   Údataclassesr
   r�   r  Ú r   rE   r   r   r   r   r   rF   r   r   r   Útypesr   r   r   r   r   r   rÏ   r   r   Úbackends.svgr   rN  Úbackends.mplrM  ÚImportErrorÚnanÚgapr   r6   rf  rl  r2   r3   r4   ú<module>r¬     sx  ðØ $Ð $à "Ð "Ð "Ð "Ð "Ð "Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !Ø €€€Ø €€€à Ð Ð Ð Ð Ð Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à .Ð .Ð .Ð .Ð .Ð .ðØ2Ð2Ð2Ð2Ð2Ð2Ð2øØð ð ð Ø€I€I€Iðøøøð „x�”Ð€ð ðð ð ð ð ñ ô ñ „ððy
Dð y
Dð y
Dð y
Dð y
Dñ y
Dô y
Dð y
Dðx&ð &ð &ð &ð &�Wñ &ô &ð &ð[/ð [/ð [/ð [/ð [/�7ñ [/ô [/ð [/ð [/ð [/s   Á4A; Á;BÂB