// Path: edits-core/src/main/java/org/edits/engines/OptimizationGoal.java
// @ToString(includeFieldNames = true)
// public class OptimizationGoal implements Serializable {
// 
// 	public enum Target {
// 		ACCURACY, FMEASURE, PRECISION, RECALL
// 	}
// 
// 	public static final OptimizationGoal ACCURACY = new OptimizationGoal(Target.ACCURACY, null);
// 
// 	public static final OptimizationGoal FMEASURE_NO = new OptimizationGoal(Target.FMEASURE, "NO");
// 	public static final OptimizationGoal FMEASURE_YES = new OptimizationGoal(Target.FMEASURE, "YES");
// 	public static final OptimizationGoal PRECISION_NO = new OptimizationGoal(Target.PRECISION, "NO");
// 	public static final OptimizationGoal PRECISION_YES = new OptimizationGoal(Target.PRECISION, "YES");
// 	public static final OptimizationGoal RECALL_NO = new OptimizationGoal(Target.RECALL, "NO");
// 	public static final OptimizationGoal RECALL_YES = new OptimizationGoal(Target.RECALL, "YES");
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	@Getter
// 	private final String relation;
// 	@Getter
// 	private final Target target;
// 
// 	public OptimizationGoal() {
// 		this(Target.ACCURACY, null);
// 	}
// 
// 	public OptimizationGoal(Target target, String relation) {
// 		super();
// 		this.relation = relation;
// 		this.target = target;
// 	}
// 
// }
// 
// Path: edits-core/src/main/java/org/edits/etaf/AnnotatedEntailmentPair.java
// @Data
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "AnnotatedEntailmentPair", propOrder = { "t", "h" })
// public class AnnotatedEntailmentPair {
// 
// 	public static AnnotatedEntailmentPair create(String t2, String h2, EditsTextAnnotator annotator) throws Exception {
// 		AnnotatedEntailmentPair px = new AnnotatedEntailmentPair();
// 		AnnotatedText at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(t2));
// 		px.getT().add(at);
// 		at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(h2));
// 		px.getH().add(at);
// 		return px;
// 	}
// 
// 	@XmlTransient
// 	private Map<String, String> attributes;
// 	@XmlAttribute
// 	protected String entailment;
// 	@XmlElement
// 	protected List<AnnotatedText> h;
// 	@XmlAttribute
// 	protected String id;
// 
// 	@XmlTransient
// 	private int order;
// 
// 	@XmlElement
// 	protected List<AnnotatedText> t;
// 
// 	@XmlAttribute
// 	protected String task;
// 
// 	public AnnotatedEntailmentPair() {
// 		t = Lists.newArrayList();
// 		h = Lists.newArrayList();
// 		attributes = Maps.newHashMap();
// 	}
// 
// }


import java.io.Serializable;
import java.util.List;
import org.edits.engines.OptimizationGoal;
import org.edits.etaf.AnnotatedEntailmentPair;
package org.edits.engines.weka.features;



public abstract class Feature implements Serializable, Cloneable {

	private static final long serialVersionUID = 1L;

	@Override
	public abstract Feature clone();

	public double doubleValue(AnnotatedEntailmentPair pair) {
		throw new UnsupportedOperationException("@Override this method for  numeric features.");
	}

// Path: edits-core/src/main/java/org/edits/engines/OptimizationGoal.java
// @ToString(includeFieldNames = true)
// public class OptimizationGoal implements Serializable {
// 
// 	public enum Target {
// 		ACCURACY, FMEASURE, PRECISION, RECALL
// 	}
// 
// 	public static final OptimizationGoal ACCURACY = new OptimizationGoal(Target.ACCURACY, null);
// 
// 	public static final OptimizationGoal FMEASURE_NO = new OptimizationGoal(Target.FMEASURE, "NO");
// 	public static final OptimizationGoal FMEASURE_YES = new OptimizationGoal(Target.FMEASURE, "YES");
// 	public static final OptimizationGoal PRECISION_NO = new OptimizationGoal(Target.PRECISION, "NO");
// 	public static final OptimizationGoal PRECISION_YES = new OptimizationGoal(Target.PRECISION, "YES");
// 	public static final OptimizationGoal RECALL_NO = new OptimizationGoal(Target.RECALL, "NO");
// 	public static final OptimizationGoal RECALL_YES = new OptimizationGoal(Target.RECALL, "YES");
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	@Getter
// 	private final String relation;
// 	@Getter
// 	private final Target target;
// 
// 	public OptimizationGoal() {
// 		this(Target.ACCURACY, null);
// 	}
// 
// 	public OptimizationGoal(Target target, String relation) {
// 		super();
// 		this.relation = relation;
// 		this.target = target;
// 	}
// 
// }
// 
// Path: edits-core/src/main/java/org/edits/etaf/AnnotatedEntailmentPair.java
// @Data
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "AnnotatedEntailmentPair", propOrder = { "t", "h" })
// public class AnnotatedEntailmentPair {
// 
// 	public static AnnotatedEntailmentPair create(String t2, String h2, EditsTextAnnotator annotator) throws Exception {
// 		AnnotatedEntailmentPair px = new AnnotatedEntailmentPair();
// 		AnnotatedText at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(t2));
// 		px.getT().add(at);
// 		at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(h2));
// 		px.getH().add(at);
// 		return px;
// 	}
// 
// 	@XmlTransient
// 	private Map<String, String> attributes;
// 	@XmlAttribute
// 	protected String entailment;
// 	@XmlElement
// 	protected List<AnnotatedText> h;
// 	@XmlAttribute
// 	protected String id;
// 
// 	@XmlTransient
// 	private int order;
// 
// 	@XmlElement
// 	protected List<AnnotatedText> t;
// 
// 	@XmlAttribute
// 	protected String task;
// 
// 	public AnnotatedEntailmentPair() {
// 		t = Lists.newArrayList();
// 		h = Lists.newArrayList();
// 		attributes = Maps.newHashMap();
// 	}
// 
// }


// Path: edits-core/src/main/java/org/edits/engines/weka/features/Feature.java
import java.io.Serializable;
import java.util.List;
import org.edits.engines.OptimizationGoal;
import org.edits.etaf.AnnotatedEntailmentPair;

package org.edits.engines.weka.features;



public abstract class Feature implements Serializable, Cloneable {

	private static final long serialVersionUID = 1L;

	@Override
	public abstract Feature clone();

	public double doubleValue(AnnotatedEntailmentPair pair) {
		throw new UnsupportedOperationException("@Override this method for  numeric features.");
	}

	public void init(List<AnnotatedEntailmentPair> training, OptimizationGoal goal) throws Exception {