code: def make_model(self):
          
          # Assemble in two stages.
          # First, create the nodes of the graph
          for stmt in self.statements:
              # Skip SelfModification (self loops) -- has one node
              if isinstance(stmt, SelfModification) or \
                 isinstance(stmt, Translocation) or \
                 isinstance(stmt, ActiveForm):
                  continue
              # Special handling for Associations -- more than 1 node and members
              # are Events
              elif isinstance(stmt, Association):
                  for m in stmt.members:
                      self._add_node(m.concept)
              # Special handling for Complexes -- more than 1 node
              elif isinstance(stmt, Complex):
                  for m in stmt.members:
                      self._add_node(m)
              # All else should have exactly 2 nodes
              elif all([ag is not None for ag in stmt.agent_list()]):
                  if not len(stmt.agent_list()) == 2:
                      logger.warning(
                          '%s has less/more than the expected 2 agents.' % stmt)
                      continue
                  for ag in stmt.agent_list():
                      self._add_node(ag)
          # Second, create the edges of the graph
          for stmt in self.statements:
              # Skip SelfModification (self loops) -- has one node
              if isinstance(stmt, SelfModification) or \
                 isinstance(stmt, Translocation) or \
                 isinstance(stmt, ActiveForm):
                  continue
              elif isinstance(stmt, Association):
                  self._add_complex(stmt.members, is_association=True)
              elif isinstance(stmt, Complex):
                  self._add_complex(stmt.members)
              elif all([ag is not None for ag in stmt.agent_list()]):
                  self._add_stmt_edge(stmt)
docs: Assemble the graph from the assembler's list of INDRA Statements.