summaryrefslogtreecommitdiff
path: root/tensor.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'tensor.hpp')
-rw-r--r--tensor.hpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/tensor.hpp b/tensor.hpp
index 1d90c78..aa33069 100644
--- a/tensor.hpp
+++ b/tensor.hpp
@@ -123,3 +123,15 @@ Matrix<Scalar> contractDown(const Tensor<Scalar, r>& J, const Vector<Scalar>& z)
Tensor<Scalar, r - 1> Jz = J.contract(zT, ip00);
return contractDown(Jz, z);
}
+
+template <int f, class Scalar>
+Tensor<Scalar, f> contractDownTo(const Tensor<Scalar, f>& J, const Vector<Scalar>& z) {
+ return J;
+}
+
+template <int f, class Scalar, int r>
+Tensor<Scalar, f> contractDownTo(const Tensor<Scalar, r>& J, const Vector<Scalar>& z) {
+ Tensor<Scalar, 1> zT = Eigen::TensorMap<Tensor<const Scalar, 1>>(z.data(), {z.size()});
+ Tensor<Scalar, r - 1> Jz = J.contract(zT, ip00);
+ return contractDownTo<f>(Jz, z);
+}