code: def execute(self, sensor_graph, scope_stack):
          
  
          if not isinstance(scope_stack[-1], RootScope):
              raise SensorGraphSemanticError("You may only declare metadata at global scope in a sensorgraph.", identifier=self.identifier, value=self.value)
  
          sensor_graph.add_metadata(self.identifier, self.value)
docs: Execute this statement on the sensor_graph given the current scope tree.
  
          This function will likely modify the sensor_graph and will possibly
          also add to or remove from the scope_tree.  If there are children nodes
          they will be called after execute_before and before execute_after,
          allowing block statements to sandwich their children in setup and teardown
          functions.
  
          Args:
              sensor_graph (SensorGraph): The sensor graph that we are building or
                  modifying
              scope_stack (list(Scope)): A stack of nested scopes that may influence
                  how this statement allocates clocks or other stream resources.