
    kj                        d dl mZ d dlmZ d dlmZ d dlZej        Z	ee	ge
f         Ze G d d                      ZddZdS )    )annotations)	dataclass)CallableNc                  l    e Zd ZU dZded<   dZded<   dd
ZddZedd            Z	edd            Z
dS )ValuedPointz;A position associated with the corresponding function valuePointposNfloatvalfnFuncreturnc                0     || j                   | _        | S )Nr	   r   )selfr   s     L/home/agentuser/manim-venv/lib/python3.11/site-packages/isosurfaces/point.pycalczValuedPoint.calc   s    2dh<<    strc                P    d| j         d          d| j         d          d| j         dS )N(r   ,   z; )r   )r   s    r   __repr__zValuedPoint.__repr__   s1    ;48A;;;!;;;;;;r   p1p2c                P    |j         |j         z   dz  } | | ||                    S )N   )r	   )clsr   r   r   mids        r   midpointzValuedPoint.midpoint   s.    v!#s33   r   c                    |j         |j         z
  }|j          |z  }|j         |z  }||j        z  ||j        z  z   } | | ||                    S )z*Find the point on line p1--p2 with value 0)r   r	   )r    r   r   r   denomk1k2pts           r   intersectZerozValuedPoint.intersectZero    sW     fWu_Ve^"&[2;&s2rr"vvr   )r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc____annotations__r   r   r   classmethodr"   r(    r   r   r   r      s         EEJJJC   < < < < ! ! ! [!    [  r   r   r   r   r   r   tol
np.ndarrayr   tuple[ValuedPoint, bool]c                V   t          j        t          j        |j        | j        z
            |k               rt                              | ||          }|j        dk    p`t          j        |j        | j        z
            t          j        |j        |j        z
            k    ot          j        |j        dk               }||fS t                              | ||          }|j        dk    r|dfS |j        dk    | j        dk    k    rt          ||||          S t          | |||          S )z~Returns a pair `(point, is_zero: bool)`

    Use is_zero to make sure it's not an asymptote like at x=0 on f(x,y) = 1/(xy) - 1r   gZbtiT)
npallabsr	   r   r(   r   signr"   binary_search_zero)r   r   r   r0   r'   is_zeror!   s          r   r8   r8   *   s    
vbfRVbf_%%+,, 8&&r2r22! 
GBFRVO$$(@(@@ 'rv~&& 	
 7{ ""2r2..7a<<9gkrvz**%c2r3777%b#r3777r   )
r   r   r   r   r   r   r0   r1   r   r2   )
__future__r   dataclassesr   typingr   numpyr4   ndarrayr   r
   r   r   r8   r/   r   r   <module>r?      s    " " " " " " ! ! ! ! ! !          

        88 8 8 8 8 8r   