
    \h,                        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JrJrJr  S S	KJr   " S
 S\	5      r\S 5       r\R3                  \5      S 5       r\R3                  \5      S 5       r\R3                  \5      SS j5       r\R3                  \5      SS j5       r\R3                  \5      SS j5       r\R3                  \5      SS j5       rg)    )singledispatch)pi)tan)trigsimp)BasicTuple)_symbol)solve)PointSegmentCurveEllipsePolygon)ImplicitRegionc                   l   ^  \ rS rSrSrU 4S jr\S 5       r\S 5       r\S 5       r	\S 5       r
SrU =r$ )	ParametricRegion   a  
Represents a parametric region in space.

Examples
========

>>> from sympy import cos, sin, pi
>>> from sympy.abc import r, theta, t, a, b, x, y
>>> from sympy.vector import ParametricRegion

>>> ParametricRegion((t, t**2), (t, -1, 2))
ParametricRegion((t, t**2), (t, -1, 2))
>>> ParametricRegion((x, y), (x, 3, 4), (y, 5, 6))
ParametricRegion((x, y), (x, 3, 4), (y, 5, 6))
>>> ParametricRegion((r*cos(theta), r*sin(theta)), (r, -2, 2), (theta, 0, pi))
ParametricRegion((r*cos(theta), r*sin(theta)), (r, -2, 2), (theta, 0, pi))
>>> ParametricRegion((a*cos(t), b*sin(t)), t)
ParametricRegion((a*cos(t), b*sin(t)), t)

>>> circle = ParametricRegion((r*cos(theta), r*sin(theta)), r, (theta, 0, pi))
>>> circle.parameters
(r, theta)
>>> circle.definition
(r*cos(theta), r*sin(theta))
>>> circle.limits
{theta: (0, pi)}

Dimension of a parametric region determines whether a region is a curve, surface
or volume region. It does not represent its dimensions in space.

>>> circle.dimensions
1

Parameters
==========

definition : tuple to define base scalars in terms of parameters.

bounds : Parameter or a tuple of length 3 to define parameter and corresponding lower and upper bound.

c                   > Sn0 n[        U[        5      (       d  [        U6 nU HV  n[        U[        [        45      (       a3  [        U5      S:w  a  [	        S5      eX5S   4-  nUS   US   4XES   '   MQ  X54-  nMX     [        U[        [        45      (       d  U4n[
        TU ]  " U [        U6 /UQ76 nX6l        XFl        U$ )N    z?Tuple should be in the form (parameter, lowerbound, upperbound)r         )	
isinstancer   tuplelen
ValueErrorsuper__new___parameters_limits)cls
definitionbounds
parameterslimitsboundobj	__class__s          U/var/www/auris/envauris/lib/python3.13/site-packages/sympy/vector/parametricregion.pyr   ParametricRegion.__new__6   s    
&%((F^FE%%00u:?$%fggQxk)
$)!HeAh#7Qx h&
  *uen55$Jgoc5*#5??$
    c                      U R                   S   $ Nr   )argsselfs    r)   r"   ParametricRegion.definitionO   s    yy|r+   c                     U R                   $ N)r    r/   s    r)   r%   ParametricRegion.limitsS   s    ||r+   c                     U R                   $ r3   )r   r/   s    r)   r$   ParametricRegion.parametersW   s    r+   c                 ,    [        U R                  5      $ r3   )r   r%   r/   s    r)   
dimensionsParametricRegion.dimensions[   s    4;;r+   r   )__name__
__module____qualname____firstlineno____doc__r   propertyr"   r%   r$   r8   __static_attributes____classcell__)r(   s   @r)   r   r      s^    (R2            r+   r   c                     [        S5      e)a  
Returns a list of ParametricRegion objects representing the geometric region.

Examples
========

>>> from sympy.abc import t
>>> from sympy.vector import parametric_region_list
>>> from sympy.geometry import Point, Curve, Ellipse, Segment, Polygon

>>> p = Point(2, 5)
>>> parametric_region_list(p)
[ParametricRegion((2, 5))]

>>> c = Curve((t**3, 4*t), (t, -3, 4))
>>> parametric_region_list(c)
[ParametricRegion((t**3, 4*t), (t, -3, 4))]

>>> e = Ellipse(Point(1, 3), 2, 3)
>>> parametric_region_list(e)
[ParametricRegion((2*cos(t) + 1, 3*sin(t) + 3), (t, 0, 2*pi))]

>>> s = Segment(Point(1, 3), Point(2, 6))
>>> parametric_region_list(s)
[ParametricRegion((t + 1, 3*t + 3), (t, 0, 1))]

>>> p1, p2, p3, p4 = [(0, 1), (2, -3), (5, 3), (-2, 3)]
>>> poly = Polygon(p1, p2, p3, p4)
>>> parametric_region_list(poly)
[ParametricRegion((2*t, 1 - 4*t), (t, 0, 1)), ParametricRegion((3*t + 2, 6*t - 3), (t, 0, 1)),     ParametricRegion((5 - 7*t, 3), (t, 0, 1)), ParametricRegion((2*t - 2, 3 - 2*t),  (t, 0, 1))]

z?SymPy cannot determine parametric representation of the region.)r   )regs    r)   parametric_region_listrD   `   s    F V
WWr+   c                 .    [        U R                  5      /$ r3   )r   r.   )r'   s    r)   _rF      s    SXX&''r+   c                 |    U R                  U R                  5      R                  nU R                  n[	        X5      /$ r3   )arbitrary_point	parameterr.   r%   r   )r'   r"   r#   s      r)   rF   rF      s3    $$S]]388JZZFZ011r+   c                 |    U R                  U5      R                  n[        USS9nUSS[        -  4n[	        X$5      /$ )NTrealr   r   )rH   r.   r	   r   r   )r'   rI   r"   tr#   s        r)   rF   rF      sA    $$Y/44J	%AAbD\FZ011r+   c                    [        USS9nU R                  U5      R                  n[        SS5       H  n[	        X4   U R
                  S   R                  U   -
  U5      n[	        X4   U R
                  S   R                  U   -
  U5      n[        U5      S:X  d  Mj  [        U5      S:X  d  M{  X%S   US   4n  O   U R                  U5      R                  n[        UW5      /$ )NTrK   r   r   r   )r	   rH   r.   ranger
   pointsr   r   )	r'   rI   rM   r"   ilower_boundupper_boundr#   definition_tuples	            r)   rF   rF      s    	%A$$Q',,J1a[JMCJJqM,>,>q,AA1EJMCJJqM,>,>q,AA1E{q S%5%:AA6F  **95::-v677r+   c                 `    U R                    Vs/ s H  n[        X!5      S   PM     nnU$ s  snf r-   )sidesrD   )r'   rI   sidels       r)   rF   rF      s0    @C		J			0	3	AJH 	Ks   +c                 h   U R                  U5      n/ n[        [        U R                  5      S-
  5       Ha  n[	        X   SS9nU Vs/ s H*  n[        UR                  U[        US-  5      5      5      PM,     nnUR                  USS[        -  45        Mc     [        U6 n[        U/UQ76 /$ s  snf )Nr   TrK   r   r   )rational_parametrizationrO   r   	variablesr	   r   subsr   appendr   r   r   )r'   r$   r"   r#   rQ   rI   elems          r)   rF   rF      s    --j9JF3s}}%)*JM5	S]^S]4htyyC	!4DEFS]
^y!QrT*,	 + 
#JZ1&122	 _s   1B/N)rM   ))rM   s)	functoolsr   sympy.core.numbersr   (sympy.functions.elementary.trigonometricr   sympy.simplifyr   
sympy.corer   r   sympy.core.symbolr	   sympy.solversr
   sympy.geometryr   r   r   r   r   sympy.vectorr   r   rD   registerrF   r   r+   r)   <module>rj      s   $ ! 8 # # %  B B 'Q u Q h "X "XJ   '( ((   '2 (2   )2 *2   )8 *8    ) *
   03 13r+   