ó
    ‰*£hº'  ã                   óž   • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr   " S S\5      rg)zCCurves in 2-dimensional Euclidean space.

Contains
========
Curve

é    )Úsqrt)Údiff)ÚTuple)Ú_symbol)ÚGeometryEntityÚGeometrySet)ÚPoint)Ú	integrate)ÚMatrixÚ	rot_axis3)Úis_sequence)Úprec_to_dpsc                   óÆ   • \ rS rSrSrS rS rS rSS jrSS jr	\
S 5       r\
S	 5       r\
S
 5       r\
S 5       r\
S 5       r\
S 5       rSS jrSS jrSS jrSS jrSrg)ÚCurveé   a�  A curve in space.

A curve is defined by parametric functions for the coordinates, a
parameter and the lower and upper bounds for the parameter value.

Parameters
==========

function : list of functions
limits : 3-tuple
    Function parameter and lower and upper bounds.

Attributes
==========

functions
parameter
limits

Raises
======

ValueError
    When `functions` are specified incorrectly.
    When `limits` are specified incorrectly.

Examples
========

>>> from sympy import Curve, sin, cos, interpolate
>>> from sympy.abc import t, a
>>> C = Curve((sin(t), cos(t)), (t, 0, 2))
>>> C.functions
(sin(t), cos(t))
>>> C.limits
(t, 0, 2)
>>> C.parameter
t
>>> C = Curve((t, interpolate([1, 4, 9, 16], t)), (t, 0, 1)); C
Curve((t, t**2), (t, 0, 1))
>>> C.subs(t, 4)
Point2D(4, 16)
>>> C.arbitrary_point(a)
Point2D(a, a**2)

See Also
========

sympy.core.function.Function
sympy.polys.polyfuncs.interpolate

c                 ó"  • [        U5      (       a  [        U5      S:w  a  [        S[        U5      -  5      e[        U5      (       a  [        U5      S:w  a  [        S[        U5      -  5      e[        R
                  " U [        U6 [        U6 5      $ )Né   z3Function argument should be (x(t), y(t)) but got %sé   z3Limit argument should be (t, tmin, tmax) but got %s)r   ÚlenÚ
ValueErrorÚstrr   Ú__new__r   )ÚclsÚfunctionÚlimitss      ÚQ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/geometry/curve.pyr   ÚCurve.__new__L   sŠ   € Ü˜8×$Ñ$¬¨H«¸Ó(:Üð Ü" 8›}ñ-ó .ð .ä˜6×"Ñ"¤c¨&£k°QÓ&6Üð Ü" 6›{ñ+ó ,ð ,ô ×%Ò% c¬5°(Ð+;¼UÀF¸^ÓLÐLó    c                 ó:   • U R                  U R                  U5      $ ©N)ÚsubsÚ	parameter)ÚselfÚfs     r   Ú__call__ÚCurve.__call__V   s   € Ø�y‰y˜Ÿ™¨Ó+Ð+r   c           	      óŽ   • XR                   :X  a1  [        U R                   Vs/ s H  o3R                  X5      PM     sn6 $ g s  snf r    )r"   r	   Ú	functionsr!   )r#   ÚoldÚnewr$   s       r   Ú
_eval_subsÚCurve._eval_subsY   s9   € Ø—.‘.Ó Ü°T·^²^ÓD²^°Ÿ6™6 #Ö+±^ÑDÐEÐEð !ùÚDs   £Ac           
      ó  • U R                   u  nu  pEn[        U5      n[        U Vs/ s H  oˆR                  " SSU0UD6PM     sn5      nXV4 Vs/ s H  oˆR                  " SSU0UD6PM     snu  pVU R	                  X4XV45      $ s  snf s  snf )NÚn© )Úargsr   ÚtupleÚevalfÚfunc)	r#   ÚprecÚoptionsr$   ÚtÚaÚbÚdpsÚis	            r   Ú_eval_evalfÚCurve._eval_evalf]   s‡   € Ø—y‘y‰ˆ‰9ˆA�!Ü˜$ÓˆÜ±aÓ8²a°—7’7Ñ,˜SÐ, GÔ,±aÑ8Ó9ˆØ45±6Ó:²6¨a—’Ñ)˜#Ð) Ô)±6Ñ:‰ˆØ�y‰y˜ ˜IÓ&Ð&ùò 9ùÚ:s   §BÁB
c           	      ó~  • Uc  [        U R                  6 $ [        XR                  SS9nU R                  nUR                  UR                  :w  a9  UR                  S U R
                   5       ;   a  [        SUR                  -  5      e[        U R                   Vs/ s H  oDR                  X25      PM     sn6 $ s  snf )aë  A parameterized point on the curve.

Parameters
==========

parameter : str or Symbol, optional
    Default value is 't'.
    The Curve's parameter is selected with None or self.parameter
    otherwise the provided symbol is used.

Returns
=======

Point :
    Returns a point in parametric form.

Raises
======

ValueError
    When `parameter` already appears in the functions.

Examples
========

>>> from sympy import Curve, Symbol
>>> from sympy.abc import s
>>> C = Curve([2*s, s**2], (s, 0, 2))
>>> C.arbitrary_point()
Point2D(2*t, t**2)
>>> C.arbitrary_point(C.parameter)
Point2D(2*s, s**2)
>>> C.arbitrary_point(None)
Point2D(2*s, s**2)
>>> C.arbitrary_point(Symbol('a'))
Point2D(2*a, a**2)

See Also
========

sympy.geometry.point.Point

T©Úrealc              3   ó8   #   • U  H  oR                   v •  M     g 7fr    )Úname)Ú.0r$   s     r   Ú	<genexpr>Ú(Curve.arbitrary_point.<locals>.<genexpr>–   s   é € Ð@Ò.?¨ŸfžfÒ.?ùs   ‚zFSymbol %s already appears in object and cannot be used as a parameter.)r	   r(   r   r"   rA   Úfree_symbolsr   r!   )r#   r"   Útnewr6   Úws        r   Úarbitrary_pointÚCurve.arbitrary_pointd   s£   € ðX ÑÜ˜$Ÿ.™.Ð)Ð)ä�y§.¡.°tÑ<ˆØ�N‰NˆØ�I‰I˜Ÿ™ÓØ—	‘	Ñ@¨d×.?Ò.?Ó@Ó@Üð 5Ø7;·y±yñAó Bð Bä°·²Ó?²¨1—v‘v˜a–±Ñ?Ð@Ð@ùÒ?s   ÂB:c                 ó´   • [        5       nU R                  U R                  SS -    H  nXR                  -  nM     UR	                  U R
                  15      nU$ )aT  Return a set of symbols other than the bound symbols used to
parametrically define the Curve.

Returns
=======

set :
    Set of all non-parameterized symbols.

Examples
========

>>> from sympy.abc import t, a
>>> from sympy import Curve
>>> Curve((t, t**2), (t, 0, 2)).free_symbols
set()
>>> Curve((t, t**2), (t, a, 2)).free_symbols
{a}

é   N)Úsetr(   r   rE   Ú
differencer"   )r#   Úfreer7   s      r   rE   ÚCurve.free_symbols›   sN   € ô, ‹uˆØ—‘ $§+¡+¨a¨b /Ô1ˆAØ—N‘NÑ"ŠDñ 2à�‰ §¡Ð/Ó0ˆØˆr   c                 ó2   • [        U R                  S   5      $ )zÛThe dimension of the curve.

Returns
=======

int :
    the dimension of curve.

Examples
========

>>> from sympy.abc import t
>>> from sympy import Curve
>>> C = Curve((t, t**2), (t, 0, 2))
>>> C.ambient_dimension
2

r   )r   r0   ©r#   s    r   Úambient_dimensionÚCurve.ambient_dimension·   s   € ô* �4—9‘9˜Q‘<Ó Ð r   c                 ó    • U R                   S   $ )a  The functions specifying the curve.

Returns
=======

functions :
    list of parameterized coordinate functions.

Examples
========

>>> from sympy.abc import t
>>> from sympy import Curve
>>> C = Curve((t, t**2), (t, 0, 2))
>>> C.functions
(t, t**2)

See Also
========

parameter

r   ©r0   rQ   s    r   r(   ÚCurve.functionsÎ   ó   € ð2 �y‰y˜‰|Ðr   c                 ó    • U R                   S   $ )a  The limits for the curve.

Returns
=======

limits : tuple
    Contains parameter and lower and upper limits.

Examples
========

>>> from sympy.abc import t
>>> from sympy import Curve
>>> C = Curve([t, t**3], (t, -2, 2))
>>> C.limits
(t, -2, 2)

See Also
========

plot_interval

rK   rU   rQ   s    r   r   ÚCurve.limitsé   rW   r   c                 ó&   • U R                   S   S   $ )zõThe curve function variable.

Returns
=======

Symbol :
    returns a bound symbol.

Examples
========

>>> from sympy.abc import t
>>> from sympy import Curve
>>> C = Curve([t, t**2], (t, 0, 2))
>>> C.parameter
t

See Also
========

functions

rK   r   rU   rQ   s    r   r"   ÚCurve.parameter  s   € ð2 �y‰y˜‰|˜A‰Ðr   c                 ó€   ^ • [        [        U 4S jT R                   5       5      5      n[        UT R                  5      $ )z‹The curve length.

Examples
========

>>> from sympy import Curve
>>> from sympy.abc import t
>>> Curve((t, t), (t, 0, 1)).length
sqrt(2)

c              3   ó\   >#   • U  H!  n[        UTR                  S    5      S-  v •  M#     g7f)r   r   N)r   r   )rB   r3   r#   s     €r   rC   ÚCurve.length.<locals>.<genexpr>,  s%   øé € ÐVÂ~¸tœT $¨¯©°A©Ó7¸Ö:Â~ùs   ƒ),)r   Úsumr(   r
   r   )r#   Ú	integrands   ` r   ÚlengthÚCurve.length  s/   ø€ ô œÔVÀtÇ~Â~ÓVÓVÓWˆ	Ü˜ D§K¡KÓ0Ð0r   c                 ób   • [        XR                  SS9nU/[        U R                  SS 5      -   $ )a;  The plot interval for the default geometric plot of the curve.

Parameters
==========

parameter : str or Symbol, optional
    Default value is 't';
    otherwise the provided symbol is used.

Returns
=======

List :
    the plot interval as below:
        [parameter, lower_bound, upper_bound]

Examples
========

>>> from sympy import Curve, sin
>>> from sympy.abc import x, s
>>> Curve((x, sin(x)), (x, 1, 2)).plot_interval()
[t, 1, 2]
>>> Curve((x, sin(x)), (x, 1, 2)).plot_interval(s)
[s, 1, 2]

See Also
========

limits : Returns limits of the parameter interval

Tr>   rK   N)r   r"   Úlistr   )r#   r"   r6   s      r   Úplot_intervalÚCurve.plot_interval/  s1   € ôB �IŸ~™~°DÑ9ˆØˆs”T˜$Ÿ+™+ a b˜/Ó*Ñ*Ð*r   Nc                 ó”  • U(       a  [        USS9* nO[        SS5      nU R                  " UR                  6 n[        UR                  5      nUR                  S5        [        SSU5      nU[        U5      -  nU R                  USSS24   R                  5       S   U R                  5      nU* nUR                  " UR                  6 $ )af  This function is used to rotate a curve along given point ``pt`` at given angle(in radian).

Parameters
==========

angle :
    the angle at which the curve will be rotated(in radian) in counterclockwise direction.
    default value of angle is 0.

pt : Point
    the point along which the curve will be rotated.
    If no point given, the curve will be rotated around origin.

Returns
=======

Curve :
    returns a curve rotated at given angle along given point.

Examples
========

>>> from sympy import Curve, pi
>>> from sympy.abc import x
>>> Curve((x, x), (x, 0, 1)).rotate(pi/2)
Curve((-x, x), (x, 0, 1))

r   ©Údimr   rK   r   N)r	   Ú	translater0   rd   r(   Úappendr   r   r3   Útolistr   )r#   ÚangleÚptÚrvr$   s        r   ÚrotateÚCurve.rotateS  s®   € ö: Ü˜ Ñ"Ð"‰Bä�q˜“ˆBØ�^Š^˜RŸW™WÐ%ˆÜ�—‘ÓˆØ	�‰�ŒÜ�1�a˜‹OˆØ	ŒY�uÓÑˆØ�Y‰Y�q˜˜B˜Q˜B˜‘x—‘Ó(¨Ñ+¨T¯[©[Ó9ˆØˆSˆØ�|Š|˜RŸW™WÐ%Ð%r   c                 ó  • U(       aJ  [        USS9nU R                  " U* R                  6 R                  X5      R                  " UR                  6 $ U R                  u  pEU R                  XA-  XR-  4U R                  5      $ )a  Override GeometryEntity.scale since Curve is not made up of Points.

Returns
=======

Curve :
    returns scaled curve.

Examples
========

>>> from sympy import Curve
>>> from sympy.abc import x
>>> Curve((x, x), (x, 0, 1)).scale(2)
Curve((2*x, x), (x, 0, 1))

r   rh   )r	   rj   r0   Úscaler(   r3   r   )r#   ÚxÚyrn   ÚfxÚfys         r   rs   ÚCurve.scale}  sj   € ö$ Ü�r˜qÑ!ˆBØ—>’> R C§:¡:Ð.×4Ñ4°QÓ:×DÒDÀbÇgÁgÐNÐNØ—‘‰ˆØ�y‰y˜"™$ ¡˜ t§{¡{Ó3Ð3r   c                 ób   • U R                   u  p4U R                  X1-   XB-   4U R                  5      $ )zôTranslate the Curve by (x, y).

Returns
=======

Curve :
    returns a translated curve.

Examples
========

>>> from sympy import Curve
>>> from sympy.abc import x
>>> Curve((x, x), (x, 0, 1)).translate(1, 2)
Curve((x + 1, x + 2), (x, 0, 1))

)r(   r3   r   )r#   rt   ru   rv   rw   s        r   rj   ÚCurve.translate•  s-   € ð$ —‘‰ˆØ�y‰y˜"™& "¡&Ð)¨4¯;©;Ó7Ð7r   r/   )é   )r6   )r   N)rK   rK   N)r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r%   r+   r;   rH   ÚpropertyrE   rR   r(   r   r"   ra   re   rp   rs   rj   Ú__static_attributes__r/   r   r   r   r      s³   † ñ3òjMò,òFô'ô5Aðn ñó ðð6 ñ!ó ð!ð, ñó ðð4 ñó ðð4 ñó ðð4 ñ1ó ð1ô"+ôH(&ôT4÷08r   r   N)r€   Ú(sympy.functions.elementary.miscellaneousr   Ú
sympy.corer   Úsympy.core.containersr   Úsympy.core.symbolr   Úsympy.geometry.entityr   r   Úsympy.geometry.pointr	   Úsympy.integralsr
   Úsympy.matricesr   r   Úsympy.utilities.iterablesr   Úmpmath.libmp.libmpfr   r   r/   r   r   Ú<module>r�      s8   ðñõ :Ý Ý 'Ý %ß =Ý &Ý %ß ,Ý 1å +ôR8ˆKõ R8r   