Skip to content

Commit 683a3cf

Browse files
authored
Merge pull request #3 from jrevels/jr/forward_diff_fix
update tests to work with ForwardDiff v0.2.0
2 parents cff4db7 + e3e5ea0 commit 683a3cf

File tree

5 files changed

+181
-182
lines changed

5 files changed

+181
-182
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ of how the output depends on the transformation parameters is accessed via
9292
`transform_deriv_params(trans, x)`. Users currently have to overload these methods,
9393
as no fall-back automatic differentiation is currently included. Alternatively,
9494
all the built-in types and transformations are compatible with automatic differentiation
95-
techniques, and can be parameterized by *DualNumbers*' `DualNumber` or *ForwardDiff*'s `GradientNumber`.
95+
techniques, and can be parameterized by *DualNumbers*' `DualNumber` or *ForwardDiff*'s `Dual`.
9696

9797
### Built-in transformations
9898

test/REQUIRE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
BaseTestNext
2-
ForwardDiff
2+
ForwardDiff 0.2

test/commontransformations.jl

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,18 @@
6464

6565
# Transform derivative
6666
x = Point(2.0,1.0)
67-
x_gn = Point(GradientNumber(2.0, (1.0,0.0)), GradientNumber(1.0, (0.0,1.0)))
67+
x_gn = Point(Dual(2.0, (1.0,0.0)), Dual(1.0, (0.0,1.0)))
6868
x2_gn = transform(trans, x_gn)
69-
m_gn = @fsa [x2_gn[1].partials.data[1] x2_gn[1].partials.data[2];
70-
x2_gn[2].partials.data[1] x2_gn[2].partials.data[2] ]
69+
m_gn = @fsa [partials(x2_gn[1], 1) partials(x2_gn[1], 2);
70+
partials(x2_gn[2], 1) partials(x2_gn[2], 2) ]
7171
m = transform_deriv(trans, x)
7272
@test m m_gn
7373

7474
# Transform parameter derivative
75-
trans_gn = Rotation2D(GradientNumber(1.0, (1.0)))
75+
trans_gn = Rotation2D(Dual(1.0, (1.0)))
7676
x = Point(2.0,1.0)
7777
x2_gn = transform(trans_gn, x)
78-
m_gn = Mat(x2_gn[1].partials.data[1], x2_gn[2].partials.data[1])
78+
m_gn = Mat(partials(x2_gn[1], 1), partials(x2_gn[2], 1))
7979
m = transform_deriv_params(trans, x)
8080
@test m m_gn
8181
end
@@ -117,21 +117,21 @@
117117
y = transform(trans, x)
118118
@test y == R * Vec(1.0, 2.0, 3.0)
119119

120-
x_gn = Point(GradientNumber(1.0,(1.,0.,0.)), GradientNumber(2.0,(0.,1.,0.)), GradientNumber(3.0,(0.,0.,1.)))
120+
x_gn = Point(Dual(1.0,(1.,0.,0.)), Dual(2.0,(0.,1.,0.)), Dual(3.0,(0.,0.,1.)))
121121
y_gn = transform(trans, x_gn)
122-
M_gn = Mat{3,3,Float64}(vcat(ntuple(i->[y_gn[i].partials.data[j] for j = 1:3].', 3)...))
122+
M_gn = Mat{3,3,Float64}(vcat(ntuple(i->[partials(y_gn[i], j) for j = 1:3].', 3)...))
123123
M = transform_deriv(trans, x)
124124
@test M M_gn
125125

126-
g11 = GradientNumber(R[1,1],(1.,0.,0.,0.,0.,0.,0.,0.,0.))
127-
g12 = GradientNumber(R[1,2],(0.,1.,0.,0.,0.,0.,0.,0.,0.))
128-
g13 = GradientNumber(R[1,3],(0.,0.,1.,0.,0.,0.,0.,0.,0.))
129-
g21 = GradientNumber(R[2,1],(0.,0.,0.,1.,0.,0.,0.,0.,0.))
130-
g22 = GradientNumber(R[2,2],(0.,0.,0.,0.,1.,0.,0.,0.,0.))
131-
g23 = GradientNumber(R[2,3],(0.,0.,0.,0.,0.,1.,0.,0.,0.))
132-
g31 = GradientNumber(R[3,1],(0.,0.,0.,0.,0.,0.,1.,0.,0.))
133-
g32 = GradientNumber(R[3,2],(0.,0.,0.,0.,0.,0.,0.,1.,0.))
134-
g33 = GradientNumber(R[3,3],(0.,0.,0.,0.,0.,0.,0.,0.,1.))
126+
g11 = Dual(R[1,1],(1.,0.,0.,0.,0.,0.,0.,0.,0.))
127+
g12 = Dual(R[1,2],(0.,1.,0.,0.,0.,0.,0.,0.,0.))
128+
g13 = Dual(R[1,3],(0.,0.,1.,0.,0.,0.,0.,0.,0.))
129+
g21 = Dual(R[2,1],(0.,0.,0.,1.,0.,0.,0.,0.,0.))
130+
g22 = Dual(R[2,2],(0.,0.,0.,0.,1.,0.,0.,0.,0.))
131+
g23 = Dual(R[2,3],(0.,0.,0.,0.,0.,1.,0.,0.,0.))
132+
g31 = Dual(R[3,1],(0.,0.,0.,0.,0.,0.,1.,0.,0.))
133+
g32 = Dual(R[3,2],(0.,0.,0.,0.,0.,0.,0.,1.,0.))
134+
g33 = Dual(R[3,3],(0.,0.,0.,0.,0.,0.,0.,0.,1.))
135135

136136
G = @fsa [g11 g12 g13;
137137
g21 g22 g23;
@@ -140,7 +140,7 @@
140140
trans_gn = Rotation(G)
141141
y_gn = transform(trans_gn, x)
142142

143-
M_gn = Mat{3,9,Float64}(vcat(ntuple(i->[y_gn[i].partials.data[j] for j = 1:9].', 3)...))
143+
M_gn = Mat{3,9,Float64}(vcat(ntuple(i->[partials(y_gn[i], j) for j = 1:9].', 3)...))
144144
M = transform_deriv_params(trans, x)
145145
@test M M_gn
146146
end
@@ -159,17 +159,17 @@
159159
y = transform(trans, x)
160160
@test y Point(3.439024390243902,-1.1463414634146332,0.9268292682926829)
161161

162-
x_gn = Point(GradientNumber(1.0,(1.,0.,0.)), GradientNumber(2.0,(0.,1.,0.)), GradientNumber(3.0,(0.,0.,1.)))
162+
x_gn = Point(Dual(1.0,(1.,0.,0.)), Dual(2.0,(0.,1.,0.)), Dual(3.0,(0.,0.,1.)))
163163
y_gn = transform(trans, x_gn)
164-
M_gn = Mat{3,3,Float64}(vcat(ntuple(i->[y_gn[i].partials.data[j] for j = 1:3].', 3)...))
164+
M_gn = Mat{3,3,Float64}(vcat(ntuple(i->[partials(y_gn[i], j) for j = 1:3].', 3)...))
165165
M = transform_deriv(trans, x)
166166
@test M M_gn
167167

168-
v_gn = [GradientNumber(v[1],(1.,0.,0.,0.)), GradientNumber(v[2],(0.,1.,0.,0.)), GradientNumber(v[3],(0.,0.,1.,0.)), GradientNumber(v[4],(0.,0.,0.,1.))]
168+
v_gn = [Dual(v[1],(1.,0.,0.,0.)), Dual(v[2],(0.,1.,0.,0.)), Dual(v[3],(0.,0.,1.,0.)), Dual(v[4],(0.,0.,0.,1.))]
169169
q_gn = Quaternion(v_gn[1],v_gn[2],v_gn[3],v_gn[4],true)
170170
trans_gn = Rotation(q_gn)
171171
y_gn = transform(trans_gn,x)
172-
M_gn = Mat{3,4,Float64}(vcat(ntuple(i->[y_gn[i].partials.data[j] for j = 1:4].', 3)...))
172+
M_gn = Mat{3,4,Float64}(vcat(ntuple(i->[partials(y_gn[i], j) for j = 1:4].', 3)...))
173173
M = transform_deriv_params(trans, x)
174174
# Project both to tangent plane of normalized quaternions (there seems to be a change in definition...)
175175
proj = Mat{4,4,Float64}(eye(4) - v*v')
@@ -190,9 +190,9 @@
190190
y = transform(trans, x)
191191
@test y == Point(0.9984766744283545,2.1054173473736495,2.92750100324502)
192192

193-
x_gn = Point(GradientNumber(1.0,(1.,0.,0.)), GradientNumber(2.0,(0.,1.,0.)), GradientNumber(3.0,(0.,0.,1.)))
193+
x_gn = Point(Dual(1.0,(1.,0.,0.)), Dual(2.0,(0.,1.,0.)), Dual(3.0,(0.,0.,1.)))
194194
y_gn = transform(trans, x_gn)
195-
M_gn = Mat{3,3,Float64}(vcat(ntuple(i->[y_gn[i].partials.data[j] for j = 1:3].', 3)...))
195+
M_gn = Mat{3,3,Float64}(vcat(ntuple(i->[partials(y_gn[i], j) for j = 1:3].', 3)...))
196196
M = transform_deriv(trans, x)
197197
@test M M_gn
198198

@@ -222,19 +222,19 @@
222222

223223
# Transform derivative
224224
x = Point(2.0,1.0,3.0)
225-
x_gn = Point(GradientNumber(2.0, (1.0,0.0,0.0)), GradientNumber(1.0, (0.0,1.0,0.0)), GradientNumber(3.0, (0.0,0.0,1.0)))
225+
x_gn = Point(Dual(2.0, (1.0,0.0,0.0)), Dual(1.0, (0.0,1.0,0.0)), Dual(3.0, (0.0,0.0,1.0)))
226226
x2_gn = transform(trans, x_gn)
227-
m_gn = @fsa [x2_gn[1].partials.data[1] x2_gn[1].partials.data[2] x2_gn[1].partials.data[3];
228-
x2_gn[2].partials.data[1] x2_gn[2].partials.data[2] x2_gn[2].partials.data[3];
229-
x2_gn[3].partials.data[1] x2_gn[3].partials.data[2] x2_gn[3].partials.data[3] ]
227+
m_gn = @fsa [partials(x2_gn[1], 1) partials(x2_gn[1], 2) partials(x2_gn[1], 3);
228+
partials(x2_gn[2], 1) partials(x2_gn[2], 2) partials(x2_gn[2], 3);
229+
partials(x2_gn[3], 1) partials(x2_gn[3], 2) partials(x2_gn[3], 3) ]
230230
m = transform_deriv(trans, x)
231231
@test m m_gn
232232

233233
# Transform parameter derivative
234-
trans_gn = RotationXY(GradientNumber(1.0, (1.0)))
234+
trans_gn = RotationXY(Dual(1.0, (1.0)))
235235
x = Point(2.0,1.0,3.0)
236236
x2_gn = transform(trans_gn, x)
237-
m_gn = Mat(x2_gn[1].partials.data[1], x2_gn[2].partials.data[1], x2_gn[3].partials.data[1])
237+
m_gn = Mat(partials(x2_gn[1], 1), partials(x2_gn[2], 1), partials(x2_gn[3], 1))
238238
m = transform_deriv_params(trans, x)
239239
@test m m_gn
240240

@@ -260,19 +260,19 @@
260260

261261
# Transform derivative
262262
x = Point(2.0,1.0,3.0)
263-
x_gn = Point(GradientNumber(2.0, (1.0,0.0,0.0)), GradientNumber(1.0, (0.0,1.0,0.0)), GradientNumber(3.0, (0.0,0.0,1.0)))
263+
x_gn = Point(Dual(2.0, (1.0,0.0,0.0)), Dual(1.0, (0.0,1.0,0.0)), Dual(3.0, (0.0,0.0,1.0)))
264264
x2_gn = transform(trans, x_gn)
265-
m_gn = @fsa [x2_gn[1].partials.data[1] x2_gn[1].partials.data[2] x2_gn[1].partials.data[3];
266-
x2_gn[2].partials.data[1] x2_gn[2].partials.data[2] x2_gn[2].partials.data[3];
267-
x2_gn[3].partials.data[1] x2_gn[3].partials.data[2] x2_gn[3].partials.data[3] ]
265+
m_gn = @fsa [partials(x2_gn[1], 1) partials(x2_gn[1], 2) partials(x2_gn[1], 3);
266+
partials(x2_gn[2], 1) partials(x2_gn[2], 2) partials(x2_gn[2], 3);
267+
partials(x2_gn[3], 1) partials(x2_gn[3], 2) partials(x2_gn[3], 3) ]
268268
m = transform_deriv(trans, x)
269269
@test m m_gn
270270

271271
# Transform parameter derivative
272-
trans_gn = RotationYZ(GradientNumber(1.0, (1.0)))
272+
trans_gn = RotationYZ(Dual(1.0, (1.0)))
273273
x = Point(2.0,1.0,3.0)
274274
x2_gn = transform(trans_gn, x)
275-
m_gn = Mat(x2_gn[1].partials.data[1], x2_gn[2].partials.data[1], x2_gn[3].partials.data[1])
275+
m_gn = Mat(partials(x2_gn[1], 1), partials(x2_gn[2], 1), partials(x2_gn[3], 1))
276276
m = transform_deriv_params(trans, x)
277277
@test m m_gn
278278

@@ -298,19 +298,19 @@
298298

299299
# Transform derivative
300300
x = Point(2.0,1.0,3.0)
301-
x_gn = Point(GradientNumber(2.0, (1.0,0.0,0.0)), GradientNumber(1.0, (0.0,1.0,0.0)), GradientNumber(3.0, (0.0,0.0,1.0)))
301+
x_gn = Point(Dual(2.0, (1.0,0.0,0.0)), Dual(1.0, (0.0,1.0,0.0)), Dual(3.0, (0.0,0.0,1.0)))
302302
x2_gn = transform(trans, x_gn)
303-
m_gn = @fsa [x2_gn[1].partials.data[1] x2_gn[1].partials.data[2] x2_gn[1].partials.data[3];
304-
x2_gn[2].partials.data[1] x2_gn[2].partials.data[2] x2_gn[2].partials.data[3];
305-
x2_gn[3].partials.data[1] x2_gn[3].partials.data[2] x2_gn[3].partials.data[3] ]
303+
m_gn = @fsa [partials(x2_gn[1], 1) partials(x2_gn[1], 2) partials(x2_gn[1], 3);
304+
partials(x2_gn[2], 1) partials(x2_gn[2], 2) partials(x2_gn[2], 3);
305+
partials(x2_gn[3], 1) partials(x2_gn[3], 2) partials(x2_gn[3], 3) ]
306306
m = transform_deriv(trans, x)
307307
@test m m_gn
308308

309309
# Transform parameter derivative
310-
trans_gn = RotationZX(GradientNumber(1.0, (1.0)))
310+
trans_gn = RotationZX(Dual(1.0, (1.0)))
311311
x = Point(2.0,1.0,3.0)
312312
x2_gn = transform(trans_gn, x)
313-
m_gn = Mat(x2_gn[1].partials.data[1], x2_gn[2].partials.data[1], x2_gn[3].partials.data[1])
313+
m_gn = Mat(partials(x2_gn[1], 1), partials(x2_gn[2], 1), partials(x2_gn[3], 1))
314314
m = transform_deriv_params(trans, x)
315315
@test m m_gn
316316
end
@@ -330,22 +330,22 @@
330330

331331
# Transform derivative
332332
x = Point(2.0,1.0,3.0)
333-
x_gn = Point(GradientNumber(2.0, (1.0,0.0,0.0)), GradientNumber(1.0, (0.0,1.0,0.0)), GradientNumber(3.0, (0.0,0.0,1.0)))
333+
x_gn = Point(Dual(2.0, (1.0,0.0,0.0)), Dual(1.0, (0.0,1.0,0.0)), Dual(3.0, (0.0,0.0,1.0)))
334334
x2_gn = transform(trans, x_gn)
335-
m_gn = @fsa [x2_gn[1].partials.data[1] x2_gn[1].partials.data[2] x2_gn[1].partials.data[3];
336-
x2_gn[2].partials.data[1] x2_gn[2].partials.data[2] x2_gn[2].partials.data[3];
337-
x2_gn[3].partials.data[1] x2_gn[3].partials.data[2] x2_gn[3].partials.data[3] ]
335+
m_gn = @fsa [partials(x2_gn[1], 1) partials(x2_gn[1], 2) partials(x2_gn[1], 3);
336+
partials(x2_gn[2], 1) partials(x2_gn[2], 2) partials(x2_gn[2], 3);
337+
partials(x2_gn[3], 1) partials(x2_gn[3], 2) partials(x2_gn[3], 3) ]
338338
m = transform_deriv(trans, x)
339339
@test m m_gn
340340

341341
# Transform parameter derivative
342342

343-
trans_gn = euler_rotation(GradientNumber(0.1, (1.0, 0.0, 0.0)), GradientNumber(0.2, (0.0, 1.0, 0.0)), GradientNumber(0.3, (0.0, 0.0, 1.0)))
343+
trans_gn = euler_rotation(Dual(0.1, (1.0, 0.0, 0.0)), Dual(0.2, (0.0, 1.0, 0.0)), Dual(0.3, (0.0, 0.0, 1.0)))
344344
x = Point(2.0,1.0,3.0)
345345
x2_gn = transform(trans_gn, x)
346-
m_gn = @fsa [x2_gn[1].partials.data[1] x2_gn[1].partials.data[2] x2_gn[1].partials.data[3];
347-
x2_gn[2].partials.data[1] x2_gn[2].partials.data[2] x2_gn[2].partials.data[3];
348-
x2_gn[3].partials.data[1] x2_gn[3].partials.data[2] x2_gn[3].partials.data[3] ]
346+
m_gn = @fsa [partials(x2_gn[1], 1) partials(x2_gn[1], 2) partials(x2_gn[1], 3);
347+
partials(x2_gn[2], 1) partials(x2_gn[2], 2) partials(x2_gn[2], 3);
348+
partials(x2_gn[3], 1) partials(x2_gn[3], 2) partials(x2_gn[3], 3)]
349349
m = transform_deriv_params(trans, x)
350350
@test m m_gn
351351

0 commit comments

Comments
 (0)