protected Collection getInverseArcs(Object member, Object symbol) { if (member != SINK_NODE) { return getUnminimizedFA().getArcsByTargetAndInput(member, symbol); } return getUnminimizedFA().getArcsByInput(symbol); }
protected Collection getInverseArcs(Object member) { if (member != SINK_NODE) { return getUnminimizedFA().getArcsByTarget(member); } return getUnminimizedFA().getArcs(); }
@Override public Arc processArc(Arc a) { a = new Arc(a); a.setSourceNode(nodeProcessor.processNode(a.getSourceNode())); a.setTargetNode(nodeProcessor.processNode(a.getTargetNode())); return a; } }
protected TransducerGraph buildMinimizedFA() { TransducerGraph minimizedFA = new TransducerGraph(); TransducerGraph unminimizedFA = getUnminimizedFA(); for (TransducerGraph.Arc arc : unminimizedFA.getArcs()) { Object source = projectNode(arc.getSourceNode()); Object target = projectNode(arc.getTargetNode()); try { if (minimizedFA.canAddArc(source, target, arc.getInput(), arc.getOutput())) { minimizedFA.addArc(source, target, arc.getInput(), arc.getOutput()); } } catch (Exception e) { //throw new IllegalArgumentException(); } } minimizedFA.setStartNode(projectNode(unminimizedFA.getStartNode())); for (Object o : unminimizedFA.getEndNodes()) { minimizedFA.setEndNode(projectNode(o)); } return minimizedFA; }
protected TransducerGraph buildMinimizedFA() { TransducerGraph minimizedFA = new TransducerGraph(); TransducerGraph unminimizedFA = getUnminimizedFA(); for (TransducerGraph.Arc arc : unminimizedFA.getArcs()) { Set<Arc> source = projectNode(arc.getSourceNode()); Set<Arc> target = projectNode(arc.getTargetNode()); try { if (minimizedFA.canAddArc(source, target, arc.getInput(), arc.getOutput())) { minimizedFA.addArc(source, target, arc.getInput(), arc.getOutput()); } } catch (Exception e) { //throw new IllegalArgumentException(); } } minimizedFA.setStartNode(projectNode(unminimizedFA.getStartNode())); for (Object o : unminimizedFA.getEndNodes()) { minimizedFA.setEndNode(projectNode(o)); } return minimizedFA; }
protected void addSplits(Block block) { Map symbolToTarget = new HashMap(); for (Object member : block.getMembers()) { for (Object o : getInverseArcs(member)) { TransducerGraph.Arc arc = (TransducerGraph.Arc) o; Object symbol = arc.getInput(); Object target = arc.getTargetNode(); Maps.putIntoValueArrayList(symbolToTarget, symbol, target); } } for (Object symbol : symbolToTarget.keySet()) { addSplit(new Split((List) symbolToTarget.get(symbol), symbol, block)); } }
protected Arc(Arc<NODE,IN,OUT> a) { this(a.getSourceNode(), a.getTargetNode(), a.getInput(), a.getOutput()); }
public TransducerGraph(TransducerGraph other, ArcProcessor arcProcessor) { this(other.getArcs(), other.getStartNode(), other.getEndNodes(), arcProcessor, null); }
protected void makeBlock(Collection members) { Block block = new Block(new HashSet(members)); for (Object member : block.getMembers()) { if (member != SINK_NODE) { // System.out.println("putting in memberToBlock: " + member + " " + block); memberToBlock.put(member, block); } } addSplits(block); }
protected Collection getSymbols() { return getUnminimizedFA().getInputs(); }
protected Object projectNode(Object node) { Set members = getBlock(node).getMembers(); return members; }
public TransducerGraph processGraph(TransducerGraph graph) { // compute lambda function ClassicCounter lambda = computeLambda(graph); // not destructive // do the pushing TransducerGraph result = pushLambdas(graph, lambda); // creates a new one return result; }
public double inFlow(Object node) { Set<Arc> arcs = getArcsByTarget(node); return sumOutputs(arcs); }
public double outFlow(Object node) { Set<Arc> arcs = getArcsBySource(node); return sumOutputs(arcs); }
protected Collection<?> getSymbols() { return getUnminimizedFA().getInputs(); }
public DFSAState(S id, DFSA<T,S> dfsa, double score) { this(id,dfsa); setScore(score); }
protected Set<Arc> projectNode(Object node) { return getBlock(node).getMembers(); }
public TransducerGraph(TransducerGraph other, NodeProcessor nodeProcessor) { this(other.getArcs(), other.getStartNode(), other.getEndNodes(), null, nodeProcessor); }