class_docstr: The ModelGraph represents the network that is being processed by hls4ml.
  
  Args:
      config (dict):  The configuration dictionary
      layer_list (list(dict)):  The list contains a dictionary for each input layer
      inputs (list, optional):  The inputs to the model. If None, determined from layer_list
      outputs (list, optional):  The outputs to the model. If None, determined from layer_list
code: def _make_graph(self, layer_list):
      for layer in layer_list:
          kind = layer["class_name"]
          name = layer["name"]
          inputs = layer.get("inputs", [])
          outputs = layer.get("outputs", [])
          if kind in ["InputLayer", "Input"]:
              inputs = ["input"]
          elif len(inputs) == 0:
              inputs = [next(reversed(self.graph), "input")]
          if len(outputs) == 0:
              outputs = [name]
  
          self.graph[name] = self.make_node(
              kind, name, layer, inputs, outputs
          )
  
imports: import ctypes
  import os
  import platform
  from collections import OrderedDict
  import numpy
  import numpy.ctypeslib
  from hls4ml.backends import get_backend
  from hls4ml.model.flow import get_flow
  from hls4ml.model.layers import layer_map
  from hls4ml.model.optimizer import get_available_passes, optimize_model
label_desc: Use image node_id 3 for calling the ModelGraph obj's underlying member method code with example usage: obj._make_graph(layer_list) without return types