Ë
    7^(hÜ)  ã                   ó²   — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
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 dd
lmZ ddlmZ  G d„ de
«      Zy)z4Parabolic geometrical entity.

Contains
* Parabola

é    )ÚS)Úordered)Ú_symbolÚsymbols)ÚGeometryEntityÚGeometrySet)ÚPointÚPoint2D)ÚLineÚLine2DÚRay2DÚ	Segment2DÚLinearEntity3D)ÚEllipse)Úsign)Úsimplify)Úsolvec                   ó¦   — e Zd ZdZdd„Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	dd„Z
ed	„ «       Zed
„ «       Zd„ Zed„ «       Zed„ «       Zy)ÚParabolaa•  A parabolic GeometryEntity.

    A parabola is declared with a point, that is called 'focus', and
    a line, that is called 'directrix'.
    Only vertical or horizontal parabolas are currently supported.

    Parameters
    ==========

    focus : Point
        Default value is Point(0, 0)
    directrix : Line

    Attributes
    ==========

    focus
    directrix
    axis of symmetry
    focal length
    p parameter
    vertex
    eccentricity

    Raises
    ======
    ValueError
        When `focus` is not a two dimensional point.
        When `focus` is a point of directrix.
    NotImplementedError
        When `directrix` is neither horizontal nor vertical.

    Examples
    ========

    >>> from sympy import Parabola, Point, Line
    >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7,8)))
    >>> p1.focus
    Point2D(0, 0)
    >>> p1.directrix
    Line2D(Point2D(5, 8), Point2D(7, 8))

    Nc                 ó¸   — |rt        |d¬«      }nt        dd«      }t        |«      }|j                  |«      rt        d«      ‚t	        j
                  | ||fi |¤ŽS )Né   )Údimr   z*The focus must not be a point of directrix)r	   r   ÚcontainsÚ
ValueErrorr   Ú__new__)ÚclsÚfocusÚ	directrixÚkwargss       úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/geometry/parabola.pyr   zParabola.__new__A   sY   € áÜ˜% QÔ'‰Eä˜!˜Q“KˆEä˜“Oˆ	à×Ñ˜eÔ$ÜÐIÓJÐJä×%Ñ% c¨5°)ÑF¸vÑFÐFó    c                  ó   — y)aX  Returns the ambient dimension of parabola.

        Returns
        =======

        ambient_dimension : integer

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> f1 = Point(0, 0)
        >>> p1 = Parabola(f1, Line(Point(5, 8), Point(7, 8)))
        >>> p1.ambient_dimension
        2

        r   © ©Úselfs    r    Úambient_dimensionzParabola.ambient_dimensionO   s   € ð& r!   c                 óL   — | j                   j                  | j                  «      S )aò  Return the axis of symmetry of the parabola: a line
        perpendicular to the directrix passing through the focus.

        Returns
        =======

        axis_of_symmetry : Line

        See Also
        ========

        sympy.geometry.line.Line

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7, 8)))
        >>> p1.axis_of_symmetry
        Line2D(Point2D(0, 0), Point2D(0, 1))

        )r   Úperpendicular_liner   r$   s    r    Úaxis_of_symmetryzParabola.axis_of_symmetryd   s   € ð0 �~‰~×0Ñ0°·±Ó<Ð<r!   c                 ó    — | j                   d   S )a¡  The directrix of the parabola.

        Returns
        =======

        directrix : Line

        See Also
        ========

        sympy.geometry.line.Line

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> l1 = Line(Point(5, 8), Point(7, 8))
        >>> p1 = Parabola(Point(0, 0), l1)
        >>> p1.directrix
        Line2D(Point2D(5, 8), Point2D(7, 8))

        é   ©Úargsr$   s    r    r   zParabola.directrix~   ó   € ð0 �y‰y˜‰|Ðr!   c                 ó"   — t         j                  S )a×  The eccentricity of the parabola.

        Returns
        =======

        eccentricity : number

        A parabola may also be characterized as a conic section with an
        eccentricity of 1. As a consequence of this, all parabolas are
        similar, meaning that while they can be different sizes,
        they are all the same shape.

        See Also
        ========

        https://en.wikipedia.org/wiki/Parabola


        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7, 8)))
        >>> p1.eccentricity
        1

        Notes
        -----
        The eccentricity for every Parabola is 1 by definition.

        )r   ÚOner$   s    r    ÚeccentricityzParabola.eccentricity˜   s   € ôB �u‰uˆr!   c                 ó�  — t        |d¬«      }t        |d¬«      }| j                  j                  }|t        j                  u rJd| j
                  z  || j                  j                  z
  z  }|| j                  j                  z
  dz  }||z
  S |dk(  rJd| j
                  z  || j                  j                  z
  z  }|| j                  j                  z
  dz  }||z
  S | j                  \  }}| j                  j                  dd \  }}	||z
  dz  ||z
  dz  z   }| j                  j                  ||«      dz  |dz  |	dz  z   z  }||z
  S )az  The equation of the parabola.

        Parameters
        ==========
        x : str, optional
            Label for the x-axis. Default value is 'x'.
        y : str, optional
            Label for the y-axis. Default value is 'y'.

        Returns
        =======
        equation : SymPy expression

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7, 8)))
        >>> p1.equation()
        -x**2 - 16*y + 64
        >>> p1.equation('f')
        -f**2 - 16*y + 64
        >>> p1.equation(y='z')
        -x**2 - 16*z + 64

        T©Úrealé   r   r   N)r   r   Úsloper   ÚInfinityÚp_parameterÚvertexÚxÚyr   ÚcoefficientsÚequation)
r%   r:   r;   ÚmÚt1Út2ÚaÚbÚcÚds
             r    r=   zParabola.equation»   s?  € ô6 �A˜DÔ!ˆÜ�A˜DÔ!ˆà�N‰N× Ñ ˆØ”—
‘
‰?Ø�d×&Ñ&Ñ'¨1¨t¯{©{¯}©}Ñ+<Ñ=ˆBØ�d—k‘k—m‘mÑ# aÑ'ˆBð �B‰wˆð �!ŠVØ�d×&Ñ&Ñ'¨1¨t¯{©{¯}©}Ñ+<Ñ=ˆBØ�d—k‘k—m‘mÑ# aÑ'ˆBð �B‰wˆð	 —:‘:‰DˆAˆqØ—>‘>×.Ñ.¨r°Ð2‰DˆAˆqØ�a‘%˜!‘˜q 1™u q™jÑ(ˆBØ—‘×(Ñ(¨¨AÓ.°Ñ1°1°a±4¸!¸Q¹$±;Ñ?ˆBØ�B‰wˆr!   c                 óZ   — | j                   j                  | j                  «      }|dz  }|S )aY  The focal length of the parabola.

        Returns
        =======

        focal_lenght : number or symbolic expression

        Notes
        =====

        The distance between the vertex and the focus
        (or the vertex and directrix), measured along the axis
        of symmetry, is the "focal length".

        See Also
        ========

        https://en.wikipedia.org/wiki/Parabola

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7, 8)))
        >>> p1.focal_length
        4

        r   )r   Údistancer   )r%   rF   Úfocal_lengths      r    rG   zParabola.focal_lengthç   s+   € ð< —>‘>×*Ñ*¨4¯:©:Ó6ˆØ ‘zˆàÐr!   c                 ó    — | j                   d   S )a�  The focus of the parabola.

        Returns
        =======

        focus : Point

        See Also
        ========

        sympy.geometry.point.Point

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> f1 = Point(0, 0)
        >>> p1 = Parabola(f1, Line(Point(5, 8), Point(7, 8)))
        >>> p1.focus
        Point2D(0, 0)

        r   r,   r$   s    r    r   zParabola.focus
  r.   r!   c           
      óô  — t        dd¬«      \  }}| j                  «       }t        |t        «      rS|| v r|gS t	        t        t        ||j                  «       g||gd¬«      d   D �cg c]  }t        |«      ‘Œ c}«      «      S t        |t        «      rBt        |j                  ||j                  d   f||j                  d   fg«      «      dk(  r|gS g S t        |t        t        f«      rwt        |t        |j                  d   |j                  d   «      j                  «       g||gd¬«      d   }t	        t        |D �cg c]  }||v sŒt        |«      ‘Œ c}«      «      S t        |t        t         f«      rLt	        t        t        ||j                  «       g||gd¬«      d   D �cg c]  }t        |«      ‘Œ c}«      «      S t        |t"        «      rt%        d«      ‚t%        d«      ‚c c}w c c}w c c}w )	aú  The intersection of the parabola and another geometrical entity `o`.

        Parameters
        ==========

        o : GeometryEntity, LinearEntity

        Returns
        =======

        intersection : list of GeometryEntity objects

        Examples
        ========

        >>> from sympy import Parabola, Point, Ellipse, Line, Segment
        >>> p1 = Point(0,0)
        >>> l1 = Line(Point(1, -2), Point(-1,-2))
        >>> parabola1 = Parabola(p1, l1)
        >>> parabola1.intersection(Ellipse(Point(0, 0), 2, 5))
        [Point2D(-2, 0), Point2D(2, 0)]
        >>> parabola1.intersection(Line(Point(-7, 3), Point(12, 3)))
        [Point2D(-4, 3), Point2D(4, 3)]
        >>> parabola1.intersection(Segment((-12, -65), (14, -68)))
        []

        zx yTr3   )Úsetr+   r   z5Entity must be two dimensional, not three dimensionalzWrong type of argument were put)r   r=   Ú
isinstancer   Úlistr   r   r	   r
   r   ÚsubsÚ_argsr   r   r   Úpointsr   r   Ú	TypeError)r%   Úor:   r;   Úparabola_eqÚiÚresults          r    ÚintersectionzParabola.intersection$  sæ  € ô8 �u 4Ô(‰ˆˆ1Ø—m‘m“oˆÜ�aœÔ"Ø�D‰yØ�s�
äœG´uØ  !§*¡*£,Ð/°!°Q°¸Tô8CØCDñ8Fö %G°!¤U¨1¥Xò %Gó Hó Ið Iä˜œ7Ô#Ü˜×(Ñ(¨1¨a¯g©g°a©j¨/¸A¸q¿w¹wÀq¹z¸?Ð)KÓLÓMÐQRÒRØ�s�
à�	Ü˜œI¤uÐ-Ô.Ü˜KÜ�q—x‘x ‘{ A§H¡H¨Q¡KÓ0×9Ñ9Ó;ð=à�A�˜Dô"à"#ñ%ˆFô œ°VÖ F°¸qÀAºv¤¨¥Ò FÓGÓHÐHÜ˜œF¤GÐ,Ô-Üœ´UØ˜aŸj™j›lÐ+¨a°¨V¸ô6?Ø?@ñ6Bö !C°¤¨¥ò !Có Dó Eð Eä˜œ>Ô*ÜÐSÓTÐTäÐ=Ó>Ð>ùò%%Gùò !Gùò!Cs   Á'G+Å	G0ÅG0Æ(G5c                 ó  — | j                   j                  }|t        j                  u r?| j                   j                  d   }t        | j                  j                  d   |z   «      }n•|dk(  r?| j                   j                  d   }t        | j                  j                  d   |z   «      }nQ| j                   j                  | j                  «      }t        | j                  j                  |j                  z
  «      }|| j                  z  S )a  P is a parameter of parabola.

        Returns
        =======

        p : number or symbolic expression

        Notes
        =====

        The absolute value of p is the focal length. The sign on p tells
        which way the parabola faces. Vertical parabolas that open up
        and horizontal that open right, give a positive value for p.
        Vertical parabolas that open down and horizontal that open left,
        give a negative value for p.


        See Also
        ========

        https://www.sparknotes.com/math/precalc/conicsections/section2/

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7, 8)))
        >>> p1.p_parameter
        -4

        r   r   r+   )r   r6   r   r7   r<   r   r   r-   Ú
projectionr:   rG   )r%   r>   r:   Úpr;   rD   s         r    r8   zParabola.p_parameterZ  sÊ   € ðB �N‰N× Ñ ˆØ”—
‘
‰?Ø—‘×+Ñ+¨AÑ.ˆAÜ�T—Z‘Z—_‘_ QÑ'¨!Ñ+Ó,‰AØ�!ŠVØ—‘×+Ñ+¨AÑ.ˆAÜ�T—Z‘Z—_‘_ QÑ'¨!Ñ+Ó,‰Aà—‘×)Ñ)¨$¯*©*Ó5ˆAÜ�T—Z‘Z—\‘\ A§C¡CÑ'Ó(ˆAØ�4×$Ñ$Ñ$Ð$r!   c                 óˆ  — | j                   }| j                  j                  }|t        j                  u r5t        |j                  d   | j                  z
  |j                  d   «      }|S |dk(  r5t        |j                  d   |j                  d   | j                  z
  «      }|S | j                  j                  | «      d   }|S )ap  The vertex of the parabola.

        Returns
        =======

        vertex : Point

        See Also
        ========

        sympy.geometry.point.Point

        Examples
        ========

        >>> from sympy import Parabola, Point, Line
        >>> p1 = Parabola(Point(0, 0), Line(Point(5, 8), Point(7, 8)))
        >>> p1.vertex
        Point2D(0, 4)

        r   r+   )
r   r   r6   r   r7   r	   r-   r8   r)   rU   )r%   r   r>   r9   s       r    r9   zParabola.vertex‡  s®   € ð. —
‘
ˆØ�N‰N× Ñ ˆØ”—
‘
‰?Ü˜5Ÿ:™: a™=¨4×+;Ñ+;Ñ;¸U¿Z¹ZÈ¹]ÓKˆFð
 ˆð	 �!ŠVÜ˜5Ÿ:™: a™=¨%¯*©*°Q©-¸$×:JÑ:JÑ*JÓKˆFð ˆð ×*Ñ*×7Ñ7¸Ó=¸aÑ@ˆFØˆr!   )NN)r:   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr&   r)   r   r1   r=   rG   r   rU   r8   r9   r#   r!   r    r   r      s½   „ ñ*óXGð ñó ðð( ñ=ó ð=ð2 ñó ðð2 ñ ó ð óD*ðX ñ ó ð ðD ñó ðò24?ðl ñ*%ó ð*%ðX ñó ñr!   r   N)r]   Ú
sympy.corer   Úsympy.core.sortingr   Úsympy.core.symbolr   r   Úsympy.geometry.entityr   r   Úsympy.geometry.pointr	   r
   Úsympy.geometry.liner   r   r   r   r   Úsympy.geometry.ellipser   Úsympy.functionsr   Úsympy.simplify.simplifyr   Úsympy.solvers.solversr   r   r#   r!   r    ú<module>ri      s;   ðñõ Ý &ß .ß =ß /ß NÕ NÝ *Ý  Ý ,Ý 'ôRˆ{õ Rr!   