try/catch file loading

This commit is contained in:
kalmarek 2019-04-17 12:37:41 +02:00
parent 2a84d04edc
commit b5f12501f9
No known key found for this signature in database
GPG Key ID: 8BF1A3855328FC15
1 changed files with 22 additions and 13 deletions

View File

@ -79,12 +79,14 @@ end
############################################################################### ###############################################################################
function warmstart(sett::Settings) function warmstart(sett::Settings)
if sett.warmstart && isfile(filename(sett, :warmstart)) try
ws = load(filename(sett, :warmstart), "warmstart") ws = load(filename(sett, :warmstart), "warmstart")
else @info "Loaded $(filename(sett, :warmstart))."
ws = nothing return ws
catch
@info "Couldn't load $(filename(sett, :warmstart))."
return nothing
end end
return ws
end end
function approximate_by_SOS(sett::Naive, function approximate_by_SOS(sett::Naive,
@ -124,12 +126,17 @@ function approximate_by_SOS(sett::Symmetrized,
isdir(fullpath(sett)) || mkpath(fullpath(sett)) isdir(fullpath(sett)) || mkpath(fullpath(sett))
if !isfile(filename(sett, :OrbitData)) orbit_data = try
orbit_data = load(filename(sett, :OrbitData), "OrbitData")
@info "Loaded Orbit Data"
orbit_data
catch
isdefined(parent(orderunit), :basis) || throw("You need to define basis of Group Ring to compute orbit decomposition!") isdefined(parent(orderunit), :basis) || throw("You need to define basis of Group Ring to compute orbit decomposition!")
orbit_data = OrbitData(parent(orderunit), sett.autS) orbit_data = OrbitData(parent(orderunit), sett.autS)
save(filename(sett, :OrbitData), "OrbitData", orbit_data) save(filename(sett, :OrbitData), "OrbitData", orbit_data)
orbit_data
end end
orbit_data = load(filename(sett, :OrbitData), "OrbitData")
orbit_data = decimate(orbit_data) orbit_data = decimate(orbit_data)
@info "Creating SDP problem..." @info "Creating SDP problem..."
@ -267,25 +274,27 @@ function spectral_gap(sett::Settings)
fp = PropertyT.fullpath(sett) fp = PropertyT.fullpath(sett)
isdir(fp) || mkpath(fp) isdir(fp) || mkpath(fp)
if isfile(filename(sett,)) Δ = try
# cached
@info "Loading precomputed Δ..." @info "Loading precomputed Δ..."
Δ = loadGRElem(filename(sett,), sett.G) loadGRElem(filename(sett,), sett.G)
else catch
# compute # compute
Δ = Laplacian(sett.S, sett.radius) Δ = Laplacian(sett.S, sett.radius)
saveGRElem(filename(sett, ), Δ) saveGRElem(filename(sett, ), Δ)
Δ
end end
if !sett.warmstart && isfile(filename(sett, :solution)) λ, P = try
λ, P = load(filename(sett, :solution), "λ", "P") sett.warmstart && error()
else load(filename(sett, :solution), "λ", "P")
catch
λ, P = approximate_by_SOS(sett, Δ^2, Δ; λ, P = approximate_by_SOS(sett, Δ^2, Δ;
solverlog=filename(sett, :solverlog)) solverlog=filename(sett, :solverlog))
save(filename(sett, :solution), "λ", λ, "P", P) save(filename(sett, :solution), "λ", λ, "P", P)
λ < 0 && @warn "Solver did not produce a valid solution!" λ < 0 && @warn "Solver did not produce a valid solution!"
λ, P
end end
info_strs = ["Numerical metrics of matrix solution:", info_strs = ["Numerical metrics of matrix solution:",