public void testMarginalize () { Assignment assn = new Assignment (); assn.addRow (vars, new int[] { 1, 1 }); assn.addRow (vars, new int[] { 1, 0 }); Assignment assn2 = (Assignment) assn.marginalize (vars[0]); assertEquals (2, assn2.numRows ()); assertEquals (1, assn2.size ()); assertEquals (vars[0], assn2.getVariable (0)); assertEquals (1, assn.get (0, vars[0])); assertEquals (1, assn.get (1, vars[0])); }
public void testAddRowMixed () { Assignment assn = new Assignment (); assn.addRow (vars, new int[] { 1, 1 }); assn.addRow (vars, new int[] { 1, 0 }); Assignment assn2 = new Assignment (); assn2.addRow (new Variable[] { vars[1], vars[0] }, new int[] { 0, 1 }); assn.addRow (assn2); AbstractTableFactor tbl = assn.asTable (); TableFactor exp = new TableFactor (vars, new double[] { 0, 0, 2, 1 }); assertTrue (exp.almostEquals (tbl)); }
public Assignment subAssn (int start, int end) { Assignment other = new Assignment (); for (int ri = start; ri < end; ri++) { other.addRow (getRow (ri)); } return other; }
public void setValue (Variable var, int value) { checkIsSingleRow (); setValue (0, var, value); }
private void checkAssignmentsMatch (Variable[] vars) { if (numRows () == 0) { setVariables (vars); } else { checkVariables (vars); } }
Assignment ret = new Assignment (); VarSet vars = new HashVarSet (); vars.addAll (assn1.vars); Variable[] varr = vars.toVariableArray (); if (assn1.numRows () == 0) { return (Assignment) assn2.duplicate (); } else if (assn2.numRows () == 0) { return (Assignment) assn1.duplicate (); } else if (assn1.numRows () != assn2.numRows ()) { throw new IllegalArgumentException ("Number of rows not equal."); for (int ri = 0; ri < assn2.numRows (); ri++) { if (!assn1.containsVar (var)) { row[vi] = assn2.getObject (var); } else if (!assn2.containsVar (var)) { row[vi] = assn1.getObject (var); } else { Object val1 = assn1.getObject (var); Object val2 = assn2.getObject (var); if (!val1.equals (val2)) { throw new IllegalArgumentException ("Assignments don't match on intersection.\n ASSN1["+var+"] = "+val1+"\n ASSN2["+var+"] = "+val2); ret.addRow (varr, row);
public void testMarginalizeOut () { Assignment assn = new Assignment (); assn.addRow (vars, new int[] { 1, 1 }); assn.addRow (vars, new int[] { 1, 0 }); Assignment assn2 = (Assignment) assn.marginalizeOut (vars[1]); assertEquals (2, assn2.numRows ()); assertEquals (1, assn2.size ()); assertEquals (vars[0], assn2.getVariable (0)); assertEquals (1, assn.get (0, vars[0])); assertEquals (1, assn.get (1, vars[0])); }
public void addRow (Assignment other) { checkAssignmentsMatch (other); for (int ridx = 0; ridx < other.numRows(); ridx++) { Object[] otherRow = (Object[]) other.values.get (ridx); Object[] row = new Object [otherRow.length]; for (int vi = 0; vi < row.length; vi++) { Variable var = this.getVariable (vi); row[vi] = other.getObject (ridx, var); } this.addRow (row); } }
private void checkAssignmentsMatch (Assignment other) { if (numVariables () == 0) { setVariables (other.vars.toVariableArray ()); } else { if (numVariables () != other.numVariables ()) throw new IllegalArgumentException ("Attempt to add row with non-matching variables.\n" + " This has vars: " + varSet () + "\n Other has vars:" + other.varSet ()); for (int vi = 0; vi < numVariables (); vi++) { Variable var = this.getVariable (vi); if (!other.containsVar (var)) { throw new IllegalArgumentException ("Attempt to add row with non-matching variables"); } } } }
public void testSetValueDup () { Assignment assn = new Assignment (); assn.addRow (vars, new int[] { 1, 1 }); Assignment dup = (Assignment) assn.duplicate (); dup.setValue (vars[0], 0); assertEquals (1, dup.numRows ()); assertEquals (0, dup.get (0, vars[0])); assertEquals (1, dup.get (0, vars[1])); }
public void testUnion () { Assignment assn1 = new Assignment (); assn1.addRow (new Variable[] { vars[0] }, new int[] { 1 }); Assignment assn2 = new Assignment (); assn2.addRow (new Variable[] { vars[1] }, new int[] { 0 }); Assignment assn3 = Assignment.union (assn1, assn2); assertEquals (1, assn3.numRows ()); assertEquals (2, assn3.numVariables ()); assertEquals (1, assn3.get (0, vars[0])); assertEquals (0, assn3.get (0, vars[1])); }
public void testSetValueExpand () { Assignment assn = new Assignment (); assn.addRow (vars, new int[] { 0, 0 }); Variable v3 = new Variable (2); assn.setValue (v3, 1); assertEquals (3, assn.size ()); assertEquals (0, assn.get (vars[0])); assertEquals (0, assn.get (vars[1])); assertEquals (1, assn.get (v3)); }
public Assignment sample (Randoms r) { int ri = r.nextInt (numRows ()); Object[] vals = (Object[]) values.get (ri); Assignment assn = new Assignment (); Variable[] varr = (Variable[]) vars.toArray (new Variable [numVariables ()]); assn.addRow (varr, vals); return assn; }
public void testSerialization () throws IOException, ClassNotFoundException { Assignment assn = new Assignment (vars, new int[] { 1, 0 }); Assignment assn2 = (Assignment) TestSerializable.cloneViaSerialization (assn); assertEquals (2, assn2.numVariables ()); assertEquals (1, assn2.numRows ()); assertEquals (1, assn.get (vars [0])); assertEquals (0, assn.get (vars [1])); }
public void testScale () { Assignment assn = new Assignment (vars, new int[] { 1, 0 }); assn.addRow (vars, new int[] { 1, 0 }); assn.addRow (vars, new int[] { 1, 1 }); Assignment assn2 = new Assignment (vars, new int[] { 1, 0 }); assn.normalize (); assertEquals (0.666666, assn.value (assn2), 1e-5); }
/** Returns true if this assignment specifies a value for <tt>var</tt> */ public boolean containsVar (Variable var) { int idx = colOfVar (var, false); return (idx != -1); }
public void testSimple () { Assignment assn = new Assignment (vars, new int[] { 1, 0 }); assertEquals (1, assn.get (vars [0])); assertEquals (0, assn.get (vars [1])); assertEquals (new Integer (0), assn.getObject (vars[1])); }
public void addRow (Variable[] vars, Object[] values) { checkAssignmentsMatch (vars); addRow (values); }
public void divideBy (Factor other) { if (other instanceof ConstantFactor) { val /= other.value (new Assignment ()); } else { throw new UnsupportedOperationException ("Can't divide uniform factor by "+other); } }