package esl.cuenet.generative;
import com.google.common.collect.Sets;
import com.mongodb.util.JSON;
import esl.cuenet.algorithms.firstk.impl.LocalFilePreprocessor;
import esl.cuenet.algorithms.firstk.personal.*;
import esl.cuenet.algorithms.firstk.personal.accessor.Candidates;
import esl.cuenet.algorithms.firstk.personal.accessor.PConstants;
import esl.cuenet.algorithms.firstk.personal.accessor.Source;
import esl.cuenet.algorithms.firstk.personal.accessor.SourceFactory;
import esl.cuenet.generative.structs.ContextNetwork;
import esl.cuenet.generative.structs.NetworkBuildingHelper;
import esl.cuenet.generative.structs.Propagate;
import esl.cuenet.generative.structs.SpaceTimeValueGenerators;
import esl.system.SysLoggerUtils;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.*;
public class PropagationTests {
static{
SysLoggerUtils.initLogger();
}
Logger logger = Logger.getLogger(getClass());
public static void load () {
LocalFilePreprocessor.ExifExtractor extractor = new LocalFilePreprocessor.ExifExtractor();
try {
Main.EXIF = extractor.extractExif(PConstants.IMAGE);
} catch (IOException e) {
e.printStackTrace();
return;
}
SourceFactory.getFactory().getSources();
Candidates.getInstance().logistics(false);
}
@Test
public void propagate() throws IOException {
//load();
//logger.info(Main.EXIF);
String locationSamplesFile = "/data/osm/uci.osm.locations.samples";
String instanceFile = "/data/ranker/instances.10.ic.10000.txt";
String distanceFile = "/data/ranker/ontology_edgelist.10.distances.txt";
// String instanceFile = "/data/ranker/real/instances.arjun.txt";
// String distanceFile = "/data/ranker/real/ontology_cuenet.distances.txt";
SpaceTimeValueGenerators stGenerator = new SpaceTimeValueGenerators(locationSamplesFile);
ContextNetwork network = NetworkBuildingHelper.loadNetworkForPropagation(
instanceFile,
stGenerator);
Propagate propagator = new Propagate(network, distanceFile, stGenerator);
propagator.show();
String[] entities = new String[10];
for (int i=1; i<=10; i++) entities[i-1] = "" + i;
//loadEntities(PConstants.IMAGE + ".annotations", entities);
propagator.prepare(Sets.newHashSet(entities));
double l1delta;
double[] deltas = new double[10];
for (int i=0; i<10; i++) {
l1delta = propagator.propagateOnce();
logger.info(l1delta);
deltas[i] = l1delta;
}
logger.info(Arrays.toString(deltas));
//propagator.dispScores();
// Candidates candidateSet = Candidates.getInstance();
// List<Map.Entry<String,Double>> objects = propagator.orderObjects();
// int _x = 25;
// for (Map.Entry<String, Double> o: objects) {
// logger.info(o.getKey() + " " + candidateSet.get(new Candidates.CandidateReference(Integer.parseInt(o.getKey()))));
// if (_x-- == 0) break;
// }
}
private void loadEntities(String filename, String[] entities) {
int i = 0;
Candidates candidateSet = Candidates.getInstance();
Candidates.CandidateReference user = new Candidates.CandidateReference(0);
try {
List<String> lines = FileUtils.readLines(new File(filename));
Collections.shuffle(lines);
for (String line : lines) {
line = line.replace('"', ' ');
line = line.trim();
Candidates.CandidateReference ref = candidateSet.searchLimitOne(Candidates.NAME_KEY, line.toLowerCase());
if (ref.equals(user)) continue;
if (i == entities.length) break;
entities[i] = ref.toString();
logger.info(line + " " + entities[i]);
i++;
}
} catch (IOException e) {
e.printStackTrace();
}
logger.info("Entities: " + Arrays.toString(entities));
}
}