>From 8b0f8fbd6a3470ac1eb20f940ef4e35ba80d4763 Mon Sep 17 00:00:00 2001
From: Ryan Pavlik
Date: Tue, 4 May 2010 17:26:20 -0500
Subject: [PATCH 1/2] Add the make transformCovariance script, updated generated.h
Also added a rule to Makefile.in to regenerate generated.h
---
Makefile.in | 3 +
generated.h | 567 ++++++++++++++++++++++++++++++++++++++++--
make_transformcovariance.awk | 42 +++
3 files changed, 595 insertions(+), 17 deletions(-)
create mode 100644 make_transformcovariance.awk
diff --git a/Makefile.in b/Makefile.in
index da2f673..af0ce0f 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -29,6 +29,9 @@ internal/make_vector.hh: make_make_vector.awk
internal/builtin_typeof.h:make_typeof.awk
awk -f make_typeof.awk > $@
+generated.h:make_transformcovariance.awk
+ awk -f make_transformcovariance.awk > $@
+
clean:
rm -rf html
diff --git a/generated.h b/generated.h
index 1ec657c..92288b9 100644
--- a/generated.h
+++ b/generated.h
@@ -1,42 +1,113 @@
+// Mechanically generate code. Do not edit.
+// modify make_transformcovariance.awk and run make generated.h
namespace TooN {
+
// Generated for J*C*J^T, C symmetric
template
inline void transformCovariance(const Matrix<2,2,A1>& A, const Matrix<2,2,A2>& B, Matrix<2,2,A3>& M)
{
- M = A*B*A.T();
+ M = A*B*A.T();
}
+
// Generated for J*C*J^T, C symmetric
template
inline void transformCovariance(const Matrix<2,N,A1>& A, const Matrix& B, Matrix<2,2,A3>& M)
{
- { const Vector ABi = B * A[0];
+ {
+ const Vector ABi = B * A[0];
M[0][0] = ABi * A[0];
M[0][1] = M[1][0] = ABi * A[1];
}
M[1][1] = (B * A[1]) * A[1];
}
+
// Generated for J*C*J^T, C symmetric
template
inline void transformCovariance(const Matrix<3,N,A1>& A, const Matrix& B, Matrix<3,3,A3>& M)
{
- { const Vector ABi = B * A[0];
+ {
+ const Vector ABi = B * A[0];
M[0][0] = ABi * A[0];
M[0][1] = M[1][0] = ABi * A[1];
M[0][2] = M[2][0] = ABi * A[2];
}
- { const Vector ABi = B * A[1];
+ {
+ const Vector ABi = B * A[1];
M[1][1] = ABi * A[1];
M[1][2] = M[2][1] = ABi * A[2];
}
M[2][2] = (B * A[2]) * A[2];
}
+
// Generated for J*C*J^T, C symmetric
-template inline void transformCovariance(const Matrix<6,N,A1>& A, const Matrix& B, Matrix<6,6,A3>& M)
+template
+inline void transformCovariance(const Matrix<4,N,A1>& A, const Matrix& B, Matrix<4,4,A3>& M)
{
- { const Vector ABi = B * A[0];
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ }
+ M[3][3] = (B * A[3]) * A[3];
+}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<5,N,A1>& A, const Matrix& B, Matrix<5,5,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ M[0][4] = M[4][0] = ABi * A[4];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ M[1][4] = M[4][1] = ABi * A[4];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ M[2][4] = M[4][2] = ABi * A[4];
+ }
+ {
+ const Vector ABi = B * A[3];
+ M[3][3] = ABi * A[3];
+ M[3][4] = M[4][3] = ABi * A[4];
+ }
+ M[4][4] = (B * A[4]) * A[4];
+}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<6,N,A1>& A, const Matrix& B, Matrix<6,6,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
M[0][0] = ABi * A[0];
M[0][1] = M[1][0] = ABi * A[1];
M[0][2] = M[2][0] = ABi * A[2];
@@ -44,35 +115,42 @@ template inline void transformCovariance(c
M[0][4] = M[4][0] = ABi * A[4];
M[0][5] = M[5][0] = ABi * A[5];
}
- { const Vector ABi = B * A[1];
+ {
+ const Vector ABi = B * A[1];
M[1][1] = ABi * A[1];
M[1][2] = M[2][1] = ABi * A[2];
M[1][3] = M[3][1] = ABi * A[3];
M[1][4] = M[4][1] = ABi * A[4];
M[1][5] = M[5][1] = ABi * A[5];
}
- { const Vector ABi = B * A[2];
+ {
+ const Vector ABi = B * A[2];
M[2][2] = ABi * A[2];
M[2][3] = M[3][2] = ABi * A[3];
M[2][4] = M[4][2] = ABi * A[4];
M[2][5] = M[5][2] = ABi * A[5];
}
- { const Vector ABi = B * A[3];
+ {
+ const Vector ABi = B * A[3];
M[3][3] = ABi * A[3];
M[3][4] = M[4][3] = ABi * A[4];
M[3][5] = M[5][3] = ABi * A[5];
}
- { const Vector ABi = B * A[4];
+ {
+ const Vector ABi = B * A[4];
M[4][4] = ABi * A[4];
M[4][5] = M[5][4] = ABi * A[5];
}
M[5][5] = (B * A[5]) * A[5];
}
+
// Generated for J*C*J^T, C symmetric
-template inline void transformCovariance(const Matrix<12,N,A1>& A, const Matrix& B, Matrix<12,12,A3>& M)
+template
+inline void transformCovariance(const Matrix<7,N,A1>& A, const Matrix& B, Matrix<7,7,A3>& M)
{
- { const Vector ABi = B * A[0];
+ {
+ const Vector ABi = B * A[0];
M[0][0] = ABi * A[0];
M[0][1] = M[1][0] = ABi * A[1];
M[0][2] = M[2][0] = ABi * A[2];
@@ -81,7 +159,8 @@ template inline void transformCovariance(c
M[0][5] = M[5][0] = ABi * A[5];
M[0][6] = M[6][0] = ABi * A[6];
}
- { const Vector ABi = B * A[1];
+ {
+ const Vector ABi = B * A[1];
M[1][1] = ABi * A[1];
M[1][2] = M[2][1] = ABi * A[2];
M[1][3] = M[3][1] = ABi * A[3];
@@ -89,28 +168,482 @@ template inline void transformCovariance(c
M[1][5] = M[5][1] = ABi * A[5];
M[1][6] = M[6][1] = ABi * A[6];
}
- { const Vector ABi = B * A[2];
+ {
+ const Vector ABi = B * A[2];
M[2][2] = ABi * A[2];
M[2][3] = M[3][2] = ABi * A[3];
M[2][4] = M[4][2] = ABi * A[4];
M[2][5] = M[5][2] = ABi * A[5];
M[2][6] = M[6][2] = ABi * A[6];
}
- { const Vector ABi = B * A[3];
+ {
+ const Vector ABi = B * A[3];
M[3][3] = ABi * A[3];
M[3][4] = M[4][3] = ABi * A[4];
M[3][5] = M[5][3] = ABi * A[5];
M[3][6] = M[6][3] = ABi * A[6];
}
- { const Vector ABi = B * A[4];
+ {
+ const Vector ABi = B * A[4];
M[4][4] = ABi * A[4];
M[4][5] = M[5][4] = ABi * A[5];
M[4][6] = M[6][4] = ABi * A[6];
}
- { const Vector ABi = B * A[5];
+ {
+ const Vector ABi = B * A[5];
M[5][5] = ABi * A[5];
M[5][6] = M[6][5] = ABi * A[6];
}
M[6][6] = (B * A[6]) * A[6];
}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<8,N,A1>& A, const Matrix& B, Matrix<8,8,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ M[0][4] = M[4][0] = ABi * A[4];
+ M[0][5] = M[5][0] = ABi * A[5];
+ M[0][6] = M[6][0] = ABi * A[6];
+ M[0][7] = M[7][0] = ABi * A[7];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ M[1][4] = M[4][1] = ABi * A[4];
+ M[1][5] = M[5][1] = ABi * A[5];
+ M[1][6] = M[6][1] = ABi * A[6];
+ M[1][7] = M[7][1] = ABi * A[7];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ M[2][4] = M[4][2] = ABi * A[4];
+ M[2][5] = M[5][2] = ABi * A[5];
+ M[2][6] = M[6][2] = ABi * A[6];
+ M[2][7] = M[7][2] = ABi * A[7];
+ }
+ {
+ const Vector ABi = B * A[3];
+ M[3][3] = ABi * A[3];
+ M[3][4] = M[4][3] = ABi * A[4];
+ M[3][5] = M[5][3] = ABi * A[5];
+ M[3][6] = M[6][3] = ABi * A[6];
+ M[3][7] = M[7][3] = ABi * A[7];
+ }
+ {
+ const Vector ABi = B * A[4];
+ M[4][4] = ABi * A[4];
+ M[4][5] = M[5][4] = ABi * A[5];
+ M[4][6] = M[6][4] = ABi * A[6];
+ M[4][7] = M[7][4] = ABi * A[7];
+ }
+ {
+ const Vector ABi = B * A[5];
+ M[5][5] = ABi * A[5];
+ M[5][6] = M[6][5] = ABi * A[6];
+ M[5][7] = M[7][5] = ABi * A[7];
+ }
+ {
+ const Vector ABi = B * A[6];
+ M[6][6] = ABi * A[6];
+ M[6][7] = M[7][6] = ABi * A[7];
+ }
+ M[7][7] = (B * A[7]) * A[7];
+}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<9,N,A1>& A, const Matrix& B, Matrix<9,9,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ M[0][4] = M[4][0] = ABi * A[4];
+ M[0][5] = M[5][0] = ABi * A[5];
+ M[0][6] = M[6][0] = ABi * A[6];
+ M[0][7] = M[7][0] = ABi * A[7];
+ M[0][8] = M[8][0] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ M[1][4] = M[4][1] = ABi * A[4];
+ M[1][5] = M[5][1] = ABi * A[5];
+ M[1][6] = M[6][1] = ABi * A[6];
+ M[1][7] = M[7][1] = ABi * A[7];
+ M[1][8] = M[8][1] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ M[2][4] = M[4][2] = ABi * A[4];
+ M[2][5] = M[5][2] = ABi * A[5];
+ M[2][6] = M[6][2] = ABi * A[6];
+ M[2][7] = M[7][2] = ABi * A[7];
+ M[2][8] = M[8][2] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[3];
+ M[3][3] = ABi * A[3];
+ M[3][4] = M[4][3] = ABi * A[4];
+ M[3][5] = M[5][3] = ABi * A[5];
+ M[3][6] = M[6][3] = ABi * A[6];
+ M[3][7] = M[7][3] = ABi * A[7];
+ M[3][8] = M[8][3] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[4];
+ M[4][4] = ABi * A[4];
+ M[4][5] = M[5][4] = ABi * A[5];
+ M[4][6] = M[6][4] = ABi * A[6];
+ M[4][7] = M[7][4] = ABi * A[7];
+ M[4][8] = M[8][4] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[5];
+ M[5][5] = ABi * A[5];
+ M[5][6] = M[6][5] = ABi * A[6];
+ M[5][7] = M[7][5] = ABi * A[7];
+ M[5][8] = M[8][5] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[6];
+ M[6][6] = ABi * A[6];
+ M[6][7] = M[7][6] = ABi * A[7];
+ M[6][8] = M[8][6] = ABi * A[8];
+ }
+ {
+ const Vector ABi = B * A[7];
+ M[7][7] = ABi * A[7];
+ M[7][8] = M[8][7] = ABi * A[8];
+ }
+ M[8][8] = (B * A[8]) * A[8];
+}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<10,N,A1>& A, const Matrix& B, Matrix<10,10,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ M[0][4] = M[4][0] = ABi * A[4];
+ M[0][5] = M[5][0] = ABi * A[5];
+ M[0][6] = M[6][0] = ABi * A[6];
+ M[0][7] = M[7][0] = ABi * A[7];
+ M[0][8] = M[8][0] = ABi * A[8];
+ M[0][9] = M[9][0] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ M[1][4] = M[4][1] = ABi * A[4];
+ M[1][5] = M[5][1] = ABi * A[5];
+ M[1][6] = M[6][1] = ABi * A[6];
+ M[1][7] = M[7][1] = ABi * A[7];
+ M[1][8] = M[8][1] = ABi * A[8];
+ M[1][9] = M[9][1] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ M[2][4] = M[4][2] = ABi * A[4];
+ M[2][5] = M[5][2] = ABi * A[5];
+ M[2][6] = M[6][2] = ABi * A[6];
+ M[2][7] = M[7][2] = ABi * A[7];
+ M[2][8] = M[8][2] = ABi * A[8];
+ M[2][9] = M[9][2] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[3];
+ M[3][3] = ABi * A[3];
+ M[3][4] = M[4][3] = ABi * A[4];
+ M[3][5] = M[5][3] = ABi * A[5];
+ M[3][6] = M[6][3] = ABi * A[6];
+ M[3][7] = M[7][3] = ABi * A[7];
+ M[3][8] = M[8][3] = ABi * A[8];
+ M[3][9] = M[9][3] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[4];
+ M[4][4] = ABi * A[4];
+ M[4][5] = M[5][4] = ABi * A[5];
+ M[4][6] = M[6][4] = ABi * A[6];
+ M[4][7] = M[7][4] = ABi * A[7];
+ M[4][8] = M[8][4] = ABi * A[8];
+ M[4][9] = M[9][4] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[5];
+ M[5][5] = ABi * A[5];
+ M[5][6] = M[6][5] = ABi * A[6];
+ M[5][7] = M[7][5] = ABi * A[7];
+ M[5][8] = M[8][5] = ABi * A[8];
+ M[5][9] = M[9][5] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[6];
+ M[6][6] = ABi * A[6];
+ M[6][7] = M[7][6] = ABi * A[7];
+ M[6][8] = M[8][6] = ABi * A[8];
+ M[6][9] = M[9][6] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[7];
+ M[7][7] = ABi * A[7];
+ M[7][8] = M[8][7] = ABi * A[8];
+ M[7][9] = M[9][7] = ABi * A[9];
+ }
+ {
+ const Vector ABi = B * A[8];
+ M[8][8] = ABi * A[8];
+ M[8][9] = M[9][8] = ABi * A[9];
+ }
+ M[9][9] = (B * A[9]) * A[9];
+}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<11,N,A1>& A, const Matrix& B, Matrix<11,11,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ M[0][4] = M[4][0] = ABi * A[4];
+ M[0][5] = M[5][0] = ABi * A[5];
+ M[0][6] = M[6][0] = ABi * A[6];
+ M[0][7] = M[7][0] = ABi * A[7];
+ M[0][8] = M[8][0] = ABi * A[8];
+ M[0][9] = M[9][0] = ABi * A[9];
+ M[0][10] = M[10][0] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ M[1][4] = M[4][1] = ABi * A[4];
+ M[1][5] = M[5][1] = ABi * A[5];
+ M[1][6] = M[6][1] = ABi * A[6];
+ M[1][7] = M[7][1] = ABi * A[7];
+ M[1][8] = M[8][1] = ABi * A[8];
+ M[1][9] = M[9][1] = ABi * A[9];
+ M[1][10] = M[10][1] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ M[2][4] = M[4][2] = ABi * A[4];
+ M[2][5] = M[5][2] = ABi * A[5];
+ M[2][6] = M[6][2] = ABi * A[6];
+ M[2][7] = M[7][2] = ABi * A[7];
+ M[2][8] = M[8][2] = ABi * A[8];
+ M[2][9] = M[9][2] = ABi * A[9];
+ M[2][10] = M[10][2] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[3];
+ M[3][3] = ABi * A[3];
+ M[3][4] = M[4][3] = ABi * A[4];
+ M[3][5] = M[5][3] = ABi * A[5];
+ M[3][6] = M[6][3] = ABi * A[6];
+ M[3][7] = M[7][3] = ABi * A[7];
+ M[3][8] = M[8][3] = ABi * A[8];
+ M[3][9] = M[9][3] = ABi * A[9];
+ M[3][10] = M[10][3] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[4];
+ M[4][4] = ABi * A[4];
+ M[4][5] = M[5][4] = ABi * A[5];
+ M[4][6] = M[6][4] = ABi * A[6];
+ M[4][7] = M[7][4] = ABi * A[7];
+ M[4][8] = M[8][4] = ABi * A[8];
+ M[4][9] = M[9][4] = ABi * A[9];
+ M[4][10] = M[10][4] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[5];
+ M[5][5] = ABi * A[5];
+ M[5][6] = M[6][5] = ABi * A[6];
+ M[5][7] = M[7][5] = ABi * A[7];
+ M[5][8] = M[8][5] = ABi * A[8];
+ M[5][9] = M[9][5] = ABi * A[9];
+ M[5][10] = M[10][5] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[6];
+ M[6][6] = ABi * A[6];
+ M[6][7] = M[7][6] = ABi * A[7];
+ M[6][8] = M[8][6] = ABi * A[8];
+ M[6][9] = M[9][6] = ABi * A[9];
+ M[6][10] = M[10][6] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[7];
+ M[7][7] = ABi * A[7];
+ M[7][8] = M[8][7] = ABi * A[8];
+ M[7][9] = M[9][7] = ABi * A[9];
+ M[7][10] = M[10][7] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[8];
+ M[8][8] = ABi * A[8];
+ M[8][9] = M[9][8] = ABi * A[9];
+ M[8][10] = M[10][8] = ABi * A[10];
+ }
+ {
+ const Vector ABi = B * A[9];
+ M[9][9] = ABi * A[9];
+ M[9][10] = M[10][9] = ABi * A[10];
+ }
+ M[10][10] = (B * A[10]) * A[10];
+}
+
+
+// Generated for J*C*J^T, C symmetric
+template
+inline void transformCovariance(const Matrix<12,N,A1>& A, const Matrix& B, Matrix<12,12,A3>& M)
+{
+ {
+ const Vector ABi = B * A[0];
+ M[0][0] = ABi * A[0];
+ M[0][1] = M[1][0] = ABi * A[1];
+ M[0][2] = M[2][0] = ABi * A[2];
+ M[0][3] = M[3][0] = ABi * A[3];
+ M[0][4] = M[4][0] = ABi * A[4];
+ M[0][5] = M[5][0] = ABi * A[5];
+ M[0][6] = M[6][0] = ABi * A[6];
+ M[0][7] = M[7][0] = ABi * A[7];
+ M[0][8] = M[8][0] = ABi * A[8];
+ M[0][9] = M[9][0] = ABi * A[9];
+ M[0][10] = M[10][0] = ABi * A[10];
+ M[0][11] = M[11][0] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[1];
+ M[1][1] = ABi * A[1];
+ M[1][2] = M[2][1] = ABi * A[2];
+ M[1][3] = M[3][1] = ABi * A[3];
+ M[1][4] = M[4][1] = ABi * A[4];
+ M[1][5] = M[5][1] = ABi * A[5];
+ M[1][6] = M[6][1] = ABi * A[6];
+ M[1][7] = M[7][1] = ABi * A[7];
+ M[1][8] = M[8][1] = ABi * A[8];
+ M[1][9] = M[9][1] = ABi * A[9];
+ M[1][10] = M[10][1] = ABi * A[10];
+ M[1][11] = M[11][1] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[2];
+ M[2][2] = ABi * A[2];
+ M[2][3] = M[3][2] = ABi * A[3];
+ M[2][4] = M[4][2] = ABi * A[4];
+ M[2][5] = M[5][2] = ABi * A[5];
+ M[2][6] = M[6][2] = ABi * A[6];
+ M[2][7] = M[7][2] = ABi * A[7];
+ M[2][8] = M[8][2] = ABi * A[8];
+ M[2][9] = M[9][2] = ABi * A[9];
+ M[2][10] = M[10][2] = ABi * A[10];
+ M[2][11] = M[11][2] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[3];
+ M[3][3] = ABi * A[3];
+ M[3][4] = M[4][3] = ABi * A[4];
+ M[3][5] = M[5][3] = ABi * A[5];
+ M[3][6] = M[6][3] = ABi * A[6];
+ M[3][7] = M[7][3] = ABi * A[7];
+ M[3][8] = M[8][3] = ABi * A[8];
+ M[3][9] = M[9][3] = ABi * A[9];
+ M[3][10] = M[10][3] = ABi * A[10];
+ M[3][11] = M[11][3] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[4];
+ M[4][4] = ABi * A[4];
+ M[4][5] = M[5][4] = ABi * A[5];
+ M[4][6] = M[6][4] = ABi * A[6];
+ M[4][7] = M[7][4] = ABi * A[7];
+ M[4][8] = M[8][4] = ABi * A[8];
+ M[4][9] = M[9][4] = ABi * A[9];
+ M[4][10] = M[10][4] = ABi * A[10];
+ M[4][11] = M[11][4] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[5];
+ M[5][5] = ABi * A[5];
+ M[5][6] = M[6][5] = ABi * A[6];
+ M[5][7] = M[7][5] = ABi * A[7];
+ M[5][8] = M[8][5] = ABi * A[8];
+ M[5][9] = M[9][5] = ABi * A[9];
+ M[5][10] = M[10][5] = ABi * A[10];
+ M[5][11] = M[11][5] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[6];
+ M[6][6] = ABi * A[6];
+ M[6][7] = M[7][6] = ABi * A[7];
+ M[6][8] = M[8][6] = ABi * A[8];
+ M[6][9] = M[9][6] = ABi * A[9];
+ M[6][10] = M[10][6] = ABi * A[10];
+ M[6][11] = M[11][6] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[7];
+ M[7][7] = ABi * A[7];
+ M[7][8] = M[8][7] = ABi * A[8];
+ M[7][9] = M[9][7] = ABi * A[9];
+ M[7][10] = M[10][7] = ABi * A[10];
+ M[7][11] = M[11][7] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[8];
+ M[8][8] = ABi * A[8];
+ M[8][9] = M[9][8] = ABi * A[9];
+ M[8][10] = M[10][8] = ABi * A[10];
+ M[8][11] = M[11][8] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[9];
+ M[9][9] = ABi * A[9];
+ M[9][10] = M[10][9] = ABi * A[10];
+ M[9][11] = M[11][9] = ABi * A[11];
+ }
+ {
+ const Vector ABi = B * A[10];
+ M[10][10] = ABi * A[10];
+ M[10][11] = M[11][10] = ABi * A[11];
+ }
+ M[11][11] = (B * A[11]) * A[11];
}
+} // end of namespace TooN
diff --git a/make_transformcovariance.awk b/make_transformcovariance.awk
new file mode 100644
index 0000000..5a22302
--- /dev/null
+++ b/make_transformcovariance.awk
@@ -0,0 +1,42 @@
+BEGIN{
+ N=12
+ print "// Mechanically generate code. Do not edit."
+ print "// modify make_transformcovariance.awk and run make generated.h"
+ print "namespace TooN {"
+ print ""
+ # 2x2 square across the board
+ print "// Generated for J*C*J^T, C symmetric"
+ print "template "
+ print "inline void transformCovariance(const Matrix<2,2,A1>& A, const Matrix<2,2,A2>& B, Matrix<2,2,A3>& M)"
+ print "{"
+ print "\tM = A*B*A.T();"
+ print "}"
+ # For each function
+ for(i=2; i <= N; i++)
+ {
+ print ""
+ print ""
+ print "// Generated for J*C*J^T, C symmetric"
+ print "template "
+ print "inline void transformCovariance(const Matrix<"i",N,A1>& A, const Matrix& B, Matrix<"i","i",A3>& M)"
+ print "{"
+ # For each chunk except the last
+ for(j=0; j ABi = B * A["j "];"
+ print "\t\t" "M["j"]["j"] = ABi * A["j"];"
+ # Lines within each chunk
+ for (k = j + 1; k < i; k++) {
+ print "\t\t" "M["j"]["k"] = M["k"]["j"] = ABi * A["k"];"
+ }
+ print "\t" "}"
+
+ }
+ # The last chunk
+ print "\t" "M["i-1"]["i-1"] = (B * A["i-1"]) * A["i-1"];"
+
+ # end the function
+ print "}"
+ }
+ print "} // end of namespace TooN"
+}
--
1.7.1