code: def compile(self, model):
          
  
          log = SensorLog(InMemoryStorageEngine(model), model)
          self.sensor_graph = SensorGraph(log, model)
  
          allocator = StreamAllocator(self.sensor_graph, model)
  
          self._scope_stack = []
  
          # Create a root scope
          root = RootScope(self.sensor_graph, allocator)
          self._scope_stack.append(root)
  
          for statement in self.statements:
              statement.execute(self.sensor_graph, self._scope_stack)
  
          self.sensor_graph.initialize_remaining_constants()
          self.sensor_graph.sort_nodes()
docs: Compile this file into a SensorGraph.
  
          You must have preivously called parse_file to parse a
          sensor graph file into statements that are then executed
          by this command to build a sensor graph.
  
          The results are stored in self.sensor_graph and can be
          inspected before running optimization passes.
  
          Args:
              model (DeviceModel): The device model that we should compile
                  this sensor graph for.