package cc.mallet.types;

import cc.mallet.types.Label;

/** A distribution over possible labels for an instance. */

public interface Labeling extends AlphabetCarrying
{
	public LabelAlphabet getLabelAlphabet ();
	
	public Label getBestLabel ();
	public double getBestValue ();
	public int getBestIndex ();

	public double value (Label label);
	public double value (int labelIndex);

	// Zero-based
	public int getRank (Label label);
	public int getRank (int labelIndex);
	public Label getLabelAtRank (int rank);
	public double getValueAtRank (int rank);

	public void addTo (double[] values);
	public void addTo (double[] values, double scale);

	// The number of non-zero-weight Labels in this Labeling, not total
	// number in the Alphabet
	public int numLocations ();
	// xxx Use "get..."? 
	public int indexAtLocation (int pos);
	public Label labelAtLocation (int pos);
	public double valueAtLocation (int pos);

	public LabelVector toLabelVector();
	
}
