summaryrefslogtreecommitdiff
path: root/tensor.hpp
diff options
context:
space:
mode:
authorJaron Kent-Dobias <jaron@kent-dobias.com>2021-11-05 17:31:10 +0100
committerJaron Kent-Dobias <jaron@kent-dobias.com>2021-11-05 17:31:10 +0100
commitc60430fc1c5d90ae06d1fd019257474c8f395bef (patch)
tree3e54f263dd676b7e563d4a1388c5da122df59c1e /tensor.hpp
parent8209ca60b99594f26f3e9b21ccdbc8695526eb93 (diff)
downloadcode-c60430fc1c5d90ae06d1fd019257474c8f395bef.tar.gz
code-c60430fc1c5d90ae06d1fd019257474c8f395bef.tar.bz2
code-c60430fc1c5d90ae06d1fd019257474c8f395bef.zip
Lots of progress towards Hessian implementation.
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);
+}