make weightedEdge a weightedLine
This commit is contained in:
parent
692b8a581b
commit
f172cab6a0
|
@ -140,10 +140,10 @@ func (g *AbsorbingMarkovChain) AdjacencyMatrix() *mat.Dense {
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewEdge returns a weightedEdge that can be added to the Markov chain.
|
// NewLine returns a weightedLine that can be added to the Markov chain.
|
||||||
func (g *AbsorbingMarkovChain) NewEdge(from, to graph.Node) graph.Edge {
|
func (g *AbsorbingMarkovChain) NewLine(from, to graph.Node) graph.Line {
|
||||||
e := g.WeightedDirectedGraph.NewWeightedLine(from, to, math.NaN()).(multi.WeightedLine)
|
e := g.WeightedDirectedGraph.NewWeightedLine(from, to, math.NaN()).(multi.WeightedLine)
|
||||||
return &weightedEdge{WeightedLine: e}
|
return &weightedLine{WeightedLine: e}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewNode returns a Node that can be added to the Markov chain.
|
// NewNode returns a Node that can be added to the Markov chain.
|
||||||
|
@ -151,7 +151,7 @@ func (g *AbsorbingMarkovChain) NewNode() graph.Node {
|
||||||
return &Node{Node: g.WeightedDirectedGraph.NewNode()}
|
return &Node{Node: g.WeightedDirectedGraph.NewNode()}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetEdge adds a weighted edge to the Markov chain.
|
// SetLine adds a weighted edge to the Markov chain.
|
||||||
func (g *AbsorbingMarkovChain) SetEdge(e graph.Edge) {
|
func (g *AbsorbingMarkovChain) SetLine(e graph.Line) {
|
||||||
g.WeightedDirectedGraph.SetWeightedLine(e.(*weightedEdge))
|
g.WeightedDirectedGraph.SetWeightedLine(e.(*weightedLine))
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,25 +42,18 @@ func (n *Node) DOTID() string {
|
||||||
return n.dotID
|
return n.dotID
|
||||||
}
|
}
|
||||||
|
|
||||||
// weightedEdge is a DOT-aware multi.WeightedLine. By being a
|
// weightedLine is a DOT-aware multi.WeightedLine. By being a
|
||||||
// multi.WeightedLine, it allows for self-loops, which are important for
|
// multi.WeightedLine, it allows for self-loops, which are important for
|
||||||
// absorbing Markov chains.
|
// absorbing Markov chains.
|
||||||
// TODO: this is a little confusing, maybe just have checks in the code that
|
// TODO: this is a little confusing, maybe just have checks in the code that
|
||||||
// there's only one line in each edge?
|
// there's only one line in each edge?
|
||||||
type weightedEdge struct {
|
type weightedLine struct {
|
||||||
multi.WeightedLine
|
multi.WeightedLine
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReversedEdge returns a new weightedEdge with the same weight, but the
|
|
||||||
// direction reversed. It exists mainly to satisfy the graph.Edge interface.
|
|
||||||
func (e *weightedEdge) ReversedEdge() graph.Edge {
|
|
||||||
revLine := multi.WeightedLine{F: e.T, T: e.F, W: e.W}
|
|
||||||
return &weightedEdge{WeightedLine: revLine}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetAttribute enables storing the weight read from a DOT file. It errors if
|
// SetAttribute enables storing the weight read from a DOT file. It errors if
|
||||||
// an attribute is read that can't be stored in a weightedEdge.
|
// an attribute is read that can't be stored in a weightedLine.
|
||||||
func (e *weightedEdge) SetAttribute(attr encoding.Attribute) error {
|
func (e *weightedLine) SetAttribute(attr encoding.Attribute) error {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
switch attr.Key {
|
switch attr.Key {
|
||||||
|
|
|
@ -59,7 +59,7 @@ func parse(cmd *cobra.Command, args []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
graph := markov.NewAbsorbingMarkovChain()
|
graph := markov.NewAbsorbingMarkovChain()
|
||||||
err = dot.Unmarshal(data, graph)
|
err = dot.UnmarshalMulti(data, graph)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue