/*
* Author: tdanford
* Date: Dec 3, 2008
*/
package org.seqcode.ml.bayesnets;
import java.util.*;
import org.seqcode.gseutils.models.Model;
public class BNValues {
public Map<String,Object> values;
public BNValues() {
values = new TreeMap<String,Object>();
}
public BNValues(Model m, BNVar... vars) {
this();
for(int i = 0; i < vars.length; i++) {
if(values.containsKey(vars[i].getName())) {
throw new IllegalArgumentException(
String.format("Duplicate name: %s", vars[i].getName()));
}
values.put(vars[i].getName(), vars[i].findValue(m));
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(String k : values.keySet()) {
if(sb.length() > 1) { sb.append(" "); }
sb.append(String.format("%s:%s", k, values.get(k).toString()));
}
sb.append("]");
return sb.toString();
}
public BNValues(BNVar[] vars, Object[] vals) {
this();
if(vars.length != vals.length) { throw new IllegalArgumentException(); }
for(int i = 0; i < vars.length; i++) {
if(values.containsKey(vars[i].getName())) {
throw new IllegalArgumentException(
String.format("Duplicate name: %s", vars[i].getName()));
}
if(!vars[i].hasValue(vals[i])) {
throw new IllegalArgumentException(vals[i].toString());
}
values.put(vars[i].getName(), vals[i]);
}
}
public Object[] valueArray() {
Object[] array = new Object[values.size()];
int i = 0;
for(String k : values.keySet()) {
array[i++] = values.get(k);
}
return array;
}
public String[] nameArray() {
String[] names = new String[values.size()];
int i = 0;
for(String k : values.keySet()) {
names[i++] = k;
}
return names;
}
public int hashCode() {
int code = 17;
for(String k : values.keySet()) {
code += k.hashCode(); code *= 37;
code += values.get(k).hashCode(); code *= 37;
}
return code;
}
public boolean equals(Object o) {
if(!(o instanceof BNValues)) { return false; }
BNValues v = (BNValues)o;
if(values.size() != v.values.size()) { return false; }
for(String k : values.keySet()) {
if(!v.values.containsKey(k) || !v.values.get(k).equals(values.get(k))) {
return false;
}
}
return true;
}
}