Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,15 @@ version = "0.3.42"
[deps]
Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
RuntimeGeneratedFunctions = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47"
StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"

[weakdeps]
PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"

[extensions]
SymbolicIndexingInterfacePrettyTablesExt = "PrettyTables"

[compat]
Accessors = "0.1.36"
Aqua = "0.8"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
module SymbolicIndexingInterfacePrettyTablesExt

__precompile__(false)

using SymbolicIndexingInterface
using SymbolicIndexingInterface: ParameterIndexingProxy, parameter_symbols, symbolic_type,
ArraySymbolic, getp
using PrettyTables

# Override the fallback implementation with the PrettyTables version
function SymbolicIndexingInterface.show_params(
io::IO, pip::ParameterIndexingProxy; num_rows = 20,
show_all = false, scalarize = true, kwargs...)
params = Any[]
vals = Any[]
for p in parameter_symbols(pip.wrapped)
if symbolic_type(p) === ArraySymbolic() && scalarize
val = getp(pip.wrapped, p)(pip.wrapped)
for (_p, _v) in zip(collect(p), val)
push!(params, _p)
push!(vals, _v)
end
else
push!(params, p)
val = getp(pip.wrapped, p)(pip.wrapped)
push!(vals, val)
end
end

num_shown = if show_all
length(params)
else
if num_rows > length(params)
length(params)
else
num_rows
end
end

pretty_table(io, [params[1:num_shown] vals[1:num_shown]];
header = ["Parameter", "Value"],
kwargs...)

if num_shown < length(params)
println(io,
"$num_shown of $(length(params)) params shown. To show all the parameters, call `show_params(io, ps, show_all = true)`. Adjust the number of rows with the num_rows kwarg. Consult `show_params` docstring for more options.")
end
end

end
1 change: 0 additions & 1 deletion src/SymbolicIndexingInterface.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ using RuntimeGeneratedFunctions
import StaticArraysCore: MArray, similar_type
import ArrayInterface
using Accessors: @reset
using PrettyTables # for pretty printing

RuntimeGeneratedFunctions.init(@__MODULE__)

Expand Down
18 changes: 13 additions & 5 deletions src/parameter_indexing_proxy.jl
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@ Method for customizing the table output. Keyword args:
- num_rows
- show_all: whether to show all parameters. Overrides `num_rows`.
- scalarize: whether to scalarize array symbolics in the table output.
- kwargs... are passed to the pretty_table call.
- kwargs... are passed to the pretty_table call (if PrettyTables is loaded).
"""
function show_params(io::IO, pip::ParameterIndexingProxy; num_rows = 20,
show_params(io, pip; kwargs...) = _show_params(io, pip; kwargs...)

# Fallback implementation when PrettyTables is not loaded
function _show_params(io::IO, pip::ParameterIndexingProxy; num_rows = 20,
show_all = false, scalarize = true, kwargs...)
params = Any[]
vals = Any[]
Expand Down Expand Up @@ -59,9 +62,14 @@ function show_params(io::IO, pip::ParameterIndexingProxy; num_rows = 20,
end
end

pretty_table(io, [params[1:num_shown] vals[1:num_shown]];
header = ["Parameter", "Value"],
kwargs...)
# Fallback implementation without PrettyTables
println(io, "Parameter Indexing Proxy")
println(io, "=" ^ 50)
println(io, "Parameter | Value")
println(io, "-" ^ 50)
for i in 1:num_shown
println(io, rpad(string(params[i]), 24) * " | " * string(vals[i]))
end

if num_shown < length(params)
println(io,
Expand Down
Loading