      graph)))
 
 (defn undirected-graph
+  "Returns an edu.uci.ic.jung.graph.UndirectedSparseGraph. If a list or vector
+  of edges is passed, returning graph including the edges."
   ([] (UndirectedSparseGraph.))
   ([edges]
    (let [graph (UndirectedSparseGraph.)]

;; ------------

(defn add-node!
  [^Hypergraph graph node]
  (.addVertex graph node))

(defn remove-node!
  [^Hypergraph graph node]
  (.removeVertex graph node))

(defn contains-node?
  [^Hypergraph graph node]
  (.containsVertex graph node))

(defn add-edge!
  [^Graph graph edge]
  (let [[a b] edge]
    (.addEdge graph (edge->j-edge edge) a b)))

(defn remove-edge!
  [^Graph graph edge]
  (.removeEdge graph (edge->j-edge edge)))

(defn contains-edge?
  [^Hypergraph graph edge]
  (.containsEdge graph (edge->j-edge edge)))

(defn nodes
  [^Graph graph]
  (set (.getVertices graph)))

(defn edges
  [^Graph graph]
  (map (partial j-edge->edge graph) (.getEdges graph)))

(defn in-edges
  [^Graph graph node]
  (map (partial j-edge->edge graph) (.getInEdges graph node)))

(defn degree
  [^Hypergraph graph node]
  (.degree graph node))

(defn in-degree
  [^Hypergraph graph node]
  (.inDegree graph node))

(defn out-degree
  [^Hypergraph graph node]
  (.outDegree graph node))

     graph)))

(defn undirected-multigraph
  "Returns an edu.uci.ic.jung.graph.UndirectedSparseMultigraph. If a list or
  vector of edges is passed, returning graph including the edges."
  ([] (UndirectedSparseMultigraph.))
  ([edges]
   (let [graph (UndirectedSparseMultigraph.)]
