Search in sources :

Example 61 with AtomSetException

use of fr.lirmm.graphik.graal.api.core.AtomSetException in project graal by graphik-team.

the class NoForwardChecking method getCandidatsIterator.

@Override
public CloseableIterator<Term> getCandidatsIterator(AtomSet g, Var var, Substitution initialSubstitution, Map<Variable, Integer> map, Var[] varData, RulesCompilation rc) throws BacktrackException {
    HomomorphismIteratorChecker tmp;
    try {
        tmp = new HomomorphismIteratorChecker(var, g.termsIterator(), var.shared.preAtoms, g, initialSubstitution, map, varData, rc);
    } catch (AtomSetException e) {
        throw new BacktrackException(e);
    }
    tmp.setProfiler(this.getProfiler());
    return tmp;
}
Also used : AtomSetException(fr.lirmm.graphik.graal.api.core.AtomSetException) HomomorphismIteratorChecker(fr.lirmm.graphik.graal.homomorphism.utils.HomomorphismIteratorChecker) BacktrackException(fr.lirmm.graphik.graal.homomorphism.BacktrackException)

Example 62 with AtomSetException

use of fr.lirmm.graphik.graal.api.core.AtomSetException in project graal by graphik-team.

the class DefaultBootstrapper method exec.

// /////////////////////////////////////////////////////////////////////////
// 
// /////////////////////////////////////////////////////////////////////////
@Override
public CloseableIterator<Term> exec(final VarSharedData v, Collection<Atom> preAtoms, Collection<Atom> postAtoms, final AtomSet data, RulesCompilation compilation) throws BacktrackException {
    Iterator<Atom> it = postAtoms.iterator();
    if (it.hasNext()) {
        Atom a = it.next();
        final Iterator<Pair<Atom, Substitution>> rewritingOf = compilation.getRewritingOf(a).iterator();
        // TODO refactor the following code using converter Iterator or
        // create a private class?
        CloseableIterator<CloseableIterator<Term>> metaIt = new AbstractCloseableIterator<CloseableIterator<Term>>() {

            CloseableIterator<Term> next = null;

            @Override
            public void close() {
                if (next != null)
                    this.next.close();
            }

            @Override
            public boolean hasNext() throws IteratorException {
                try {
                    if (next == null && rewritingOf.hasNext()) {
                        Pair<Atom, Substitution> rew = rewritingOf.next();
                        Atom im = rew.getLeft();
                        Predicate predicate = im.getPredicate();
                        int pos = im.indexOf(rew.getRight().createImageOf(v.value));
                        next = data.termsByPredicatePosition(predicate, pos);
                    }
                } catch (AtomSetException e) {
                    throw new IteratorException("An errors occurs while getting terms by predicate position", e);
                }
                return next != null;
            }

            @Override
            public CloseableIterator<Term> next() throws IteratorException {
                if (next == null)
                    this.hasNext();
                CloseableIterator<Term> ret = next;
                next = null;
                return ret;
            }
        };
        return new CloseableIteratorAggregator<Term>(metaIt);
    } else {
        try {
            return data.termsIterator();
        } catch (AtomSetException e) {
            throw new BacktrackException(e);
        }
    }
}
Also used : IteratorException(fr.lirmm.graphik.util.stream.IteratorException) AbstractCloseableIterator(fr.lirmm.graphik.util.stream.AbstractCloseableIterator) CloseableIterator(fr.lirmm.graphik.util.stream.CloseableIterator) Term(fr.lirmm.graphik.graal.api.core.Term) Atom(fr.lirmm.graphik.graal.api.core.Atom) Predicate(fr.lirmm.graphik.graal.api.core.Predicate) BacktrackException(fr.lirmm.graphik.graal.homomorphism.BacktrackException) AbstractCloseableIterator(fr.lirmm.graphik.util.stream.AbstractCloseableIterator) Substitution(fr.lirmm.graphik.graal.api.core.Substitution) AtomSetException(fr.lirmm.graphik.graal.api.core.AtomSetException) CloseableIteratorAggregator(fr.lirmm.graphik.util.stream.CloseableIteratorAggregator) Pair(org.apache.commons.lang3.tuple.Pair)

Example 63 with AtomSetException

use of fr.lirmm.graphik.graal.api.core.AtomSetException in project graal by graphik-team.

the class AbstractAtomSet method getConstants.

@Override
public Set<Constant> getConstants() throws AtomSetException {
    Set<Constant> terms = new HashSet<Constant>();
    CloseableIterator<Atom> atomIt = this.iterator();
    try {
        while (atomIt.hasNext()) {
            Iterator<Term> termIt = atomIt.next().iterator();
            while (termIt.hasNext()) {
                Term t = termIt.next();
                if (t.isConstant()) {
                    terms.add((Constant) t);
                }
            }
        }
    } catch (Exception e) {
        throw new AtomSetException(e);
    }
    return terms;
}
Also used : Constant(fr.lirmm.graphik.graal.api.core.Constant) AtomSetException(fr.lirmm.graphik.graal.api.core.AtomSetException) Term(fr.lirmm.graphik.graal.api.core.Term) Atom(fr.lirmm.graphik.graal.api.core.Atom) AtomSetException(fr.lirmm.graphik.graal.api.core.AtomSetException) HashSet(java.util.HashSet)

Example 64 with AtomSetException

use of fr.lirmm.graphik.graal.api.core.AtomSetException in project graal by graphik-team.

the class AtomicQueryHomomorphismWithNegatedParts method execute.

// /////////////////////////////////////////////////////////////////////////
// HOMOMORPHISM METHODS
// /////////////////////////////////////////////////////////////////////////
public CloseableIterator<Substitution> execute(ConjunctiveQueryWithNegatedParts query, AtomSet data, RulesCompilation compilation) throws HomomorphismException {
    try {
        Atom atom = query.getPositivePart().iterator().next();
        List<Term> ans = query.getAnswerVariables();
        List<CloseableIterator<Substitution>> iteratorsList = new LinkedList<CloseableIterator<Substitution>>();
        for (Pair<Atom, Substitution> im : compilation.getRewritingOf(atom)) {
            iteratorsList.add(new ConverterCloseableIterator<Atom, Substitution>(data.match(im.getLeft()), new Atom2SubstitutionConverter(im.getLeft(), ans, im.getRight())));
        }
        CloseableIterator<Substitution> subIt = new CloseableIteratorAggregator<Substitution>(new CloseableIteratorAdapter<CloseableIterator<Substitution>>(iteratorsList.iterator()));
        // manage negative parts
        Set<Variable> variables = query.getPositivePart().getVariables();
        @SuppressWarnings("rawtypes") Filter[] filters = new Filter[query.getNegatedParts().size()];
        int i = 0;
        for (InMemoryAtomSet negPart : query.getNegatedParts()) {
            Set<Variable> frontier = SetUtils.intersection(variables, negPart.getVariables());
            filters[i++] = new NegFilter(negPart, frontier, data, compilation);
        }
        @SuppressWarnings("unchecked") Filter<Substitution> filter = new AndFilter<Substitution>(filters);
        return new FilterIterator<Substitution, Substitution>(subIt, filter);
    } catch (AtomSetException e) {
        throw new HomomorphismException(e);
    }
}
Also used : Variable(fr.lirmm.graphik.graal.api.core.Variable) HomomorphismException(fr.lirmm.graphik.graal.api.homomorphism.HomomorphismException) Substitution(fr.lirmm.graphik.graal.api.core.Substitution) AtomSetException(fr.lirmm.graphik.graal.api.core.AtomSetException) CloseableIteratorAggregator(fr.lirmm.graphik.util.stream.CloseableIteratorAggregator) FilterIterator(fr.lirmm.graphik.util.stream.filter.FilterIterator) ConverterCloseableIterator(fr.lirmm.graphik.util.stream.converter.ConverterCloseableIterator) CloseableIterator(fr.lirmm.graphik.util.stream.CloseableIterator) Term(fr.lirmm.graphik.graal.api.core.Term) Atom(fr.lirmm.graphik.graal.api.core.Atom) LinkedList(java.util.LinkedList) AndFilter(fr.lirmm.graphik.util.stream.filter.AndFilter) Filter(fr.lirmm.graphik.util.stream.filter.Filter) AndFilter(fr.lirmm.graphik.util.stream.filter.AndFilter) InMemoryAtomSet(fr.lirmm.graphik.graal.api.core.InMemoryAtomSet)

Example 65 with AtomSetException

use of fr.lirmm.graphik.graal.api.core.AtomSetException in project graal by graphik-team.

the class AbstractRuleApplier method apply.

@Override
public boolean apply(Rule rule, T atomSet) throws RuleApplicationException {
    boolean isChanged = false;
    ConjunctiveQuery query = this.generateQuery(rule);
    try {
        CloseableIterator<Substitution> subIt = this.executeQuery(query, atomSet);
        while (subIt.hasNext()) {
            Substitution substitution = subIt.next();
            CloseableIterator<Atom> it = this.getHaltingCondition().apply(rule, substitution, atomSet);
            if (it.hasNext()) {
                atomSet.addAll(it);
                isChanged = true;
            }
        }
        subIt.close();
    } catch (HomomorphismFactoryException e) {
        throw new RuleApplicationException("Error during rule application", e);
    } catch (HomomorphismException e) {
        throw new RuleApplicationException("Error during rule application", e);
    } catch (AtomSetException e) {
        throw new RuleApplicationException("Error during rule application", e);
    } catch (IteratorException e) {
        throw new RuleApplicationException("Error during rule application", e);
    }
    return isChanged;
}
Also used : IteratorException(fr.lirmm.graphik.util.stream.IteratorException) RuleApplicationException(fr.lirmm.graphik.graal.api.forward_chaining.RuleApplicationException) HomomorphismFactoryException(fr.lirmm.graphik.graal.api.homomorphism.HomomorphismFactoryException) HomomorphismException(fr.lirmm.graphik.graal.api.homomorphism.HomomorphismException) Substitution(fr.lirmm.graphik.graal.api.core.Substitution) AtomSetException(fr.lirmm.graphik.graal.api.core.AtomSetException) ConjunctiveQuery(fr.lirmm.graphik.graal.api.core.ConjunctiveQuery) Atom(fr.lirmm.graphik.graal.api.core.Atom)

Aggregations

AtomSetException (fr.lirmm.graphik.graal.api.core.AtomSetException)69 IteratorException (fr.lirmm.graphik.util.stream.IteratorException)26 SQLException (java.sql.SQLException)26 Atom (fr.lirmm.graphik.graal.api.core.Atom)25 Term (fr.lirmm.graphik.graal.api.core.Term)23 HomomorphismException (fr.lirmm.graphik.graal.api.homomorphism.HomomorphismException)12 Substitution (fr.lirmm.graphik.graal.api.core.Substitution)11 Statement (java.sql.Statement)11 DBTable (fr.lirmm.graphik.graal.store.rdbms.util.DBTable)10 Predicate (fr.lirmm.graphik.graal.api.core.Predicate)9 BacktrackException (fr.lirmm.graphik.graal.homomorphism.BacktrackException)9 ConjunctiveQuery (fr.lirmm.graphik.graal.api.core.ConjunctiveQuery)7 TreeSet (java.util.TreeSet)7 SQLQuery (fr.lirmm.graphik.graal.store.rdbms.util.SQLQuery)6 CloseableIteratorAdapter (fr.lirmm.graphik.util.stream.CloseableIteratorAdapter)6 RuleApplicationException (fr.lirmm.graphik.graal.api.forward_chaining.RuleApplicationException)5 LinkedListAtomSet (fr.lirmm.graphik.graal.core.atomset.LinkedListAtomSet)5 TreeMap (java.util.TreeMap)5 AtomSet (fr.lirmm.graphik.graal.api.core.AtomSet)4 Variable (fr.lirmm.graphik.graal.api.core.Variable)4