// Path: src/main/java/com/asher_stern/crf/utilities/MiscellaneousUtilities.java
// public static <T> boolean equalObjects(T t1, T t2)
// {
// 	if (t1==t2) return true;
// 	if ( (t1==null) || (t2==null) ) return false;
// 	return t1.equals(t2);
// }
// 
// Path: src/main/java/com/asher_stern/crf/crf/CrfFeature.java
// public abstract class CrfFeature<K,G> implements Serializable // K = token, G = tag
// {
// 	private static final long serialVersionUID = 5422105702440104947L;
// 	
// 	public abstract double value(K[] sequence, int indexInSequence, G currentTag, G previousTag);
// 	
// 	public abstract boolean equals(Object obj);
// 	public abstract int hashCode();
// }


import static com.asher_stern.crf.utilities.MiscellaneousUtilities.equalObjects;
import com.asher_stern.crf.crf.CrfFeature;
	{
		return "TagTransitionFeature [forPreviousTag=" + forPreviousTag
				+ ", forCurrentTag=" + forCurrentTag + "]";
	}
	
	
	



	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((forCurrentTag == null) ? 0 : forCurrentTag.hashCode());
		result = prime * result
				+ ((forPreviousTag == null) ? 0 : forPreviousTag.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
// Path: src/main/java/com/asher_stern/crf/utilities/MiscellaneousUtilities.java
// public static <T> boolean equalObjects(T t1, T t2)
// {
// 	if (t1==t2) return true;
// 	if ( (t1==null) || (t2==null) ) return false;
// 	return t1.equals(t2);
// }
// 
// Path: src/main/java/com/asher_stern/crf/crf/CrfFeature.java
// public abstract class CrfFeature<K,G> implements Serializable // K = token, G = tag
// {
// 	private static final long serialVersionUID = 5422105702440104947L;
// 	
// 	public abstract double value(K[] sequence, int indexInSequence, G currentTag, G previousTag);
// 	
// 	public abstract boolean equals(Object obj);
// 	public abstract int hashCode();
// }


// Path: src/main/java/com/asher_stern/crf/postagging/postaggers/crf/features/TagTransitionFeature.java
import static com.asher_stern.crf.utilities.MiscellaneousUtilities.equalObjects;
import com.asher_stern.crf.crf.CrfFeature;

	{
		return "TagTransitionFeature [forPreviousTag=" + forPreviousTag
				+ ", forCurrentTag=" + forCurrentTag + "]";
	}
	
	
	



	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((forCurrentTag == null) ? 0 : forCurrentTag.hashCode());
		result = prime * result
				+ ((forPreviousTag == null) ? 0 : forPreviousTag.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;