private static void increaseDepth(BayesianNetwork bayesianNetwork, Map<VertexLabel, Vertex> outputVertices) { VertexId newPrefix = new VertexId(); bayesianNetwork.incrementIndentation(); bayesianNetwork.getVertices().stream() .filter(v -> !outputVertices.containsKey(v.getLabel())) .forEach(v -> v.getId().addPrefix(newPrefix)); bayesianNetwork.getVertices().stream() .filter(v -> outputVertices.containsKey(v.getLabel())) .forEach(v -> v.getId().resetID()); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Vertex<?> vertex = (Vertex<?>) o; return this.id.equals(vertex.id); }
public int getIndentation() { return id.getIndentation(); }
@Test public void vertexIdPrefixMatchingWorks() { VertexId prefix = new VertexId(); VertexId shouldMatch = new VertexId(); shouldMatch.addPrefix(prefix); VertexId shouldNotMatch = new VertexId(); assertTrue(shouldMatch.prefixMatches(prefix)); assertFalse(shouldNotMatch.prefixMatches(prefix)); }
public GraphEdge(Vertex v1, Vertex v2) { if (v1.getId().compareTo(v2.getId()) < 0) { parentVertex = v1; childVertex = v2; } else { parentVertex = v2; childVertex = v1; } }
@Override public Writer withDefaultHeader() { int headerSize = vertices.size(); String[] header = createHeader(headerSize, HEADER_STYLE, i -> vertices.get(i).getId().toString()); withHeader(header); return this; }
@Override public int hashCode() { return id.hashCode(); }
private NetworkSamples createNetworkSamplesWithOneVertexAndOneSample(double p) { Map<VariableReference, List<DoubleTensor>> samplesByVertex = new HashMap<>(); samplesByVertex.put(new VertexId(), Collections.singletonList(DoubleTensor.scalar(1.))); List<Double> logOfMasterPForEachSample = Collections.singletonList(p); return new NetworkSamples(samplesByVertex, logOfMasterPForEachSample, 1); }
@Test public void idOrderingStillImpliesTopologicalOrdering() { for (Vertex v : outerNet.getVertices()) { Set<Vertex> parentSet = v.getParents(); for (Vertex parent : parentSet) { assertTrue(v.getId().compareTo(parent.getId()) > 0); } } }
private KeanuSavedBayesNet.NamedParam getParam(String paramName, Vertex parent) { return getParam(paramName, builder -> builder.setParentVertex( KeanuSavedBayesNet.VertexID.newBuilder().setId(parent.getId().toString()) ) ); }
public String inDotFormat() { // Output value if value is set, but also add some descriptive info for non-constant vertices. if (!value.isEmpty()) { String dotLabel = vertex.getId().hashCode() + DOT_LABEL_OPENING + value; if (!(vertex instanceof ConstantVertex)) { dotLabel += " (" + getDescriptiveInfo() + ")"; } return dotLabel + DOT_LABEL_CLOSING; } return vertex.getId().hashCode() + DOT_LABEL_OPENING + getDescriptiveInfo() + DOT_LABEL_CLOSING; }
private KeanuSavedBayesNet.Vertex buildVertex(Vertex vertex) { KeanuSavedBayesNet.Vertex.Builder vertexBuilder = KeanuSavedBayesNet.Vertex.newBuilder(); if (vertex.getLabel() != null) { vertexBuilder = vertexBuilder.setLabel(vertex.getLabel().toString()); } vertexBuilder = vertexBuilder.setId(KeanuSavedBayesNet.VertexID.newBuilder().setId(vertex.getId().toString())); vertexBuilder = vertexBuilder.setVertexType(vertex.getClass().getCanonicalName()); vertexBuilder = vertexBuilder.addAllShape(Longs.asList(vertex.getShape())); saveParams(vertexBuilder, vertex); return vertexBuilder.build(); }
private KeanuSavedBayesNet.NamedParam getParam(String paramName, Vertex[] param) { KeanuSavedBayesNet.VertexArray.Builder vertexArray = KeanuSavedBayesNet.VertexArray.newBuilder(); for (Vertex vertex : param) { vertexArray.addValues(KeanuSavedBayesNet.VertexID.newBuilder().setId(vertex.getId().toString())); } return getParam(paramName, builder -> builder.setVertexArrayParam(vertexArray.build())); }
private KeanuSavedBayesNet.StoredValue getStoredValue(Vertex vertex, KeanuSavedBayesNet.VertexValue value) { return KeanuSavedBayesNet.StoredValue.newBuilder() .setId(KeanuSavedBayesNet.VertexID.newBuilder().setId(vertex.getId().toString()).build()) .setValue(value) .setIsObserved(vertex.isObserved()) .build(); } }