+
    ‹°³j¢!  ã                   ó„   € ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHt ^ RI	H
t
 ^ RIHt . ROtR tR tR	 tR
 tR tR tR tR# )é    )Údiff)ÚS)Ú	integrate)ÚVectorÚexpress)Ú_check_frame)Ú_check_vectorc                ó˜  € \        V 4       V ^ 8X  d   \        ^ 4      # \        WRR7      p V P                  VP                  4      pV P                  VP
                  4      pV P                  VP                  4      p\        ^ 4      pV\        WA^,          4      \        W1^,          4      ,
          VP                  ,          ,          pV\        W!^,          4      \        WA^ ,          4      ,
          VP
                  ,          ,          pV\        W1^ ,          4      \        W!^,          4      ,
          VP                  ,          ,          pV# )a   
Returns the curl of a vector field computed wrt the coordinate
symbols of the given frame.

Parameters
==========

vect : Vector
    The vector operand

frame : ReferenceFrame
    The reference frame to calculate the curl in

Examples
========

>>> from sympy.physics.vector import ReferenceFrame
>>> from sympy.physics.vector import curl
>>> R = ReferenceFrame('R')
>>> v1 = R[1]*R[2]*R.x + R[0]*R[2]*R.y + R[0]*R[1]*R.z
>>> curl(v1, R)
0
>>> v2 = R[0]*R[1]*R[2]*R.x
>>> curl(v2, R)
R_x*R_y*R.y - R_x*R_z*R.z

T©Ú	variables)r	   r   r   ÚdotÚxÚyÚzr   )ÚvectÚframeÚvectxÚvectyÚvectzÚoutvecs   &&    Úd/home/luca/screen-checking/.venv/lib/python3.14/site-packages/sympy/physics/vector/fieldfunctions.pyÚcurlr      së   € ô: �$ÔØˆq„yÜ�a‹yÐÜ�4¨$Ô/€Dà�H‰H�U—W‘WÓ€EØ�H‰H�U—W‘WÓ€EØ�H‰H�U—W‘WÓ€EÜ�A‹Y€FØ
Œt�E �8Ó$¤t¨E¸µ8Ó'<Õ<ÀÇÁÕGÕG€FØ
Œt�E �8Ó$¤t¨E¸µ8Ó'<Õ<ÀÇÁÕGÕG€FØ
Œt�E �8Ó$¤t¨E¸µ8Ó'<Õ<ÀÇÁÕGÕG€FØ€Mó    c                ó¼  € \        V 4       V ^ 8X  d   \        P                  # \        WRR7      p V P	                  VP
                  4      pV P	                  VP                  4      pV P	                  VP                  4      p\        P                  pV\        W!^ ,          4      ,          pV\        W1^,          4      ,          pV\        WA^,          4      ,          pV# )a  
Returns the divergence of a vector field computed wrt the coordinate
symbols of the given frame.

Parameters
==========

vect : Vector
    The vector operand

frame : ReferenceFrame
    The reference frame to calculate the divergence in

Examples
========

>>> from sympy.physics.vector import ReferenceFrame
>>> from sympy.physics.vector import divergence
>>> R = ReferenceFrame('R')
>>> v1 = R[0]*R[1]*R[2] * (R.x+R.y+R.z)
>>> divergence(v1, R)
R_x*R_y + R_x*R_z + R_y*R_z
>>> v2 = 2*R[1]*R[2]*R.y
>>> divergence(v2, R)
2*R_z

Tr   )	r	   r   ÚZeror   r   r   r   r   r   )r   r   r   r   r   Úouts   &&    r   Ú
divergencer   :   s¥   € ô: �$ÔØˆq„yÜ�v‰vˆÜ�4¨$Ô/€DØ�H‰H�U—W‘WÓ€EØ�H‰H�U—W‘WÓ€EØ�H‰H�U—W‘WÓ€EÜ
�&‰&€CØŒ4�˜Q•xÓ Õ €CØŒ4�˜Q•xÓ Õ €CØŒ4�˜Q•xÓ Õ €CØ€Jr   c                ó´   € \        V4       \        ^ 4      p\        WRR7      p \        V4       F%  w  r4V\	        WV,          4      V,          ,          pK'  	  V# )a5  
Returns the vector gradient of a scalar field computed wrt the
coordinate symbols of the given frame.

Parameters
==========

scalar : sympifiable
    The scalar field to take the gradient of

frame : ReferenceFrame
    The frame to calculate the gradient in

Examples
========

>>> from sympy.physics.vector import ReferenceFrame
>>> from sympy.physics.vector import gradient
>>> R = ReferenceFrame('R')
>>> s1 = R[0]*R[1]*R[2]
>>> gradient(s1, R)
R_y*R_z*R.x + R_x*R_z*R.y + R_x*R_y*R.z
>>> s2 = 5*R[0]**2*R[2]
>>> gradient(s2, R)
10*R_x*R_z*R.x + 5*R_x**2*R.z

Tr   )r   r   r   Ú	enumerater   )Úscalarr   r   Úir   s   &&   r   Úgradientr"   e   sO   € ô: �ÔÜ�A‹Y€FÜ�V¨dÔ3€FÜ˜%Ö ‰ˆØ”$�v Q�xÓ(¨1Õ,Õ,Šñ !à€Mr   c                ó°   € V \        ^ 4      8X  d   R# \        V P                  4       4      ^ ,          p\        W4      P	                  4       \        ^ 4      8H  # )a„  
Checks if a field is conservative.

Parameters
==========

field : Vector
    The field to check for conservative property

Examples
========

>>> from sympy.physics.vector import ReferenceFrame
>>> from sympy.physics.vector import is_conservative
>>> R = ReferenceFrame('R')
>>> is_conservative(R[1]*R[2]*R.x + R[0]*R[2]*R.y + R[0]*R[1]*R.z)
True
>>> is_conservative(R[2] * R.y)
False

T)r   ÚlistÚseparater   Úsimplify©Úfieldr   s   & r   Úis_conservativer)   Š   sF   € ð2 ”�q“	ÔÙÜ�—‘Ó!Ó" 1Õ%€EÜ�Ó×&Ñ&Ó(¬F°1«IÑ5Ð5r   c                ó¸   € V \        ^ 4      8X  d   R# \        V P                  4       4      ^ ,          p\        W4      P	                  4       \
        P                  J # )az  
Checks if a field is solenoidal.

Parameters
==========

field : Vector
    The field to check for solenoidal property

Examples
========

>>> from sympy.physics.vector import ReferenceFrame
>>> from sympy.physics.vector import is_solenoidal
>>> R = ReferenceFrame('R')
>>> is_solenoidal(R[1]*R[2]*R.x + R[0]*R[2]*R.y + R[0]*R[1]*R.z)
True
>>> is_solenoidal(R[1] * R.y)
False

T)r   r$   r%   r   r&   r   r   r'   s   & r   Úis_solenoidalr+   ©   sF   € ð2 ”�q“	ÔÙÜ�—‘Ó!Ó" 1Õ%€EÜ�eÓ#×,Ñ,Ó.´!·&±&Ð8Ð8r   c                óî  € \        V 4      '       g   \        R4      hV \        ^ 4      8X  d   \        P                  # \        V4       \        WRR7      p \        V4      p\        V P                  V^ ,          4      V^ ,          4      p\        VR,          4       FV  w  rE\        W1V^,           ,          4      pV P                  V4      V,
          pV\        WaV^,           ,          4      ,          pKX  	  V# )av  
Returns the scalar potential function of a field in a given frame
(without the added integration constant).

Parameters
==========

field : Vector
    The vector field whose scalar potential function is to be
    calculated

frame : ReferenceFrame
    The frame to do the calculation in

Examples
========

>>> from sympy.physics.vector import ReferenceFrame
>>> from sympy.physics.vector import scalar_potential, gradient
>>> R = ReferenceFrame('R')
>>> scalar_potential(R.z, R) == R[2]
True
>>> scalar_field = 2*R[0]**2*R[1]*R[2]
>>> grad_field = gradient(scalar_field, R)
>>> scalar_potential(grad_field, R)
2*R_x**2*R_y*R_z

zField is not conservativeTr   :é   NN)r)   Ú
ValueErrorr   r   r   r   r   r$   r   r   r   r   )r(   r   Ú
dimensionsÚtemp_functionr!   ÚdimÚpartial_diffs   &&     r   Úscalar_potentialr3   È   sÄ   € ô> ˜5×!Ò!ÜÐ4Ó5Ð5Ø”�q“	ÔÜ�v‰vˆô �ÔÜ�E¨DÔ1€Eä�e“€Jä˜eŸi™i¨
°1­Ó6¸¸a½ÓA€MÜ˜J r�NÖ+‰ˆÜ˜M°°Qµ­<Ó8ˆØ—y‘y “~¨Õ4ˆØœ <°q¸1µuµÓ>Õ>Šñ ,ð Ðr   c                óº  € \        V4       \        V \        4      '       d   \        W4      pMT p\	        VP                  V4      VRR7      p\	        VP                  V4      VRR7      p/ p/ p	\        V4       F9  w  r«VP                  V4      W�V
,          &   VP                  V4      W‘V
,          &   K;  	  VP                  V	4      VP                  V4      ,
          # )a¦  
Returns the scalar potential difference between two points in a
certain frame, wrt a given field.

If a scalar field is provided, its values at the two points are
considered. If a conservative vector field is provided, the values
of its scalar potential function at the two points are used.

Returns (potential at position 2) - (potential at position 1)

Parameters
==========

field : Vector/sympyfiable
    The field to calculate wrt

frame : ReferenceFrame
    The frame to do the calculations in

point1 : Point
    The initial Point in given frame

position2 : Point
    The second Point in the given frame

origin : Point
    The Point to use as reference point for position vector
    calculation

Examples
========

>>> from sympy.physics.vector import ReferenceFrame, Point
>>> from sympy.physics.vector import scalar_potential_difference
>>> R = ReferenceFrame('R')
>>> O = Point('O')
>>> P = O.locatenew('P', R[0]*R.x + R[1]*R.y + R[2]*R.z)
>>> vectfield = 4*R[0]*R[1]*R.x + 2*R[0]**2*R.y
>>> scalar_potential_difference(vectfield, R, O, P, O)
2*R_x**2*R_y
>>> Q = O.locatenew('O', 3*R.x + R.y + 2*R.z)
>>> scalar_potential_difference(vectfield, R, P, Q, O)
-2*R_x**2*R_y + 18

Tr   )	r   Ú
isinstancer   r3   r   Úpos_fromr   r   Úsubs)r(   r   Úpoint1Úpoint2ÚoriginÚ	scalar_fnÚ	position1Ú	position2Ú
subs_dict1Ú
subs_dict2r!   r   s   &&&&&       r   Úscalar_potential_differencer@   ú   s½   € ô^ �ÔÜ�%œ× Ò ä$ UÓ2‰	ð ˆ	ä˜Ÿ™¨Ó/°À$ÔG€IÜ˜Ÿ™¨Ó/°À$ÔG€Ià€JØ€JÜ˜%Ö ‰ˆØ Ÿu™u YÓ/ˆ
˜•8ÑØ Ÿu™u YÓ/ˆ
˜•8Óñ !ð �>‰>˜*Ó%¨	¯©°zÓ(BÕBÐBr   N)r   r   r"   r)   r+   r3   r@   )Úsympy.core.functionr   Úsympy.core.singletonr   Úsympy.integrals.integralsr   Úsympy.physics.vectorr   r   Úsympy.physics.vector.framer   Úsympy.physics.vector.vectorr	   Ú__all__r   r   r"   r)   r+   r3   r@   © r   r   Ú<module>rI      sF   ðÝ $Ý "Ý /ß 0Ý 3Ý 5ò*€ò
)òX(òV"òJ6ò>9ò>/ôd?Cr   