§
    èƒñjô  ã                  óÞ   — d Z ddlmZ ddlmZmZ ddlZddlmZ ddl	m
Z
 eeeef         df         Z G d„ deeef         ¦  «        Zd!d„Zd"d#d„Z	 d$d%d„Zd&d'd„Zd(d„Zd)d„Zd*d„Zd*d „ZdS )+z& Utility functions for point geometry é    )Úannotations)ÚUnionÚTupleN)Úmul)ÚstarmapÚPointc                  ó�   — e Zd ZdZedd„¦   «         Zedd„¦   «         Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ ZeZeZddd„Zddd„Zdd„ZdS )r   z- An (x, y) tuple that can do math operations ÚreturnÚfloatc                ó   — | d         S )z X value of point r   © ©Úselfs    úM/data/share/cad/hardware/.venv/lib/python3.11/site-packages/schemdraw/util.pyÚxzPoint.x   ó   € ð �AŒwˆó    c                ó   — | d         S )z Y value of point é   r   r   s    r   ÚyzPoint.y   r   r   c                ó(   — d| j         › d| j        › d�S )NzPoint(ú,ú))r   r   r   s    r   Ú__repr__zPoint.__repr__   s   € Ø*˜œÐ*Ð* ¤Ð*Ð*Ð*Ð*r   c                ó¼   — 	 t          | j        |j        z   | j        |j        z   f¦  «        S # t          $ r$ t          | j        |z   | j        |z   f¦  «        cY S w xY w©N©r   r   r   ÚAttributeError©r   Úas     r   Ú__add__zPoint.__add__   ój   € ð	/Ý˜$œ& ¤™* d¤f¨Q¬S¡jÐ1Ñ2Ô2Ð2øÝð 	/ð 	/ð 	/Ý˜$œ& ™( D¤F¨1¡HÐ-Ñ.Ô.Ð.Ð.Ð.ð	/øøøó   ‚*- ­+AÁAc                ó¼   — 	 t          | j        |j        z
  | j        |j        z
  f¦  «        S # t          $ r$ t          | j        |z
  | j        |z
  f¦  «        cY S w xY wr   r   r   s     r   Ú__sub__zPoint.__sub__!   r"   r#   c                ó¼   — 	 t          |j        | j        z
  |j        | j        z
  f¦  «        S # t          $ r$ t          || j        z
  || j        z
  f¦  «        cY S w xY wr   r   r   s     r   Ú__rsub__zPoint.__rsub__'   ój   € ð	/Ý˜!œ#˜dœf™* a¤c¨$¬&¡jÐ1Ñ2Ô2Ð2øÝð 	/ð 	/ð 	/Ý˜!˜DœF™( A d¤f¡HÐ-Ñ.Ô.Ð.Ð.Ð.ð	/øøør#   c                ó¼   — 	 t          |j        | j        z  |j        | j        z  f¦  «        S # t          $ r$ t          || j        z  || j        z  f¦  «        cY S w xY wr   r   r   s     r   Ú__mul__zPoint.__mul__-   r(   r#   c                ó¼   — 	 t          | j        |j        z  | j        |j        z  f¦  «        S # t          $ r$ t          | j        |z  | j        |z  f¦  «        cY S w xY wr   r   r   s     r   Ú__truediv__zPoint.__truediv__3   r"   r#   c                ó<   — t          | j         | j         f¦  «        S r   )r   r   r   r   s    r   Ú__neg__zPoint.__neg__9   s   € Ý�t”v�g ¤˜wÐ'Ñ(Ô(Ð(r   ©r   r   ÚangleÚcenterÚXYú'Point'c           	     óZ   — t          t          | |t          |¦  «        ¬¦  «        ¦  «        S )z4 Rotate the point by angle degrees about the center )r1   )r   Úrotate)r   r0   r1   s      r   r5   zPoint.rotate?   s%   € å•V˜D %µ°f±´Ð>Ñ>Ô>Ñ?Ô?Ð?r   r   Úcenterxc                ó<   — t          t          | |¦  «        ¦  «        S )z/ Mirror in x direction about the centerx point )r   Úmirrorx)r   r6   s     r   r8   zPoint.mirrorxC   s   € å•W˜T 7Ñ+Ô+Ñ,Ô,Ð,r   c                ó:   — t          t          | ¦  «        ¦  «        S )ú Flip the point vertically )r   Úflipr   s    r   r;   z
Point.flipG   s   € å•T˜$‘Z”ZÑ Ô Ð r   N)r
   r   ©r/   )r0   r   r1   r2   r
   r3   ©r   )r6   r   r
   r3   )r
   r3   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r   r!   r%   r'   r*   r,   r.   Ú__radd__Ú__rmul__r5   r8   r;   r   r   r   r   r      s  € € € € € Ø7Ð7Øðð ð ñ „Xðð ðð ð ñ „Xðð+ð +ð +ð/ð /ð /ð/ð /ð /ð/ð /ð /ð/ð /ð /ð/ð /ð /ð)ð )ð )ð €HØ€Hð@ð @ð @ð @ð @ð-ð -ð -ð -ð -ð!ð !ð !ð !ð !ð !r   r    r2   Úbú/Tuple[Tuple[float, float], Tuple[float, float]]r
   c                óH   ‡ — t          ˆ fd„t          |Ž D ¦   «         ¦  «        S )z" Dot product of iterables a and b c                óp   •— g | ]2}t          t          t          t          ‰|¦  «        ¦  «        ¦  «        ‘Œ3S r   )Úsumr   r   Úzip)Ú.0Úcolr    s     €r   ú
<listcomp>zdot.<locals>.<listcomp>N   s3   ø€ ÐDÐDÐD°S•#•g�c¥3 q¨#¡;¤;Ñ/Ô/Ñ0Ô0ÐDÐDÐDr   )r   rJ   ©r    rE   s   ` r   ÚdotrO   L   s*   ø€ åÐDÐDÐDÐD½CÀ¸GÐDÑDÔDÑEÔEÐEr   é2   Ústartr   ÚstopÚnumÚintúlist[float]c                óT   ‡ ‡— |‰ z
  |dz
  z  Šˆ ˆfd„t          |¦  «        D ¦   «         S )z List of evenly spaced numbers r   c                ó    •— g | ]
}‰‰|z  z   ‘ŒS r   r   )rK   ÚirQ   Ústeps     €€r   rM   zlinspace.<locals>.<listcomp>T   s!   ø€ Ð-Ð-Ð-˜QˆE�$�q‘&‰LÐ-Ð-Ð-r   )Úrange)rQ   rR   rS   rY   s   `  @r   Úlinspacer[   Q   s9   øø€ à�5‰L˜S 1™WÑ%€DØ-Ð-Ð-Ð-Ð-¥%¨¡*¤*Ð-Ñ-Ô-Ð-r   r/   Úxyr0   r1   c                ó  — t          j        t          j        |¦  «        ¦  «        }t          j        t          j        |¦  «        ¦  «        }t	          |¦  «        }||f| |ff}t	          | ¦  «        |z
  }t          ||¦  «        }||z   }|S )z& Rotate the xy point by angle degrees )ÚmathÚcosÚradiansÚsinr   rO   )r\   r0   r1   ÚcoÚsoÚmrE   s          r   r5   r5   W   s€   € õ 
Œ•$”,˜uÑ%Ô%Ñ	&Ô	&€BÝ	Œ•$”,˜uÑ%Ô%Ñ	&Ô	&€BÝ�6‰]Œ]€FØ
ˆbˆ�R�C˜�9Ð€AÝˆb‰	Œ	�FÑ€AÝˆAˆq‰	Œ	€AØ	ˆF‰
€AØ€Hr   c                óJ   — t          | d         |z
   |z   | d         f¦  «        S )z Mirror the point horizontally r   r   ©r   )r\   r6   s     r   r8   r8   e   s)   € å�B�q”E˜'‘MÐ" 7Ñ*¨B¨q¬EÐ2Ñ3Ô3Ð3r   c                ó>   — t          | d         | d          f¦  «        S )r:   r   r   rf   )r\   s    r   r;   r;   j   s   € å�"�Q”%˜"˜Qœ%˜�Ñ!Ô!Ð!r   c                ó`   — t          |d         | d         z
  |d         | d         z
  f¦  «        S )z Delta between points a and b r   r   rf   rN   s     r   Údeltari   o   s-   € å�!�A”$˜˜1œ‘+˜q œt a¨¤d™{Ð+Ñ,Ô,Ð,r   c                ó�   — t          j        t          j        |d         | d         z
  |d         | d         z
  ¦  «        ¦  «        }|S )z! Compute angle from point a to b r   r   )r^   ÚdegreesÚatan2)r    rE   Úthetas      r   r0   r0   t   s:   € åŒL�œ A a¤D¨1¨Q¬4¡K°°1´¸¸!¼±Ñ=Ô=Ñ>Ô>€EØ€Lr   c                óÄ   — 	 t          j        | |¦  «        S # t          $ r> t          j        | d         |d         z
  dz  | d         |d         z
  dz  z   ¦  «        cY S w xY w)zP Get distance from point a to b.

        Same as math.dist in Python 3.8+.
    r   é   r   )r^   Údistr   ÚsqrtrN   s     r   rp   rp   z   sm   € ð
:åŒy˜˜A‰ŒÐøÝð :ð :ð :ÝŒy˜!˜Aœ$˜q œt™) a™¨1¨Q¬4°°!´©9°q©.Ñ8Ñ9Ô9Ð9Ð9Ð9ð:øøøs   ‚ —AAÁA)r    r2   rE   rF   r
   r   )rP   )rQ   r   rR   r   rS   rT   r
   rU   r<   )r\   r2   r0   r   r1   r2   r
   r   r=   )r
   r   )r\   r2   r
   r   )r    r2   rE   r2   r
   r   )r    r2   rE   r2   r
   r   )rA   Ú
__future__r   Útypingr   r   r^   Úoperatorr   Ú	itertoolsr   r   r2   r   rO   r[   r5   r8   r;   ri   r0   rp   r   r   r   ú<module>rv      sp  ðØ ,Ð ,Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à
ˆ5�˜�Ô Ð'Ô(€ð=!ð =!ð =!ð =!ð =!ˆE�%˜�,Ôñ =!ô =!ð =!ð@Fð Fð Fð Fð
.ð .ð .ð .ð .ð ðð ð ð ð ð4ð 4ð 4ð 4ð 4ð
"ð "ð "ð "ð
-ð -ð -ð -ð
ð ð ð ð	:ð 	:ð 	:ð 	:ð 	:ð 	:r   