Skip to content

Commit dfc0bd4

Browse files
committed
fix some cases of get_gradient!
1 parent c242b1d commit dfc0bd4

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/plans/vectorial_plan.jl

+15-4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,15 @@ struct CoefficientVectorialType{B<:AbstractBasis} <: AbstractVectorialType
2828
basis::B
2929
end
3030

31+
function to_iterable_indices(A, i)
32+
idx = to_indices(A, (i,))[1]
33+
if idx isa Base.Slice
34+
return idx.indices
35+
else
36+
return idx
37+
end
38+
end
39+
3140
@doc raw"""
3241
ComponentVectorialType <: AbstractVectorialType
3342
@@ -316,8 +325,9 @@ function get_gradient!(
316325
) where {FT}
317326
n = _vgf_index_to_length(i, vgf.range_dimension)
318327
pM = PowerManifold(M, range, n)
319-
for (j, f) in zip(i, vgf.jacobian!![i])
320-
copyto!(M, X[pM, j], p, f(M, p))
328+
rep_size = representation_size(M)
329+
for (j, f) in zip(to_iterable_indices(vgf.jacobian!!, i), vgf.jacobian!![i])
330+
copyto!(M, _write(pM, rep_size, X, (j,)), f(M, p))
321331
end
322332
return X
323333
end
@@ -430,8 +440,9 @@ function get_gradient!(
430440
) where {FT}
431441
n = _vgf_index_to_length(i, vgf.range_dimension)
432442
pM = PowerManifold(M, range, n)
433-
for (j, f) in zip(i, vgf.jacobian!![i])
434-
f(M, X[pM, j], p)
443+
rep_size = representation_size(M)
444+
for (j, f) in zip(to_iterable_indices(vgf.jacobian!!, i), vgf.jacobian!![i])
445+
f(M, _write(pM, rep_size, X, (j,)), p)
435446
end
436447
return X
437448
end

0 commit comments

Comments
 (0)