From 2a108798b87f4a3a3758e095c6e928ece0ee90a2 Mon Sep 17 00:00:00 2001
From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk>
Date: Sat, 27 Jan 2024 16:10:58 +0000
Subject: [PATCH] Add JuMP helper methods for BuildingBlocks

---
 src/building_blocks.jl | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/building_blocks.jl b/src/building_blocks.jl
index 715092b..cb23eb7 100644
--- a/src/building_blocks.jl
+++ b/src/building_blocks.jl
@@ -1,5 +1,5 @@
 module BuildingBlocks
-import JuMP: has_values, GenericVariableRef, value, Model, @constraint, @objective, owner_model, objective_function
+import JuMP: has_values, GenericVariableRef, value, Model, @constraint, @objective, owner_model, objective_function, optimize!, AbstractJuMPScalar
 import Printf: @sprintf
 import ..Scanners: Scanner
 import ..Variables: variables, start_time, duration, end_time, gradient_strength, slew_rate
@@ -138,4 +138,20 @@ function match_blocks!(block1::BuildingBlock, block2::BuildingBlock)
     match_blocks!(block1, block2, property_list)
 end
 
+
+optimize!(bb::BuildingBlock) = optimize!(owner_model(bb))
+function owner_model(bb::BuildingBlock)
+    if hasproperty(bb, :model)
+        return bb.model
+    else
+        for name in propertynames(bb)
+            value = getproperty(bb, name)
+            if value isa AbstractJuMPScalar
+                return owner_model(value)
+            end
+        end
+    end
+    error("Cannot find owner model of $bb")
+end
+
 end
\ No newline at end of file
-- 
GitLab