// Path: src/fdt/utils/Tuple.java
// public class Tuple<T1, T2> {
//     private T1 first;
//     private T2 second;
// 
//     /**
//      *
//      */
//     public Tuple() {
//     }
// 
//     /**
//      *
//      * @param first
//      * @param second
//      */
//     public Tuple(T1 first, T2 second) {
//         this.first = first;
//         this.second = second;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public T1 getFirst() {
//         return first;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public T2 getSecond() {
//         return second;
//     }
// 
//     /**
//      *
//      * @param first
//      */
//     public void setFirst(T1 first) {
//         this.first = first;
//     }
// 
//     /**
//      *
//      * @param second
//      */
//     public void setSecond(T2 second) {
//         this.second = second;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return String.format("(%s, %s)", first, second);
//     }
//     
//     
// }


import fdt.utils.Tuple;
import java.util.HashMap;

package fdt.core;


/**
 *
 * @author Mohammed Jabreel
 */
public class TrainableEdge extends EdgeBase {

    private static final long serialVersionUID = 1865428303994838795L;

    private double[] evidences;
    private HashMap<String, Double> classSupports = new HashMap<>();

    /**
     *
     */
    public TrainableEdge() {
    }
    
    /**
     *
     * @param edge
     */
    public TrainableEdge(TrainableEdge edge) {
        this.evidences = edge.evidences;
        this.ambiguity = edge.ambiguity;
        this.classSupports = edge.classSupports;
        this.text = edge.text;
    }

    /**
     *
     * @param text
     */
    public TrainableEdge(String text) {
        super(text);
    }

    /**
     *
     * @param className
     * @param support
     */
    public void setClassSupport(String className, double support) {
        classSupports.put(className, support);
    }

    /**
     *
     * @return
     */
    public HashMap<String, Double> getClassSupports() {
        return classSupports;
    }

    /**
     *
     * @return
     */
// Path: src/fdt/utils/Tuple.java
// public class Tuple<T1, T2> {
//     private T1 first;
//     private T2 second;
// 
//     /**
//      *
//      */
//     public Tuple() {
//     }
// 
//     /**
//      *
//      * @param first
//      * @param second
//      */
//     public Tuple(T1 first, T2 second) {
//         this.first = first;
//         this.second = second;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public T1 getFirst() {
//         return first;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public T2 getSecond() {
//         return second;
//     }
// 
//     /**
//      *
//      * @param first
//      */
//     public void setFirst(T1 first) {
//         this.first = first;
//     }
// 
//     /**
//      *
//      * @param second
//      */
//     public void setSecond(T2 second) {
//         this.second = second;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return String.format("(%s, %s)", first, second);
//     }
//     
//     
// }


// Path: src/fdt/core/TrainableEdge.java
import fdt.utils.Tuple;
import java.util.HashMap;


package fdt.core;


/**
 *
 * @author Mohammed Jabreel
 */
public class TrainableEdge extends EdgeBase {

    private static final long serialVersionUID = 1865428303994838795L;

    private double[] evidences;
    private HashMap<String, Double> classSupports = new HashMap<>();

    /**
     *
     */
    public TrainableEdge() {
    }
    
    /**
     *
     * @param edge
     */
    public TrainableEdge(TrainableEdge edge) {
        this.evidences = edge.evidences;
        this.ambiguity = edge.ambiguity;
        this.classSupports = edge.classSupports;
        this.text = edge.text;
    }

    /**
     *
     * @param text
     */
    public TrainableEdge(String text) {
        super(text);
    }

    /**
     *
     * @param className
     * @param support
     */
    public void setClassSupport(String className, double support) {
        classSupports.put(className, support);
    }

    /**
     *
     * @return
     */
    public HashMap<String, Double> getClassSupports() {
        return classSupports;
    }

    /**
     *
     * @return
     */
    public Tuple<String, Double> getBestClass() {