All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ggp.base.util.prover.logging.StandardProverLogger Maven / Gradle / Ivy

The newest version!
package org.ggp.base.util.prover.logging;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.ggp.base.util.gdl.GdlUtils;
import org.ggp.base.util.gdl.grammar.GdlConstant;
import org.ggp.base.util.gdl.grammar.GdlSentence;
import org.ggp.base.util.gdl.grammar.GdlTerm;
import org.ggp.base.util.gdl.model.SimpleSentenceForm;
import org.ggp.base.util.prover.query.QueryType;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import com.google.common.collect.Multiset;
import com.google.common.collect.Sets;

public class StandardProverLogger implements ProverLogger {
    private final Multiset cacheHits = HashMultiset.create();
    private final Multiset cacheMisses = HashMultiset.create();

    private StandardProverLogger() {
        //Use create() instead
    }

    public static StandardProverLogger create() {
        return new StandardProverLogger();
    }

    @Override
    public void logCacheHit(GdlSentence varRenamedSentence) {
        cacheHits.add(toQueryType(varRenamedSentence));
    }

    @Override
    public void logCacheMiss(GdlSentence varRenamedSentence) {
        cacheMisses.add(toQueryType(varRenamedSentence));
    }

    private QueryType toQueryType(GdlSentence sentence) {
        SimpleSentenceForm form = SimpleSentenceForm.create(sentence);
        List tuple = GdlUtils.getTupleFromSentence(sentence);
        Set definedSlots = Sets.newHashSet();
        for (int i = 0; i < tuple.size(); i++) {
            if (tuple.get(i) instanceof GdlConstant) {
                definedSlots.add(i);
            }
        }
        return QueryType.create(form, definedSlots, ImmutableMap.of());
    }

    public Multiset getCacheHits() {
        return cacheHits;
    }

    public Multiset getCacheMisses() {
        return cacheMisses;
    }

    public Map getQueryTypeMap() {
        Map result = Maps.newHashMap();
        for (QueryType type : Iterables.concat(cacheHits.elementSet(), cacheMisses.elementSet())) {
            if (result.containsKey(type)) {
                continue;
            }
            int hits = cacheHits.count(type);
            int misses = cacheMisses.count(type);
            result.put(type, new QueryTypeStats(hits, misses));
        }
        return result;
    }

    public static class QueryTypeStats {
        public final int cacheHits;
        public final int cacheMisses;
        private QueryTypeStats(int cacheHits, int cacheMisses) {
            this.cacheHits = cacheHits;
            this.cacheMisses = cacheMisses;
        }
        @Override
        public String toString() {
            return "hits=" + cacheHits + ", misses="
                    + cacheMisses;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy