From 2fcb153a9a4d367464cbbe7a075d22fa54df2ee6 Mon Sep 17 00:00:00 2001 From: louispt1 Date: Thu, 2 Jul 2026 16:41:48 +0200 Subject: [PATCH] Add MUSE method and spec --- app/models/gql/query_interface/lookup.rb | 4 +++ app/models/gql/runtime/functions/lookup.rb | 5 ++++ .../graphs/molecules/nodes/m_right_one.ad | 1 + .../graphs/molecules/nodes/m_right_two.ad | 1 + .../gql/runtime/functions/lookup_spec.rb | 30 +++++++++++++++++++ 5 files changed, 41 insertions(+) diff --git a/app/models/gql/query_interface/lookup.rb b/app/models/gql/query_interface/lookup.rb index 48f4aa88d..62c20c12d 100644 --- a/app/models/gql/query_interface/lookup.rb +++ b/app/models/gql/query_interface/lookup.rb @@ -68,6 +68,10 @@ def energy_use_nodes(keys) energy_graph_helper.use_nodes(keys) end + def molecule_use_nodes(keys) + molecule_graph_helper.use_nodes(keys) + end + def group_energy_nodes(keys) energy_graph_helper.group_nodes(keys) end diff --git a/app/models/gql/runtime/functions/lookup.rb b/app/models/gql/runtime/functions/lookup.rb index 501ae566f..f15c80ed4 100644 --- a/app/models/gql/runtime/functions/lookup.rb +++ b/app/models/gql/runtime/functions/lookup.rb @@ -143,6 +143,11 @@ def USE(*keys) scope.energy_use_nodes(keys) end + # Returns an Array of {Qernel::Node} for given molecule use. See USE. + def MUSE(*keys) + scope.molecule_use_nodes(keys) + end + # Returns an Array of {Qernel::Carrier} for given key(s). Returns carriers belonging to the # energy graph. # diff --git a/spec/fixtures/etsource/graphs/molecules/nodes/m_right_one.ad b/spec/fixtures/etsource/graphs/molecules/nodes/m_right_one.ad index e9fdc0737..b2102dcac 100644 --- a/spec/fixtures/etsource/graphs/molecules/nodes/m_right_one.ad +++ b/spec/fixtures/etsource/graphs/molecules/nodes/m_right_one.ad @@ -1,2 +1,3 @@ - output.co2 = 1.0 +- use = energetic ~ demand = 0.75 diff --git a/spec/fixtures/etsource/graphs/molecules/nodes/m_right_two.ad b/spec/fixtures/etsource/graphs/molecules/nodes/m_right_two.ad index 9067dc98a..211a9f6fa 100644 --- a/spec/fixtures/etsource/graphs/molecules/nodes/m_right_two.ad +++ b/spec/fixtures/etsource/graphs/molecules/nodes/m_right_two.ad @@ -1,2 +1,3 @@ - output.co2 = 1.0 +- use = non_energetic ~ demand = 0.25 diff --git a/spec/models/gql/runtime/functions/lookup_spec.rb b/spec/models/gql/runtime/functions/lookup_spec.rb index 22a5c8e97..af3eff0e2 100644 --- a/spec/models/gql/runtime/functions/lookup_spec.rb +++ b/spec/models/gql/runtime/functions/lookup_spec.rb @@ -74,5 +74,35 @@ module Gql::Runtime::Functions expect(result).to eq(10.0) end end + + # MUSE + # ---- + + describe 'MUSE(energetic)' do + it 'returns [Node(m_right_one)]' do + expect(result).to eq([molecule_graph.node(:m_right_one)]) + end + end + + describe 'MUSE(non_energetic)' do + it 'returns [Node(m_right_two)]' do + expect(result).to eq([molecule_graph.node(:m_right_two)]) + end + end + + describe 'MUSE(energetic, non_energetic)' do + it 'returns [Node(m_right_one), Node(m_right_two)]' do + expect(result).to eq([ + molecule_graph.node(:m_right_one), + molecule_graph.node(:m_right_two) + ]) + end + end + + describe 'MUSE(undefined)' do + it 'returns []' do + expect(result).to eq([]) + end + end end end