From 762df45e646880dabff3f0ec3c93a45515ccbc5f Mon Sep 17 00:00:00 2001
From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk>
Date: Wed, 21 Feb 2024 15:50:55 +0000
Subject: [PATCH] Fix printing of namedtuples

---
 src/printing.jl | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/printing.jl b/src/printing.jl
index 95eebcd..6162460 100644
--- a/src/printing.jl
+++ b/src/printing.jl
@@ -6,13 +6,13 @@ import ..Variables: VariableType, variables, AbstractBlock, VariableNotAvailable
 
 function _robust_value(possible_number::VariableType)
     try
-        return value(possible_number)
+        return round(value(possible_number), sigdigits=3)
     catch
         return nothing
     end
 end
 
-function _robust_value(possible_vector::AbstractVector) 
+function _robust_value(possible_vector::AbstractArray) 
     result = _robust_value.(possible_vector)
     if any(isnothing.(result))
         return nothing
@@ -21,6 +21,7 @@ function _robust_value(possible_vector::AbstractVector)
 end
 
 _robust_value(possible_tuple::Tuple) = _robust_value([possible_tuple...])
+_robust_value(possible_tuple::NamedTuple) = NamedTuple(k => _robust_value(v) for (k, v) in pairs(possible_tuple))
 
 
 function Base.show(io::IO, block::AbstractBlock)
@@ -36,7 +37,8 @@ function Base.show(io::IO, block::AbstractBlock)
         end
         if (
             ft <: Union{Nothing, AbstractBlock} ||
-            (ft <: AbstractVector && eltype(ft) <: AbstractBlock)
+            (ft <: AbstractVector && eltype(ft) <: AbstractBlock) ||
+            (ft <: AbstractVector && eltype(ft) <: Pair)
         )
             continue
         end
@@ -53,12 +55,7 @@ function Base.show(io::IO, block::AbstractBlock)
             if isnothing(numeric_value)
                 continue
             end
-            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))=$(numeric_value), ")
         catch e
             if e isa VariableNotAvailable
                 continue
-- 
GitLab