restructure dot functionality into subpackage
This commit is contained in:
		
							parent
							
								
									0106ef70a0
								
							
						
					
					
						commit
						f056086b56
					
				|  | @ -17,8 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| package markov | ||||
| 
 | ||||
| import ( | ||||
| 	"math" | ||||
| 
 | ||||
| 	"gonum.org/v1/gonum/graph" | ||||
| 	"gonum.org/v1/gonum/graph/multi" | ||||
| 	"gonum.org/v1/gonum/graph/simple" | ||||
|  | @ -139,19 +137,3 @@ func (g *AbsorbingMarkovChain) AdjacencyMatrix() *mat.Dense { | |||
| 
 | ||||
| 	return a | ||||
| } | ||||
| 
 | ||||
| // NewLine returns a DOT-aware weighted line.
 | ||||
| func (g *AbsorbingMarkovChain) NewLine(from, to graph.Node) graph.Line { | ||||
| 	e := g.WeightedDirectedGraph.NewWeightedLine(from, to, math.NaN()).(multi.WeightedLine) | ||||
| 	return &weightedLine{WeightedLine: e} | ||||
| } | ||||
| 
 | ||||
| // NewNode returns a DOT-aware Node.
 | ||||
| func (g *AbsorbingMarkovChain) NewNode() graph.Node { | ||||
| 	return &Node{Node: g.WeightedDirectedGraph.NewNode()} | ||||
| } | ||||
| 
 | ||||
| // SetLine adds a DOT-aware weighted line to the Markov chain.
 | ||||
| func (g *AbsorbingMarkovChain) SetLine(e graph.Line) { | ||||
| 	g.WeightedDirectedGraph.SetWeightedLine(e.(*weightedLine)) | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,53 @@ | |||
| /* | ||||
| Copyright © 2025 filifa | ||||
| 
 | ||||
| This program is free software: you can redistribute it and/or modify | ||||
| it under the terms of the GNU General Public License as published by | ||||
| the Free Software Foundation, either version 3 of the License, or | ||||
| (at your option) any later version. | ||||
| 
 | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU General Public License for more details. | ||||
| 
 | ||||
| You should have received a copy of the GNU General Public License | ||||
| along with this program. If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| package dot | ||||
| 
 | ||||
| import ( | ||||
| 	"math" | ||||
| 
 | ||||
| 	"scm.dairydemon.net/filifa/dptdist/cmd/internal/markov" | ||||
| 
 | ||||
| 	"gonum.org/v1/gonum/graph" | ||||
| 	"gonum.org/v1/gonum/graph/multi" | ||||
| ) | ||||
| 
 | ||||
| // DOTMarkovChain is a graph representing an absorbing Markov chain.
 | ||||
| type DOTMarkovChain struct { | ||||
| 	*markov.AbsorbingMarkovChain | ||||
| } | ||||
| 
 | ||||
| // NewDOTMarkovChain returns an absorbing Markov chain with no nodes or
 | ||||
| // edges.
 | ||||
| func NewDOTMarkovChain() *DOTMarkovChain { | ||||
| 	return &DOTMarkovChain{AbsorbingMarkovChain: markov.NewAbsorbingMarkovChain()} | ||||
| } | ||||
| 
 | ||||
| // NewLine returns a DOT-aware weighted line.
 | ||||
| func (g *DOTMarkovChain) NewLine(from, to graph.Node) graph.Line { | ||||
| 	e := g.AbsorbingMarkovChain.NewWeightedLine(from, to, math.NaN()).(multi.WeightedLine) | ||||
| 	return &weightedLine{WeightedLine: e} | ||||
| } | ||||
| 
 | ||||
| // NewNode returns a DOT-aware Node.
 | ||||
| func (g *DOTMarkovChain) NewNode() graph.Node { | ||||
| 	return &Node{Node: g.AbsorbingMarkovChain.NewNode()} | ||||
| } | ||||
| 
 | ||||
| // SetLine adds a DOT-aware weighted line to the Markov chain.
 | ||||
| func (g *DOTMarkovChain) SetLine(e graph.Line) { | ||||
| 	g.AbsorbingMarkovChain.SetWeightedLine(e.(*weightedLine)) | ||||
| } | ||||
|  | @ -14,7 +14,7 @@ GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | ||||
| along with this program. If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| package markov | ||||
| package dot | ||||
| 
 | ||||
| import ( | ||||
| 	"errors" | ||||
|  | @ -21,7 +21,7 @@ import ( | |||
| 	"fmt" | ||||
| 	"os" | ||||
| 
 | ||||
| 	"scm.dairydemon.net/filifa/dptdist/cmd/internal/markov" | ||||
| 	markovDOT "scm.dairydemon.net/filifa/dptdist/cmd/internal/markov/dot" | ||||
| 
 | ||||
| 	"github.com/spf13/cobra" | ||||
| 	"gonum.org/v1/gonum/graph/encoding/dot" | ||||
|  | @ -58,7 +58,7 @@ func parse(cmd *cobra.Command, args []string) { | |||
| 		panic(err) | ||||
| 	} | ||||
| 
 | ||||
| 	graph := markov.NewAbsorbingMarkovChain() | ||||
| 	graph := markovDOT.NewDOTMarkovChain() | ||||
| 	err = dot.UnmarshalMulti(data, graph) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
|  | @ -80,7 +80,7 @@ func parse(cmd *cobra.Command, args []string) { | |||
| 	outputMatrix(matrix) | ||||
| } | ||||
| 
 | ||||
| func orderedAdjMatrix(g *markov.AbsorbingMarkovChain) (*mat.Dense, error) { | ||||
| func orderedAdjMatrix(g *markovDOT.DOTMarkovChain) (*mat.Dense, error) { | ||||
| 	matrix := g.AdjacencyMatrix() | ||||
| 	if len(nodeOrder) == 0 { | ||||
| 		return matrix, nil | ||||
|  | @ -94,7 +94,7 @@ func orderedAdjMatrix(g *markov.AbsorbingMarkovChain) (*mat.Dense, error) { | |||
| 	nodes := g.Nodes() | ||||
| 	newOrder := make([]int, nodes.Len()) | ||||
| 	for nodes.Next() { | ||||
| 		node := nodes.Node().(*markov.Node) | ||||
| 		node := nodes.Node().(*markovDOT.Node) | ||||
| 		id := node.DOTID() | ||||
| 
 | ||||
| 		var ok bool | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue