Skip to content
Snippets Groups Projects
Verified Commit 4e90a823 authored by Michiel Cottaar's avatar Michiel Cottaar
Browse files

pretty print numeric values

parent 2056639f
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,7 @@ module BuildingBlocks ...@@ -2,7 +2,7 @@ module BuildingBlocks
import JuMP: has_values, value, Model, @constraint, @objective, owner_model, objective_function, optimize!, AbstractJuMPScalar import JuMP: has_values, value, Model, @constraint, @objective, owner_model, objective_function, optimize!, AbstractJuMPScalar
import Printf: @sprintf import Printf: @sprintf
import ..Scanners: Scanner import ..Scanners: Scanner
import ..Variables: variables, start_time, duration, end_time, gradient_strength, slew_rate, effective_time import ..Variables: variables, start_time, duration, end_time, gradient_strength, slew_rate, effective_time, VariableType
""" """
Parent type for all individual components out of which a sequence can be built. Parent type for all individual components out of which a sequence can be built.
...@@ -151,7 +151,7 @@ end ...@@ -151,7 +151,7 @@ end
Base.show(io::IO, block::BuildingBlock) = print(io, BuildingBlockPrinter(block, nothing, 0)) Base.show(io::IO, block::BuildingBlock) = print(io, BuildingBlockPrinter(block, nothing, 0))
function _robust_value(possible_number) function _robust_value(possible_number::VariableType)
try try
return value(possible_number) return value(possible_number)
catch catch
...@@ -159,6 +159,8 @@ function _robust_value(possible_number) ...@@ -159,6 +159,8 @@ function _robust_value(possible_number)
end end
end end
_robust_value(possible_vector::AbstractVector) = _robust_value.(possible_vector)
function Base.show(io::IO, printer::BuildingBlockPrinter) function Base.show(io::IO, printer::BuildingBlockPrinter)
block = printer.bb block = printer.bb
print(io, string(typeof(block)), "(") print(io, string(typeof(block)), "(")
...@@ -168,6 +170,7 @@ function Base.show(io::IO, printer::BuildingBlockPrinter) ...@@ -168,6 +170,7 @@ function Base.show(io::IO, printer::BuildingBlockPrinter)
print(io, "t=", @sprintf("%.3g", printer.start_time)) print(io, "t=", @sprintf("%.3g", printer.start_time))
dur = _robust_value(duration(block)) dur = _robust_value(duration(block))
@assert !(dur isa AbstractVector)
if !isnothing(dur) && !iszero(dur) if !isnothing(dur) && !iszero(dur)
print(io, "-", @sprintf("%.3g", printer.start_time + dur)) print(io, "-", @sprintf("%.3g", printer.start_time + dur))
printed_duration = true printed_duration = true
...@@ -176,7 +179,14 @@ function Base.show(io::IO, printer::BuildingBlockPrinter) ...@@ -176,7 +179,14 @@ function Base.show(io::IO, printer::BuildingBlockPrinter)
end end
for name in propertynames(block) for name in propertynames(block)
value = getproperty(block, name) value = getproperty(block, name)
if name in variable_names || value isa Model || value isa BuildingBlock || string(name)[1] == '_' if (
name in variable_names ||
value isa AbstractJuMPScalar ||
(value isa AbstractVector && eltype(value) isa AbstractJuMPScalar) ||
value isa Model ||
value isa BuildingBlock ||
string(name)[1] == '_'
)
continue continue
end end
print(io, name, "=", repr(value), ", ") print(io, name, "=", repr(value), ", ")
...@@ -190,7 +200,11 @@ function Base.show(io::IO, printer::BuildingBlockPrinter) ...@@ -190,7 +200,11 @@ function Base.show(io::IO, printer::BuildingBlockPrinter)
if isnothing(numeric_value) if isnothing(numeric_value)
continue continue
end end
printed_value = @sprintf("%.3g", numeric_value) if numeric_value isa AbstractVector
printed_value = "[" * join(map(v -> @sprintf("%.3g", v), numeric_value), ", ") * "]"
else
printed_value = @sprintf("%.3g", numeric_value)
end
print(io, "$(nameof(fn))=$(printed_value), ") print(io, "$(nameof(fn))=$(printed_value), ")
end end
print(io, ")") print(io, ")")
...@@ -199,13 +213,12 @@ function Base.show(io::IO, printer::BuildingBlockPrinter) ...@@ -199,13 +213,12 @@ function Base.show(io::IO, printer::BuildingBlockPrinter)
use_start_time = isnothing(printer.start_time) ? 0. : printer.start_time use_start_time = isnothing(printer.start_time) ? 0. : printer.start_time
print(io, ":") print(io, ":")
for (child_index, child_block) in get_children_blocks(block) for (child_index, child_block) in get_children_blocks(block)
print(io, child_index, ": ")
child_printer = BuildingBlockPrinter( child_printer = BuildingBlockPrinter(
child_block, child_index, child_block,
_robust_value(start_time(block, child_index) + use_start_time), _robust_value(start_time(block, child_index) + use_start_time),
printer.spaces + 2 printer.spaces + 2
) )
print(io, "\n", repeat(' ', printer.spaces), child_printer) print(io, "\n", repeat(' ', printer.spaces + 2), "- ", child_index, ": ", child_printer)
end end
end end
end end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment