private void collectComplexPropertyValues(final Individual subj) { final Set<Role> collected = new HashSet<>(); for (final Edge edge : subj.getOutEdges()) { final Role role = edge.getRole(); // only collect non-simple, i.e. complex, roles // TODO we might not need to collect all non-simple roles // collecting only the base ones, i.e. minimal w.r.t. role // ordering, would be enough if (role.isSimple() || !collected.add(role)) continue; collected.add(role); collectComplexPropertyValues(subj, role); } for (final Edge edge : subj.getInEdges()) { final Role role = edge.getRole().getInverse(); if (role.isSimple() || !collected.add(role)) continue; collectComplexPropertyValues(subj, role); } }
private void collectComplexPropertyValues(final Individual subj) { final Set<Role> collected = new HashSet<>(); for (final Edge edge : subj.getOutEdges()) { final Role role = edge.getRole(); // only collect non-simple, i.e. complex, roles // TODO we might not need to collect all non-simple roles // collecting only the base ones, i.e. minimal w.r.t. role // ordering, would be enough if (role.isSimple() || !collected.add(role)) continue; collected.add(role); collectComplexPropertyValues(subj, role); } for (final Edge edge : subj.getInEdges()) { final Role role = edge.getRole().getInverse(); if (role.isSimple() || !collected.add(role)) continue; collectComplexPropertyValues(subj, role); } }
private void restoreLocal(final Individual ind, final int branch, final Map<Node, Boolean> visited) { final boolean restored = ind.restore(branch); visited.put(ind, restored); if (restored) { for (final Edge edge : ind.getOutEdges()) { final Node succ = edge.getTo(); if (visited.containsKey(succ)) continue; if (succ.isLiteral()) { visited.put(succ, Boolean.FALSE); succ.restore(branch); } else restoreLocal((Individual) succ, branch, visited); } for (final Edge edge : ind.getInEdges()) { final Individual pred = edge.getFrom(); if (visited.containsKey(pred)) continue; restoreLocal(pred, branch, visited); } } }
private void restoreLocal(final Individual ind, final int branch, final Map<Node, Boolean> visited) { final boolean restored = ind.restore(branch); visited.put(ind, restored); if (restored) { for (final Edge edge : ind.getOutEdges()) { final Node succ = edge.getTo(); if (visited.containsKey(succ)) continue; if (succ.isLiteral()) { visited.put(succ, Boolean.FALSE); succ.restore(branch); } else restoreLocal((Individual) succ, branch, visited); } for (final Edge edge : ind.getInEdges()) { final Individual pred = edge.getFrom(); if (visited.containsKey(pred)) continue; restoreLocal(pred, branch, visited); } } }
/** * Returns the roles that points to the given _individual from its parent. * * @param ind _individual to check * @return the roles that points to the given _individual from its parent */ public static Set<Role> getIncomingRoles(final Individual ind) { Set<Role> rolesToBlocked = null; for (final Edge e : ind.getInEdges()) if (e.getFrom().equals(ind.getParent())) if (rolesToBlocked == null) rolesToBlocked = e.getRole().getSuperRoles(); else if (!rolesToBlocked.contains(e.getRole())) { rolesToBlocked = SetUtils.create(rolesToBlocked); rolesToBlocked.addAll(e.getRole().getSuperRoles()); } return rolesToBlocked; }
/** * Returns the roles that points to the given _individual from its parent. * * @param ind _individual to check * @return the roles that points to the given _individual from its parent */ public static Set<Role> getIncomingRoles(final Individual ind) { Set<Role> rolesToBlocked = null; for (final Edge e : ind.getInEdges()) if (e.getFrom().equals(ind.getParent())) if (rolesToBlocked == null) rolesToBlocked = e.getRole().getSuperRoles(); else if (!rolesToBlocked.contains(e.getRole())) { rolesToBlocked = SetUtils.create(rolesToBlocked); rolesToBlocked.addAll(e.getRole().getSuperRoles()); } return rolesToBlocked; }
protected Edge getParentEdge(final Individual ind) { Edge result = null; Role role = null; final Individual parent = ind.getParent(); for (final Edge e : ind.getInEdges()) if (e.getFrom().equals(parent)) if (role == null) { role = e.getRole(); result = e; } else if (e.getRole().isSubRoleOf(role)) { role = e.getRole(); result = e; } assert result != null; return result; }
protected Edge getParentEdge(final Individual ind) { Edge result = null; Role role = null; final Individual parent = ind.getParent(); for (final Edge e : ind.getInEdges()) if (e.getFrom().equals(parent)) if (role == null) { role = e.getRole(); result = e; } else if (e.getRole().isSubRoleOf(role)) { role = e.getRole(); result = e; } assert result != null; return result; }
protected Iterator<WME> getMatches(final Individual s, @SuppressWarnings("unused") final Role r, final Node o) { Iterator<WME> i1 = IteratorUtils.emptyIterator(); Iterator<WME> i2 = IteratorUtils.emptyIterator(); final Role invRole = _role.getInverse(); if (s != null) { i1 = toWMEs(getEdges(s.getOutEdges(), _role, o), EdgeDirection.FORWARD); if (invRole != null) i2 = toWMEs(getEdges(s.getInEdges(), invRole, o), EdgeDirection.BACKWARD); } else { assert s == null; i1 = toWMEs(getEdges(o.getInEdges(), _role, null), EdgeDirection.FORWARD); if (invRole != null) i2 = toWMEs(getEdges(((Individual) o).getOutEdges(), invRole, null), EdgeDirection.BACKWARD); } return !i1.hasNext() ? i2 : !i2.hasNext() ? i1 : IteratorUtils.concat(i1, i2); }
protected Iterator<WME> getMatches(final Individual s, @SuppressWarnings("unused") final Role r, final Node o) { Iterator<WME> i1 = IteratorUtils.emptyIterator(); Iterator<WME> i2 = IteratorUtils.emptyIterator(); final Role invRole = _role.getInverse(); if (s != null) { i1 = toWMEs(getEdges(s.getOutEdges(), _role, o), EdgeDirection.FORWARD); if (invRole != null) i2 = toWMEs(getEdges(s.getInEdges(), invRole, o), EdgeDirection.BACKWARD); } else { assert s == null; i1 = toWMEs(getEdges(o.getInEdges(), _role, null), EdgeDirection.FORWARD); if (invRole != null) i2 = toWMEs(getEdges(((Individual) o).getOutEdges(), invRole, null), EdgeDirection.BACKWARD); } return !i1.hasNext() ? i2 : !i2.hasNext() ? i1 : IteratorUtils.concat(i1, i2); }
for (final Edge edge : root.getInEdges())
for (final Edge edge : root.getInEdges())
final EdgeList edgeList = out ? node.getOutEdges() : node.getInEdges(); final EdgeList cachedEdges = new EdgeList(edgeList.size()); for (final Edge edge : edgeList)
final EdgeList edgeList = out ? node.getOutEdges() : node.getInEdges(); final EdgeList cachedEdges = new EdgeList(edgeList.size()); for (final Edge edge : edgeList)
for (final Edge e : ind.getInEdges()) tracker.addUpdatedIndividual(e.getFrom()); for (final Edge e : ind.getOutEdges())
for (final Edge e : ind.getInEdges()) tracker.addUpdatedIndividual(e.getFrom()); for (final Edge e : ind.getOutEdges())
final EdgeList preds = node.getInEdges(); final boolean validPred = preds.size() == 1 || preds.size() == 2 && preds.hasEdgeFrom(node); if (!validPred) throw new InternalReasonerException("Invalid blockable node: " + node + " " + node.getInEdges()); throw new InternalReasonerException("Duplicate edges: " + allEdges); edges = node.getInEdges(); for (int e = 0; e < edges.size(); e++)
final EdgeList preds = node.getInEdges(); final boolean validPred = preds.size() == 1 || preds.size() == 2 && preds.hasEdgeFrom(node); if (!validPred) throw new InternalReasonerException("Invalid blockable node: " + node + " " + node.getInEdges()); throw new InternalReasonerException("Duplicate edges: " + allEdges); edges = node.getInEdges(); for (int e = 0; e < edges.size(); e++)
return edge.getDepends().isIndependent() ? Bool.FALSE : Bool.UNKNOWN; for (final Edge edge : ind1.getInEdges()) if (edge.getRole().isIrreflexive() && edge.getFrom().equals(ind2)) return edge.getDepends().isIndependent() ? Bool.FALSE : Bool.UNKNOWN;
final EdgeList inEdges = y.getInEdges(); for (int e = 0; e < inEdges.size(); e++)