§
    èƒñ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ZddlmZ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mZmZmZ ddlm Z  ddl!m"Z" e G d„ d¦  «        ¦   «         Z#e G d„ d¦  «        ¦   «         Z$ e
d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,	 	 	 	 d=d>d:„Z- G d;„ d<e&¦  «        Z.dS )?z Integrated Circuit Element é    )Úannotations)ÚAnyÚOptionalÚSequenceÚTupleÚcast)Ú
namedtupleN)Ú	dataclassÚreplaceé   )ÚSegmentÚSegmentTextÚSegmentCircleÚSegmentPolyÚSegmentType)ÚElement)ÚlinspaceÚPoint)ÚXYÚSideÚHalignÚValign)Ú	text_size)Údrawing_stackc                  ó¼   — e Zd ZU dZ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Zd	ed<   dZd	ed<   dS )ÚIcPinaœ   Integrated Circuit Pin

        Args:
            name: Input/output name (inside the box)
            pin: Pin name/number (outside the box)
            side: Side of box for the pin, 'left', 'right', 'top', 'bottom'
            pos: Pin position along the side, fraction from 0-1
            slot: Slot definition of pin location, given in 'X/Y' format.
                '2/4' is the second pin on a side with 4 pins.
            invert:Add an invert bubble to the pin
            invertradius: Radius of invert bubble
            color: Color for the pin and label
            rotation: Rotation for label text
            anchorname: Named anchor for the pin
     Nú
str | NoneÚnameÚpinÚLr   Úsideúfloat | NoneÚposÚslotFÚboolÚinvertç333333Ã?ÚfloatÚinvertradiusÚcolorr   ÚrotationÚ
anchornameÚlblsizeÚ
pinlblsize)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r!   r#   r$   r&   r)   r*   r+   r,   r-   r.   © ó    ú]/data/share/cad/hardware/.venv/lib/python3.11/site-packages/schemdraw/elements/intcircuits.pyr   r      sê   € € € € € € ð	ð 	ð €DÐÐÐÑØ€CÐÐÐÑØ€DÐÐÐÑØ€CÐÐÐÑØ€DÐÐÐÑØ€FÐÐÐÑØ€LÐÐÐÑØ€EÐÐÐÑØ€HÐÐÐÑØ!€JÐ!Ð!Ð!Ñ!Ø €GÐ Ð Ð Ñ Ø#€JÐ#Ð#Ð#Ñ#Ð#Ð#r5   r   c                  óv   — e Zd ZU dZ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 )ÚIcSidez- Pin layout parameters for one side of an Ic ç        r(   Úspacingç      Ð?Úpadç      à?Úleadlenr'   Ú
label_ofstç      ,@Ú
label_sizeçš™™™™™©?Úpinlabel_ofstç      &@Úpinlabel_sizeN)r/   r0   r1   r2   r:   r3   r<   r>   r?   rA   rC   rE   r4   r5   r6   r8   r8   0   s�   € € € € € € à7Ð7Ø€GÐÐÐÑØ€CÐÐÐÑØ€GÐÐÐÑØ€JÐÐÐÑØ€JÐÐÐÑØ€MÐÐÐÑØ€MÐÐÐÑÐÐr5   r8   ÚIcBoxz	w h y1 y2c            	      óì   ‡ — e Zd ZdddddddddœZ	 	 	 dKdLˆ fd„ZdMd„ZedNd„¦   «         Z	 	 	 	 	 	 	 	 	 	 	 dOdPd(„Z	 	 	 	 	 	 	 	 dQdRd3„Z	dSd5„Z
dTd7„ZdTd8„ZdUd:„ZdVd?„ZdWd@„ZdXdC„ZdTdD„ZdTdE„ZdYˆ fdJ„Zˆ xZS )ZÚIcr9   r=   é   r'   g333333³?é   )Ú
pinspacingÚedgepadHÚedgepadWr>   ÚlsizeÚlofstÚplblofstÚplblsizeNr   ÚsizeúOptional[XY]ÚpinsúOptional[Sequence[IcPin]]Úslantr(   c                ój  •—  t          ¦   «         j        di |¤Ž |�|n| j                             d¦  «        | _        d | _        || _        g g g g dœ| _        i | _        i | _	        t          | j                             dd¦  «        | j                             dd¦  «        | j                             dd¦  «        | j                             d	d
¦  «        | j                             dd¦  «        | j                             dd¦  «        | j                             dd¦  «        ¦  «        | _        |�W|D ]T}t          t          |j        d                              ¦   «         ¦  «        }| j        |                              |¦  «         ŒUt#          dddd¦  «        | _        |                      ¦   «          d S )NrR   ©r    ÚRÚTÚBrK   r   rL   r;   r>   r=   rO   r'   rN   rI   rP   rB   rQ   rJ   r4   )ÚsuperÚ__init__ÚparamsÚgetrR   Ú	_sizeautorV   rT   Ú	usersidesÚsidesr8   Ú
_dflt_sider   r   r!   ÚupperÚappendrF   Ú_icboxÚ_setsize)ÚselfrR   rT   rV   Úkwargsr   r!   Ú	__class__s          €r6   r]   zIc.__init__J   s~  ø€ ð
 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø Ð,�D�D°$´+·/²/À&Ñ2IÔ2IˆŒ	Ø8<ˆŒØˆŒ
Ø35¸BÀRÈbÐ-QÐ-QˆŒ	Ø-/ˆŒØ)+ˆŒ
Ý ØŒK�OŠO˜L¨!Ñ,Ô,ØŒK�OŠO˜J¨Ñ,Ô,ØŒK�OŠO˜I rÑ*Ô*ØŒK�OŠO˜G SÑ)Ô)ØŒK�OŠO˜G RÑ(Ô(ØŒK�OŠO˜J¨Ñ,Ô,ØŒK�OŠO˜J¨Ñ+Ô+ñ-ô -ˆŒð ÐØð ,ð ,�Ý�D #¤(¨1¤+×"3Ò"3Ñ"5Ô"5Ñ6Ô6�Ø”	˜$”×&Ò& sÑ+Ô+Ð+Ð+å˜A˜a  !‘n”nˆŒØ�Š‰Œˆˆˆr5   r   ÚstrÚreturnr   c                ó   — g d¢}|t          t          | ¦  «                             di ¦  «                             ¦   «         ¦  «        z  }|| j        z  }|d„ | j                             dg ¦  «        D ¦   «         z  }|d„ | j                             dg ¦  «        D ¦   «         z  }|d„ | j                             dg ¦  «        D ¦   «         z  }|d	„ | j                             d
g ¦  «        D ¦   «         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ÚWSWÚanchorsc                ó"   — g | ]}d |j         › �‘ŒS ©r   r…   ©Ú.0Úps     r6   ú
<listcomp>z"Ic.__getattr__.<locals>.<listcomp>n   ó    € ÐFÐFÐF¨!˜˜aœe˜˜ÐFÐFÐFr5   r    c                ó"   — g | ]}d |j         › �‘ŒS r…   r…   r†   s     r6   r‰   z"Ic.__getattr__.<locals>.<listcomp>o   rŠ   r5   rY   c                ó"   — g | ]}d |j         › �‘ŒS r…   r…   r†   s     r6   r‰   z"Ic.__getattr__.<locals>.<listcomp>p   rŠ   r5   rZ   c                ó"   — g | ]}d |j         › �‘ŒS r…   r…   r†   s     r6   r‰   z"Ic.__getattr__.<locals>.<listcomp>q   rŠ   r5   r[   Ú
absanchorsz not defined in Element)	ÚlistÚvarsr_   ÚkeysÚpinnamesrT   r   Úpush_elementÚAttributeError)rh   r   Úanchornamess      r6   Ú__getattr__zIc.__getattr__g   s‡  € ðOð Oð Oˆð 	•t�D ™JœJŸNšN¨9°bÑ9Ô9×>Ò>Ñ@Ô@ÑAÔAÑAˆØ�t”}Ñ$ˆØÐFÐF¨t¬y¯}ª}¸SÀ"Ñ/EÔ/EÐFÑFÔFÑFˆØÐFÐF¨t¬y¯}ª}¸SÀ"Ñ/EÔ/EÐFÑFÔFÑFˆØÐFÐF¨t¬y¯}ª}¸SÀ"Ñ/EÔ/EÐFÑFÔFÑFˆØÐFÐF¨t¬y¯}ª}¸SÀ"Ñ/EÔ/EÐFÑFÔFÑFˆØ�KÐÐ¨µ°T±
´
·²¸|ÈRÑ0PÔ0PÐ(PÐ(PåÔ*¨4Ñ0Ô0Ð0à•4˜‘:”:—>’> ,°Ñ3Ô3Ð3Ð3Ý˜‘:”:—>’> ,Ñ/Ô/°Ô5Ð5Ý Ð=Ð=Ð=Ñ>Ô>Ð>r5   ú	list[str]c                ó†   — g }| j                              ¦   «         D ]$\  }}|                     d„ |D ¦   «         ¦  «         Œ%|S )z List of all pin names c              3  ó2   K  — | ]}|j         ¯	|j         V — Œd S )N)r   r†   s     r6   ú	<genexpr>zIc.pinnames.<locals>.<genexpr>   s+   è è € Ð8Ð8 A°´Ð8˜œÐ8Ð8Ð8Ð8Ð8Ð8r5   )rT   ÚitemsÚextend)rh   ÚnamesÚ_rT   s       r6   r’   zIc.pinnamesz   sQ   € ð ˆØ”y—’Ñ(Ô(ð 	9ð 	9‰GˆAˆtØ�LŠLÐ8Ð8¨Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Øˆr5   r    Fr!   r   r   r   r#   r"   r$   r&   r%   r)   r*   r+   r,   r-   c                óö   — t          t          |d                              ¦   «         ¦  «        }| j        |                              t          |||||||||	|
|¦  «        ¦  «         |                      ¦   «          | S )aù   Add a pin to the IC

            Args:
                name: Input/output name (inside the box)
                pin: Pin name/number (outside the box)
                side: Side of box for the pin, 'left', 'right', 'top', 'bottom'
                pos: Pin position along the side, fraction from 0-1
                slot: Slot definition of pin location, given in 'X/Y' format.
                    '2/4' is the second pin on a side with 4 pins.
                invert:Add an invert bubble to the pin
                invertradius: Radius of invert bubble
                color: Color for the pin and label
                rotation: Rotation for label text
                anchorname: Named anchor for the pin
                lblsize: Font size for label
        r   )r   r   rd   rT   re   r   rg   )rh   r!   r   r   r#   r$   r&   r)   r*   r+   r,   r-   s               r6   r   zIc.pin‚   sw   € õ8 •D˜$˜qœ'Ÿ-š-™/œ/Ñ*Ô*ˆØŒ	�$Œ×Ò�u T¨3°°c¸4ÀØ$0°%¸À:Èwñ Xô  Xñ 	Yô 	Yð 	Yà�Š‰ŒˆØˆr5   r@   rB   rD   r:   r<   r>   r?   rA   rC   rE   c	           	     óÂ   — t          t          |d                              ¦   «         ¦  «        }t          |||||||¦  «        | j        |<   |                      ¦   «          | S )a)   Set parameters for spacing/layout of one side

            Args:
                side: Side of box to define
                spacing: Distance between pins
                pad: Distance from box edge to first pin
                leadlen: Length of pin lead extensions
                label_ofst: Offset between box and label (inside box)
                label_size: Font size of label (inside box)
                pinlabel_ofst: Offset between box and pin label (outside box)
                pinlabel_size: Font size of pin label (outside box)
        r   )r   r   rd   r8   ra   rg   )	rh   r!   r:   r<   r>   r?   rA   rC   rE   s	            r6   r!   zIc.side¤   s[   € õ* •D˜$˜qœ'Ÿ-š-™/œ/Ñ*Ô*ˆÝ% g¨s°GØ&0°*Ø&3°]ñ Dô  DˆŒ�tÑð 	�Š‰ŒˆØˆr5   údict[Side, int]c                óÚ   — i }| j                              ¦   «         D ]N\  }}d„ |D ¦   «         }d„ |D ¦   «         dgz   }t          t          |¦  «        t          |¦  «        ¦  «        ||<   ŒO|S )z2 Count the number of pins (or slots) on each side c                ó   — g | ]	}|j         ‘Œ
S r4   )r$   r†   s     r6   r‰   z!Ic._countpins.<locals>.<listcomp>Ä   s   € Ð.Ð.Ð. A˜œÐ.Ð.Ð.r5   c                ób   — g | ],}|®t          |                     d¦  «        d         ¦  «        ‘Œ-S )Nú/é   )ÚintÚsplitr†   s     r6   r‰   z!Ic._countpins.<locals>.<listcomp>Æ   s/   € ÐNÐNÐN¨aÀÀ•S˜Ÿš ™œ aœÑ)Ô)ÀÀÀr5   r   )rT   r›   ÚmaxÚlen)rh   Úpincountr!   rT   Ú	slotnamesÚslotss         r6   Ú
_countpinszIc._countpinsÀ   s{   € àˆØœ)Ÿ/š/Ñ+Ô+ð 	8ð 	8‰JˆD�$Ø.Ð.¨Ð.Ñ.Ô.ˆIàNÐN°9ÐNÑNÔNÐRSÐQTÑTˆEÝ ¥ T¡¤­C°©J¬JÑ7Ô7ˆH�T‰NˆNØˆr5   ÚNonec           	     óÚ  — i }i }dD ]ï}t          t          |¦  «        }t          | j                             || j        ¦  «        ¦  «        }|| j        |<   |j        dk    rd|_        |j        dz  |j        | j	        |         dz
  z  z   ||<   d}| j
        |         D ]T}|j        rK|j        r|j        n| j        d         }t          |t          |j        |¬¦  «        d         d	z  dz  ¦  «        }ŒU|||<   Œð|d
         |d         z   d| j        d         z  z   }t          |                     d
d¦  «        |                     dd¦  «        d| j        d         z   ¦  «        }t          |                     dd¦  «        |                     dd¦  «        d| j        d         z   |¦  «        }	|	|f| _        dD ]Z}t          t          |¦  «        }| j                             || j        ¦  «        }||j        | j	        |         dz
  z  z
  dz  |_        Œ[dD ]Z}t          t          |¦  «        }| j                             || j        ¦  «        }|	|j        | j	        |         dz
  z  z
  dz  |_        Œ[dS )z' Determine size of box if not provided rX   r   ç333333ã?r   r¦   r9   rN   )rR   éH   r    rY   é   rO   rL   rZ   r[   rM   )r    rY   ©rZ   r[   N)r   r   r   ra   r_   rc   rb   r:   r<   r«   rT   r   r-   r^   r©   r   r`   )
rh   ÚlengthsÚlabelwidthsr!   Ú	sideparamÚlabelwrˆ   r-   ÚboxhÚboxws
             r6   Ú	_autosizezIc._autosizeÊ   sŠ  € à$&ˆØ(*ˆð )ð 	'ð 	'ˆDÝ�˜dÑ#Ô#ˆDÝ ¤× 2Ò 2°4¸¼Ñ IÔ IÑJÔJˆIØ(ˆDŒJ�tÑØÔ  AÒ%Ð%Ø$'�	Ô!Ø%œM¨AÑ-°	Ô0AÀTÄ]ÐSWÔEXÐ[\ÑE\Ñ0]Ñ]ˆG�D‰Mð ˆFØ”Y˜t”_ð Rð R�Ø”6ð RØ+,¬9ÐN˜aœi˜i¸$¼+ÀgÔ:N�GÝ  ­°1´6ÀÐ)HÑ)HÔ)HÈÔ)KÈBÑ)NÈqÑ)PÑQÔQ�FøØ &ˆK˜ÑÐð ˜SÔ! K°Ô$4Ñ4°q¸¼ÀWÔ9MÑ7MÑMˆÝ�7—;’;˜s BÑ'Ô'¨¯ª°S¸"Ñ)=Ô)=¸qÀÄÈZÔAXÑ?XÑYÔYˆÝ�7—;’;˜s BÑ'Ô'¨¯ª°S¸"Ñ)=Ô)=¸qÀÄÈZÔAXÑ?XÐZ`ÑaÔaˆØ˜t˜ˆŒð ð 	Wð 	WˆDÝ�˜dÑ#Ô#ˆDØœ
Ÿš t¨T¬_Ñ=Ô=ˆIØ! IÔ$5¸¼ÀtÔ9LÈqÑ9PÑ$QÑQÐUVÑVˆIŒMˆMàð 	Wð 	WˆDÝ�˜dÑ#Ô#ˆDØœ
Ÿš t¨T¬_Ñ=Ô=ˆIØ! IÔ$5¸¼ÀtÔ9LÈqÑ9PÑ$QÑQÐUVÑVˆIŒMˆMð	Wð 	Wr5   c                óÄ  — dD ]Ü}t          t          |¦  «        }t          | j                             || j        ¦  «        ¦  «        }|| j        |<   |dv r| j        d         n| j        d         }|j        }|j	        dk    r;| j
        |         dk    r|d|z  z
  | j
        |         dz
  z  |_	        Œ®|dz  |_        Œ¹||j	        | j
        |         dz
  z  z
  dz  |_        ŒÝdS )z1 Determine pin layout when box size is specified rX   r´   r   r¦   r   N)r   r   r   ra   r_   rc   rb   rR   r<   r:   r«   )rh   r!   r·   Úlengthr<   s        r6   Ú_autopinlayoutzIc._autopinlayoutñ   sþ   € à(ð 	Yð 	YˆDÝ�˜dÑ#Ô#ˆDÝ ¤× 2Ò 2°4¸¼Ñ IÔ IÑJÔJˆIØ(ˆDŒJ�tÑØ%)¨ZÐ%7Ð%7�T”Y˜q”\�\¸T¼YÀq¼\ˆFØ”-ˆCØÔ  AÒ%Ð%à”= Ô&¨Ò*Ð*Ø)/°!°C±%©¸D¼MÈ$Ô<OÐRSÑ<SÑ(T�IÔ%Ð%à$*¨1¡H�I”M�Mð "(¨)Ô*;¸T¼]È4Ô=PÐQRÑ=RÑ*SÑ!SÐWXÑ X�	”�ð	Yð 	Yr5   rF   c                ó^  — | j         r| j         \  }}n| j        r| j        \  }}nd\  }}|t          j        t          j        | j        ¦  «        ¦  «        z  }| j        dk    rYd|z
  }||z   }t          d¦  «        t          ||f¦  «        t          ||f¦  «        t          d|f¦  «        t          d¦  «        g}nº| j        dk     r]d|z   }||z
  }t          d|f¦  «        t          |df¦  «        t          ||f¦  «        t          d|f¦  «        t          d|f¦  «        g}nRd}|}t          d¦  «        t          |df¦  «        t          ||f¦  «        t          d|f¦  «        t          d¦  «        g}| j                             t          |¦  «        ¦  «         t          ||||¦  «        S )z# Draw main box and return its size ©r   é   r   ©r   r   )rR   r`   ÚmathÚtanÚradiansrV   r   Úsegmentsre   r   rF   )rh   ÚwÚhÚtanslantÚy1Úy2Úpaths          r6   Ú_drawboxzIc._drawbox  s•  € àŒ9ð 	Ø”9‰DˆAˆqˆqØŒ^ð 	Ø”>‰DˆAˆqˆqà‰DˆAˆqà•t”x¥¤¨T¬ZÑ 8Ô 8Ñ9Ô9Ñ9ˆØŒ:˜Š>ˆ>Ø�X‘ˆBØ�X‘ˆBÝ˜&‘M”M¥5¨!¨R¨¡>¤>µ5¸!¸R¸±>´>Å5È!ÈQÈÁ=Ä=ÕRWÐX^ÑR_ÔR_Ð`ˆDˆDØŒZ˜!Š^ˆ^Ø�X‘ˆBØ�X‘ˆBÝ˜1˜b˜'‘N”N¥E¨1¨a¨&¡M¤Mµ5¸!¸Q¸±=´=Å%ÈÈBÈÁ.Ä.ÕRWÐYZÐ\^ÐX_ÑR`ÔR`ÐaˆDˆDàˆBØˆBÝ˜&‘M”M¥5¨!¨Q¨¡=¤=µ%¸¸A¸±-´-ÅÈÈ1ÀvÁÄÕPUÐV\ÑP]ÔP]Ð^ˆDØŒ×Ò�W T™]œ]Ñ+Ô+Ð+Ý�Q˜˜2˜rÑ"Ô"Ð"r5   r   Únumr§   r   c           
     óÆ  — | j                              || j        ¦  «        }|j        dk    r|j        nd}|j        r0t          |j                             d¦  «        d         ¦  «        dz
  }|j        ||z  z   }|j        r#|j        |j        | j	        |         dz
  z  |z  z   }t          d|f¦  «        t          | j        j        |f¦  «        t          || j        j        f¦  «        t          |df¦  «        dœ                     |t          d¦  «        ¦  «        }|dk    r`| j        dk    rUt          |d         |d         |d         t          j        t          j        | j        ¦  «         ¦  «        z  z
  f¦  «        }�n`|dk    ry| j        dk     rnt          |d         |d         | j        j        | j        j        z
  z   |d         t          j        t          j        | j        ¦  «         ¦  «        z  z
  f¦  «        }ná|dk    rx| j        dk     rmt          |d         |d         | j        j        | j        j        z
  z
  |d         t          j        t          j        | j        ¦  «        ¦  «        z  z
  f¦  «        }nc|dk    r]| j        dk    rRt          |d         |d         |d         t          j        t          j        | j        ¦  «        ¦  «        z  z
  f¦  «        }|S )	z Get XY position of pin r   r±   r¥   r¦   rX   rÂ   rZ   r[   )rb   r_   rc   r:   r$   r§   r¨   r<   r#   r«   r   rf   rÇ   rÈ   rV   rÃ   rÄ   rÅ   rË   )rh   r!   r   rÎ   Ú	sidesetupr:   ÚzÚxys           r6   Ú_pinposz
Ic._pinpos  s�  € à”J—N’N 4¨¬Ñ9Ô9ˆ	Ø'0Ô'8¸1Ò'<Ð'<�)Ô#Ð#À#ˆØŒ8ð 	2Ý�c”h—n’n SÑ)Ô)¨!Ô,Ñ-Ô-°Ñ1ˆCØŒM˜C ™KÑ'ˆØŒ7ð 	JØ” ¤¨4¬=¸Ô+>¸qÑ+@Ñ AÀ'Ñ IÑIˆAÝ˜!˜Q˜‘=”=Ý˜$œ+œ-¨Ð+Ñ,Ô,Ý˜!˜Tœ[œ]Ð+Ñ,Ô,Ý˜!˜Q˜‘=”=ðð ÷ ’�D�% ™-œ-Ñ(Ô(ð	 	ð �3Š;ˆ;˜4œ:¨š>˜>Ý˜˜1œ˜r !œu r¨!¤u­t¬x½¼ÀdÄjÑ9QÔ9QÐ8QÑ/RÔ/RÑ'RÑRÐSÑTÔTˆB‰BØ�SŠ[ˆ[˜TœZ¨!š^˜^Ý˜˜Aœ  1¤¨¬¬¸¼¼Ñ)EÑ FÈÈAÌÕQUÔQYÕ[_Ô[gÐhlÔhrÑ[sÔ[sÐZsÑQtÔQtÑItÑ tÐuÑwÔwˆBˆBØ�SŠ[ˆ[˜TœZ¨!š^˜^Ý˜˜1œ˜r !œu¨¬¬°t´{´}Ñ(DÑEÈÈ1ÌÕPTÔPXÕY]ÔYeÐfjÔfpÑYqÔYqÑPrÔPrÑHrÑrÐsÑtÔtˆBˆBØ�SŠ[ˆ[˜TœZ¨!š^˜^Ý˜˜1œ˜r !œu r¨!¤u­t¬x½¼ÀTÄZÑ8PÔ8PÑ/QÔ/QÑ'QÑQÐRÑSÔSˆBØˆ	r5   c                óp	  — | j                              || j        ¦  «        }|                      |||¦  «        }t	          |j         df¦  «        t	          |j        df¦  «        t	          d|j        f¦  «        t	          d|j         f¦  «        dœ                     |t	          d¦  «        ¦  «        }||z   }|| j        d|d                              ¦   «         › |dz   › �<   |j        r|| j        |j        <   n+|j	        r$|j	        dk    r
|| j        d<   || j        |j	        <   |j
        r|| j        d|j
        › �<   |j        dk    rþ|j        rË|j        }t	          | df¦  «        t	          |df¦  «        t	          d|f¦  «        t	          d| f¦  «        dœ                     |t	          d¦  «        ¦  «        }	| j                             t          ||	z   |¦  «        ¦  «         | j                             t!          ||	d	z  z   ||z   g¦  «        ¦  «         n,| j                             t!          |||z   g¦  «        ¦  «         |j
        �r"|j
        d
k    �r|j        |j        z  }|j        }
t	          |
 |d	z  z
  |
f¦  «        t	          |
|d	z  z   |
f¦  «        t	          |
|
|d	z  z   f¦  «        t	          |
|
 |d	z  z
  f¦  «        dœ                     |¦  «        }t%          t&          t(          t*          t,          f                  dddddœ                     |¦  «        ¦  «        }| j                             t/          ||z   |j
        ||j        �|j        n|j        ¬¦  «        ¦  «         |j	        dk    r|                      |||||¦  «         dS |j	        �r|j	        d
k    �rt	          |j        df¦  «        t	          |j         df¦  «        t	          d|j         f¦  «        t	          d|j        f¦  «        dœ                     |¦  «        }t%          t&          t(          t*          t,          f                  dddddœ                     |¦  «        ¦  «        }| j                             t/          ||z   |j	        ||j        �|j        n|j        |j        |j        d¬¦  «        ¦  «         dS dS dS )z Draw one pin and its labels r   rX   rÂ   Úinr¦   ú>ÚCLKr   r   Ú )ÚrightÚbottom)ÚleftrÚ   )rÛ   ÚtopN)r#   ÚlabelÚalignÚfontsize©rÛ   rp   ©rÙ   rp   )rp   rÜ   ©rp   rÚ   Údefault)r#   rÝ   rÞ   rß   r*   r+   Úrotation_mode) rb   r_   rc   rÓ   r   r>   rƒ   rd   r,   r   r   r&   r)   rÆ   re   r   r   rC   r   r   r   r   r   r   r.   rE   Ú_drawclkpinr?   r-   rA   r*   r+   )rh   r!   r   rÎ   rÐ   rÒ   ÚleadextÚ	anchorposr)   Ú
invertofstÚplblÚpofstrÞ   s                r6   Ú_drawpinzIc._drawpin6  s  € ð ”J—N’N 4¨¬Ñ9Ô9ˆ	Ø�\Š\˜$  SÑ)Ô)ˆÝ 	Ô 1Ð1°1Ð5Ñ6Ô6Ý˜yÔ0°!Ð4Ñ5Ô5Ý˜q )Ô"3Ð4Ñ5Ô5Ý˜q 9Ô#4Ð"4Ð5Ñ6Ô6ð8ð 8÷ 9<º¸DÅ%ÈÁ-Ä-Ñ8PÔ8Pð 	ð �w‘Jˆ	Ø6?ˆŒÐ2˜$˜qœ'Ÿ-š-™/œ/Ð2¨3¨q©5Ð2Ð2Ñ3ØŒ>ð 	/Ø+4ˆDŒL˜œÑ(Ð(ØŒXð 	/ØŒx˜3ŠˆØ&/�”˜UÑ#Ø%.ˆDŒL˜œÑ"ØŒ7ð 	6Ø,5ˆDŒL˜˜sœw˜˜Ñ)ð Ô˜qÒ Ð ØŒzð 
@Ø"Ô/�Ý#(¨<¨-¸Ð);Ñ#<Ô#<Ý#(¨,¸Ð):Ñ#;Ô#;Ý#(¨!¨\Ð):Ñ#;Ô#;Ý#(¨!¨l¨]Ð);Ñ#<Ô#<ð>ð >÷ ?BºcÀ$ÍÈfÉÌÑ>VÔ>Vð ð ”×$Ò$¥]Ø�z‘M <ñ&1ô &1ñ 2ô 2ð 2à”×$Ò$¥W¨b°¸A±©o¸rÀ'¹zÐ-JÑ%KÔ%KÑLÔLÐLÐLà”×$Ò$¥W¨b°"°W±*Ð-=Ñ%>Ô%>Ñ?Ô?Ð?ð Œ7ñ 	e�s”w "’}‘}àÔ+¨c¬jÑ8ˆLØÔ*ˆDÝ $  |°A¡~Ñ!5°tÐ <Ñ=Ô=Ý  l°1¡nÑ!4°dÐ ;Ñ<Ô<Ý  t¨L¸©NÑ':Ð ;Ñ<Ô<Ý ¨ u¨\¸!©^Ñ';Ð <Ñ=Ô=ðð ÷ ’s˜4‘y”yð	 õ �¥%­µ¨Ô"7Ô8Ø2Ø1Ø1Ø.ð0ð 0÷ 14²°D±	´	ñ	;ô ;ˆEð
 ŒM× Ò ¥Ø�u‘HØ”gØØ+.¬>Ð+E˜œ˜È9ÔKbð	"dñ "dô "dñ eô eð eð Œ8�sŠ?ˆ?Ø×Ò˜R ¨$°°SÑ9Ô9Ð9ØˆFð Œ8ñ 	*˜œ Bš™Ý Ô!5°qÐ 9Ñ:Ô:Ý )Ô"6Ð!6¸Ð :Ñ;Ô;Ý  YÔ%9Ð$9Ð :Ñ;Ô;Ý  IÔ$8Ð 9Ñ:Ô:ð<ð <÷ =@ºCÀ¹I¼Ið õ
 �¥%­µ¨Ô"7Ô8Ø1Ø2Ø0Ø3ð5ð 5÷ 69²S¸±Y´Yñ	@ô @ˆEð ŒM× Ò ¥Ø�u‘HØ”hØØ(+¬Ð(?˜œ˜ÀYÔEYØ”iØœØ'ð")ñ ")ô ")ñ *ô *ð *ð *ð *ð	*ð 	*˜˜r5   rÒ   ræ   c                ó  — | j                              || j        ¦  «        }|j         d|j        z  dz  d|j        z  dz  }}|dv r‰|d         dk    rt	          j        ||d         ¦  «        n|}t          |d         |z
  |d         f¦  «        t          |d         |d         |z
  f¦  «        t          |d         |z   |d         f¦  «        g}	n‰|d         dk    rt	          j        ||d          ¦  «        n|}t          |d         |d         |z   f¦  «        t          |d         |z   |d         f¦  «        t          |d         |d         |z
  f¦  «        g}	| j                             t          |	¦  «        ¦  «         dS )z Draw clock pin > gš™™™™™Ù?é   gš™™™™™É?r´   r¦   r   N)
rb   r_   rc   rA   rÃ   Úcopysignr   rÆ   re   r   )
rh   rÒ   ræ   r!   r   rÎ   rÐ   ÚclkwÚclkhÚclkpaths
             r6   rå   zIc._drawclkpinŠ  s€  € ð ”J—N’N 4¨¬Ñ9Ô9ˆ	ØÔÐØ˜9Ô/Ñ/°Ñ2°C¸)Ô:NÑ4NÈrÑ4QˆdˆØ�:ÐÐØ6=¸a´jÀA²o°o•4”=  w¨q¤zÑ2Ô2Ð2È4ˆDÝ˜b œe D™j¨"¨Q¬%Ð0Ñ1Ô1Ý˜r !œu b¨¤e¨D¡jÐ1Ñ2Ô2Ý˜r !œu T™z¨2¨a¬5Ð1Ñ2Ô2ð4ˆGˆGð 8?¸q´zÀQ²°•4”= ¨°¬
 {Ñ3Ô3Ð3ÈDˆDÝ˜b œe R¨¤U¨4¡ZÐ0Ñ1Ô1Ý˜r !œu T™z¨2¨a¬5Ð1Ñ2Ô2Ý˜r !œu b¨¤e¨D¡jÐ1Ñ2Ô2ð4ˆGð 	Œ×Ò�W WÑ-Ô-Ñ.Ô.Ð.Ð.Ð.r5   c                óœ   — | j                              ¦   «         D ]1\  }}t          |¦  «        D ]\  }}|                      |||¦  «         ŒŒ2dS )z Draw all the pins N)rT   r›   Ú	enumeraterë   )rh   r!   rT   Úir   s        r6   Ú	_drawpinszIc._drawpinsœ  sb   € àœ)Ÿ/š/Ñ+Ô+ð 	,ð 	,‰JˆD�$Ý# D™/œ/ð ,ð ,‘��3Ø—’˜d C¨Ñ+Ô+Ð+Ð+ð,ð	,ð 	,r5   c                ó0  — |                       ¦   «         | _        | j        €|                      ¦   «          n|                      ¦   «          | j        d         j        | j        d         j        | j        d         j        | j        d         j        dœ| _        dS )z% Set size based on pins added so far Nr    rY   rZ   r[   rX   )r®   r«   rR   r»   r¾   rb   r:   rK   )rh   s    r6   rg   zIc._setsize¢  s‚   € àŸšÑ)Ô)ˆŒØŒ9ÐØ�NŠNÑÔÐÐà×ÒÑ!Ô!Ð!Ø $¤
¨3¤Ô 7Ø $¤
¨3¤Ô 7Ø $¤
¨3¤Ô 7Ø $¤
¨3¤Ô 7ð9ð 9ˆŒˆˆr5   Údwgxyr   Údwgthetaútuple[Point, float]c                óô   •— |                       ¦   «         | _        |                      ¦   «          d| j        d<   | j        j        dz  | j        j        dz  f| j        d<    t          ¦   «         j        ||fi |¤ŽS )Nrp   Úlbllocr   )	rÍ   rf   rõ   Ú	elmparamsrÇ   rÈ   rƒ   r\   Ú_place)rh   r÷   rø   Ú	dwgparamsrj   s       €r6   rý   z	Ic._place®  so   ø€ Ø—m’m‘o”oˆŒØ�ŠÑÔÐØ#+ˆŒ�xÑ Ø"&¤+¤-°¡/°4´;´=À±?Ð!CˆŒ�XÑØ�u‰wŒwŒ~˜e XÐ;Ð;°Ð;Ð;Ð;r5   )NNr   )rR   rS   rT   rU   rV   r(   )r   rk   rl   r   )rl   r—   )r    NNNNFr'   Nr   NN)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@   rB   rD   )r!   r   r:   r(   r<   r(   r>   r(   r?   r(   rA   r(   rC   r(   rE   r(   )rl   r¡   )rl   r¯   )rl   rF   )r!   r   r   r   rÎ   r§   rl   r   )r!   r   r   r   rÎ   r§   rl   r¯   )rÒ   r   ræ   r   r!   r   r   r   rÎ   r§   rl   r¯   )r÷   r   rø   r(   rl   rù   )r/   r0   r1   Ú_element_defaultsr]   r–   Úpropertyr’   r   r!   r®   r»   r¾   rÍ   rÓ   rë   rå   rõ   rg   rý   Ú__classcell__©rj   s   @r6   rH   rH   ?   sö  ø€ € € € € àØØØØØØØð	ð 	Ðð '+Ø37Ø !ðð ð ð ð ð ð ð:?ð ?ð ?ð ?ð& ðð ð ñ „Xðð Ø#Ø"Ø $Ø#Ø Ø"&Ø $ØØ%)Ø$(ð ð  ð  ð  ð  ðF ØØØ Ø!%Ø!$Ø$(Ø$'ðð ð ð ð ð8ð ð ð ð%Wð %Wð %Wð %WðNYð Yð Yð Yð$#ð #ð #ð #ð2ð ð ð ð4R*ð R*ð R*ð R*ðh/ð /ð /ð /ð$,ð ,ð ,ð ,ð
9ð 
9ð 
9ð 
9ð<ð <ð <ð <ð <ð <ð <ð <ð <ð <r5   rH   c                  ó.   ‡ — e Zd ZdZ	 	 	 	 ddˆ fd„Zˆ xZS )ÚMultiplexera   Multiplexer

        Args:
            demux: Draw as demultiplexer
            size: (Width, Height) of box
            pins: List of IcPin instances defining the inputs/outputs
            slant: Slant angle of top/bottom edges

        Keyword Args:            
            pinspacing: Spacing between pins [default: 0.6]
            edgepadH: Padding between top/bottom and first pin [default: 0.25]
            edgepadW: Padding between left/right and first pin [default: 0.25]
            lofst: Offset between edge and label (inside box) [default: 0.15]
            lsize: Font size of labels (inside box) [default: 14]
            plblofst: Offset between edge and pin label (outside box) [default: 0.05]
            plblsize: Font size of pin labels (outside box) [default: 11]

        If a pin is named '>', it will be drawn as a proper clock signal input.

        Anchors:
            * inL[X] - Each pin on left side
            * inR[X] - Each pin on right side
            * inT[X] - Each pin on top side
            * inB[X] - Each pin on bottom side
            * pin[X] - Each pin with a number
            * CLK (if clock pin is defined with '>' name)

        Pins with names are also defined as anchors (if the name does
        not conflict with other attributes).
    FNé   Údemuxr%   rR   rS   rT   rU   rV   r(   c                óP   •— |s| n|} t          ¦   «         j        d|||dœ|¤Ž d S )N)rR   rT   rV   r4   )r\   r]   )rh   r  rR   rT   rV   ri   rj   s         €r6   r]   zMultiplexer.__init__Õ  sV   ø€ ð $Ð.���¨ˆØ�‰ŒÔð 	#˜dØ"Ø$ð	#ð 	#ð "ð	#ð 	#ð 	#ð 	#ð 	#r5   )FNNr  )r  r%   rR   rS   rT   rU   rV   r(   )r/   r0   r1   r2   r]   r  r  s   @r6   r  r  ¶  sZ   ø€ € € € € ðð ð>  %Ø&*Ø37Ø "ð	
#ð 
#ð 
#ð 
#ð 
#ð 
#ð 
#ð 
#ð 
#ð 
#ð 
#r5   r  c            
      óP   ‡ — e Zd ZdZddddddddd	œZd
d
d
d
d
d
d
d
d
dœ	dˆ fd„Zˆ xZS )ÚIcDIPaP   Dual-inline Package Integrated Circuit.

        Args:
            names: List of names for each pin to display inside the box

        Keyword Args:
            pins: number of pins [default: 8]
            notch: Show the notch at top of box [default: True]
            width: Width of the box [default: 3]
            pinw: Width and height of each pin [default: 0.6]
            spacing: Distance between each pin [default: 0.5]
            number: Show pin numbers inside each pin [default: True]
            fontsize: Size for pin name labels [default: 12]
            pfontsize: Size for pin number labels [default: 10]

        Anchors:
            * p[x]  - Each pin
            * p[x]_in  - Inside contact for each pin

        If signal names are provided, they will also be added as anchors
        along with _in inside variants.
    é   Tg      @r±   r=   é   é
   )rT   ÚnotchÚwidthÚpinwr:   Únumberrß   Ú	pfontsizeN)	rT   r�   r  r  r  r:   r  rß   r  rT   úOptional[int]r�   úOptional[Sequence[str]]r  úOptional[bool]r  úOptional[float]r  r:   r  rß   r  c       	   
     ó  •‡‡‡—  t          ¦   «         j        di |
¤Ž | j        d         }| j        d         }| j        d         }| j        d         dz  dk    rt          d¦  «        ‚| j        d         dz  |z  || j        d         dz  dz   z  z   Š| j                             t          d|d	f|‰fd	‰ff¦  «        ¦  «         | j        d
         r…|dz  Št          t          j	         d	¦  «        }|dz  Šˆˆfd„|D ¦   «         }ˆˆfd„|D ¦   «         }| j                             t          t          t          ||¦  «        ¦  «        ¦  «        ¦  «         t          | j        d         dz  ¦  «        D �]–}|||z  z   ||z  z   }|||z  z   |dz   |z  z   }||z   dz  }| j                             t          d	|fd	|f| |f| |ff¦  «        ¦  «         | j        d         dz  |z
  }| |f| j        d|› �<   d	|f| j        d|› d�<   | j        d         rH| j                             t          | dz  |ft!          |¦  «        | j        d         ¬¦  «        ¦  «         |ro| j                             t          d|f||dz
           d| j        d         ¬¦  «        ¦  «         | |f| j        ||dz
           <   d	|f| j        ||dz
           › d�<   | j                             t          ||f||f||z   |f||z   |ff¦  «        ¦  «         | j        d         dz  |z   dz   }||z   |f| j        d|› �<   ||f| j        d|› d�<   | j        d         rJ| j                             t          ||dz  z   |ft!          |¦  «        | j        d         ¬¦  «        ¦  «         |rt| j                             t          |dz
  |f||dz
           d| j        d         ¬¦  «        ¦  «         ||z   |f| j        ||dz
           <   ||f| j        ||dz
           › d�<   �Œ˜d S )Nr  r  r:   rT   r   r¦   zpins must be evenrÂ   r   r  c                óD   •— g | ]}‰‰t          j        |¦  «        z  z   ‘ŒS r4   )rÃ   Úcos)r‡   ÚtÚcÚnotchrs     €€r6   r‰   z"IcDIP.__init__.<locals>.<listcomp>  s+   ø€ Ð>Ð>Ð>°1�a˜&¥4¤8¨A¡;¤;Ñ.Ñ.Ð>Ð>Ð>r5   c                óD   •— g | ]}‰‰t          j        |¦  «        z  z   ‘ŒS r4   )rÃ   Úsin)r‡   r  Úheightr  s     €€r6   r‰   z"IcDIP.__init__.<locals>.<listcomp>  s+   ø€ ÐCÐCÐC¸�f˜v­¬°©¬Ñ3Ñ3ÐCÐCÐCr5   rˆ   Ú_inr  r  )rß   gš™™™™™¹?rà   rß   ©rÞ   rß   rá   r4   )r\   r]   r^   Ú
ValueErrorrÆ   re   r   r   rÃ   Úpir   r�   ÚzipÚrangerƒ   r   rk   )rh   rT   r�   r  r  r  r:   r  rß   r  ri   rÇ   ÚpwÚspaceÚthetaÚnotchxÚnotchyrô   rÊ   rË   ÚymidÚpnumr  r  r  rj   s                         @@@€r6   r]   zIcDIP.__init__  sÂ  øøøø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø”;˜wÔ'ˆØ”K Ô'ˆØ”{ 9Ô-ˆØŒ;�vÔ Ñ" aÒ'Ð'ÝÐ0Ñ1Ô1Ð1à”˜VÔ$ QÑ& rÑ)¨E°4´;¸vÔ3FÀqÑ3HÈÑ3JÑ,KÑKˆØŒ×Ò�[¨&°1°a°&¸1¸f¸+ÈÈ6À{Ð)SÑTÔTÑUÔUÐUàŒ;�wÔð 	EØ�!‘ˆAÝ�dœg˜X qÑ)Ô)ˆEØ˜‘TˆFØ>Ð>Ð>Ð>Ð>¸Ð>Ñ>Ô>ˆFØCÐCÐCÐCÐC¸UÐCÑCÔCˆFØŒM× Ò ¥­­c°&¸&Ñ.AÔ.AÑ)BÔ)BÑ!CÔ!CÑDÔDÐDå�t”{ 6Ô*¨AÑ-Ñ.Ô.ð 	@ñ 	@ˆAØ˜˜q™‘  2¡Ñ%ˆBØ˜˜q™‘ ! A¡# r¡Ñ)ˆBØ�r‘E˜1‘9ˆDð ŒM× Ò ¥¨q°"¨g¸¸2°wÀ"ÀÀbÀ	ÈRÈCÐQSÈ9Ð-UÑ!VÔ!VÑWÔWÐWØ”;˜vÔ&¨Ñ)¨AÑ-ˆDØ)+¨¨T {ˆDŒL˜˜T˜˜Ñ$Ø+,¨d¨)ˆDŒL˜˜T˜˜˜Ñ'ØŒ{˜8Ô$ð oØ”×$Ò$¥[°2°#°a±%¸°ÅÀDÁ	Ä	ÐTXÔT_Ð`kÔTlÐ%mÑ%mÔ%mÑnÔnÐnØð @Ø”×$Ò$¥[Ø˜�J  d¨1¡f¤Ð5GÐRVÔR]Ð^hÔRið&kñ &kô &kñ lô lð là02¨s°D¨k�”˜U 4¨¡6œ]Ñ+Ø78¸$°i�”  d¨1¡f¤Ð2Ð2Ð2Ñ3ð ŒM× Ò ¥¨q°"¨g¸¸2°wÀÀ2ÁÀrÀ
ÈQÈrÉTÐSUÈJÐ-WÑ!XÔ!XÑYÔYÐYØ”;˜vÔ&¨Ñ)¨AÑ-°Ñ1ˆDØ()¨"©¨d |ˆDŒL˜˜T˜˜Ñ$Ø+,¨d¨)ˆDŒL˜˜T˜˜˜Ñ'ØŒ{˜8Ô$ð pØ”×$Ò$¥[°!°B°q±D±&¸$°ÅÀTÁÄÐUYÔU`ÐalÔUmÐ%nÑ%nÔ%nÑoÔoÐoØð @Ø”×$Ò$¥[Ø�r‘T˜4�L %¨¨Q©¤-Ð7JÐUYÔU`ÐakÔUlð&nñ &nô &nñ oô oð oà/0°©t°T¨l�”˜U 4¨¡6œ]Ñ+Ø78¸$°i�”  d¨1¡f¤Ð2Ð2Ð2Ñ3ùð;	@ð 	@r5   )rT   r  r�   r  r  r  r  r  r  r  r:   r  r  r  rß   r  r  r  ©r/   r0   r1   r2   rÿ   r]   r  r  s   @r6   r	  r	  â  s¡   ø€ € € € € ðð ð. ØØØØØØØð	ð 	Ðð (,Ø26Ø)-Ø*.Ø)-Ø,0Ø*.Ø,0Ø.2ð:@ð :@ð :@ð :@ð :@ð :@ð :@ð :@ð :@ð :@ð :@ð :@r5   r	  c                  ó.   ‡ — e Zd ZdZddiZd
dˆ fd	„Zˆ xZS )Ú	DFlipFlopac   D-Type Flip Flop

        Args:
            preclr: Show preset and clear inputs
            preclrinvert: Add invert bubble to preset and clear inputs

        Keyword Args:
            size: Size of the box [default: (2, 3)]

        Anchors:
            * D
            * CLK
            * Q
            * Qbar
            * PRE
            * CLR
    rR   rÀ   FTÚpreclrr%   Úpreclrinvertc           	     ó>  •— t          ddd¬¦  «        t          ddd¬¦  «        t          ddd¬¦  «        t          d	ddd
¬¦  «        g}|r7|                     t          dd|¬¦  «        t          dd|¬¦  «        g¦  «          t          ¦   «         j        dd|i|¤Ž d S )NÚDrÛ   z2/2©r!   r$   rÖ   z1/2ÚQrÙ   ú$\overline{Q}$ÚQbar©r!   r$   r,   ÚPRErÜ   ©r!   r&   ÚCLRrÚ   rT   r4   ©r   rœ   r\   r]   ©rh   r/  r0  ri   rT   rj   s        €r6   r]   zDFlipFlop.__init__U  sË   ø€ Ý�c ¨UÐ3Ñ3Ô3Ý�c ¨UÐ3Ñ3Ô3Ý�c ¨eÐ4Ñ4Ô4ÝÐ'¨g¸EÈfÐUÑUÔUðWˆð
 ð 	LØ�KŠK�˜u¨5¸ÐFÑFÔFÝ˜u¨8¸LÐIÑIÔIðKñ Lô Lð Là�‰ŒÔÐ-Ð-˜dÐ- fÐ-Ð-Ð-Ð-Ð-r5   ©FT©r/  r%   r0  r%   r,  r  s   @r6   r.  r.  @  s[   ø€ € € € € ðð ð$ 	�ðÐð	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.r5   r.  c                  ó.   ‡ — e Zd ZdZddiZd
dˆ fd	„Zˆ xZS )Ú
JKFlipFlopa|   J-K Flip Flop

        Args:
            preclr: Show preset and clear inputs
            preclrinvert: Add invert bubble to preset and clear inputs
            
        Keyword Args:
            size: Size of the box [default: (2, 3)]

        Anchors:
            * J
            * K
            * CLK
            * Q
            * Qbar
            * PRE
            * CLR
    rR   rÀ   FTr/  r%   r0  c           
     ó`  •— t          ddd¬¦  «        t          ddd¬¦  «        t          ddd¬¦  «        t          d	d
d¬¦  «        t          dd
dd¬¦  «        g}|r7|                     t          dd|¬¦  «        t          dd|¬¦  «        g¦  «          t          ¦   «         j        dd|i|¤Ž d S )NÚJrÛ   ú3/3r3  rÖ   z2/3ÚKz1/3r4  rÙ   r5  r6  r7  r8  rÜ   r9  r:  rÚ   rT   r4   r;  r<  s        €r6   r]   zJKFlipFlop.__init__w  sß   ø€ Ý�c ¨UÐ3Ñ3Ô3Ý�c ¨UÐ3Ñ3Ô3Ý�c ¨UÐ3Ñ3Ô3Ý�c ¨eÐ4Ñ4Ô4ÝÐ'¨g¸EÈfÐUÑUÔUð	Wˆð ð 	LØ�KŠK�˜u¨5¸ÐFÑFÔFÝ˜u¨8¸LÐIÑIÔIðKñ Lô Lð Lð 	�‰ŒÔÐ-Ð-˜dÐ- fÐ-Ð-Ð-Ð-Ð-r5   r=  r>  r,  r  s   @r6   r@  r@  a  s[   ø€ € € € € ðð ð& 	�ðÐð.ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .r5   r@  c                  ó*   ‡ — e Zd ZdZddiZˆ fd„Zˆ xZS )ÚVoltageRegulatorz« Voltage regulator

        Keyword Args:
            size: Size of the box [default: (2, 1.5)]

        Anchors:
            * in
            * out
            * gnd
    rR   )r   ç      ø?c                ó¦   •— t          ddd¬¦  «        t          ddd¬¦  «        t          dd¬	¦  «        g} t          ¦   «         j        dd
|i|¤Ž d S )NrÕ   rÛ   rC  r3  ÚoutrÙ   ÚgndrÚ   )r!   rT   r4   ©r   r\   r]   ©rh   ri   rT   rj   s      €r6   r]   zVoltageRegulator.__init__“  sh   ø€ Ý�d ¨eÐ4Ñ4Ô4Ý�e '°Ð6Ñ6Ô6Ý�e (Ð+Ñ+Ô+ð-ˆð 	�‰ŒÔÐ-Ð-˜dÐ- fÐ-Ð-Ð-Ð-Ð-r5   r,  r  s   @r6   rF  rF  …  sQ   ø€ € € € € ð	ð 	ð 	�ðÐð.ð .ð .ð .ð .ð .ð .ð .ð .r5   rF  c                  ó,   ‡ — e Zd ZdddddœZˆ fd„Zˆ xZS )ÚIc555r=   r¦   rG  )rM   rL   rK   r>   c                ób  •— t          ddd¬¦  «        t          ddd¬¦  «        t          ddd¬¦  «        t          d	d
d¬¦  «        t          dd
d¬¦  «        t          ddd¬¦  «        t          ddd¬¦  «        t          ddd¬¦  «        g}t          ¦   «                              |d¬¦  «         d S )NÚTRGrÛ   Ú2)r   r!   r   ÚTHRÚ6ÚDISÚ7ÚCTLrÙ   Ú5ÚOUTÚ3ÚRSTrÜ   Ú4ÚVccÚ8ÚGNDÚbotÚ1Ú555)rT   rÝ   rK  rL  s      €r6   r]   zIc555.__init__¡  s¿   ø€ Ý˜5 v°3Ð7Ñ7Ô7Ý˜5 v°3Ð7Ñ7Ô7Ý˜5 v°3Ð7Ñ7Ô7Ý˜5 w°CÐ8Ñ8Ô8Ý˜5 w°CÐ8Ñ8Ô8Ý˜5 u°#Ð6Ñ6Ô6Ý˜5 u°#Ð6Ñ6Ô6Ý˜5 u°#Ð6Ñ6Ô6ð8ˆõ 	‰Œ×Ò˜d¨%ÐÑ0Ô0Ð0Ð0Ð0r5   )r/   r0   r1   rÿ   r]   r  r  s   @r6   rN  rN  š  sQ   ø€ € € € € àØØØð	ð Ðð	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1r5   rN  rG  ç333333Ó?ç¸…ëQ¸¾?Fr
  Úredr  TrÚ   r(   rÛ   ÚseglenÚsegwr:   Údecimalr%   Údigitú	int | strÚsegcolorrk   ÚtiltÚlabelsegmentsrl   úlist[SegmentType]c
           
     ó¦  ‡ ‡‡‡,— |dz  }
|dz  }|dz  }t          j        |¦  «        }|||
z   ‰|z
  |
z
  ‰|z
  ‰|z
  |
z
  ||
z   g}d|
|
d|
 |
 g}|}|}ˆfd„|D ¦   «         }ˆfd„|D ¦   «         }d|
|
d|
 |
 g}|||
z   ‰|z
  |
z
  ‰|z
  ‰|z
  |
z
  ||
z   g}|}ˆfd„|D ¦   «         }ˆfd„|D ¦   «         }|}|}|}‰dz  |z   ‰dz  |
z   |z   f}‰dz  |z   ‰|
z   |z   f}‰dz  |z   |
|z   f}‰|
z   |z   ‰dz  f}‰|
z   |z   ‰d	z  f}|
 |z
  ‰d	z  f} |
 |z
  ‰dz  f}!|dk    �r2t          j        |¦  «        Š,ˆ,fd
„t          ||¦  «        D ¦   «         }ˆ,fd„t          ||¦  «        D ¦   «         }ˆ,fd„t          ||¦  «        D ¦   «         }ˆ,fd„t          ||¦  «        D ¦   «         }ˆ,fd„t          ||¦  «        D ¦   «         }ˆ,fd„t          ||¦  «        D ¦   «         }ˆ,fd„t          ||¦  «        D ¦   «         }ˆ,fd„}" |"|¦  «        } |"|¦  «        } |"|¦  «        } |"|¦  «        } |"|¦  «        } |"| ¦  «        }  |"|!¦  «        }!‰‰,‰z  z  Šˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }ˆfd„|D ¦   «         }ˆ fd„|D ¦   «         }|d         ‰z   |d          ‰ z   f}|d         ‰z   |d          ‰ z   f}|d         ‰z   |d          ‰ z   f}|d         ‰z   |d          ‰ z   f}|d         ‰z   |d          ‰ z   f}| d         ‰z   | d          ‰ z   f} |!d         ‰z   |!d          ‰ z   f}!t	          |¦  «                             ¦   «         d!v r|nd"}#t	          |¦  «                             ¦   «         d#v r|nd"}$t	          |¦  «                             ¦   «         d$v r|nd"}%t	          |¦  «                             ¦   «         d%v r|nd"}&t	          |¦  «                             ¦   «         d&v r|nd"}'t	          |¦  «                             ¦   «         d'v r|nd"}(t	          |¦  «                             ¦   «         d(v r|nd"})g }*|*                     t          t          t          ||¦  «        ¦  «        d)|#d	¬*¦  «        ¦  «         |*                     t          t          t          ||¦  «        ¦  «        d)|$d	¬*¦  «        ¦  «         |*                     t          t          t          ||¦  «        ¦  «        d)|%d	¬*¦  «        ¦  «         |*                     t          t          t          ||¦  «        ¦  «        d)|&d	¬*¦  «        ¦  «         |*                     t          t          t          ||¦  «        ¦  «        d)|'d	¬*¦  «        ¦  «         |*                     t          t          t          ||¦  «        ¦  «        d)|(d	¬*¦  «        ¦  «         |*                     t          t          t          ||¦  «        ¦  «        d)|)d	¬*¦  «        ¦  «         |	�r
|*                     t          |d+d,d-¬.¦  «        ¦  «         |*                     t          |d/d,d-¬.¦  «        ¦  «         |*                     t          |d0d,d-¬.¦  «        ¦  «         |*                     t          |d1d2d-¬.¦  «        ¦  «         |*                     t          |d3d2d-¬.¦  «        ¦  «         |*                     t          | d4d5d-¬.¦  «        ¦  «         |*                     t          |!d6d5d-¬.¦  «        ¦  «         |r7d7}+|*                     t          ‰‰z   |z   |+dz  z   ‰ f|+d)|d	¬8¦  «        ¦  «         |*S )9a   Generate drawing segments for a 7-segment display digit. Use for
        building new elements incorporating a 7-segment display.

        Args:
            bottom: Location of bottom of digit
            left: Location of left side of digit
            seglen: Length of one segment
            segw: Width of one segment
            spacing: Distance between segments in corners
            decimal: Show decimal point segment
            digit: Number to display
            segcolor: Color of segments
            tilt: Tilt angle in degrees
            labelsegments: Add a-g labels to each segment
            anode: Add common anode pin
            cathode: Add common cathode pin
            size: Total size of the box

        Returns:
            List of Segments making the digit
    r   é   r   c                ó    •— g | ]
}|‰d z  z   ‘ŒS )r   r4   ©r‡   Úkre  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>Ñ  s!   ø€ Ð)Ð)Ð)˜aˆQ�˜‘‰\Ð)Ð)Ð)r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   rq  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>Ò  ó   ø€ Ð'Ð'Ð'˜AˆQ�‰ZÐ'Ð'Ð'r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   rq  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>Ø  rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   rq  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>Ù  rt  r5   rG  r=   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   ©r‡   rr  rô   Úlams      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ê  ó%   ø€ Ð9Ð9Ð9™t˜q !��S˜‘U‘Ð9Ð9Ð9r5   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   rx  s      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ë  rz  r5   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   rx  s      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ì  rz  r5   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   rx  s      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>í  rz  r5   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   rx  s      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>î  rz  r5   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   rx  s      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ï  rz  r5   c                ó&   •— g | ]\  }}|‰|z  z   ‘ŒS r4   r4   rx  s      €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ð  rz  r5   c                ó<   •— | d         | d         ‰z  z   | d         fS )Nr   r¦   r4   )rÝ   ry  s    €r6   Ú
shiftlabelz!sevensegdigit.<locals>.shiftlabelñ  s#   ø€ Ø˜”8˜e Aœh s™lÑ*¨E°!¬HÐ4Ð4r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   ©r‡   rr  rÛ   s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ý  ó   ø€ Ð%Ð%Ð%˜!ˆQ�‰XÐ%Ð%Ð%r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   ©r‡   rr  rÚ   s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>þ  rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r„  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>ÿ  r…  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r‡  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>   rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r„  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  r…  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r‡  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r„  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  r…  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r‡  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r„  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  r…  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r‡  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r„  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  r…  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r‡  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>  rt  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r„  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>	  r…  r5   c                ó   •— g | ]}|‰z   ‘ŒS r4   r4   r‡  s     €r6   r‰   z!sevensegdigit.<locals>.<listcomp>
  rt  r5   r¦   )rQ  rY  rW  rS  rU  r]  Ú9Ú0Úar  ÚeÚfN)
r`  rQ  rY  r[  rU  r]  r”  r•  r–  Úd)r`  rY  r[  rW  rS  rU  r]  r”  r•  r–  Úbr™  )rQ  rY  rW  rS  r]  r”  r•  rš  r  r™  r—  )
rQ  rS  r]  r•  r–  rš  r  r™  r—  r˜  )r[  rW  rS  r]  r”  r•  r–  rš  r  r—  r˜  )rQ  rY  r[  rW  rS  r]  r”  r–  rš  r™  r—  r˜  Úgray)r*   ÚfillÚlwr–  râ   r  r   Úgr™  rš  rà   r  r—  rá   r˜  r'   )Úradiusr*   rœ  r�  )rÃ   rÅ   r  r#  rk   Úlowerre   r   r�   r   r   )-rÚ   rÛ   re  rf  r:   rg  rh  rj  rk  rl  ÚhalfwÚmarginyÚ	halfspaceÚsegDxÚsegDyÚsegAxÚsegGxÚsegAyÚsegGyÚsegExÚsegEyÚsegFxÚsegFyÚsegBxÚsegByÚsegCxÚsegCyÚ	segAlabelÚ	segGlabelÚ	segDlabelÚ	segBlabelÚ	segClabelÚ	segElabelÚ	segFlabelr‚  ÚfillAÚfillBÚfillCÚfillDÚfillEÚfillFÚfillGrÆ   Údotradry  s-   ```                                         @r6   ÚsevensegdigitrÁ  ­  s¿	  øøøø€ ð2 �‰F€EØ�1‰f€GØ˜‘	€IÝŒ<˜ÑÔ€Dð ˜	 %™¨°	Ñ)9¸%Ñ)?Ø�IÑ˜v iÑ/°Ñ5°yÀ±ðH€Eà��u˜a % ¨%¨Ð0€EØ€EØ€EØ)Ð)Ð)Ð) 5Ð)Ñ)Ô)€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€Eà��u˜a % ¨%¨Ð0€EØ˜	 %™¨°	Ñ)9¸%Ñ)?Ø�IÑ  yÑ 0°Ñ 6¸	À%¹ðI€Eà€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ€EØ€EØ€Eð ˜‘˜IÑ% v¨a¡x°¡~°gÑ'=Ð>€IØ˜‘˜IÑ% v¨e¡|°GÑ';Ð<€IØ˜‘˜IÑ% u¨W¡}Ð5€IØ˜%‘ )Ñ+¨V°C©ZÐ8€IØ˜%‘ )Ñ+¨V°B©YÐ7€IØ�˜)Ñ# V¨B¡YÐ/€IØ�˜)Ñ# V¨C¡ZÐ0€Ið ˆq‚y�yÝŒh�t‰nŒnˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆØ9Ð9Ð9Ð9¥s¨5°%Ñ'8Ô'8Ð9Ñ9Ô9ˆð	5ð 	5ð 	5ð 	5ð 	5à�J˜yÑ)Ô)ˆ	Ø�J˜yÑ)Ô)ˆ	Ø�J˜yÑ)Ô)ˆ	Ø�J˜yÑ)Ô)ˆ	Ø�J˜yÑ)Ô)ˆ	Ø�J˜yÑ)Ô)ˆ	Ø�J˜yÑ)Ô)ˆ	Ø��F‘
Ñˆð &Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ%Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ%Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ%Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ%Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ%Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ%Ð%Ð%Ð%˜uÐ%Ñ%Ô%€EØ'Ð'Ð'Ð' Ð'Ñ'Ô'€EØ˜1” Ñ$ i°¤l°VÑ&;Ð<€IØ˜1” Ñ$ i°¤l°VÑ&;Ð<€IØ˜1” Ñ$ i°¤l°VÑ&;Ð<€IØ˜1” Ñ$ i°¤l°VÑ&;Ð<€IØ˜1” Ñ$ i°¤l°VÑ&;Ð<€IØ˜1” Ñ$ i°¤l°VÑ&;Ð<€IØ˜1” Ñ$ i°¤l°VÑ&;Ð<€Iõ ˜E™
œ
×(Ò(Ñ*Ô*Ð.jÐjÐjˆHˆHÐpt€EÝ˜E™
œ
×(Ò(Ñ*Ô*Ð.`Ð`Ð`ˆHˆHÐfj€EÝ˜E™
œ
×(Ò(Ñ*Ô*Ð.jÐjÐjˆHˆHÐpt€EÝ˜E™
œ
×(Ò(Ñ*Ô*Ð.eÐeÐeˆHˆHÐko€EÝ˜E™
œ
×(Ò(Ñ*Ô*Ð.`Ð`Ð`ˆHˆHÐfj€EÝ˜E™
œ
×(Ò(Ñ*Ô*Ð.eÐeÐeˆHˆHÐko€EÝ˜E™
œ
×(Ò(Ñ*Ô*Ð.jÐjÐjˆHˆHÐpt€Eà"$€HØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØ‡O‚O•K¥¥S¨°Ñ%6Ô%6Ñ 7Ô 7¸vÈEÐVXÐYÑYÔYÑZÔZÐZØñ ]Ø�Š� I¨sÐ:NÐY[Ð\Ñ\Ô\Ñ]Ô]Ð]Ø�Š� I¨sÐ:NÐY[Ð\Ñ\Ô\Ñ]Ô]Ð]Ø�Š� I¨sÐ:NÐY[Ð\Ñ\Ô\Ñ]Ô]Ð]Ø�Š� I¨sÐ:LÐWYÐZÑZÔZÑ[Ô[Ð[Ø�Š� I¨sÐ:LÐWYÐZÑZÔZÑ[Ô[Ð[Ø�Š� I¨sÐ:MÐXZÐ[Ñ[Ô[Ñ\Ô\Ð\Ø�Š� I¨sÐ:MÐXZÐ[Ñ[Ô[Ñ\Ô\Ð\àð ZØˆØ�Š� t¨F¡{°4Ñ'7¸¸q¹Ñ'@À&Ð&IØ-3¸6ÈÐUWðYñ Yô Yñ 	Zô 	Zð 	Zà€Or5   c            	      óL   ‡ — e Zd ZdZdddddddddœZd	d	d	d	d	d	d	d
œdˆ fd„Zˆ xZS )ÚSevenSegmenta˜   A seven-segment display digit.

        Keyword Args:
            decimal: Show decimal point segment [default: False]
            digit: Number to display [default: 8]
            segcolor: Color of segments [default: red]
            tilt: Tilt angle in degrees [default: 10]
            labelsegments: Add a-g labels to each segment [default: True]
            anode: Add common anode pin [default: False]
            cathode: Add common cathode pin [default: False]

        Anchors:
            * a
            * b
            * c
            * d
            * e
            * f
            * g
            * dp
            * cathode
            * anode
    Fr
  rd  r  Tr±   )rg  rh  rj  rk  rl  ÚanodeÚcathoderK   N)rg  rh  rj  rk  rl  rÄ  rÅ  rg  r  rh  úOptional[int | str]rj  úOptional[str]rk  r  rl  rÄ  rÅ  rl   r¯   c               ó   •— | j         d         }	d}
|	rd}d}nd}d}| j                              d|
|f¦  «        }t          dd	d
|	z   › d|› �d¬¦  «        t          dd	d|	z   › d|› �d¬¦  «        t          dd	d|	z   › d|› �d¬¦  «        t          dd	d|	z   › d|› �d¬¦  «        t          dd	d|	z   › d|› �d¬¦  «        t          dd	d|	z   › d|› �d¬¦  «        t          dd	d|	z   › d|› �d¬¦  «        g}|	r)|                     t          dd	d|› �d¬¦  «        ¦  «         | j         d         r%|                     t          ddd¬¦  «        ¦  «         | j         d         r%|                     t          dd d¬¦  «        ¦  «         t	          ¦   «                              ||¬!¦  «         d"}d#}||dz  z
  dz  }t          |||	| j         d$         | j         d%         | j         d&         | j         d'         ¬(¦  «        }| j                             |¦  «         d S ))Nrg  rÁ   r]  gš™™™™™@rU  g333333@rR   r–  rÛ   é   r¥   )r   r!   r$   r,   rš  é   r  ro  r™  r³   r—  r˜  r   rž  r¦   Údpz1/rÄ  ÚcarÜ   )r   r!   r,   rÅ  ÚccrÚ   )rT   rR   gš™™™™™é?rG  rh  rj  rk  rl  )rÛ   rÚ   rg  rh  rj  rk  rl  )	r^   r_   r   re   r\   r]   rÁ  rÆ   rœ   )rh   rg  rh  rj  rk  rl  rÄ  rÅ  ri   ÚdecÚboxwidthr­   Ú	boxheightrR   rT   rÛ   re  r_  rÆ   rj   s                      €r6   r]   zSevenSegment.__init__V  sœ  ø€ ð Œk˜)Ô$ˆØˆØð 	ØˆEØˆIˆIàˆEØˆIØŒ{�Š˜v¨°)Ð'<Ñ=Ô=ˆå˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTÝ˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTÝ˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTÝ˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTÝ˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTÝ˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTÝ˜# F°A°c±EÐ1CÐ1C¸EÐ1CÐ1CÐPSÐTÑTÔTðVˆð ð 	ZØ�KŠK� $¨V¸,¸u¸,¸,ÐSWÐXÑXÔXÑYÔYÐYØŒ;�wÔð 	IØ�KŠK� $¨U¸wÐGÑGÔGÑHÔHÐHØŒ;�yÔ!ð 	NØ�KŠK� $¨XÀ)ÐLÑLÔLÑMÔMÐMå‰Œ×Ò˜d¨ÐÑ.Ô.Ð.àˆØˆØ˜ ™Ñ! 1Ñ$ˆå  d°3Ø),Ø'+¤{°7Ô';Ø*.¬+°jÔ*AØ&*¤k°&Ô&9Ø/3¬{¸?Ô/KðMñ Mô Mˆð 	Œ×Ò˜XÑ&Ô&Ð&Ð&Ð&r5   )rg  r  rh  rÆ  rj  rÇ  rk  r  rl  r  rÄ  r  rÅ  r  rl   r¯   r,  r  s   @r6   rÃ  rÃ  4  s�   ø€ € € € € ðð ð0 ØØØØØØØð	ð 	Ðð ,0Ø.2Ø+/Ø)-Ø15Ø)-Ø+/ð.'ð .'ð .'ð .'ð .'ð .'ð .'ð .'ð .'ð .'ð .'ð .'r5   rÃ  )
r   r   rG  rb  rc  Fr
  rd  r  T)rÚ   r(   rÛ   r(   re  r(   rf  r(   r:   r(   rg  r%   rh  ri  rj  rk   rk  r(   rl  r%   rl   rm  )/r2   Ú
__future__r   Útypingr   r   r   r   r   Úcollectionsr	   rÃ   Údataclassesr
   r   rÆ   r   r   r   r   r   Úelementsr   Úutilr   r   Útypesr   r   r   r   Úbackends.svgr   rØ   r   r   r8   rF   rH   r  r	  r.  r@  rF  rN  rÁ  rÃ  r4   r5   r6   ú<module>rÙ     s?  ðØ "Ð "à "Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ð ð$ð $ð $ð $ð $ñ $ô $ñ „ð$ð< ðð ð ð ð ñ ô ñ „ðð 	ˆ
�7˜KÑ(Ô(€ðt<ð t<ð t<ð t<ð t<ˆñ t<ô t<ð t<ðn)#ð )#ð )#ð )#ð )#�"ñ )#ô )#ð )#ðX[@ð [@ð [@ð [@ð [@ˆGñ [@ô [@ð [@ð|.ð .ð .ð .ð .�ñ .ô .ð .ðB!.ð !.ð !.ð !.ð !.�ñ !.ô !.ð !.ðH.ð .ð .ð .ð .�rñ .ô .ð .ð*1ð 1ð 1ð 1ð 1ˆBñ 1ô 1ð 1ð& 45ØKOØ<=ØQUðDð Dð Dð Dð DðNP'ð P'ð P'ð P'ð P'�2ñ P'ô P'ð P'ð P'ð P'r5   