
    e                     R    d Z ddlmZmZmZ ddlmZ  G d dej                        Zy)z
Point.py -  Extension of QPointF which adds a few missing methods.
Copyright 2010  Luke Campagnola
Distributed under MIT/X11 license. See license.txt for more information.
    )atan2degreeshypot   )QtCorec                        e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd!dZd Zd Zd Zd Zd Zd Z d Z!d  Z" xZ#S )"Pointz6Extension of QPointF which adds a few missing methods. c                 h   t        |      dk(  rt        |d   t        j                  t        j                  f      rEt
        |   t        |d   j                               t        |d   j                                      y t        |d   t        t        f      r)t
        |   t        |d         t        |d                y t        |d   d      rTt
        |   t        |d   d         t        |d   d                y t        |      dk(  rt
        |   |d   |d          y t        |   |  y )Nr   r   __getitem__   )len
isinstancer   QSizeQSizeFsuper__init__floatwidthheightinthasattr)selfargs	__class__s     1/usr/lib/python3/dist-packages/pyqtgraph/Point.pyr   zPoint.__init__   s    t9>$q'FLL&--#@A tAw}}!7tAw~~?O9PQDGc5\2 tAwtAw@a-0 tAwqz!2E$q'!*4EFY!^GT!Wd1g.$    c                      y)Nr   r
   r   s    r   __len__zPoint.__len__!   s    r   c                 N    t         | j                         | j                         ffS N)r	   xyr   s    r   
__reduce__zPoint.__reduce__$   s    $&&(+,,r   c                     |dk(  r| j                         S |dk(  r| j                         S t        dt        |      z        Nr   r   zPoint has no index %s)r#   r$   
IndexErrorstr)r   is     r   r   zPoint.__getitem__'   s;    6668O!V668O4s1v=>>r   c              #   T   K   | j                          | j                          y wr"   r#   r$   r   s    r   __iter__zPoint.__iter__/   s     ffhffhs   &(c                     |dk(  r| j                  |      S |dk(  r| j                  |      S t        dt        |      z        r'   )setXsetYr(   r)   )r   r*   r#   s      r   __setitem__zPoint.__setitem__3   sA    699Q<!V99Q<4s1v=>>r   c                 &    | j                  d|      S )N__radd___math_r   as     r   r3   zPoint.__radd__;       {{:q))r   c                 &    | j                  d|      S )N__add__r4   r6   s     r   r:   zPoint.__add__>       {{9a((r   c                 &    | j                  d|      S )N__rsub__r4   r6   s     r   r=   zPoint.__rsub__A   r8   r   c                 &    | j                  d|      S )N__sub__r4   r6   s     r   r?   zPoint.__sub__D   r;   r   c                 &    | j                  d|      S )N__rmul__r4   r6   s     r   rA   zPoint.__rmul__G   r8   r   c                 &    | j                  d|      S )N__mul__r4   r6   s     r   rC   zPoint.__mul__J   r;   r   c                 &    | j                  d|      S )N__rdiv__r4   r6   s     r   rE   zPoint.__rdiv__M   r8   r   c                 &    | j                  d|      S )N__div__r4   r6   s     r   rG   zPoint.__div__P   r;   r   c                 &    | j                  d|      S )N__truediv__r4   r6   s     r   rI   zPoint.__truediv__S   s    {{=!,,r   c                 &    | j                  d|      S )N__rtruediv__r4   r6   s     r   rK   zPoint.__rtruediv__V   s    {{>1--r   c                 &    | j                  d|      S )N__rpow__r4   r6   s     r   rM   zPoint.__rpow__Y   r8   r   c                 &    | j                  d|      S )N__pow__r4   r6   s     r   rO   zPoint.__pow__\   r;   r   c                    t        |t        j                        st        |      }t         t	        | j                         |      |j                                t	        | j                         |      |j                                     S r"   )r   r   QPointFr	   getattrr#   r$   )r   opr#   s      r   r5   zPoint._math__   s\    !V^^,aA*WTVVXr*133513H74668R3H3OPPr   c                 R    t        | j                         | j                               S )z(Returns the vector length of this Point.)r   r#   r$   r   s    r   lengthzPoint.lengthd   s    TVVXtvvx((r   c                 (    | | j                         z  S )z8Returns a vector in the same direction with unit length.)rU   r   s    r   normz
Point.normh   s    dkkm##r   c                     t        | j                         | j                               t        |j                         |j                               z
  }|dk(  r|S t        |      S )a  
        Returns the angle in degrees from the vector a to self.
        
        Parameters
        ----------
        a : Point, QPointF or QPoint
            The Point to return the angle with
        units : str, optional
            The units with which to compute the angle with, "degrees" or "radians",
            default "degrees"
        
        Returns
        -------
        float
            The angle between two vectors
        radians)r   r$   r#   r   )r   r7   unitsradss       r   anglezPoint.anglel   sK    " TVVXtvvx(5+>>IKt}r   c                 x    t        |t        j                        st        |      }t        j	                  | |      S )z,Returns the dot product of a and this Point.)r   r   rQ   r	   
dotProductr6   s     r   dotz	Point.dot   s,    !V^^,aAa((r   c                     t        |t        j                        st        |      }| j	                         |j                         z  | j                         |j	                         z  z
  S )z-Returns the cross product of a and this Point)r   r   rQ   r	   r#   r$   r6   s     r   crosszPoint.cross   sF    !V^^,aAvvx!##%$&&(QSSU"222r   c                 J    |j                         }| j                  |      |z  S )z6Return the projection of this vector onto the vector b)rW   r_   )r   bb1s      r   projz
Point.proj   s     VVXxx|b  r   c                 H    d| j                         | j                         fz  S )NzPoint(%f, %f)r,   r   s    r   __repr__zPoint.__repr__   s    $&&(DFFH!555r   c                 R    t        | j                         | j                               S r"   )minr#   r$   r   s    r   ri   z	Point.min       4668TVVX&&r   c                 R    t        | j                         | j                               S r"   )maxr#   r$   r   s    r   rl   z	Point.max   rj   r   c                     t        |       S r"   )r	   r   s    r   copyz
Point.copy   s    T{r   c                 "    | j                         S r"   )toPointr   s    r   toQPointzPoint.toQPoint   s    ||~r   )r   )$__name__
__module____qualname____doc__	__slots__r   r    r%   r   r-   r1   r3   r:   r=   r?   rA   rC   rE   rG   rI   rK   rM   rO   r5   rU   rW   r\   r_   ra   re   rg   ri   rl   rn   rq   __classcell__)r   s   @r   r	   r	      s    @I  -??*)*)*)*)-.*)Q
)$,)3!
6''r   r	   N)	ru   mathr   r   r   Qtr   rQ   r	   r
   r   r   <module>rz      s'    ' & TFNN Tr   