edu.cmu.tetradapp.ui.model.AlgorithmModels Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2017 University of Pittsburgh.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package edu.cmu.tetradapp.ui.model;
import edu.cmu.tetrad.annotation.AlgType;
import edu.cmu.tetrad.annotation.Algorithm;
import edu.cmu.tetrad.annotation.AlgorithmAnnotations;
import edu.cmu.tetrad.annotation.AnnotatedClass;
import edu.cmu.tetrad.data.DataType;
import edu.cmu.tetradapp.Tetrad;
import java.util.*;
import java.util.stream.Collectors;
/**
* Nov 30, 2017 4:20:43 PM
*
* @author Kevin V. Bui ([email protected])
* @version $Id: $Id
*/
public final class AlgorithmModels {
private static final AlgorithmModels INSTANCE = new AlgorithmModels();
private List models;
private Map> modelMap;
private AlgorithmModels() {
refreshModels();
}
/**
* getInstance.
*
* @return a {@link edu.cmu.tetradapp.ui.model.AlgorithmModels} object
*/
public static AlgorithmModels getInstance() {
AlgorithmModels.INSTANCE.refreshModels(); // if we had a subscriber CPDAG for app settings would not have to waste time doing this every time!
return AlgorithmModels.INSTANCE;
}
private void refreshModels() {
AlgorithmAnnotations algoAnno = AlgorithmAnnotations.getInstance();
List> list = Tetrad.enableExperimental
? algoAnno.getAnnotatedClasses()
: algoAnno.filterOutExperimental(algoAnno.getAnnotatedClasses());
this.models = Collections.unmodifiableList(
list.stream()
.map(AlgorithmModel::new)
.sorted()
.collect(Collectors.toList()));
Map> map = new EnumMap<>(AlgType.class);
// initialize enum map
for (AlgType algType : AlgType.values()) {
map.put(algType, new LinkedList<>());
}
// group by datatype
this.models.forEach(e -> map.get(e.getAlgorithm().annotation().algoType()).add(e));
// make it unmodifiable
map.forEach((k, v) -> map.put(k, Collections.unmodifiableList(v)));
this.modelMap = Collections.unmodifiableMap(map);
}
private List filterInclusivelyByAllOrSpecificDataType(List algorithmModels, DataType dataType, boolean multiDataSetAlgorithm) {
AlgorithmAnnotations algoAnno = AlgorithmAnnotations.getInstance();
return (dataType == DataType.All)
? algorithmModels
: algorithmModels.stream()
.filter(e -> !multiDataSetAlgorithm || algoAnno.takesMultipleDataset(e.getAlgorithm().clazz()))
.filter(e -> {
for (DataType dt : e.getAlgorithm().annotation().dataType()) {
if (dt == DataType.All || dt == dataType) {
return true;
}
}
return false;
})
.collect(Collectors.toList());
}
/**
* Getter for the field models
.
*
* @param dataType a {@link edu.cmu.tetrad.data.DataType} object
* @param multiDataSetAlgorithm a boolean
* @return a {@link java.util.List} object
*/
public List getModels(DataType dataType, boolean multiDataSetAlgorithm) {
return filterInclusivelyByAllOrSpecificDataType(this.models, dataType, multiDataSetAlgorithm);
}
/**
* Getter for the field models
.
*
* @param algType a {@link edu.cmu.tetrad.annotation.AlgType} object
* @param dataType a {@link edu.cmu.tetrad.data.DataType} object
* @param multiDataSetAlgorithm a boolean
* @return a {@link java.util.List} object
*/
public List getModels(AlgType algType, DataType dataType, boolean multiDataSetAlgorithm) {
return this.modelMap.containsKey(algType)
? filterInclusivelyByAllOrSpecificDataType(this.modelMap.get(algType), dataType, multiDataSetAlgorithm)
: Collections.EMPTY_LIST;
}
public AlgorithmModel getAlgorithmModelByName(String lastAlgorithmChoice) {
AlgorithmModels algorithmModels = AlgorithmModels.getInstance();
List algorithmModels1 = algorithmModels.getModels(DataType.Continuous, false);
for (AlgorithmModel algorithmModel : algorithmModels1) {
if (algorithmModel.getName().equals(lastAlgorithmChoice)) {
return algorithmModel;
}
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy