code: def expand_families(self, stmts):
          
          new_stmts = []
          for stmt in stmts:
              # Put together the lists of families, with their members. E.g.,
              # for a statement involving RAF and MEK, should return a list of
              # tuples like [(BRAF, RAF1, ARAF), (MAP2K1, MAP2K2)]
              families_list = []
              for ag in stmt.agent_list():
                  ag_children = self.get_children(ag)
                  # If the agent has no children, then we use the agent itself
                  if len(ag_children) == 0:
                      families_list.append([ag])
                  # Otherwise, we add the tuple of namespaces/IDs for the children
                  else:
                      families_list.append(ag_children)
              # Now, put together new statements frmo the cross product of the
              # expanded family members
              for ag_combo in itertools.product(*families_list):
                  # Create new agents based on the namespaces/IDs, with
                  # appropriate name and db_refs entries
                  child_agents = []
                  for ag_entry in ag_combo:
                      # If we got an agent, or None, that means there were no
                      # children; so we use the original agent rather than
                      # construct a new agent
                      if ag_entry is None or isinstance(ag_entry, Agent):
                          new_agent = ag_entry
                      # Otherwise, create a new agent from the ns/ID
                      elif isinstance(ag_entry, tuple):
                          # FIXME FIXME FIXME
                          # This doesn't reproduce agent state from the original
                          # family-level statements!
                          ag_ns, ag_id = ag_entry
                          new_agent = _agent_from_ns_id(ag_ns, ag_id)
                      else:
                          raise Exception('Unrecognized agent entry type.')
                      # Add agent to our list of child agents
                      child_agents.append(new_agent)
                  # Create a copy of the statement
                  new_stmt = deepcopy(stmt)
                  # Replace the agents in the statement with the newly-created
                  # child agents
                  new_stmt.set_agent_list(child_agents)
                  # Add to list
                  new_stmts.append(new_stmt)
          return new_stmts
docs: Generate statements by expanding members of families and complexes.