Interface Graph

All Superinterfaces:
Serializable, TetradSerializable
All Known Implementing Classes:
Dag, EdgeListGraph, LagGraph, SemGraph, TimeLagGraph

public interface Graph extends TetradSerializable
Implements a graph capable of storing edges of type N1 *-# N2 where * and # are endpoints of type Endpoint.

We stipulate by extending TetradSerializable that all graphs implementing this interface are serializable. This is because for Tetrad they must be serializable. (For randomUtil, in order to be able to cancelAll operations, they must be serializable.)

Version:
$Id: $Id
Author:
josephramsey
See Also:
  • Field Details

    • serialVersionUID

      static final long serialVersionUID
      Constant serialVersionUID=23L
      See Also:
  • Method Details

    • addBidirectedEdge

      boolean addBidirectedEdge(Node node1, Node node2)
      Adds a bidirected edges <-> to the graph.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
    • addDirectedEdge

      boolean addDirectedEdge(Node node1, Node node2)
      Adds a directed edge --> to the graph.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
    • addUndirectedEdge

      boolean addUndirectedEdge(Node node1, Node node2)
      Adds an undirected edge --- to the graph.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
    • addNondirectedEdge

      boolean addNondirectedEdge(Node node1, Node node2)
      Adds a nondirected edges o-o to the graph.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
    • addPartiallyOrientedEdge

      boolean addPartiallyOrientedEdge(Node node1, Node node2)
      Adds a partially oriented edge o-> to the graph.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
    • addEdge

      boolean addEdge(Edge edge)
      Adds the specified edge to the graph, provided it is not already in the graph.
      Parameters:
      edge - a Edge object
      Returns:
      true if the edge was added, false if not.
    • addNode

      boolean addNode(Node node)
      Adds a node to the graph. Precondition: The proposed name of the node cannot already be used by any other node in the same graph.
      Parameters:
      node - a Node object
      Returns:
      true if nodes were added, false if not.
    • addPropertyChangeListener

      void addPropertyChangeListener(PropertyChangeListener e)
      Adds a PropertyChangeListener to the graph.
      Parameters:
      e - a PropertyChangeListener object
    • clear

      void clear()
      Removes all nodes (and therefore all edges) from the graph.
    • containsEdge

      boolean containsEdge(Edge edge)
      Determines whether this graph contains the given edge.
      Parameters:
      edge - a Edge object
      Returns:
      true iff the graph contain 'edge'.
    • containsNode

      boolean containsNode(Node node)
      Determines whether this graph contains the given node.
      Parameters:
      node - a Node object
      Returns:
      true iff the graph contains 'node'.
    • equals

      boolean equals(Object o)
      Determines whether this graph is equal to some other graph, in the sense that they contain the same nodes and the sets of edges defined over these nodes in the two graphs are isomorphic typewise. That is, if node A and B exist in both graphs, and if there are, e.g., three edges between A and B in the first graph, two of which are directed edges and one of which is an undirected edge, then in the second graph there must also be two directed edges and one undirected edge between nodes A and B.
      Overrides:
      equals in class Object
      Parameters:
      o - a Object object
      Returns:
      a boolean
    • fullyConnect

      void fullyConnect(Endpoint endpoint)
      Removes all edges from the graph and fully connects it using #-# edges, where # is the given endpoint.
      Parameters:
      endpoint - a Endpoint object
    • reorientAllWith

      void reorientAllWith(Endpoint endpoint)
      Reorients all edges in the graph with the given endpoint.
      Parameters:
      endpoint - a Endpoint object
    • getAdjacentNodes

      List<Node> getAdjacentNodes(Node node)

      getAdjacentNodes.

      Parameters:
      node - a Node object
      Returns:
      a mutable list of nodes adjacent to the given node.
    • getChildren

      List<Node> getChildren(Node node)

      getChildren.

      Parameters:
      node - a Node object
      Returns:
      a mutable list of children for a node.
    • getDegree

      int getDegree()

      getDegree.

      Returns:
      the connectivity of the graph.
    • getEdge

      Edge getEdge(Node node1, Node node2)

      getEdge.

      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      the edge connecting node1 and node2, provided a unique such edge exists.
      Throws:
      UnsupportedOperationException - if the graph allows multiple edges between node pairs.
    • getDirectedEdge

      Edge getDirectedEdge(Node node1, Node node2)

      getDirectedEdge.

      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      the directed edge from node1 to node2, if there is one.
      Throws:
      UnsupportedOperationException - if the graph allows multiple edges between node pairs.
    • getEdges

      List<Edge> getEdges(Node node)

      getEdges.

      Parameters:
      node - a Node object
      Returns:
      the list of edges connected to a particular node. No particular ordering of the edges in the list is guaranteed.
    • getEdges

      List<Edge> getEdges(Node node1, Node node2)

      getEdges.

      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      the edges connecting node1 and node2.
    • getEdges

      Set<Edge> getEdges()

      getEdges.

      Returns:
      the set of edges in the graph. No particular ordering of the edges in the list is guaranteed.
    • getEndpoint

      Endpoint getEndpoint(Node node1, Node node2)

      getEndpoint.

      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      the endpoint along the edge from node to node2 at the node2 end.
    • getIndegree

      int getIndegree(Node node)

      getIndegree.

      Parameters:
      node - a Node object
      Returns:
      the number of arrow endpoints adjacent to a node.
    • getDegree

      int getDegree(Node node)

      getDegree.

      Parameters:
      node - a Node object
      Returns:
      the number of arrow endpoints adjacent to a node.
    • getNode

      Node getNode(String name)

      getNode.

      Parameters:
      name - a String object
      Returns:
      the node with the given string name. In case of accidental duplicates, the first node encountered with the given name is returned. In case no node exists with the given name, null is returned.
    • getNodes

      List<Node> getNodes()

      getNodes.

      Returns:
      the list of nodes for the graph.
    • setNodes

      void setNodes(List<Node> nodes)

      setNodes.

      Parameters:
      nodes - a List object
    • getNodeNames

      List<String> getNodeNames()

      getNodeNames.

      Returns:
      the names of the nodes, in the order of getNodes.
    • getNumEdges

      int getNumEdges()

      getNumEdges.

      Returns:
      the number of edges in the (entire) graph.
    • getNumEdges

      int getNumEdges(Node node)

      getNumEdges.

      Parameters:
      node - a Node object
      Returns:
      the number of edges in the graph which are connected to a particular node.
    • getNumNodes

      int getNumNodes()

      getNumNodes.

      Returns:
      the number of nodes in the graph.
    • getOutdegree

      int getOutdegree(Node node)

      getOutdegree.

      Parameters:
      node - a Node object
      Returns:
      the number of null endpoints adjacent to an edge.
    • getParents

      List<Node> getParents(Node node)

      getParents.

      Parameters:
      node - a Node object
      Returns:
      the list of parents for a node.
    • isAdjacentTo

      boolean isAdjacentTo(Node node1, Node node2)

      isAdjacentTo.

      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      true iff node1 is adjacent to node2 in the graph.
    • isChildOf

      boolean isChildOf(Node node1, Node node2)

      isChildOf.

      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      true iff node1 is a child of node2 in the graph.
    • isParentOf

      boolean isParentOf(Node node1, Node node2)
      Determines whether node1 is a parent of node2.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
    • isDefNoncollider

      boolean isDefNoncollider(Node node1, Node node2, Node node3)
      Added by ekorber, 2004/6/9.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      node3 - a Node object
      Returns:
      true if node 2 is a definite noncollider between 1 and 3
    • isDefCollider

      boolean isDefCollider(Node node1, Node node2, Node node3)
      Added by ekorber, 2004/6/9.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      node3 - a Node object
      Returns:
      true if node 2 is a definite collider between 1 and 3
    • isExogenous

      boolean isExogenous(Node node)

      isExogenous.

      Parameters:
      node - a Node object
      Returns:
      true iff the given node is exogenous in the graph.
    • getNodesInTo

      List<Node> getNodesInTo(Node node, Endpoint n)
      Nodes adjacent to the given node with the given proximal endpoint.
      Parameters:
      node - a Node object
      n - a Endpoint object
      Returns:
      a List object
    • getNodesOutTo

      List<Node> getNodesOutTo(Node node, Endpoint n)
      Nodes adjacent to the given node with the given distal endpoint.
      Parameters:
      node - a Node object
      n - a Endpoint object
      Returns:
      a List object
    • removeEdge

      boolean removeEdge(Edge edge)
      Removes the given edge from the graph.
      Parameters:
      edge - a Edge object
      Returns:
      true if the edge was removed, false if not.
    • removeEdge

      boolean removeEdge(Node node1, Node node2)
      Removes the edge connecting the two given nodes, provided there is exactly one such edge.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      a boolean
      Throws:
      UnsupportedOperationException - if multiple edges between node pairs are not supported.
    • removeEdges

      boolean removeEdges(Node node1, Node node2)
      Removes all edges connecting node A to node B. In most cases, this will remove at most one edge, but since multiple edges are permitted in some graph implementations, the number will in some cases be greater than one.
      Parameters:
      node1 - a Node object
      node2 - a Node object
      Returns:
      true if edges were removed, false if not.
    • removeEdges

      boolean removeEdges(Collection<Edge> edges)
      Iterates through the list and removes any permissible edges found. The order in which edges are added is the order in which they are presented in the iterator.
      Parameters:
      edges - a Collection object
      Returns:
      true if edges were added, false if not.
    • removeNode

      boolean removeNode(Node node)
      Removes a node from the graph.
      Parameters:
      node - a Node object
      Returns:
      true if the node was removed, false if not.
    • removeNodes

      boolean removeNodes(List<Node> nodes)
      Iterates through the list and removes any permissible nodes found. The order in which nodes are removed is the order in which they are presented in the iterator.
      Parameters:
      nodes - a List object
      Returns:
      true if nodes were added, false if not.
    • setEndpoint

      boolean setEndpoint(Node from, Node to, Endpoint endPoint)
      Sets the endpoint type at the 'to' end of the edge from 'from' to 'to' to the given endpoint. Note: NOT CONSTRAINT SAFE
      Parameters:
      from - a Node object
      to - a Node object
      endPoint - a Endpoint object
      Returns:
      a boolean
    • subgraph

      Graph subgraph(List<Node> nodes)
      Constructs and returns a subgraph consisting of a given subset of the nodes of this graph together with the edges between them.
      Parameters:
      nodes - a List object
      Returns:
      a Graph object
    • toString

      String toString()

      toString.

      Overrides:
      toString in class Object
      Returns:
      a string representation of the graph.
    • transferNodesAndEdges

      void transferNodesAndEdges(Graph graph) throws IllegalArgumentException
      Transfers nodes and edges from one graph to another. One way this is used is to change graph types. One constructs a new graph based on the old graph, and this method is called to transfer the nodes and edges of the old graph to the new graph.
      Parameters:
      graph - the graph from which nodes and edges are to be pilfered.
      Throws:
      IllegalArgumentException - This exception is thrown if adding some node.
    • transferAttributes

      void transferAttributes(Graph graph) throws IllegalArgumentException

      transferAttributes.

      Parameters:
      graph - a Graph object
      Throws:
      IllegalArgumentException - if any.
    • paths

      Paths paths()

      paths.

      Returns:
      a Paths object
    • isParameterizable

      boolean isParameterizable(Node node)

      isParameterizable.

      Parameters:
      node - a Node object
      Returns:
      true if the given node is parameterizable.
    • isTimeLagModel

      boolean isTimeLagModel()

      isTimeLagModel.

      Returns:
      true if this is a time lag model, in which case getTimeLagGraph() returns the graph.
    • getTimeLagGraph

      TimeLagGraph getTimeLagGraph()

      getTimeLagGraph.

      Returns:
      the underlying time lag model, if there is one; otherwise, returns null.
    • getSepset

      Set<Node> getSepset(Node n1, Node n2)

      getSepset.

      Parameters:
      n1 - a Node object
      n2 - a Node object
      Returns:
      a Set object
    • getAllAttributes

      Map<String,Object> getAllAttributes()

      getAllAttributes.

      Returns:
      a Map object
    • getAttribute

      Object getAttribute(String key)

      getAttribute.

      Parameters:
      key - a String object
      Returns:
      a Object object
    • removeAttribute

      void removeAttribute(String key)

      removeAttribute.

      Parameters:
      key - a String object
    • addAttribute

      void addAttribute(String key, Object value)

      addAttribute.

      Parameters:
      key - a String object
      value - a Object object
    • getUnderLines

      Set<Triple> getUnderLines()

      getUnderLines.

      Returns:
      a Set object
    • getDottedUnderlines

      Set<Triple> getDottedUnderlines()

      getDottedUnderlines.

      Returns:
      a Set object
    • getAmbiguousTriples

      Set<Triple> getAmbiguousTriples()

      getAmbiguousTriples.

      Returns:
      a Set object
    • setAmbiguousTriples

      void setAmbiguousTriples(Set<Triple> triples)

      setAmbiguousTriples.

      Parameters:
      triples - a Set object
    • isAmbiguousTriple

      boolean isAmbiguousTriple(Node x, Node y, Node z)
      States whether r-s-r is an underline triple or not.
      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
      Returns:
      a boolean
    • isUnderlineTriple

      boolean isUnderlineTriple(Node x, Node y, Node z)
      States whether r-s-r is an underline triple or not.
      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
      Returns:
      a boolean
    • addAmbiguousTriple

      void addAmbiguousTriple(Node x, Node y, Node z)

      addAmbiguousTriple.

      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
    • addUnderlineTriple

      void addUnderlineTriple(Node x, Node y, Node z)

      addUnderlineTriple.

      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
    • addDottedUnderlineTriple

      void addDottedUnderlineTriple(Node x, Node y, Node z)

      addDottedUnderlineTriple.

      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
    • removeAmbiguousTriple

      void removeAmbiguousTriple(Node x, Node y, Node z)

      removeAmbiguousTriple.

      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
    • removeUnderlineTriple

      void removeUnderlineTriple(Node x, Node y, Node z)

      removeUnderlineTriple.

      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
    • removeDottedUnderlineTriple

      void removeDottedUnderlineTriple(Node x, Node y, Node z)

      removeDottedUnderlineTriple.

      Parameters:
      x - a Node object
      y - a Node object
      z - a Node object
    • setUnderLineTriples

      void setUnderLineTriples(Set<Triple> triples)

      setUnderLineTriples.

      Parameters:
      triples - a Set object
    • setDottedUnderLineTriples

      void setDottedUnderLineTriples(Set<Triple> triples)

      setDottedUnderLineTriples.

      Parameters:
      triples - a Set object
    • removeTriplesNotInGraph

      void removeTriplesNotInGraph()

      removeTriplesNotInGraph.