/* Copyright (C) 2003 Univ. of Massachusetts Amherst, Computer Science Dept.
This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit).
http://www.cs.umass.edu/~mccallum/mallet
This software is provided under the terms of the Common Public License,
version 1.0, as published by http://www.opensource.org. For further
information, see the file `LICENSE' included with this distribution. */
package cc.mallet.grmm.inference.gbp;
import java.util.*;
import cc.mallet.grmm.types.Factor;
import cc.mallet.grmm.types.Variable;
import gnu.trove.THashSet;
/**
* Created: May 27, 2005
*
* @author <A HREF="mailto:casutton@cs.umass.edu>casutton@cs.umass.edu</A>
* @version $Id: Region.java,v 1.1 2007/10/22 21:37:58 mccallum Exp $
*/
class Region {
// Collection of discrete potentials giving the factors of this region.
Set factors;
List parents; // List of parent regions
List children; // List of child regions
List vars; // All variables in region
int index;
boolean isRoot;
int countingNumber;
// cache for computing message passing strategy
Set descendants;
private Region ()
{
children = new ArrayList (0);
parents = new ArrayList (0);
isRoot = true;
index = -1;
}
Region (Variable var) {
this ();
factors = new THashSet ();
vars = new ArrayList (1);
vars.add (var);
}
Region (Factor ptl) {
this ();
factors = new THashSet ();
factors.add (ptl);
vars = new ArrayList (ptl.varSet ());
}
Region (Variable[] vars, Factor[] factors)
{
this();
this.factors = new THashSet (Arrays.asList (factors));
this.vars = new ArrayList (Arrays.asList (vars));
}
Region (Collection vars, Collection factors)
{
this();
this.factors = new THashSet (factors);
this.vars = new ArrayList (vars);
}
Region (Collection vars)
{
this();
this.vars = new ArrayList (vars);
factors = new THashSet ();
}
void addFactor (Factor ptl)
{
if (!factors.contains (ptl)) {
factors.add (ptl);
}
}
/* I think these were mistakes.
public boolean equals (Object o)
{
if (this == o) return true;
if (!(o instanceof Region)) return false;
final Region region = (Region) o;
if (factors != null ? !factors.equals (region.factors) : region.factors != null) return false;
if (vars != null ? !vars.equals (region.vars) : region.vars != null) return false;
return true;
}
public int hashCode ()
{
int result;
result = (factors != null ? factors.hashCode () : 0);
result = 29 * result + (vars != null ? vars.hashCode () : 0);
return result;
}
*/
public String toString ()
{
// No display of factors
StringBuffer buf = new StringBuffer ();
buf.append ("REGION[");
for (Iterator it = vars.iterator (); it.hasNext ();) {
Variable var = (Variable) it.next ();
buf.append (var);
if (it.hasNext ())
buf.append (" ");
}
buf.append ("] nf:");
buf.append (factors.size());
return buf.toString ();
}
}