Skip to content

Commit

Permalink
Use the infix operator for computing the timer
Browse files Browse the repository at this point in the history
  • Loading branch information
amontoison committed Oct 31, 2024
1 parent f82223c commit 98b07eb
Show file tree
Hide file tree
Showing 38 changed files with 169 additions and 169 deletions.
10 changes: 5 additions & 5 deletions src/bicgstab.jl
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ kwargs_bicgstab = (:c, :M, :N, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose,
if rNorm == 0
stats.niter = 0
stats.solved, stats.inconsistent = true, false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
solver.warm_start = false
return solver
Expand All @@ -181,13 +181,13 @@ kwargs_bicgstab = (:c, :M, :N, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose,

ε = atol + rtol * rNorm
(verbose > 0) && @printf(iostream, "%5s %7s %8s %8s %5s\n", "k", "‖rₖ‖", "|αₖ|", "|ωₖ|", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %8.1e %8.1e %.2fs\n", iter, rNorm, abs(α), abs(ω), ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %8.1e %8.1e %.2fs\n", iter, rNorm, abs(α), abs(ω), start_time |> ktimer)

next_ρ = kdot(n, c, r) # ρ₁ = ⟨r̅₀,r₀⟩
if next_ρ == 0
stats.niter = 0
stats.solved, stats.inconsistent = false, false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "Breakdown bᴴc = 0"
solver.warm_start = false
return solver
Expand Down Expand Up @@ -241,7 +241,7 @@ kwargs_bicgstab = (:c, :M, :N, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose,
breakdown === 0 || isnan(α))
timer = time_ns() - start_time
overtimed = timer > timemax_ns
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %8.1e %8.1e %.2fs\n", iter, rNorm, abs(α), abs(ω), ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %8.1e %8.1e %.2fs\n", iter, rNorm, abs(α), abs(ω), start_time |> ktimer)
end
(verbose > 0) && @printf(iostream, "\n")

Expand All @@ -260,7 +260,7 @@ kwargs_bicgstab = (:c, :M, :N, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose,
stats.niter = iter
stats.solved = solved
stats.inconsistent = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
10 changes: 5 additions & 5 deletions src/bilq.jl
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ kwargs_bilq = (:c, :transfer_to_bicg, :M, :N, :ldiv, :atol, :rtol, :itmax, :time
stats.niter = 0
stats.solved = true
stats.inconsistent = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
solver.warm_start = false
return solver
Expand All @@ -179,15 +179,15 @@ kwargs_bilq = (:c, :transfer_to_bicg, :M, :N, :ldiv, :atol, :rtol, :itmax, :time
stats.niter = 0
stats.solved = false
stats.inconsistent = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "Breakdown bᴴc = 0"
solver.warm_start = false
return solver
end

ε = atol + rtol * bNorm
(verbose > 0) && @printf(iostream, "%5s %8s %7s %5s\n", "k", "αₖ", "‖rₖ‖", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.1e %7.1e %.2fs\n", iter, cᴴb, bNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.1e %7.1e %.2fs\n", iter, cᴴb, bNorm, start_time |> ktimer)

βₖ = (abs(cᴴb)) # β₁γ₁ = cᴴ(b - Ax₀)
γₖ = cᴴb / βₖ # β₁γ₁ = cᴴ(b - Ax₀)
Expand Down Expand Up @@ -363,7 +363,7 @@ kwargs_bilq = (:c, :transfer_to_bicg, :M, :N, :ldiv, :atol, :rtol, :itmax, :time
breakdown = !solved_lq && !solved_cg && (pᴴq == 0)
timer = time_ns() - start_time
overtimed = timer > timemax_ns
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.1e %7.1e %.2fs\n", iter, αₖ, rNorm_lq, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.1e %7.1e %.2fs\n", iter, αₖ, rNorm_lq, start_time |> ktimer)
end
(verbose > 0) && @printf(iostream, "\n")

Expand Down Expand Up @@ -393,7 +393,7 @@ kwargs_bilq = (:c, :transfer_to_bicg, :M, :N, :ldiv, :atol, :rtol, :itmax, :time
stats.niter = iter
stats.solved = solved_lq || solved_cg
stats.inconsistent = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
12 changes: 6 additions & 6 deletions src/bilqr.jl
Original file line number Diff line number Diff line change
Expand Up @@ -158,15 +158,15 @@ kwargs_bilqr = (:transfer_to_bicg, :atol, :rtol, :itmax, :timemax, :verbose, :hi
εL = atol + rtol * bNorm
εQ = atol + rtol * cNorm
(verbose > 0) && @printf(iostream, "%5s %7s %7s %5s\n", "k", "‖rₖ‖", "‖sₖ‖", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %7.1e %.2fs\n", iter, bNorm, cNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %7.1e %.2fs\n", iter, bNorm, cNorm, start_time |> ktimer)

# Initialize the Lanczos biorthogonalization process.
cᴴb = kdot(n, s₀, r₀) # ⟨s₀,r₀⟩ = ⟨c - Aᴴy₀,b - Ax₀⟩
if cᴴb == 0
stats.niter = 0
stats.solved_primal = false
stats.solved_dual = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "Breakdown bᴴc = 0"
solver.warm_start = false
return solver
Expand Down Expand Up @@ -427,9 +427,9 @@ kwargs_bilqr = (:transfer_to_bicg, :atol, :rtol, :itmax, :timemax, :verbose, :hi
timer = time_ns() - start_time
overtimed = timer > timemax_ns

kdisplay(iter, verbose) && solved_primal && !solved_dual && @printf(iostream, "%5d %7s %7.1e %.2fs\n", iter, "✗ ✗ ✗ ✗", sNorm, ktimer(start_time))
kdisplay(iter, verbose) && !solved_primal && solved_dual && @printf(iostream, "%5d %7.1e %7s %.2fs\n", iter, rNorm_lq, "✗ ✗ ✗ ✗", ktimer(start_time))
kdisplay(iter, verbose) && !solved_primal && !solved_dual && @printf(iostream, "%5d %7.1e %7.1e %.2fs\n", iter, rNorm_lq, sNorm, ktimer(start_time))
kdisplay(iter, verbose) && solved_primal && !solved_dual && @printf(iostream, "%5d %7s %7.1e %.2fs\n", iter, "✗ ✗ ✗ ✗", sNorm, start_time |> ktimer)
kdisplay(iter, verbose) && !solved_primal && solved_dual && @printf(iostream, "%5d %7.1e %7s %.2fs\n", iter, rNorm_lq, "✗ ✗ ✗ ✗", start_time |> ktimer)
kdisplay(iter, verbose) && !solved_primal && !solved_dual && @printf(iostream, "%5d %7.1e %7.1e %.2fs\n", iter, rNorm_lq, sNorm, start_time |> ktimer)
end
(verbose > 0) && @printf(iostream, "\n")

Expand Down Expand Up @@ -468,7 +468,7 @@ kwargs_bilqr = (:transfer_to_bicg, :atol, :rtol, :itmax, :timemax, :verbose, :hi
stats.niter = iter
stats.solved_primal = solved_primal
stats.solved_dual = solved_dual
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
6 changes: 3 additions & 3 deletions src/block_gmres.jl
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ kwargs_block_gmres = (:M, :N, :ldiv, :restart, :reorthogonalization, :atol, :rto
inner_itmax = itmax

(verbose > 0) && @printf(iostream, "%5s %5s %7s %5s\n", "pass", "k", "‖Rₖ‖", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %5d %7.1e %.2fs\n", npass, iter, RNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %5d %7.1e %.2fs\n", npass, iter, RNorm, start_time |> ktimer)

# Stopping criterion
solved = RNorm ε
Expand Down Expand Up @@ -287,7 +287,7 @@ kwargs_block_gmres = (:M, :N, :ldiv, :restart, :reorthogonalization, :atol, :rto
inner_tired = restart ? inner_iter min(mem, inner_itmax) : inner_iter inner_itmax
timer = time_ns() - start_time
overtimed = timer > timemax_ns
kdisplay(iter+inner_iter, verbose) && @printf(iostream, "%5d %5d %7.1e %.2fs\n", npass, iter+inner_iter, RNorm, ktimer(start_time))
kdisplay(iter+inner_iter, verbose) && @printf(iostream, "%5d %5d %7.1e %.2fs\n", npass, iter+inner_iter, RNorm, start_time |> ktimer)

# Compute Vₖ₊₁.
if !(solved || inner_tired || user_requested_exit || overtimed)
Expand Down Expand Up @@ -343,7 +343,7 @@ kwargs_block_gmres = (:M, :N, :ldiv, :restart, :reorthogonalization, :atol, :rto
# Update stats
stats.niter = iter
stats.solved = solved
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
10 changes: 5 additions & 5 deletions src/car.jl
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ kwargs_car = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose, :history, :ca
if rNorm == 0
stats.niter = 0
stats.solved, stats.inconsistent = true, false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
solver.warm_start = false
return solver
Expand All @@ -175,7 +175,7 @@ kwargs_car = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose, :history, :ca

ε = atol + rtol * rNorm
(verbose > 0) && @printf(iostream, "%5s %7s %7s %7s %7s %5s\n", "k", "‖rₖ‖", "‖Arₖ‖", "α", "β", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %7.1e %7s %7s %.2fs\n", iter, rNorm, ArNorm, "✗ ✗ ✗ ✗", "✗ ✗ ✗ ✗", ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %7.1e %7s %7s %.2fs\n", iter, rNorm, ArNorm, "✗ ✗ ✗ ✗", "✗ ✗ ✗ ✗", start_time |> ktimer)

solved = rNorm ε
tired = iter itmax
Expand Down Expand Up @@ -220,8 +220,8 @@ kwargs_car = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose, :history, :ca
user_requested_exit = callback(solver) :: Bool
timer = time_ns() - start_time
overtimed = timer > timemax_ns
kdisplay(iter, verbose) && !solved && @printf(iostream, "%5d %7.1e %7.1e %7.1e %7.1e %.2fs\n", iter, rNorm, ArNorm, α, β, ktimer(start_time))
kdisplay(iter, verbose) && solved && @printf(iostream, "%5d %7.1e %7s %7.1e %7s %.2fs\n", iter, rNorm, "✗ ✗ ✗ ✗", α, "✗ ✗ ✗ ✗", ktimer(start_time))
kdisplay(iter, verbose) && !solved && @printf(iostream, "%5d %7.1e %7.1e %7.1e %7.1e %.2fs\n", iter, rNorm, ArNorm, α, β, start_time |> ktimer)
kdisplay(iter, verbose) && solved && @printf(iostream, "%5d %7.1e %7s %7.1e %7s %.2fs\n", iter, rNorm, "✗ ✗ ✗ ✗", α, "✗ ✗ ✗ ✗", start_time |> ktimer)
end
(verbose > 0) && @printf(iostream, "\n")

Expand All @@ -239,7 +239,7 @@ kwargs_car = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose, :history, :ca
stats.niter = iter
stats.solved = solved
stats.inconsistent = inconsistent
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
6 changes: 3 additions & 3 deletions src/cg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ kwargs_cg = (:M, :ldiv, :radius, :linesearch, :atol, :rtol, :itmax, :timemax, :v
if γ == 0
stats.niter = 0
stats.solved, stats.inconsistent = true, false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
solver.warm_start = false
return solver
Expand Down Expand Up @@ -199,7 +199,7 @@ kwargs_cg = (:M, :ldiv, :radius, :linesearch, :atol, :rtol, :itmax, :timemax, :v
σ = maximum(to_boundary(n, x, p, z, radius, M=M, ldiv=!ldiv))
end

kdisplay(iter, verbose) && @printf(iostream, " %8.1e %8.1e %8.1e %.2fs\n", pAp, α, σ, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, " %8.1e %8.1e %8.1e %.2fs\n", pAp, α, σ, start_time |> ktimer)

# Move along p from x to the boundary if either
# the next step leads outside the trust region or
Expand Down Expand Up @@ -257,7 +257,7 @@ kwargs_cg = (:M, :ldiv, :radius, :linesearch, :atol, :rtol, :itmax, :timemax, :v
stats.niter = iter
stats.solved = solved
stats.inconsistent = inconsistent
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
8 changes: 4 additions & 4 deletions src/cg_lanczos.jl
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ kwargs_cg_lanczos = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :timemax
stats.solved = true
stats.Anorm = zero(T)
stats.indefinite = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
solver.warm_start = false
return solver
Expand All @@ -172,7 +172,7 @@ kwargs_cg_lanczos = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :timemax
# Define stopping tolerance.
ε = atol + rtol * rNorm
(verbose > 0) && @printf(iostream, "%5s %7s %5s\n", "k", "‖rₖ‖", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %.2fs\n", iter, rNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %.2fs\n", iter, rNorm, start_time |> ktimer)

indefinite = false
solved = rNorm ε
Expand Down Expand Up @@ -216,7 +216,7 @@ kwargs_cg_lanczos = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :timemax
rNorm = abs(σ) # ‖rₖ₊₁‖_M = |σₖ₊₁| because rₖ₊₁ = σₖ₊₁ * vₖ₊₁ and ‖vₖ₊₁‖_M = 1
history && push!(rNorms, rNorm)
iter = iter + 1
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %.2fs\n", iter, rNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %7.1e %.2fs\n", iter, rNorm, start_time |> ktimer)

# Stopping conditions that do not depend on user input.
# This is to guard against tolerances that are unreasonably small.
Expand Down Expand Up @@ -247,7 +247,7 @@ kwargs_cg_lanczos = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :timemax
stats.solved = solved
stats.Anorm = sqrt(Anorm2)
stats.indefinite = indefinite
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
8 changes: 4 additions & 4 deletions src/cg_lanczos_shift.jl
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ kwargs_cg_lanczos_shift = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :t
if β == 0
stats.niter = 0
stats.solved = true
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
return solver
end
Expand Down Expand Up @@ -184,7 +184,7 @@ kwargs_cg_lanczos_shift = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :t

# Build format strings for printing.
(verbose > 0) && (fmt = Printf.Format("%5d" * repeat(" %8.1e", nshifts) * " %.2fs\n"))
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., ktimer(start_time))
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., start_time |> ktimer)

solved = !reduce(|, not_cv)
tired = iter itmax
Expand Down Expand Up @@ -248,7 +248,7 @@ kwargs_cg_lanczos_shift = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :t
not_cv[i] = check_curvature ? !(converged[i] || indefinite[i]) : !converged[i]
end
iter = iter + 1
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., ktimer(start_time))
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., start_time |> ktimer)

user_requested_exit = callback(solver) :: Bool
solved = !reduce(|, not_cv)
Expand All @@ -267,7 +267,7 @@ kwargs_cg_lanczos_shift = (:M, :ldiv, :check_curvature, :atol, :rtol, :itmax, :t
# Update stats. TODO: Estimate Anorm and Acond.
stats.niter = iter
stats.solved = solved
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
8 changes: 4 additions & 4 deletions src/cgls.jl
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ kwargs_cgls = (:M, :ldiv, :radius, :λ, :atol, :rtol, :itmax, :timemax, :verbose
if bNorm == 0
stats.niter = 0
stats.solved, stats.inconsistent = true, false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
history && push!(rNorms, zero(T))
history && push!(ArNorms, zero(T))
Expand All @@ -171,7 +171,7 @@ kwargs_cgls = (:M, :ldiv, :radius, :λ, :atol, :rtol, :itmax, :timemax, :verbose
history && push!(ArNorms, ArNorm)
ε = atol + rtol * ArNorm
(verbose > 0) && @printf(iostream, "%5s %8s %8s %5s\n", "k", "‖Aᴴr‖", "‖r‖", "timer")
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.2e %8.2e %.2fs\n", iter, ArNorm, rNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.2e %8.2e %.2fs\n", iter, ArNorm, rNorm, start_time |> ktimer)

status = "unknown"
on_boundary = false
Expand Down Expand Up @@ -208,7 +208,7 @@ kwargs_cgls = (:M, :ldiv, :radius, :λ, :atol, :rtol, :itmax, :timemax, :verbose
history && push!(rNorms, rNorm)
history && push!(ArNorms, ArNorm)
iter = iter + 1
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.2e %8.2e %.2fs\n", iter, ArNorm, rNorm, ktimer(start_time))
kdisplay(iter, verbose) && @printf(iostream, "%5d %8.2e %8.2e %.2fs\n", iter, ArNorm, rNorm, start_time |> ktimer)
user_requested_exit = callback(solver) :: Bool
solved = (ArNorm ε) || on_boundary
tired = iter itmax
Expand All @@ -228,7 +228,7 @@ kwargs_cgls = (:M, :ldiv, :radius, :λ, :atol, :rtol, :itmax, :timemax, :verbose
stats.niter = iter
stats.solved = solved
stats.inconsistent = false
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
8 changes: 4 additions & 4 deletions src/cgls_lanczos_shift.jl
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ kwargs_cgls_lanczos_shift = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose
if β == 0
stats.niter = 0
stats.solved = true
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = "x = 0 is a zero-residual solution"
return solver
end
Expand Down Expand Up @@ -186,7 +186,7 @@ kwargs_cgls_lanczos_shift = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose

# Build format strings for printing.
(verbose > 0) && (fmt = Printf.Format("%5d" * repeat(" %8.1e", nshifts) * " %.2fs\n"))
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., ktimer(start_time))
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., start_time |> ktimer)

solved = !reduce(|, not_cv) # ArNorm ≤ ε
tired = iter itmax
Expand Down Expand Up @@ -242,7 +242,7 @@ kwargs_cgls_lanczos_shift = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose
not_cv[i] = !converged[i]
end
iter = iter + 1
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., ktimer(start_time))
kdisplay(iter, verbose) && Printf.format(iostream, fmt, iter, rNorms..., start_time |> ktimer)

user_requested_exit = callback(solver) :: Bool
solved = !reduce(|, not_cv)
Expand All @@ -261,7 +261,7 @@ kwargs_cgls_lanczos_shift = (:M, :ldiv, :atol, :rtol, :itmax, :timemax, :verbose
# Update stats
stats.niter = iter
stats.solved = solved
stats.timer = ktimer(start_time)
stats.timer = start_time |> ktimer
stats.status = status
return solver
end
Expand Down
Loading

0 comments on commit 98b07eb

Please sign in to comment.