From 221de732f248f08d0bb9d3d26d408c336792c971 Mon Sep 17 00:00:00 2001
From: Wouter Nuijten <wouternuijten@gmail.com>
Date: Fri, 12 Apr 2024 14:21:03 +0200
Subject: [PATCH 1/2] new print of constraints

---
 .../variational_constraints_engine.jl         | 28 ++++++++++++++++---
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/plugins/variational_constraints/variational_constraints_engine.jl b/src/plugins/variational_constraints/variational_constraints_engine.jl
index 895d109a..6d1c6bc6 100644
--- a/src/plugins/variational_constraints/variational_constraints_engine.jl
+++ b/src/plugins/variational_constraints/variational_constraints_engine.jl
@@ -214,6 +214,13 @@ function Base.show(io::IO, constraint::FactorizationConstraint{V, F} where {V, F
     print(io, join(getconstraint(constraint), ""))
 end
 
+function Base.show(io::IO, constraint::FactorizationConstraint{V, F} where {V, F})
+    print(io, "q(")
+    print(io, join(getvariables(constraint), ", "))
+    print(io, ") = ")
+    print(io, getconstraint(constraint))
+end
+
 """
 A `MarginalFormConstraint` represents a single functional form constraint in a variational marginal constraint specification. We use type parametrization
 to dispatch on different types of constraints, for example `q(x, y) :: MvNormal` should be treated different from `q(x) :: Normal`.
@@ -263,7 +270,6 @@ end
 GeneralSubModelConstraints(fform::Function) = GeneralSubModelConstraints(fform, Constraints())
 
 fform(c::GeneralSubModelConstraints) = c.fform
-Base.show(io::IO, constraint::GeneralSubModelConstraints) = print(io, "q(", getsubmodel(constraint), ") :: ", getconstraint(constraint))
 
 getsubmodel(c::GeneralSubModelConstraints) = c.fform
 getconstraint(c::GeneralSubModelConstraints) = c.constraints
@@ -282,7 +288,15 @@ end
 
 SpecificSubModelConstraints(submodel::FactorID) = SpecificSubModelConstraints(submodel, Constraints())
 
-Base.show(io::IO, constraint::SpecificSubModelConstraints) = print(io, "q(", getsubmodel(constraint), ") :: ", getconstraint(constraint))
+function Base.show(io::IO, constraint::Union{SpecificSubModelConstraints, GeneralSubModelConstraints})
+    print(
+        IOContext(io, (:indent => get(io, :indent, 0) + 2), (:head => false)),
+        "q(",
+        getsubmodel(constraint),
+        ") = ",
+        getconstraint(constraint)
+    )
+end
 
 getsubmodel(c::SpecificSubModelConstraints) = c.submodel
 getconstraint(c::SpecificSubModelConstraints) = c.constraints
@@ -325,9 +339,15 @@ Constraints(constraints::Vector) = begin
 end
 
 function Base.show(io::IO, c::Constraints)
-    print(io, "Constraints: \n")
+    indent = get(io, :indent, 1)
+    head = get(io, :head, true)
+    if head
+        print(io, "Constraints: \n")
+    else
+        print(io, "\n")
+    end
     for constraint in getconstraints(c)
-        print(io, "    ")
+        print(io, "  "^indent)
         print(io, constraint)
         print(io, "\n")
     end

From b5d7ea7a48720a246bed4514a5d83e847808e63f Mon Sep 17 00:00:00 2001
From: Wouter Nuijten <wouternuijten@gmail.com>
Date: Fri, 12 Apr 2024 14:28:48 +0200
Subject: [PATCH 2/2] Update meta printing

---
 src/plugins/meta/meta_engine.jl | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/plugins/meta/meta_engine.jl b/src/plugins/meta/meta_engine.jl
index 73b1ed00..7e4e7e35 100644
--- a/src/plugins/meta/meta_engine.jl
+++ b/src/plugins/meta/meta_engine.jl
@@ -39,6 +39,26 @@ struct MetaSpecification
     submodel_meta::Vector
 end
 
+function Base.show(io::IO, c::MetaSpecification)
+    indent = get(io, :indent, 1)
+    head = get(io, :head, true)
+    if head
+        print(io, "Meta: \n")
+    else
+        print(io, "\n")
+    end
+    for meta in getmetaobjects(c)
+        print(io, "  "^indent)
+        print(io, meta)
+        print(io, "\n")
+    end
+    for submodel in getsubmodelmeta(c)
+        print(io, "  "^indent)
+        print(io, submodel)
+        print(io, "\n")
+    end
+end
+
 getmetaobjects(m::MetaSpecification) = m.meta_objects
 getsubmodelmeta(m::MetaSpecification) = m.submodel_meta
 getspecificsubmodelmeta(m::MetaSpecification) = filter(m -> is_specificsubmodelmeta(m), getsubmodelmeta(m))
@@ -76,6 +96,16 @@ getkey(m::GeneralSubModelMeta) = getsubmodel(m)
 
 const SubModelMeta = Union{GeneralSubModelMeta, SpecificSubModelMeta}
 
+function Base.show(io::IO, constraint::SubModelMeta)
+    print(
+        IOContext(io, (:indent => get(io, :indent, 0) + 2), (:head => false)),
+        "Meta for submodel ",
+        getsubmodel(constraint),
+        " = ",
+        getmetaobjects(constraint)
+    )
+end
+
 MetaSpecification() = MetaSpecification(Vector{MetaObject}(), Vector{SubModelMeta}())
 
 Base.push!(m::MetaSpecification, o::MetaObject) = push!(m.meta_objects, o)