// Path: src/fdt/core/DecisionNode.java
// public class DecisionNode extends Node {
// 
//     private static final long serialVersionUID = 5241099508522414606L;
// 
//     private double support;
// 
//     /**
//      *
//      */
//     public DecisionNode() {
//     }
// 
//     /**
//      *
//      * @param text
//      * @param support
//      */
//     public DecisionNode(String text, double support) {
//         super(text);
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getSupport() {
//         return support;
//     }
// 
//     /**
//      *
//      * @param support
//      */
//     public void setSupport(double support) {
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public boolean isLeaf() {
//         return true;
//     }
// 
// }
// 
// Path: src/fdt/core/DecisionSet.java
// public class DecisionSet implements Serializable {
// 
//     private static final long serialVersionUID = -2414492555910250695L;
// 
//     private String name;
//     private final List<DecisionNode> decisionNodes = new ArrayList<>();
//     private IntermediateNode estimator;
//     
//     private final List<Object> bag = new ArrayList<>();
//     
//     /**
//      *
//      */
//     public DecisionSet() {
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public DecisionSet(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @param name
//      * @param estimator
//      */
//     public DecisionSet(String name, IntermediateNode estimator) {
//         this.name = name;
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public IntermediateNode getEstimator() {
//         return estimator;
//     }
// 
//     /**
//      *
//      * @param estimator
//      */
//     public void setEstimator(IntermediateNode estimator) {
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<DecisionNode> getDecisionNodes() {
//         return decisionNodes;
//     }
//     
//     /**
//      *
//      * @param val
//      */
//     public void addToBag(Object val) {
//         bag.add(val);
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<Object> getBag() {
//         return bag;
//     }
//     
//     /**
//      *
//      * @param obj
//      * @return
//      */
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == this) {
//             return true;
//         }
// 
//         return super.equals(obj); //To change body of generated methods, choose Tools | Templates.
//     }
// 
// }
// 
// Path: src/fdt/core/IntermediateNode.java
// public class IntermediateNode extends IntermediateNodeBase {
// 
//     private static final long serialVersionUID = -1668837612685717472L;
//     
//     
//     private final HashMap<String, Double> classesLambdas = new HashMap<>();
//     
//     private Nullable<Double> lambda = Nullable.empty();
//     
//     /**
//      *
//      * @return
//      */
//     public double getLambda() {
//         return lambda.orElse(0.0);
//     }
// 
//     /**
//      *
//      * @param lambda
//      */
//     public void setLambda(double lambda) {
//         this.lambda = Nullable.of(lambda);
// }    
//     
//     /**
//      *
//      * @param className
//      * @return
//      */
//     public boolean hasLambda(String className) {
//         return this.classesLambdas.containsKey(className);
//     }
//     
//     /**
//      *
//      * @return
//      */
//     public boolean hasLambda() {
//         return lambda.isPresent();
//     }
//     
//     /**
//      *
//      * @param className
//      * @return
//      */
//     public double getLambda(String className) {
//         return this.classesLambdas.get(className);
//     }
//     
//     /**
//      *
//      * @param className
//      * @param lambda
//      */
//     public void setLambda(String className, double lambda) {
//         this.classesLambdas.put(className, lambda);
//     }    
//     
// }


import fdt.core.DecisionNode;
import fdt.core.DecisionSet;
import fdt.core.IntermediateNode;
import java.util.List;

package fdt.fuzzy.measures;


/**
 *
 * A base class for the fuzzy measure methods.
 * 
 * @author Mohammed Jabreel
 */
public abstract class FuzzyMeasureBase implements FuzzyMeasure {

    private static final long serialVersionUID = 692379574106832903L;

    
    @Override
// Path: src/fdt/core/DecisionNode.java
// public class DecisionNode extends Node {
// 
//     private static final long serialVersionUID = 5241099508522414606L;
// 
//     private double support;
// 
//     /**
//      *
//      */
//     public DecisionNode() {
//     }
// 
//     /**
//      *
//      * @param text
//      * @param support
//      */
//     public DecisionNode(String text, double support) {
//         super(text);
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public double getSupport() {
//         return support;
//     }
// 
//     /**
//      *
//      * @param support
//      */
//     public void setSupport(double support) {
//         this.support = support;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public boolean isLeaf() {
//         return true;
//     }
// 
// }
// 
// Path: src/fdt/core/DecisionSet.java
// public class DecisionSet implements Serializable {
// 
//     private static final long serialVersionUID = -2414492555910250695L;
// 
//     private String name;
//     private final List<DecisionNode> decisionNodes = new ArrayList<>();
//     private IntermediateNode estimator;
//     
//     private final List<Object> bag = new ArrayList<>();
//     
//     /**
//      *
//      */
//     public DecisionSet() {
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public DecisionSet(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @param name
//      * @param estimator
//      */
//     public DecisionSet(String name, IntermediateNode estimator) {
//         this.name = name;
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public IntermediateNode getEstimator() {
//         return estimator;
//     }
// 
//     /**
//      *
//      * @param estimator
//      */
//     public void setEstimator(IntermediateNode estimator) {
//         this.estimator = estimator;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      *
//      * @param name
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     @Override
//     public String toString() {
//         return name;
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<DecisionNode> getDecisionNodes() {
//         return decisionNodes;
//     }
//     
//     /**
//      *
//      * @param val
//      */
//     public void addToBag(Object val) {
//         bag.add(val);
//     }
// 
//     /**
//      *
//      * @return
//      */
//     public List<Object> getBag() {
//         return bag;
//     }
//     
//     /**
//      *
//      * @param obj
//      * @return
//      */
//     @Override
//     public boolean equals(Object obj) {
//         if (obj == this) {
//             return true;
//         }
// 
//         return super.equals(obj); //To change body of generated methods, choose Tools | Templates.
//     }
// 
// }
// 
// Path: src/fdt/core/IntermediateNode.java
// public class IntermediateNode extends IntermediateNodeBase {
// 
//     private static final long serialVersionUID = -1668837612685717472L;
//     
//     
//     private final HashMap<String, Double> classesLambdas = new HashMap<>();
//     
//     private Nullable<Double> lambda = Nullable.empty();
//     
//     /**
//      *
//      * @return
//      */
//     public double getLambda() {
//         return lambda.orElse(0.0);
//     }
// 
//     /**
//      *
//      * @param lambda
//      */
//     public void setLambda(double lambda) {
//         this.lambda = Nullable.of(lambda);
// }    
//     
//     /**
//      *
//      * @param className
//      * @return
//      */
//     public boolean hasLambda(String className) {
//         return this.classesLambdas.containsKey(className);
//     }
//     
//     /**
//      *
//      * @return
//      */
//     public boolean hasLambda() {
//         return lambda.isPresent();
//     }
//     
//     /**
//      *
//      * @param className
//      * @return
//      */
//     public double getLambda(String className) {
//         return this.classesLambdas.get(className);
//     }
//     
//     /**
//      *
//      * @param className
//      * @param lambda
//      */
//     public void setLambda(String className, double lambda) {
//         this.classesLambdas.put(className, lambda);
//     }    
//     
// }


// Path: src/fdt/fuzzy/measures/FuzzyMeasureBase.java
import fdt.core.DecisionNode;
import fdt.core.DecisionSet;
import fdt.core.IntermediateNode;
import java.util.List;


package fdt.fuzzy.measures;


/**
 *
 * A base class for the fuzzy measure methods.
 * 
 * @author Mohammed Jabreel
 */
public abstract class FuzzyMeasureBase implements FuzzyMeasure {

    private static final long serialVersionUID = 692379574106832903L;

    
    @Override
    public double evaluate(List<DecisionNode> subset, DecisionSet universeSet) {