package hex.genmodel.algos.tree;
import java.io.PrintStream;
import java.util.ArrayList;
/**
* Graph for representing a GBM or DRF forest.
* A graph contains subgraphs (trees).
*/
public class SharedTreeGraph {
private ArrayList<SharedTreeSubgraph> subgraphArray = new ArrayList<>();
/**
* Make a new forest.
*/
SharedTreeGraph() {
subgraphArray = new ArrayList<>();
}
/**
* Make a new tree.
* @param name Tree name.
* @return The new tree.
*/
SharedTreeSubgraph makeSubgraph(String name) {
SharedTreeSubgraph sg = new SharedTreeSubgraph(subgraphArray.size(), name);
subgraphArray.add(sg);
return sg;
}
/**
* Debug printout of graph structure.
* For developer use only.
*/
public void print() {
System.out.println("------------------------------------------------------------");
System.out.println("Graph");
for (SharedTreeSubgraph sg : subgraphArray) {
sg.print();
}
}
/**
* Print graph output in a format readable by dot (graphviz).
* @param os Stream to write the output to
* @param maxLevelsToPrintPerEdge Limit the number of individual categorical level names printed per edge
* @param detail include addtional node detail information
* @param optionalTitle Optional title to override the default
*/
public void printDot(PrintStream os, int maxLevelsToPrintPerEdge, boolean detail, String optionalTitle) {
os.println("/*");
os.println("Generated by:");
os.println(" http://https://github.com/h2oai/h2o-3/tree/master/h2o-genmodel/src/main/java/hex/genmodel/tools/PrintMojo.java");
os.println("*/");
os.println("");
os.println("/*");
os.println("On a mac:");
os.println("");
os.println("$ brew install graphviz");
os.println("$ dot -Tpng file.gv -o file.png");
os.println("$ open file.png");
os.println("*/");
os.println("");
os.println("digraph G {");
for (SharedTreeSubgraph sg : subgraphArray) {
sg.printDot(os, maxLevelsToPrintPerEdge, detail, optionalTitle);
}
os.println("");
os.println("}");
os.println("");
}
}