package edu.stanford.nlp.sempre.tables.alter;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.*;
import fig.basic.*;
public class CachedSubsetChooser implements SubsetChooser {
public static class Options {
@Option(gloss = "read the list of retained table from these files")
public List<String> retainedTablesFilenames = new ArrayList<>();
}
public static Options opts = new Options();
Map<String, Subset> cache = new HashMap<>();
public CachedSubsetChooser() {
for (String filename : opts.retainedTablesFilenames)
load(filename);
}
private void load(String retainedTablesFilename) {
try {
BufferedReader reader = IOUtils.openInHard(retainedTablesFilename);
String line;
while ((line = reader.readLine()) != null) {
Subset subset = Subset.fromString(line);
if (subset.score > Double.NEGATIVE_INFINITY)
cache.put(subset.id, subset);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public Subset chooseSubset(String id, DenotationData denotationData) {
return cache.get(id);
}
@Override
public Subset chooseSubset(String id, DenotationData denotationData, Collection<Integer> forbiddenTables) {
throw new RuntimeException("CachedSubsetChooser.chooseSubset cannot take forbiddenTables");
}
}