diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..a785a7d6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,8 @@ +\## \[Unreleased] + + + +\### Fixed + +\- Fixed `Colon()` not working in the middle of indices for `NodeLabel` getindex (\[#303](https://github.com/ReactiveBayes/GraphPPL.jl/pull/303)) + diff --git a/src/graph_engine.jl b/src/graph_engine.jl index f9961354..d16a83af 100644 --- a/src/graph_engine.jl +++ b/src/graph_engine.jl @@ -254,6 +254,7 @@ end Base.length(label::NodeLabel) = 1 Base.size(label::NodeLabel) = () Base.getindex(label::NodeLabel, any) = label +Base.getindex(label::NodeLabel, i1, is...) = label Base.:(<)(left::NodeLabel, right::NodeLabel) = left.global_counter < right.global_counter Base.broadcastable(label::NodeLabel) = Ref(label) diff --git a/src/plugins/variational_constraints/variational_constraints_engine.jl b/src/plugins/variational_constraints/variational_constraints_engine.jl index 2bf81577..aa64413e 100644 --- a/src/plugins/variational_constraints/variational_constraints_engine.jl +++ b/src/plugins/variational_constraints/variational_constraints_engine.jl @@ -636,7 +636,7 @@ function materialize_constraints!(model::Model, node_label::NodeLabel, node_data if !is_valid_partition(constraint_set) error( - lazy"Factorization constraint set at node $node_label is not a valid constraint set. Please check your model definition and constraint specification. (Constraint set: $constraint_bitset)" + lazy"Factorization constraint set at node $node_label is not a valid constraint set. Please check your model definition and constraint specification. (Constraint set: $constraint_bitset)\n\nHint: A valid constraint set requires that each interface belongs to exactly one factorization group. In the constraint matrix, each column must have exactly one non-zero entry per group. Make sure all variables appearing in your model are included in your factorization constraint." ) end diff --git a/test/test_colon_index.jl b/test/test_colon_index.jl new file mode 100644 index 00000000..4c98b4a8 --- /dev/null +++ b/test/test_colon_index.jl @@ -0,0 +1,17 @@ +using Test +using GraphPPL +using Distributions + +@model function test_colon_bug(media) + for g in 1:2 + for i in 1:3 + media_effect[g, i] := media[g, :, i] + end + end +end + +@testset "Colon index in middle of indices" begin + media_data = rand(2, 5, 3) + model = create_model(test_colon_bug(media = media_data)) + @test model !== nothing +end