Depends
Makes an object implicitly dependent on other objects.
Makes an object implicitly dependent on other objects, i.e. assumes
that the indicated object is a function of the arguments of the
property. For examplex::Coordinate;
\phi::Depends(x);
\(\displaystyle{}\text{Attached property Coordinate to }x.\)
\(\displaystyle{}\text{Attached property Depends to }\phi.\)
makes $\phi$ an implicit function of $x$. Instead of indicating the
coordinate on which the object depends, it is also possible to
indicate which derivatives would yield a non-zero answer, as in
\nabla{#}::Derivative;
\phi::Depends(\nabla{#});
ex:=\nabla_{m}{\phi c \sin{y}};
unwrap(_);
\(\displaystyle{}\text{Attached property Derivative to }\nabla{\#}.\)
\(\displaystyle{}\text{Attached property Depends to }\phi.\)
\(\displaystyle{}\nabla_{m}\left(\phi c \sin{y}\right)\)
\nabla_{m}(\phi c \sin(y))
\(\displaystyle{}c \sin{y} \nabla_{m}{\phi}\)
c \sin(y) \nabla_{m}(\phi)
(Note: if you did this in Cadabra 1.x you could write
Depends(\nabla)
; this is no longer
possible in 2.x and you need to write the full pattern Depends(\nabla{#})
).
Finally, it is possible to use an index name to indicate on which
coordinates a field depends,\nabla{#}::Derivative;
{\mu,\nu}::Indices;
\chi::Depends(\mu);
ex:=\nabla_{\mu}{\chi} + \nabla_{\mu}{\rho};
unwrap(_);
\(\displaystyle{}\text{Property Derivative attached to }\nabla{\#}.\)
\(\displaystyle{}\text{Property Indices(position=free) attached to }\left[\mu, \nu\right].\)
\(\displaystyle{}\text{Property Depends attached to }\chi.\)
\(\displaystyle{}\nabla_{\mu}{\chi}+\nabla_{\mu}{\rho}\)
\nabla_{\mu}(\chi) + \nabla_{\mu}(\rho)
\(\displaystyle{}\nabla_{\mu}{\chi}\)
\nabla_{\mu}(\chi)
To make a tensor with any type and number of indices
Depend
on something else,
useh{#}::Depends(\nabla{#});
ex:=\nabla_{m}{ c d h^{0 t} h_{t 0} h^{0}_{0} };
unwrap(_);
\(\displaystyle{}\text{Attached property Depends to }h\left(\#\right).\)
\(\displaystyle{}\nabla_{m}\left(c d h^{0 t} h_{t 0} h^{0}\,_{0}\right)\)
\nabla_{m}(c d h^{0 t} h_{t 0} h^{0}_{0})
\(\displaystyle{}c d \nabla_{m}\left(h^{0 t} h_{t 0} h^{0}\,_{0}\right)\)
c d \nabla_{m}(h^{0 t} h_{t 0} h^{0}_{0})
{m,n,p,q}::Indices(vector);
\phi::Depends(m);
\(\displaystyle{}\text{Attached property Indices(position=free) to }\left[m, n, p, q\right].\)
\(\displaystyle{}\text{Attached property Depends to }\phi.\)
If you want to make an object depend on more than one thing, you need
to specify them all in one
Depends
property. If you specify
them in two separate properties, the last property will overwrite
the previous one. Therefore, you get\hat{#}::Accent;
{x,y}::Coordinate;
\partial{#}::PartialDerivative;
A::Depends(\hat{#});
A::Depends(x);
ex:=\hat{A};
unwrap(ex);
\(\displaystyle{}\text{Attached property Accent to }\widehat{\#}.\)
\(\displaystyle{}\text{Attached property Coordinate to }\left(x, \mmlToken{mo}[linebreak="goodbreak"]{} y\right).\)
\(\displaystyle{}\text{Attached property PartialDerivative to }\partial{\#}.\)
\(\displaystyle{}\text{Attached property Depends to }A.\)
\(\displaystyle{}\text{Attached property Depends to }A.\)
\(\displaystyle{}\widehat{A}\)
\(\displaystyle{}0\)