Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 13 additions & 17 deletions src/main/java/imsam/DynamicBinaryWeightedSSA.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,25 @@

package imsam;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;//ArrayList;
//import java.util.List;
//import java.util.Dictionary;
//import java.util.NoSuchElementException;
import java.lang.Math;
//ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.logging.log4j.Logger;
import org.kohsuke.args4j.Option;

import parser.ast.ModulesFile;
import imsam.args4j.MapDoubleOptionHandler;
import parser.Values;

import parser.ast.ModulesFile;
import prism.ModelGenerator;
import prism.Prism;
import prism.PrismDevNullLog;
import prism.PrismException;
import prism.PrismLog;
import prism.ModelGenerator;

import simulator.RandomNumberGenerator;
import simulator.SimulatorEngine;

Expand Down Expand Up @@ -74,8 +70,11 @@ public class DynamicBinaryWeightedSSA extends Command {
@Option(name="--const",usage="Model constant name=value")
public String modelConstant = "";

@Option(name="--weight",usage="TODO: needs description",handler=MapDoubleOptionHandler.class)
public Map<String,Double> predilections = Map.of("[r3]", 1e20);

public String argsToString() {
return String.format("TMAX=%f Nruns=%d modelFile=%s ", TMAX, Nruns, modelFileName);
return String.format("TMAX=%f Nruns=%d modelFile=%s weights=%s", TMAX, Nruns, modelFileName, predilections);
}
public String argsRawToString() {
return String.format("%f\t%d", TMAX, Nruns);
Expand All @@ -90,19 +89,16 @@ public String argsRawToString() {
public SimulatorEngine sim;
public ModelGenerator info;

private int constraintIndex;
private int objectiveIndex;
//private int constraintIndex;
//private int objectiveIndex;
private RandomNumberGenerator rng = new RandomNumberGenerator();
private Dictionary predilections = new Hashtable();

@Override
public int exec() throws IOException, PrismException {

logger.debug("Running Dynamic Binary Weighted SSA");

loadModel();
Double d=1e20;
predilections.put("[r3]",d);

double sum = 0.0;
long binarySum = 0;
Expand Down
15 changes: 6 additions & 9 deletions src/main/java/imsam/Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package imsam;

import java.util.stream.Stream;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand All @@ -11,7 +13,6 @@
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.spi.OptionHandler;
import org.kohsuke.args4j.spi.SubCommand;
import org.kohsuke.args4j.spi.SubCommandHandler;
import org.kohsuke.args4j.spi.SubCommands;
Expand Down Expand Up @@ -95,14 +96,10 @@ public static void printUsage(CmdLineException ex) {
private static void _printUsage(CmdLineParser parser, boolean includeSubcommand) {
System.err.println("Usage:");
System.err.print(" ./bin/run.sh");
for (OptionHandler arg : Main.parser.getArguments()) {
System.err.print(" " + arg.getDefaultMetaVariable());
}
if (includeSubcommand) {
for (OptionHandler arg : parser.getArguments()) {
System.err.print(" " + arg.getDefaultMetaVariable());
}
}
Stream.concat(
Main.parser.getArguments().stream(),
parser.getArguments().stream()
).forEachOrdered(opt -> System.err.print(" "+opt.getDefaultMetaVariable()));
System.err.println(" [OPTIONS]...\n");
parser.printUsage(System.err);
}
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/imsam/args4j/MapDoubleOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package imsam.args4j;

import java.util.Map;

import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;
import org.kohsuke.args4j.spi.Setter;

public class MapDoubleOptionHandler extends MultiMapOptionHandler {

public MapDoubleOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super Map<?, ?>> setter) {
super(parser, option, setter);
}

@Override
@SuppressWarnings({"rawtypes", "unchecked"})
protected void addToMap(Map m, String key, String value) {
m.put(key, Double.parseDouble(value));
}

}
21 changes: 21 additions & 0 deletions src/main/java/imsam/args4j/MapIntOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package imsam.args4j;

import java.util.Map;

import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;
import org.kohsuke.args4j.spi.Setter;

public class MapIntOptionHandler extends MultiMapOptionHandler {

public MapIntOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super Map<?, ?>> setter) {
super(parser, option, setter);
}

@Override
@SuppressWarnings({"rawtypes", "unchecked"})
protected void addToMap(Map m, String key, String value) {
m.put(key, Integer.parseInt(value));
}

}
34 changes: 34 additions & 0 deletions src/main/java/imsam/args4j/MultiMapOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package imsam.args4j;

import java.util.Map;

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;
import org.kohsuke.args4j.spi.MapOptionHandler;
import org.kohsuke.args4j.spi.Parameters;
import org.kohsuke.args4j.spi.Setter;

public class MultiMapOptionHandler extends MapOptionHandler {

protected static final String delimiterRegex = ",";

protected final CmdLineParser parser;
protected final OptionDef option;

public MultiMapOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super Map<?,?>> setter) {
super(parser, option, setter);
this.parser = parser;
this.option = option;
}

@Override
public int parseArguments(Parameters params) throws CmdLineException {
for (String arg : params.getParameter(0).split(delimiterRegex)) {
Parameters splitParam = new ParametersImpl(new String[]{arg}, parser, option);
super.parseArguments(splitParam);
}
return 1;
}

}
50 changes: 50 additions & 0 deletions src/main/java/imsam/args4j/ParametersImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package imsam.args4j;

import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.OptionDef;
import org.kohsuke.args4j.spi.Parameters;

public class ParametersImpl implements Parameters {

private final CmdLineParser parser;
private final OptionDef option;

private final String[] args;
private int pos;

ParametersImpl(String[] args, CmdLineParser parser, OptionDef option) {
this.parser = parser;
this.option = option;
this.args = args;
pos = 0;
}

@Override
@SuppressWarnings("deprecation") // Use CmdLineException without localization
public String getParameter(int idx) throws CmdLineException {
if (pos+idx >= args.length || pos+idx < 0) {
String msg = String.format("Option \"{0}\" takes an operand", option.toString());
throw new CmdLineException(parser, msg);
}
return args[pos+idx];
}

@Override
public int size() {
return args.length - pos;
}

public boolean hasMore() {
return pos < args.length;
}

public String getCurrentToken() {
return args[pos];
}

public void proceed(int n) {
pos += n;
}

}
45 changes: 45 additions & 0 deletions src/test/java/imsam/args4j/Test_MapDoubleOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package imsam.args4j;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.HashMap;
import java.util.Map;

import org.junit.jupiter.api.Test;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import org.opentest4j.AssertionFailedError;

public class Test_MapDoubleOptionHandler {

protected class TestClass {
@Option(name="--dict", metaVar="dict", handler=MapDoubleOptionHandler.class)
public Map<String,Double> dictionary = new HashMap<>();
}

protected Map<String,Double> parse(String[] args) throws CmdLineException {
TestClass testClass = new TestClass();
CmdLineParser parser = new CmdLineParser(testClass);
parser.parseArgument(args);
return testClass.dictionary;
}

@Test
public void test_MapStringDouble() throws CmdLineException {
String[] args = "--dict foo=1.11 --dict bar=2.22 --dict baz=3.33".split("\\s+");
Map<String,Double> map = parse(args);
try {
assertTrue(map.size() == 3);
assertEquals(1.11, map.get("foo"));
assertEquals(2.22, map.get("bar"));
assertEquals(3.33, map.get("baz"));
}
catch (AssertionFailedError ex) {
System.err.println(map);
throw ex;
}
}

}
45 changes: 45 additions & 0 deletions src/test/java/imsam/args4j/Test_MapIntOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package imsam.args4j;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.HashMap;
import java.util.Map;

import org.junit.jupiter.api.Test;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import org.opentest4j.AssertionFailedError;

public class Test_MapIntOptionHandler {

protected class TestClass {
@Option(name="--dict", metaVar="dict", handler=MapIntOptionHandler.class)
public Map<String,Integer> dictionary = new HashMap<>();
}

protected Map<String,Integer> parse(String[] args) throws CmdLineException {
TestClass testClass = new TestClass();
CmdLineParser parser = new CmdLineParser(testClass);
parser.parseArgument(args);
return testClass.dictionary;
}

@Test
public void test_MapStringInt() throws CmdLineException {
String[] args = "--dict foo=1 --dict bar=2 --dict baz=3".split("\\s+");
Map<String,Integer> map = parse(args);
try {
assertTrue(map.size() == 3);
assertEquals(1, map.get("foo"));
assertEquals(2, map.get("bar"));
assertEquals(3, map.get("baz"));
}
catch (AssertionFailedError ex) {
System.err.println(map);
throw ex;
}
}

}
70 changes: 70 additions & 0 deletions src/test/java/imsam/args4j/Test_MultiMapOptionHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package imsam.args4j;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.HashMap;
import java.util.Map;

import org.junit.jupiter.api.Test;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
import org.opentest4j.AssertionFailedError;

public class Test_MultiMapOptionHandler {

protected class TestClass {
@Option(name="--dict", metaVar="dict", handler=MultiMapOptionHandler.class)
public Map<String,String> dictionary = new HashMap<>();
}

protected Map<String,String> parse(String[] args) throws CmdLineException {
TestClass testClass = new TestClass();
CmdLineParser parser = new CmdLineParser(testClass);
parser.parseArgument(args);
return testClass.dictionary;
}

@Test
public void test_Empty() throws CmdLineException {
String[] args = {};
Map<String,String> map = parse(args);
assertTrue(map.isEmpty());
}

@Test
public void test_MapStringString() throws CmdLineException {
String[] args = "--dict foo=Hello --dict bar=World".split("\\s+");
Map<String,String> map = parse(args);
try {
assertEquals(2, map.size());
assertEquals("Hello", map.get("foo"));
assertEquals("World", map.get("bar"));
}
catch (AssertionFailedError ex) {
System.err.println(map);
throw ex;
}
}

@Test
public void test_MultiMap() throws CmdLineException {
String[] args = "--dict foo=99,bar=88,baz=77".split("\\s+");
Map<String,String> map = parse(args);
try {
assertEquals(3, map.size());
assertEquals("99", map.get("foo"));
assertEquals("88", map.get("bar"));
assertEquals("77", map.get("baz"));
}
catch (AssertionFailedError ex) {
System.err.println("size="+map.size());
map.forEach((key, value) -> {
System.err.println("'"+key+"' : '"+value+"'");
});
throw ex;
}
}

}