diff --git a/cmd/internal/graph/common.go b/cmd/internal/graph/common.go index a3599ca..e545bb9 100644 --- a/cmd/internal/graph/common.go +++ b/cmd/internal/graph/common.go @@ -23,6 +23,8 @@ import ( "gonum.org/v1/gonum/mat" ) +// WeightedGraph is an interface so we can construct adjacency matrices for +// both directed and undirected graphs. type WeightedGraph interface { graph.Weighted graph.WeightedMultigraph @@ -31,6 +33,8 @@ type WeightedGraph interface { WeightedEdges() graph.WeightedEdges } +// WeightedMatrix is an interface to handle the construction of both directed +// and undirected adjacency matrices. type WeightedMatrix interface { graph.Weighted @@ -65,6 +69,7 @@ func copyEdges(g WeightedGraph, adj WeightedMatrix) { for edges := g.WeightedEdges(); edges.Next(); { e := edges.WeightedEdge() if e.From() == e.To() { + // the simple Matrix classes don't handle self loops continue } diff --git a/cmd/internal/graph/dot/graph.go b/cmd/internal/graph/dot/graph.go index 119ea16..2419419 100644 --- a/cmd/internal/graph/dot/graph.go +++ b/cmd/internal/graph/dot/graph.go @@ -25,7 +25,7 @@ import ( "gonum.org/v1/gonum/graph/multi" ) -// DOTWeightedGraph is a graph to unmarshal DOT graphs. +// DOTWeightedGraph is a struct to unmarshal DOT graphs. type DOTWeightedGraph struct { igraph.WeightedGraph WeightAttribute string @@ -36,6 +36,7 @@ func NewDOTDirectedGraph(weightAttr string) DOTWeightedGraph { return DOTWeightedGraph{WeightedGraph: multi.NewWeightedDirectedGraph(), WeightAttribute: weightAttr} } +// NewDOTUndirectedGraph returns a graph with no nodes or edges. func NewDOTUndirectedGraph(weightAttr string) DOTWeightedGraph { return DOTWeightedGraph{WeightedGraph: multi.NewWeightedUndirectedGraph(), WeightAttribute: weightAttr} } diff --git a/cmd/internal/graph/dot/nodes_edges.go b/cmd/internal/graph/dot/nodes_edges.go index b686ec8..a70d8b6 100644 --- a/cmd/internal/graph/dot/nodes_edges.go +++ b/cmd/internal/graph/dot/nodes_edges.go @@ -48,8 +48,8 @@ type weightedLine struct { weightAttribute string } -// SetAttribute enables storing the weight read from a DOT file. It errors if -// an attribute is read that can't be stored in a weightedLine. +// SetAttribute enables storing the weight read from a DOT file. It only errors +// if the weight can't be parsed as a float. func (e *weightedLine) SetAttribute(attr encoding.Attribute) error { var err error