K ik%ddlZddlmZddlmZmZmZddlmZddl m Z m Z m Z m Z mZddlmZddlmZddlmZd Zd ZGd d eZGd deZGddeZddZddZddZGddeZdZy)N)Expr)sympifySpreorder_traversal) CoordSys3D)Vector VectorMul VectorAddCrossDot) Derivative)Add)Mulct|}t}|D]4}t|ts|j ||j 6t |SN)rset isinstanceraddskip frozenset)exprgretis \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/vector/operators.py_get_coord_systemsr sL4 A %C  a $ GGAJ FFH S>ctjd}|jD]}|t|xx|zcc<t |j S)Nc"tjSr)rOnerrz._split_mul_args_wrt_coordsys..s r) collections defaultdictargsrlistvalues)rdrs r_split_mul_args_wrt_coordsysr)sL .A YY& Q  A% &  rceZdZdZdZdZy)Gradientz Represents unevaluated Gradient. Examples ======== >>> from sympy.vector import CoordSys3D, Gradient >>> R = CoordSys3D('R') >>> s = R.x*R.y*R.z >>> Gradient(s) Gradient(R.x*R.y*R.z) cVt|}tj||}||_|Srrr__new___exprclsrobjs rr.zGradient.__new__+'t}ll3%  rc 0t|jdSNTdoit)gradientr/selfhintss rr7z Gradient.doit1s ..rN__name__ __module__ __qualname____doc__r.r7r!rrr+r+s  /rr+ceZdZdZdZdZy) Divergencea Represents unevaluated Divergence. Examples ======== >>> from sympy.vector import CoordSys3D, Divergence >>> R = CoordSys3D('R') >>> v = R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k >>> Divergence(v) Divergence(R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k) cVt|}tj||}||_|Srr-r0s rr.zDivergence.__new__Dr3rc 0t|jdSr5) divergencer/r9s rr7zDivergence.doitJs$**400rNr<r!rrrBrB5s  1rrBceZdZdZdZdZy)Curla Represents unevaluated Curl. Examples ======== >>> from sympy.vector import CoordSys3D, Curl >>> R = CoordSys3D('R') >>> v = R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k >>> Curl(v) Curl(R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k) cVt|}tj||}||_|Srr-r0s rr.z Curl.__new__]r3rc 0t|jdSr5)curlr/r9s rr7z Curl.doitcsDJJT**rNr<r!rrrGrGNs  +rrGc t|}t|dk(rtjSt|dk(r(t t |}|j \}}}|j\}}}|j\} } } |j|} |j|} |j|}tj}|t|| z|t| | z|z |z| | zz z }|t| | z|t|| z|z |z| | zz z }|t| | z|t| | z|z |z| | zz z }r|jS|St|ttfr[ddlm} t t |}|j"Dcgc] }|||d}}tj&fd|DSt|t(t*fr|j"Dcgc] }t|tt,t.fs|"c}d}t)j&d|j"D}t-t1||j|t3|zz}r|jS|St|t,t4t.fr t5|St%d cc}w#t$$r|j"}Y)wxYwcc}w) ao Returns the curl of a vector field computed wrt the base scalars of the given coordinate system. Parameters ========== vect : Vector The vector operand doit : bool If True, the result is returned after calling .doit() on each component. Else, the returned expression contains Derivative instances Examples ======== >>> from sympy.vector import CoordSys3D, curl >>> R = CoordSys3D('R') >>> v1 = R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k >>> curl(v1) 0 >>> v2 = R.x*R.y*R.z*R.i >>> curl(v2) R.x*R.y*R.j + (-R.x*R.z)*R.k rexpressT variablesc38K|]}t|ywr6N)rJ.0rr7s r zcurl..s%GQd14&8&8%Gc3XK|]"}t|tttfr|$ywrrrr r+rTrs rrUzcurl.."!gjVUZ\dLe>f!!g **r6zInvalid argument for curl)rlenrzeronextiter base_vectors base_scalarslame_coefficientsdotr r7rrr sympy.vectorrNr% ValueErrorfromiterrr r r+r8rJrG)vectr7 coord_sysrjkxyzh1h2h3vectxvectyvectzoutvecrNcsr%vectorscalarress ` rrJrJgs<#4(I 9~{{ Y1 i) ((*1a((*1a002 B   :ebj!,ebj!,-01257"W> >:ebj!,ebj!,-01257"W> >:ebj!,ebj!,-01257"W> > ;;=  dS), - , !$y/*@D J126JJ%%%G$%GG G sI. /!%WAjVUH>> from sympy.vector import CoordSys3D, divergence >>> R = CoordSys3D('R') >>> v1 = R.x*R.y*R.z * (R.i+R.j+R.k) >>> divergence(v1) R.x*R.y + R.x*R.z + R.y*R.z >>> v2 = 2*R.y*R.z*R.j >>> divergence(v2) 2*R.z rrLc38K|]}t|ywrR)rErSs rrUzdivergence..sLQ 14 8 8LrVc3XK|]"}t|tttfr|$ywrrXrYs rrUzdivergence..rZr[r6zInvalid argument for divergence)rr\rZerorr rGr+rBr^r_r`rarb_diff_conditionalrcr7rr rfr%rr rr r8rEre)rgr7rhrrirjrkrlrmrnrorpvxvyvzrxrvrws ` rrErEs <#4(I 9~vv Y1  dUD(3 4d# #i) ((*1a((*1a002 B txx{Ar2 6R"  txx{Ar2 6R"  txx{Ar2 6R" 2gl 88:  dS), -<<L$))LL L sI. /!%WAjVUH? ?Xs IIct}t|dk(rtjSt|dk(rt t |}|j \}}}|j\}}}|j\} } } t| |z } t| |z } t| |z }|r| |z| |zz||zzjS| |z| |zz||zzStttfr&tjdjDStt t"fr)t%}tjfd|DSt'S)a Returns the vector gradient of a scalar field computed wrt the base scalars of the given coordinate system. Parameters ========== scalar_field : SymPy Expr The scalar field to compute the gradient of doit : bool If True, the result is returned after calling .doit() on each component. Else, the returned expression contains Derivative instances Examples ======== >>> from sympy.vector import CoordSys3D, gradient >>> R = CoordSys3D('R') >>> s1 = R.x*R.y*R.z >>> gradient(s1) R.y*R.z*R.i + R.x*R.z*R.j + R.x*R.y*R.k >>> s2 = 5*R.x**2*R.z >>> gradient(s2) 10*R.x*R.z*R.i + 5*R.x**2*R.k rrLc32K|]}t|ywrr8rYs rrUzgradient..$s%Mahqk%Msc3@K|]}|z t|zywrr)rTr scalar_fields rrUzgradient..'s%PlQ&6!&D%Ps)rr\rr]r^r_rbr`rar r7rrr rfr%rr r)r+)rr7rhrnrorprrirjrkrlrmr~rrss` rr8r8sW:#<0I 9~{{ Y1 i) 002 B((*1a((*1a  a (2 -  a (2 -  a (2 - FR!VOb1f,224 4AvQa'' lS)$4 5%%%M<;L;L%MM M lS)$4 5,\:A%%%Pa%PP P %%rceZdZdZdZdZy) Laplacianz Represents unevaluated Laplacian. Examples ======== >>> from sympy.vector import CoordSys3D, Laplacian >>> R = CoordSys3D('R') >>> v = 3*R.x**3*R.y**2*R.z**3 >>> Laplacian(v) Laplacian(3*R.x**3*R.y**2*R.z**3) cVt|}tj||}||_|Srr-r0s rr.zLaplacian.__new__:r3rc 2ddlm}||jS)Nr) laplacian)sympy.vector.functionsrr/)r:r;rs rr7zLaplacian.doit@s4$$rNr<r!rrrr+s  %rrcddlm}|||jd}||z|z}|r t||Stj S)z First re-expresses expr in the system that base_scalar belongs to. If base_scalar appears in the re-expressed form, differentiates it wrt base_scalar. Else, returns 0 rrMTrO)rrNsystemr rr|)r base_scalarcoeff_1coeff_2rNnew_exprargs rr}r}EsB/t[//4@H G h &C+.:c; ':AFF:r)T)r#sympy.core.exprr sympy.corerrrsympy.vector.coordsysrectrsympy.vector.vectorrr r r r sympy.core.functionr sympy.core.addrsympy.core.mulrrr)r+rBrGrJrEr8rr}r!rrrsw 550HH*/t/2112+4+2H:V@@F3&l%%4 ;r