@@ -50,7 +50,16 @@ function linearsolve_forwarddiff_solve(prob::LinearProblem, alg, args...; kwargs
50
50
sol, partial_sols
51
51
end
52
52
53
- function __solve (prob:: DualAbstractLinearProblem , alg, args... ; kwargs... )
53
+ function SciMLBase. solve (prob:: DualAbstractLinearProblem , args... ; kwargs... )
54
+ return solve (prob, nothing , args... ; kwargs... )
55
+ end
56
+
57
+ function SciMLBase. solve (prob:: DualAbstractLinearProblem , :: Nothing , args... ;
58
+ assump = OperatorAssumptions (issquare (prob. A)), kwargs... )
59
+ return solve (prob, defaultalg (prob. A, prob. b, assump), args... ; kwargs... )
60
+ end
61
+
62
+ function SciMLBase. solve (prob:: DualAbstractLinearProblem , alg, args... ; kwargs... )
54
63
sol, partials = linearsolve_forwarddiff_solve (
55
64
prob, alg, args... ; kwargs...
56
65
)
@@ -59,10 +68,14 @@ function __solve(prob::DualAbstractLinearProblem, alg, args...; kwargs...)
59
68
dual_type = get_dual_type (prob. A)
60
69
elseif get_dual_type (prob. b) != = nothing
61
70
dual_type = get_dual_type (prob. b)
62
- return sol
63
71
end
64
72
65
- linearsolve_dual_solution (sol. u, partials, dual_type)
73
+ dual_sol = linearsolve_dual_solution (sol. u, partials, dual_type)
74
+
75
+ return SciMLBase. build_linear_solution (
76
+ alg, dual_sol, sol. resid, sol. cache; sol. retcode, sol. iters, sol. stats
77
+ )
78
+
66
79
67
80
end
68
81
0 commit comments