summaryrefslogtreecommitdiff
path: root/elki/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'elki/src/main/java/de')
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/KDDTask.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractDistanceBasedAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractNumberVectorDistanceBasedAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractPrimitiveDistanceBasedAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/Algorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DependencyDerivator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DistanceBasedAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DummyAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNDistancesSampler.java7
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNJoin.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/MaterializeDistances.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/NullAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/KNNBenchmarkAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/RangeQueryBenchmarkAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/ValidateApproximativeKNNIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/AbstractClassifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/Classifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/KNNClassifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/PriorProbabilityClassifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/AbstractProjectedClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/CanopyPreClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithmUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/DBSCAN.java27
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/GriDBSCAN.java913
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/NaiveMeanShiftClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/SNNClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationClusteringAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationInitialization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/DistanceBasedInitializationWithMedian.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/SimilarityBasedInitializationWithMedian.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/AbstractBiclustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/ChengAndChurch.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/CASH.java160
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/COPAC.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ERiC.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/FourC.java37
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/HiCO.java25
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/LMCLUS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ORCLUS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHInterval.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHIntervalSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/ParameterizationFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/AbstractEMModelFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModelFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EM.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModelFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModelFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModelFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/AbstractRangeQueryNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/COPACNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/CorePredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/ERiCNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/EpsilonNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCCorePredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/GeneralizedDBSCAN.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/LSDBC.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/MinPtsCorePredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/NeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConCorePredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AGNES.java87
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AbstractHDBSCAN.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AnderbergHierarchicalClustering.java87
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CLINK.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CentroidLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CompleteLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/GroupAverageLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HDBSCANLinearMemory.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HierarchicalClusteringAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/LinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/MedianLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerDensityHierarchyRepresentationResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationBuilder.java171
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationResult.java117
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINK.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINKHDBSCANLinearMemory.java31
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SingleLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WardLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WeightedAverageLinkageMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/ExtractFlatClusteringFromHierarchy.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/HDBSCANHierarchyExtraction.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/SimplifiedHierarchyExtraction.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/AbstractKMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/BestOfMultipleKMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/CLARA.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBatchedLloyd.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBisecting.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansCompare.java271
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansElkan.java49
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHamerly.java49
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHybridLloydMacQueen.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansLloyd.java8
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansMacQueen.java8
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansSort.java284
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsEM.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsPAM.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/SingleAssignmentKMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/XMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/AbstractKMeansInitialization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestPointsInitialMeans.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestSumPointsInitialMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FirstKInitialMeans.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansInitialization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansPlusPlusInitialMeans.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMedoidsInitialization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PAMInitialMeans.java71
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PredefinedInitialMeans.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyChosenInitialMeans.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyGeneratedInitialMeans.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/SampleKMeansInitialization.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/KMeansProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/ParallelLloydKMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AbstractKMeansQualityMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AkaikeInformationCriterion.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterion.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterionZhao.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/KMeansQualityMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterMeanDistanceQualityMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterVarianceQualityMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/meta/ExternalClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/onedimensional/KNNKernelDensityMinimaClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/AbstractOPTICS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/ClusterOrder.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/CorrelationClusterOrder.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/DeLiClu.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/FastOPTICS.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/GeneralizedOPTICS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeap.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeapEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSTypeAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSXi.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/CLIQUE.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DOC.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DiSH.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/HiSC.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/P3C.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PROCLUS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PreDeCon.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SUBCLU.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SubspaceClusteringAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEInterval.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUESubspace.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEUnit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelClustering.java41
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelHierarchicalClustering.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelOrAllInOneClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByModelClustering.java16
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllInOne.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllNoise.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CKMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CenterOfMassMetaClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCAN.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCANNeighborPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/RepresentativeUncertainClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/UKMeans.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/APRIORI.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/AbstractFrequentItemsetAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/DenseItemset.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Eclat.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/FPGrowth.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Itemset.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/OneItemset.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SmallDenseItemset.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SparseItemset.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/COP.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/DWOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianUniformMixture.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OPTICSOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OutlierAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/SimpleCOP.java7
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/ABOD.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/FastABOD.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/LBABOD.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/EMOutlier.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/KMeansOutlierDetection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/SilhouetteOutlierDetection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/AbstractDBOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierDetection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierScore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/HilOut.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNWeightOutlier.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/LocalIsolationCoefficient.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ODIN.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ReferenceBasedOutlierDetection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/KNNWeightProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNWeightOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IDOS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IntrinsicDimensionalityOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/ALOCI.java63
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/COF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/FlexibleLOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/INFLO.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/KDEOS.java17
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDF.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOCI.java108
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOF.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LoOP.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/OnlineLOF.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimpleKernelDensityLOF.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimplifiedLOF.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/VarianceOfVolume.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LOFProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LRDProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelLOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelSimplifiedLOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/SimplifiedLRDProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/ExternalDoubleOutlierScore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/FeatureBagging.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/HiCS.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/RescaleMetaOutlierAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/SimpleOutlierEnsemble.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractDistanceBasedSpatialOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractNeighborhoodOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuGLSBackwardSearchAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMeanMultipleAttributes.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianAlgorithm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianMultipleAttributes.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMoranScatterplotOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuRandomWalkEC.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuScatterplotOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuZTestOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SLOM.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SOF.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/TrimmedMeanApproach.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/AbstractPrecomputedNeighborhood.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExtendedNeighborhood.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExternalNeighborhood.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/NeighborSetPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/PrecomputedKNearestNeighborNeighborhood.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/LinearWeightedExtendedNeighborhood.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/UnweightedNeighborhoodAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/WeightedNeighborSetPredicate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AbstractAggarwalYuOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuEvolutionary.java7
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuNaive.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OUTRES.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OutRankS1.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/SOD.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/ByLabelOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAllOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAverageCoordinateOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialGeneratedOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialNoOutlier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AddSingleScale.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AveragePrecisionAtK.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceQuantileSampler.java3
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceStatisticsWithClasses.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EstimateIntrinsicDimensionality.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRetrievalPerformance.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/HopkinsStatisticClusteringTendency.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RangeQuerySelectivity.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RankingQualityHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/AbstractApplication.java39
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/ClassifierHoldoutEvaluationTask.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/ConvertToBundleApplication.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/ELKILauncher.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/GeneratorXMLSpec.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/KDDCLIApplication.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceInOnDiskMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceKNNLists.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceRangeQueries.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheFloatDistanceInOnDiskMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/experiments/EvaluateIntrinsicDimensionalityEstimators.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/geo/VisualizeGeodesicDistances.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/ComputeKNNOutlierScores.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/EvaluatePrecomputedOutlierScores.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/GreedyEnsembleExperiment.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java38
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java26
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONBuffer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONResultHandler.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONWebServer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/AbstractNumberVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/Bit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/BitVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/ByteVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/ClassLabel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/Cluster.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/Clustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/DoubleVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/ExternalID.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/FeatureVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/FloatVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/HierarchicalClassLabel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/HyperBoundingBox.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/IntegerVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/LabelList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/ModifiableHyperBoundingBox.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/NumberVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/OneDimensionalDoubleVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/ShortVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SimpleClassLabel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseByteVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseDoubleVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFeatureVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFloatVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseIntegerVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseNumberVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseShortVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/Subspace.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/VectorUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/AbstractModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterModel.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterWithInversionsModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ClusterModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CoreObjectsModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationAnalysisSolution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DendrogramModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DimensionModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/EMModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/KMeansModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/LinearEquationModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MeanModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MedoidModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/Model.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ModelUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/OPTICSModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/PrototypeModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/SubspaceModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/FeatureSelection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LatLngToECEFProjection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LngLatToECEFProjection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/Projection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/RandomProjection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/Polygon.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/PolygonsObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialComparable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMaxComparator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMeanComparator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMinComparator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterface.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterfaceDynamic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorMain.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorSingleCluster.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorStatic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/AlternativeTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/CombinedTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/FieldTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/MultivariateSeriesTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/NoSupportedDataTypeException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/SimpleTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformationSerializer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorFieldTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorTypeInformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/AbstractUncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/DiscreteUncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/SimpleGaussianContinuousUncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UniformContinuousUncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UnweightedDiscreteUncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/WeightedDiscreteUncertainObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/AbstractDiscreteUncertainifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/SimpleGaussianUncertainifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/Uncertainifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UniformUncertainifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UnweightedDiscreteUncertainifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/WeightedDiscreteUncertainifier.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/Database.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/DatabaseEventManager.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/HashmapDatabase.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ProxyDatabase.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/QueryUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/UpdatableDatabase.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java92
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java7
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java12
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java15
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java9
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java16
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java14
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java28
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java8
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayModifiableDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayStaticDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBID.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayMIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDMIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRange.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRef.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDUtil.java127
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDVar.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListMIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/EmptyDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetModifiableDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDBIDs.java31
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDoubleDBIDList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/SetDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/StaticDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/KNNSubList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayModifiableIntegerDBIDs.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayStaticIntegerDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListKNNHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListMIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairKNNListHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java20
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayMIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayQuickSort.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNSubList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDMIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRef.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDVar.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ReusingDBIDFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java9
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerArrayDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DatabaseQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DistanceSimilarityQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/LinearScanQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java2
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/AbstractDistanceKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/KNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanDistanceKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanEuclideanDistanceKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanPrimitiveDistanceKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/PreprocessorKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/AbstractDistanceRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanDistanceRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanEuclideanDistanceRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanPrimitiveDistanceRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/RangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/AbstractRKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/LinearScanRKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/PreprocessorRKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/RKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractDBIDSimilarityQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractSimilarityQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/PrimitiveSimilarityQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/SimilarityQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/AbstractRelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DoubleRelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedDoubleRelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ModifiableRelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/Relation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/AbstractDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ArrayAdapterDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/BundleDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ConcatenateFilesDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DBIDRangeDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/EmptyDatabaseConnection.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ExternalIDJoinDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/FileBasedDatabaseConnection.java15
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/GeneratorXMLDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/InputStreamDatabaseConnection.java2
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/LabelJoinDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/MultipleObjectsBundleDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/PresortedBlindJoinDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/RandomDoubleVectorDatabaseConnection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleMeta.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleReader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleStreamSource.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleWriter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/MultipleObjectsBundle.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/ObjectBundle.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/SingleObjectBundle.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/StreamFromBundle.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractConversionFilter.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamConversionFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorConversionFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorStreamConversionFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FilterUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FixedDBIDsFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/NoOpFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/ObjectFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/StreamFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/DropNaNFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/NoMissingValuesFilter.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/ReplaceNaNWithRandomFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/VectorDimensionalityFilter.java2
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractStreamNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/NonNumericFeaturesException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/Normalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseBetaNormalization.java2
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseCDFNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseErfNormalization.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMADNormalization.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMeanNormalization.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMinMaxNormalization.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseVarianceNormalization.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/IntegerRankTieNormalization.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/InverseDocumentFrequencyNormalization.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/HellingerHistogramNormalization.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceLogRankNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMeanVarianceNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMinMaxNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceRankNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/LengthNormalization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/Log1PlusNormalization.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ByLabelFilter.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/RandomSamplingStreamFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ShuffleObjectsFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/SortByLabelFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/AbstractSupervisedProjectionVectorFilter.java11
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/FastMultidimensionalScalingTransform.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/GlobalPrincipalComponentAnalysisTransform.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/HistogramJitterFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LatLngToECEFFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LinearDiscriminantAnalysisFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LngLatToECEFFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorFeatureSelectionFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorRandomFeatureSelectionFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/PerturbationFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ProjectionFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFromPatternFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ExternalIDFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/MultivariateTimeSeriesFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SparseVectorFieldFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SplitNumberVectorFilter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainSplitFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainifyFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/WeightedUncertainSplitFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/AbstractStreamingParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ArffParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/BitVectorLabelParser.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CSVReaderFormat.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CategorialDataAsNumberVectorParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ClusteringVectorParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/LibSVMFormatParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/NumberVectorLabelParser.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/Parser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimplePolygonParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimpleTransactionParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SparseNumberVectorLabelParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StreamingParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StringParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/TermFrequencyParser.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDBIDRangeDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDatabaseDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractIndexBasedDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorNorm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractPrimitiveDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialNorm.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/BrayCurtisDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CanberraDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ClarkDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDRangeDistanceFunction.java11
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/IndexBasedDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Kulczynski1DistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/LorentzianDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/MatrixWeightedDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Norm.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/NumberVectorDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/PrimitiveDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SharedNearestNeighborJaccardDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SpatialPrimitiveDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedCanberraDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedNumberVectorDistanceFunction.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/AbstractSimilarityAdapter.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/ArccosSimilarityAdapter.java3
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LinearAdapterLinear.java5
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LnSimilarityAdapter.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HSBHistogramQuadraticDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HistogramIntersectionDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/RGBHistogramQuadraticDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsolutePearsonCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsoluteUncenteredCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/PearsonCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredPearsonCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredUncenteredCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/UncenteredCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedPearsonCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedSquaredPearsonCorrelationDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/AsciiDistanceParser.java13
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedDoubleDistanceFunction.java26
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedFloatDistanceFunction.java26
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceCacheWriter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceParser.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedDoubleDistanceFunction.java82
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedFloatDistanceFunction.java77
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/DimensionSelectingLatLngDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LatLngDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LngLatDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/HistogramMatchDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/KolmogorovSmirnovDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/EuclideanDistanceFunction.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPIntegerNormDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPNormDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/ManhattanDistanceFunction.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MaximumDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MinimumDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseEuclideanDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseLPNormDistanceFunction.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseManhattanDistanceFunction.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseMaximumDistanceFunction.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SquaredEuclideanDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedEuclideanDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedLPNormDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedManhattanDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedMaximumDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedSquaredEuclideanDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/ChiSquaredDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/HellingerDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JensenShannonDivergenceDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceAsymmetricDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceReverseAsymmetricDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/SqrtJensenShannonDivergenceDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/AbstractSetDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/HammingDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/JaccardSimilarityDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/LevenshteinDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/NormalizedLevenshteinDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/OnedimensionalDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/AbstractEditDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DTWDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DerivativeDTWDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/EDRDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/ERPDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/LCSSDistanceFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractDBIDSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractIndexBasedSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractPrimitiveSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractVectorSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/DBIDSimilarityFunction.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/FractionalSharedNearestNeighborSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/IndexBasedSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/InvertedDistanceSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski1SimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski2SimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedPrimitiveSimilarityFunction.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/PrimitiveSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SharedNearestNeighborSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterIntersectionSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterJaccardSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringAdjustedRandIndexSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringBCubedF1SimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringDistanceSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringFowlkesMallowsSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringRandIndexSimilarityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java9
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java141
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java16
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java14
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java8
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/GUIUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractSingleParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassListParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ConfiguratorPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/EnumParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FileParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FlagParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ParameterConfigurator.java28
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/TextParameterConfigurator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/icons/StockIcon.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/minigui/MiniGUI.java519
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java28
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/DynamicParameters.java7
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPane.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPanel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParameterTable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParametersModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/SavedSettingsFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/TreePopup.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractRefiningIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/DistanceIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/DynamicIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/Index.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/IndexFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/KNNIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/PagedIndexFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/RKNNIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/RangeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/distancematrix/PrecomputedDistanceMatrix.java170
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/idistance/InMemoryIDistanceIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/invertedlist/InMemoryInvertedIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/InMemoryLSHIndex.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/AbstractProjectedHashFunctionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/CosineHashFunctionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/EuclideanHashFunctionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/LocalitySensitiveHashFunctionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/ManhattanHashFunctionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/CosineLocalitySensitiveHashFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/LocalitySensitiveHashFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/MultipleProjectionsLocalitySensitiveHashFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/AbstractPreprocessorIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/fastoptics/RandomProjectedNeighborsAndDensities.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/CachedDoubleDistanceKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNChangeEvent.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNJoinMaterializeKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNListener.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java51
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/NaiveProjectedKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingMaterializeKNNPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java11
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LatLngAsECEFIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LngLatAsECEFIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/PINN.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/ProjectedIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/BreadthFirstEnumeration.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/DirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Entry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTreePath.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/LeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Node.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/TreeIndexHeader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/MetricalIndexTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/AbstractCoverTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/CoverTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/SimplifiedCoverTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeSettings.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnified.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnifiedFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeHeader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeSettings.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeSettings.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/PolynomialApproximation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ApproximationLine.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ConvexHull.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCopTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MTreeQueryUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MkTreeRKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MTreeInsert.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MinimumEnlargementInsert.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/Assignments.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/DistanceEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MLBDistSplit.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MMRadSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MRadSplit.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MTreeSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/RandomSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleDistanceSearchCandidate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleMTreeDistanceSearchCandidate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/GenericMTreeDistanceSearchCandidate.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialIndexTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPointLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/MinimalisticMemoryKDTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/SmallMemoryKDTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRTreeSettings.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/NonFlatRStarTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeKNNQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeRangeQuery.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNDirectoryEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNLeafEntry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeHeader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdkNNSettings.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeIndex.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeNode.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AbstractBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AdaptiveSortTileRecursiveBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/BulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/FileOrderBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionBulkSplit.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionSortTileRecursiveBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/OneDimSortBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SortTileRecursiveBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SpatialSortBulkSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/ApproximativeLeastOverlapInsertionStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/CombinedInsertionStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/InsertionStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementInsertionStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementWithAreaInsertionStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastOverlapInsertionStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/LimitedReinsertOverflowTreatment.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/OverflowTreatment.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/SplitOnlyOverflowTreatment.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/AbstractPartialReinsert.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/CloseReinsert.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/FarReinsert.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/ReinsertStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/AngTanLinearSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/GreeneSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeLinearSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeQuadraticSplit.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/SplitStrategy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/TopologicalSplitter.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/util/NodeArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/DAFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/PartialVAFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VAFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VALPNormDistance.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VectorApproximation.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/CLISmartHandler.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/ELKILogRecord.java14
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ErrorFormatter.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/Logging.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingConfiguration.java68
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingUtil.java38
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/MessageFormatter.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/OutputStreamLogger.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/AbstractProgress.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/FiniteProgress.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/IndefiniteProgress.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/MutableProgress.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/Progress.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressLogRecord.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressTracker.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/StepProgress.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AbstractStatistic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AtomicLongCounter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Counter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/DoubleStatistic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Duration.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/LongStatistic.java12
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/MillisTimeDuration.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/NanoDuration.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Statistic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/StringStatistic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/UnsynchronizedLongCounter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/DoubleMinMax.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/IntegerMinMax.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/MathUtil.java11
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/Mean.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVariance.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVarianceMinMax.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/PearsonCorrelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/Primes.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/SinCosTable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/StatisticalMoments.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/CovarianceDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarityMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HSMDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HiCSDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/MCEDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SURFINGDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeInversionDimensionSimilarity.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/AbstractEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1858SpheroidEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1880SpheroidEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/EarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS67SpheroidEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS80SpheroidEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphereUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalCosineEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalHaversineEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalVincentyEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS72SpheroidEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS84SpheroidEarthModel.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/AlphaShape.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/GrahamScanConvexHull2D.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/PrimsMinimumSpanningTree.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/SweepHullDelaunay2D.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYCurve.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYPlot.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java5
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java19
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java21
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java24
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java24
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java45
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java10
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java15
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java16
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java22
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/FastNonThreadsafeRandom.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/RandomFactory.java15
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift1024NonThreadsafeRandom.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift64NonThreadsafeRandom.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/LinearScale.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/Scales.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/AbstractSpatialSorter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/BinarySplitSpatialSorter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/PeanoSpatialSorter.java25
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/SpatialSorter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveSpatialSorter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveTransformer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/KernelDensityEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/LinearRegression.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/MultipleLinearRegression.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/PolynomialRegression.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/ProbabilityWeightedMoments.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/AbstractDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/CorrelationDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DistanceCorrelationDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HSMDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HiCSDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HoeffdingsDDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/JensenShannonEquiwidthDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MCEDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MutualInformationEquiwidthDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SURFINGDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeInversionDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SpearmanCorrelationDependenceMeasure.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/AbstractDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/BetaDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/CauchyDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiSquaredDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ConstantDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/Distribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentialDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentiallyModifiedGaussianDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GammaDistribution.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedExtremeValueDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticAlternateDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedParetoDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GumbelDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/HaltonUniformDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/KappaDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LaplaceDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaAlternateDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogLogisticDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogNormalDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogisticDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/NormalDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/PoissonDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/RayleighDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/SkewGeneralizedNormalDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/StudentsTDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/UniformDistribution.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WaldDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WeibullDistribution.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractExpMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMeanVarianceEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMeanVarianceEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/CauchyMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/DistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/EMGOlivierNorbergEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExpMADDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMedianEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaChoiWetteEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedExtremeValueLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedLogisticAlternateLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedParetoLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LMMDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMLEEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaAlternateExpMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaChoiWetteEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogLogisticMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMADDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMOMDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalBilkovaLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLevenbergMarquardtKDEEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MADDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MOMDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MeanVarianceDistributionEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLevenbergMarquardtKDEEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMLEEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/SkewGNormalLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformEnhancedMinMaxEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMinMaxEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMLEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLMMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMADEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/BestFitEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/TrimmedEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/WinsorisingEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AbstractIntrinsicDimensionalityEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AggregatedHillEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/EnsembleEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/GEDEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/HillEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/IntrinsicDimensionalityEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/LMomentsEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/MOMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWM2Estimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWMEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/RVEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/ZipfEstimator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/BiweightKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/CosineKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/EpanechnikovKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/GaussianKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/KernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriangularKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TricubeKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriweightKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/UniformKernelDensityFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/AndersonDarlingTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/GoodnessOfFitTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/KolmogorovSmirnovTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/StandardizedTwoSampleAndersonDarlingTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/WelchTTest.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/Executor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelCore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelExecutor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/SingleThreadedExecutor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/AbstractDoubleProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/DoubleMinMaxProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KDistanceProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KNNProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/Processor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDataStoreProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDoubleDataStoreProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteIntegerDataStoreProcessor.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedDouble.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedInteger.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedVariable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFileFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCache.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCachePageFileFactory.java15
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFileFactory.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFileFactory.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/Page.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFileFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageHeader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFileFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/AbstractHierarchicalResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/BasicResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/ClusteringVectorDumper.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/CollectionResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/DBIDSelection.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/DiscardResultHandler.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/EvaluationResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/FrequentItemsetsResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/HierarchicalResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/HistogramResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/IterableResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/KMLOutputHandler.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/LogResultStructureResultHandler.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingFromDataStore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/PixmapResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/RangeSelection.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/ReferencePointsResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/Result.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHandler.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHierarchy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultListener.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultProcessor.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultUtil.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultWriter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/SamplingResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/ScalesResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/SelectionResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/SettingsResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/BasicOutlierScoreMeta.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/InvertedOutlierScoreMeta.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OrderingFromRelation.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierResult.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierScoreMeta.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/ProbabilisticOutlierScore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/QuotientOutlierScoreMeta.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/MultipleFilesOutput.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/SingleStreamOutput.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/StreamFactory.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriteable.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriter.java7
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterStream.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterWriterInterface.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/NamingScheme.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/SimpleEnumeratingScheme.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleArray.java51
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleDoublePair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIgnore.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIntArray.java51
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectArray.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectComment.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectInline.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterTextWriteable.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterVector.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java2
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java55
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java39
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java51
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java264
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java174
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java29
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java60
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java4
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java21
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java91
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java30
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java18
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleArrayListParameter.java (renamed from elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/VectorListParameter.java)78
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java6
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java15
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java27
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java11
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java14
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java1
-rwxr-xr-xelki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/AlgorithmStep.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/EvaluationStep.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/InputStep.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/LoggingStep.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/OutputStep.java3
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/WorkflowStep.java1
1659 files changed, 6531 insertions, 1347 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/KDDTask.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/KDDTask.java
index 307387d0..1d58b3ba 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/KDDTask.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/KDDTask.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* discovery task.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.composedOf InputStep
* @apiviz.composedOf AlgorithmStep
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractAlgorithm.java
index 0851a898..8f721fdc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractAlgorithm.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractDistanceBasedAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractDistanceBasedAlgorithm.java
index 5729695c..bbf76f03 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractDistanceBasedAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractDistanceBasedAlgorithm.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for distance-based algorithms.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has DistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractNumberVectorDistanceBasedAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractNumberVectorDistanceBasedAlgorithm.java
index 5c09d4a8..e0beaa36 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractNumberVectorDistanceBasedAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractNumberVectorDistanceBasedAlgorithm.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* synthetic numerical vectors such as <b>mean</b> vectors.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has NumberVectorDistanceFunction
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractPrimitiveDistanceBasedAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractPrimitiveDistanceBasedAlgorithm.java
index 06625263..21de6b59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractPrimitiveDistanceBasedAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/AbstractPrimitiveDistanceBasedAlgorithm.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* only database objects!
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has PrimitiveDistanceFunction
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/Algorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/Algorithm.java
index 1ca6ffa3..cea7f4b3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/Algorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/Algorithm.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
*/
public interface Algorithm {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DependencyDerivator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DependencyDerivator.java
index 3c6dbba6..b46fc6ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DependencyDerivator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DependencyDerivator.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
* @param <V> the type of FeatureVector handled by this Algorithm
*/
@Title("Dependency Derivator: Deriving numerical inter-dependencies on data")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DistanceBasedAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DistanceBasedAlgorithm.java
index 5171de6d..5c4eaaf8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DistanceBasedAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DistanceBasedAlgorithm.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* Very broad interface for distance based algorithms.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DummyAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DummyAlgorithm.java
index 595de4bd..7aa28b70 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DummyAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/DummyAlgorithm.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* NullAlgorithm} instead.
*
* @author Erich Schubert
+ * @since 0.2
* @param <O> Vector type
*
* @apiviz.uses KNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNDistancesSampler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNDistancesSampler.java
index 3e78ba77..a81823c1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNDistancesSampler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNDistancesSampler.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.math.geometry.XYCurve;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -59,11 +60,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* and look for a bend or knee in this plot.
*
* @author Arthur Zimek
+ * @since 0.7.0
*
* @param <O> the type of objects handled by this Algorithm
*/
@Title("KNN-Distance-Order")
@Description("Assesses the knn distances for a specified k and orders them.")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.KNNDistanceOrder")
public class KNNDistancesSampler<O> extends AbstractDistanceBasedAlgorithm<O, KNNDistanceOrderResult> {
/**
* The logger for this class.
@@ -115,7 +118,7 @@ public class KNNDistancesSampler<O> extends AbstractDistanceBasedAlgorithm<O, KN
final int size = (int) ((sample <= 1.) ? Math.ceil(relation.size() * sample) : sample);
DBIDs sample = DBIDUtil.randomSample(relation.getDBIDs(), size, rnd);
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Sampling kNN distances.", size, LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Sampling kNN distances", size, LOG) : null;
double[] knnDistances = new double[size];
int i = 0;
for(DBIDIter iditer = sample.iter(); iditer.valid(); iditer.advance(), i++) {
@@ -251,4 +254,4 @@ public class KNNDistancesSampler<O> extends AbstractDistanceBasedAlgorithm<O, KN
return new KNNDistancesSampler<>(distanceFunction, k, percentage, rnd);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNJoin.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNJoin.java
index 593582ed..ff1ae57f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNJoin.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/KNNJoin.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*
* @param <V> the type of FeatureVector handled by this Algorithm
* @param <N> the type of node used in the spatial index structure
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/MaterializeDistances.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/MaterializeDistances.java
index f9de15b0..ea061a71 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/MaterializeDistances.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/MaterializeDistances.java
@@ -49,6 +49,9 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* MultipleFileInput to use cached distances.
*
* Symmetry is assumed.
+ *
+ * @author Erich Schubert
+ * @since 0.2
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/NullAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/NullAlgorithm.java
index 5e7cf151..57eb6910 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/NullAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/NullAlgorithm.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* set.
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Null Algorithm")
@Description("Algorithm which does nothing, just return a null object.")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/KNNBenchmarkAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/KNNBenchmarkAlgorithm.java
index 611e0c41..1d20e9b2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/KNNBenchmarkAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/KNNBenchmarkAlgorithm.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* the original database.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <O> Object type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/RangeQueryBenchmarkAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/RangeQueryBenchmarkAlgorithm.java
index 9a5532e3..98c66129 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/RangeQueryBenchmarkAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/RangeQueryBenchmarkAlgorithm.java
@@ -89,6 +89,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* TODO: alternatively, allow using a fixed radius?
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <O> Vector type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/ValidateApproximativeKNNIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/ValidateApproximativeKNNIndex.java
index 64e00abd..fc1098ff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/ValidateApproximativeKNNIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/benchmark/ValidateApproximativeKNNIndex.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* exact indexing (e.g. linear scanning).
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <O> Object type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/AbstractClassifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/AbstractClassifier.java
index fe97c83e..c4db6887 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/AbstractClassifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/AbstractClassifier.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Abstract base class for algorithms.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Input type
* @param <R> Result type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/Classifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/Classifier.java
index 429f016a..ebdb7fe5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/Classifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/Classifier.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* classify a new instance of the same type.
*
* @author Arthur Zimek
+ * @since 0.7.0
*
* @param <O> the type of DatabaseObjects handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/KNNClassifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/KNNClassifier.java
index c506fa8b..84e40731 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/KNNClassifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/KNNClassifier.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* k nearest neighbors in a database.
*
* @author Arthur Zimek
+ * @since 0.7.0
* @param <O> the type of DatabaseObjects handled by this Algorithm
*/
@Title("kNN-classifier")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/PriorProbabilityClassifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/PriorProbabilityClassifier.java
index 0032e8ac..df1d0f86 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/PriorProbabilityClassifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/classification/PriorProbabilityClassifier.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* the database, without using the actual data values.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
@Title("Prior Probability Classifier")
@Description("Classifier to predict simply prior probabilities for all classes as defined by their relative abundance in a given database.")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/AbstractProjectedClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/AbstractProjectedClustering.java
index c63df6c3..2b17380a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/AbstractProjectedClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/AbstractProjectedClustering.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* and {@link de.lmu.ifi.dbs.elki.algorithm.clustering.correlation.ORCLUS}.
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <R> the result we return
* @param <V> the type of FeatureVector handled by this Algorithm
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/CanopyPreClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/CanopyPreClustering.java
index c8e17b45..49d3586f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/CanopyPreClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/CanopyPreClustering.java
@@ -61,6 +61,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithm.java
index b0f3e2d3..a7957d1e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithm.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.database.Database;
* database complete or is in any other sense a relaxed clustering result.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has Clustering
* @apiviz.has Model
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithmUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithmUtil.java
index 8fead310..482eb40a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithmUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/ClusteringAlgorithmUtil.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Utility functionality for writing clustering algorithms.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ClusteringAlgorithmUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/DBSCAN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/DBSCAN.java
index 7d802fa4..ba6cf77d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/DBSCAN.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/DBSCAN.java
@@ -34,12 +34,13 @@ import de.lmu.ifi.dbs.elki.data.model.Model;
import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.database.QueryUtil;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDList;
-import de.lmu.ifi.dbs.elki.database.ids.HashSetModifiableDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
@@ -70,6 +71,8 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Arthur Zimek
+ * @author Erich Schubert
+ * @since 0.2
* @param <O> the type of Object the algorithm is applied to
*/
@Title("DBSCAN: Density-Based Clustering of Applications with Noise")
@@ -172,9 +175,10 @@ public class DBSCAN<O> extends AbstractDistanceBasedAlgorithm<O, Clustering<Mode
IndefiniteProgress clusprog = LOG.isVerbose() ? new IndefiniteProgress("Number of clusters", LOG) : null;
processedIDs = DBIDUtil.newHashSet(size);
+ ArrayModifiableDBIDs seeds = DBIDUtil.newArray();
for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
if(!processedIDs.contains(iditer)) {
- expandCluster(relation, rangeQuery, iditer, objprog, clusprog);
+ expandCluster(relation, rangeQuery, iditer, seeds, objprog, clusprog);
}
if(objprog != null && clusprog != null) {
objprog.setProcessed(processedIDs.size(), LOG);
@@ -197,9 +201,11 @@ public class DBSCAN<O> extends AbstractDistanceBasedAlgorithm<O, Clustering<Mode
* @param relation Database relation to run on
* @param rangeQuery Range query to use
* @param startObjectID potential seed of a new potential cluster
- * @param objprog the progress object for logging the current status
+ * @param seeds Array to store the current seeds
+ * @param objprog Number of objects processed (may be {@code null})
+ * @param clusprog Number of clusters found (may be {@code null})
*/
- protected void expandCluster(Relation<O> relation, RangeQuery<O> rangeQuery, DBIDRef startObjectID, FiniteProgress objprog, IndefiniteProgress clusprog) {
+ protected void expandCluster(Relation<O> relation, RangeQuery<O> rangeQuery, DBIDRef startObjectID, ArrayModifiableDBIDs seeds, FiniteProgress objprog, IndefiniteProgress clusprog) {
DoubleDBIDList neighbors = rangeQuery.getRangeForDBID(startObjectID, epsilon);
ncounter += neighbors.size();
@@ -218,13 +224,13 @@ public class DBSCAN<O> extends AbstractDistanceBasedAlgorithm<O, Clustering<Mode
processedIDs.add(startObjectID);
// try to expand the cluster
- HashSetModifiableDBIDs seeds = DBIDUtil.newHashSet();
+ assert(seeds.size() == 0);
+ seeds.clear();
processNeighbors(neighbors.iter(), currentCluster, seeds);
DBIDVar o = DBIDUtil.newVar();
while(!seeds.isEmpty()) {
- seeds.pop(o);
- neighbors = rangeQuery.getRangeForDBID(o, epsilon);
+ neighbors = rangeQuery.getRangeForDBID(seeds.pop(o), epsilon);
ncounter += neighbors.size();
if(neighbors.size() >= minpts) {
@@ -248,10 +254,13 @@ public class DBSCAN<O> extends AbstractDistanceBasedAlgorithm<O, Clustering<Mode
* @param currentCluster Current cluster
* @param seeds Seed set
*/
- private void processNeighbors(DBIDIter neighbor, ModifiableDBIDs currentCluster, HashSetModifiableDBIDs seeds) {
+ private void processNeighbors(DoubleDBIDListIter neighbor, ModifiableDBIDs currentCluster, ArrayModifiableDBIDs seeds) {
+ final boolean ismetric = getDistanceFunction().isMetric();
for(; neighbor.valid(); neighbor.advance()) {
if(processedIDs.add(neighbor)) {
- seeds.add(neighbor);
+ if(!ismetric || neighbor.doubleValue() > 0.) {
+ seeds.add(neighbor);
+ }
}
else if(!noise.remove(neighbor)) {
continue;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/GriDBSCAN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/GriDBSCAN.java
new file mode 100644
index 00000000..aecb7c30
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/GriDBSCAN.java
@@ -0,0 +1,913 @@
+package de.lmu.ifi.dbs.elki.algorithm.clustering;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2016
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import java.util.Arrays;
+
+import de.lmu.ifi.dbs.elki.algorithm.AbstractDistanceBasedAlgorithm;
+import de.lmu.ifi.dbs.elki.data.Cluster;
+import de.lmu.ifi.dbs.elki.data.Clustering;
+import de.lmu.ifi.dbs.elki.data.NumberVector;
+import de.lmu.ifi.dbs.elki.data.model.ClusterModel;
+import de.lmu.ifi.dbs.elki.data.model.Model;
+import de.lmu.ifi.dbs.elki.data.type.CombinedTypeInformation;
+import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
+import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableDataStore;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDList;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
+import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList;
+import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery;
+import de.lmu.ifi.dbs.elki.database.relation.ProxyView;
+import de.lmu.ifi.dbs.elki.database.relation.Relation;
+import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.EuclideanDistanceFunction;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.LPNormDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
+import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
+import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
+import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
+import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterEqualConstraint;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
+import gnu.trove.iterator.TLongObjectIterator;
+import gnu.trove.map.hash.TLongObjectHashMap;
+
+/**
+ * Using Grid for Accelerating Density-Based Clustering.
+ *
+ * An accelerated DBSCAN version for numerical data and Lp-norms only, by
+ * partitioning the data set into overlapping grid cells. For best efficiency,
+ * the overlap of the grid cells must be chosen well. The authors suggest a grid
+ * width of 10 times epsilon.
+ *
+ * Because of partitioning the data, this version does not make use of indexes.
+ *
+ * Reference:
+ * <p>
+ * S. Mahran and K. Mahar: <br />
+ * Using grid for accelerating density-based clustering.<br />
+ * In 8th IEEE Int. Conf. on Computer and Information Technology, 2008.
+ * </p>
+ *
+ * @author Erich Schubert
+ * @since 0.7.1
+ *
+ * @apiviz.composedOf Instance
+ *
+ * @param <V> the type of vector the algorithm is applied to
+ */
+@Reference(authors = "S. Mahran and K. Mahar", //
+title = "Using grid for accelerating density-based clustering", //
+booktitle = "8th IEEE Int. Conf. on Computer and Information Technology", //
+url = "http://dx.doi.org/10.1109/CIT.2008.4594646")
+public class GriDBSCAN<V extends NumberVector> extends AbstractDistanceBasedAlgorithm<V, Clustering<Model>> implements ClusteringAlgorithm<Clustering<Model>> {
+ /**
+ * The logger for this class.
+ */
+ private static final Logging LOG = Logging.getLogger(GriDBSCAN.class);
+
+ /**
+ * Holds the epsilon radius threshold.
+ */
+ protected double epsilon;
+
+ /**
+ * Holds the minimum cluster size.
+ */
+ protected int minpts;
+
+ /**
+ * Width of the grid cells. Must be at least 2 epsilon!
+ */
+ protected double gridwidth;
+
+ /**
+ * Constructor with parameters.
+ *
+ * @param distanceFunction Distance function
+ * @param epsilon Epsilon value
+ * @param minpts Minpts parameter
+ * @param gridwidth Grid width
+ */
+ public GriDBSCAN(DistanceFunction<? super V> distanceFunction, double epsilon, int minpts, double gridwidth) {
+ super(distanceFunction);
+ this.epsilon = epsilon;
+ this.minpts = minpts;
+ this.gridwidth = gridwidth;
+ }
+
+ /**
+ * Performs the DBSCAN algorithm on the given database.
+ */
+ public Clustering<Model> run(Relation<V> relation) {
+ final DBIDs ids = relation.getDBIDs();
+
+ // Degenerate result:
+ if(ids.size() < minpts) {
+ Clustering<Model> result = new Clustering<>("DBSCAN Clustering", "dbscan-clustering");
+ result.addToplevelCluster(new Cluster<Model>(ids, true, ClusterModel.CLUSTER));
+ return result;
+ }
+
+ double gridwidth = this.gridwidth; // local copy.
+ if(gridwidth < 2. * epsilon) {
+ LOG.warning("Invalid grid width (less than 2*epsilon, recommended 10*epsilon). Increasing grid width automatically.");
+ gridwidth = 2. * epsilon;
+ }
+ return new Instance<V>(getDistanceFunction(), epsilon, minpts, gridwidth).run(relation);
+ }
+
+ /**
+ * Instance, for a single run.
+ *
+ * @author Erich Schubert
+ *
+ * @param <V> Vector type
+ */
+ protected static class Instance<V extends NumberVector> {
+ /**
+ * Unprocessed IDs.
+ */
+ protected static final int UNPROCESSED = 0;
+
+ /**
+ * Noise IDs.
+ */
+ protected static final int NOISE = 1;
+
+ /**
+ * Distance function used.
+ */
+ protected DistanceFunction<? super V> distanceFunction;
+
+ /**
+ * Holds the epsilon radius threshold.
+ */
+ protected double epsilon;
+
+ /**
+ * Holds the minimum cluster size.
+ */
+ protected int minpts;
+
+ /**
+ * Width of the grid cells. Must be at least 2 epsilon!
+ */
+ protected double gridwidth;
+
+ /**
+ * Value domain.
+ */
+ protected double[][] domain;
+
+ /**
+ * Dimensionality.
+ */
+ protected int dim;
+
+ /**
+ * Grid offset.
+ */
+ protected double[] offset;
+
+ /**
+ * Number of cells per dimension.
+ */
+ protected int[] cells;
+
+ /**
+ * Data grid partitioning.
+ */
+ TLongObjectHashMap<ModifiableDBIDs> grid;
+
+ /**
+ * Core identifier objects (shared to conserve memory).
+ */
+ private Core[] cores;
+
+ /**
+ * Border identifier objects (shared to conserve memory).
+ */
+ private Border[] borders;
+
+ /**
+ * Cluster assignments.
+ */
+ private WritableDataStore<Assignment> clusterids;
+
+ /**
+ * Temporary assignments of a single run.
+ */
+ private WritableIntegerDataStore temporary;
+
+ /**
+ * Indicates that the number of grid cells has overflown.
+ */
+ private boolean overflown;
+
+ /**
+ * Constructor.
+ *
+ * @param distanceFunction Distance function
+ * @param epsilon Epsilon
+ * @param minpts MinPts
+ * @param gridwidth Grid width
+ */
+ public Instance(DistanceFunction<? super V> distanceFunction, double epsilon, int minpts, double gridwidth) {
+ this.distanceFunction = distanceFunction;
+ this.epsilon = epsilon;
+ this.minpts = minpts;
+ this.gridwidth = gridwidth;
+ }
+
+ /**
+ * Performs the DBSCAN algorithm on the given database.
+ *
+ * @param relation Relation to process
+ */
+ public Clustering<Model> run(Relation<V> relation) {
+ final DBIDs ids = relation.getDBIDs();
+ final int size = ids.size();
+
+ // Domain of the database
+ this.domain = RelationUtil.computeMinMax(relation);
+ this.dim = domain[0].length;
+ this.offset = new double[dim];
+ this.cells = new int[dim];
+ // Compute the grid start, and the number of cells in each dimension.
+ long numcells = computeGridBaseOffsets();
+ if(numcells > size) {
+ LOG.warning("The generated grid has more cells than data points. This may need excessive amounts of memory.");
+ }
+ else if(numcells == 1) {
+ LOG.warning("All data is in a single cell. This has degenerated to a non-indexed DBSCAN!");
+ }
+ else if(numcells <= dim * dim) {
+ LOG.warning("There are only " + numcells + " cells. This will likely be slower than regular DBSCAN!");
+ }
+
+ // Build the data grid.
+ buildGrid(relation, (int) numcells, offset);
+ if(grid.size() <= dim) {
+ LOG.warning("There are only " + grid.size() + " occupied cells. This will likely be slower than regular DBSCAN!");
+ }
+
+ // Check grid cell counts:
+ int mincells = checkGridCellSizes(size, numcells);
+
+ // (Temporary) store the cluster ID assigned.
+ clusterids = DataStoreUtil.makeStorage(ids, DataStoreFactory.HINT_TEMP, Assignment.class);
+ temporary = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_TEMP, UNPROCESSED);
+ final ArrayModifiableDBIDs activeSet = DBIDUtil.newArray();
+ // Reserve the first two cluster ids:
+ int clusterid = NOISE + 1;
+ this.cores = new Core[2];
+ this.borders = new Border[2];
+
+ // Reused storage for neighbors:
+ ModifiableDoubleDBIDList neighbors = DBIDUtil.newDistanceDBIDList(minpts << 1);
+ // Run DBSCAN on each cell that has enough objects.
+ FiniteProgress cprog = LOG.isVerbose() ? new FiniteProgress("Processing grid cells", mincells, LOG) : null;
+ for(TLongObjectIterator<ModifiableDBIDs> it = grid.iterator(); it.hasNext();) {
+ it.advance();
+ ModifiableDBIDs cellids = it.value();
+ if(cellids.size() < minpts) {
+ continue; // Too few objects.
+ }
+ temporary.clear(); // Reset to "UNPROCESSED"
+ ProxyView<V> rel = new ProxyView<>(cellids, relation);
+ RangeQuery<V> rq = rel.getRangeQuery(distanceFunction, epsilon);
+ FiniteProgress pprog = LOG.isVerbose() ? new FiniteProgress("Running DBSCAN", cellids.size(), LOG) : null;
+ for(DBIDIter id = cellids.iter(); id.valid(); id.advance()) {
+ // Skip already processed ids.
+ if(temporary.intValue(id) != UNPROCESSED) {
+ continue;
+ }
+ neighbors.clear();
+ rq.getRangeForDBID(id, epsilon, neighbors);
+ if(neighbors.size() >= minpts) {
+ expandCluster(id, clusterid, temporary, neighbors, activeSet, rq, pprog);
+ ++clusterid;
+ }
+ else {
+ temporary.putInt(id, NOISE);
+ LOG.incrementProcessed(pprog);
+ }
+ }
+ LOG.ensureCompleted(pprog);
+ // Post-process DBSCAN clustering result:
+ updateCoreBorderObjects(clusterid);
+ mergeClusterInformation(cellids, temporary, clusterids);
+ LOG.incrementProcessed(cprog);
+ }
+ LOG.ensureCompleted(cprog);
+ temporary.destroy();
+
+ FiniteProgress pprog = LOG.isVerbose() ? new FiniteProgress("Building final result", size, LOG) : null;
+ ModifiableDBIDs[] clusters = new ModifiableDBIDs[clusterid];
+ ModifiableDBIDs noise = DBIDUtil.newArray();
+ for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
+ Assignment cids = clusterids.get(it);
+ if(cids == null) {
+ noise.add(it);
+ }
+ else {
+ if(cids instanceof MultiBorder) {
+ cids = ((MultiBorder) cids).getCore();
+ }
+ else if(cids instanceof Border) {
+ cids = ((Border) cids).core;
+ }
+ assert (cids instanceof Core);
+ Core co = (Core) cids;
+ while(cores[co.parent].parent != co.parent) {
+ co = cores[co.parent = cores[co.parent].parent];
+ }
+ ModifiableDBIDs clu = clusters[co.parent];
+ if(clu == null) {
+ clu = clusters[co.parent] = DBIDUtil.newArray();
+ }
+ clu.add(it);
+ }
+ LOG.incrementProcessed(pprog);
+ }
+ LOG.ensureCompleted(pprog);
+ clusterids.destroy();
+
+ Clustering<Model> result = new Clustering<>("DBSCAN Clustering", "dbscan-clustering");
+ for(int i = NOISE + 1; i < clusters.length; i++) {
+ if(clusters[i] != null) {
+ result.addToplevelCluster(new Cluster<Model>(clusters[i], ClusterModel.CLUSTER));
+ }
+ }
+ if(noise.size() > 0) {
+ result.addToplevelCluster(new Cluster<Model>(noise, true, ClusterModel.CLUSTER));
+ }
+ return result;
+ }
+
+ /**
+ * Update the shared arrays for core points (to conserve memory)
+ *
+ * @param clusterid Number of clusters
+ */
+ private void updateCoreBorderObjects(int clusterid) {
+ int i = cores.length;
+ cores = Arrays.copyOf(cores, clusterid);
+ borders = Arrays.copyOf(borders, clusterid);
+ while(i < clusterid) {
+ cores[i] = new Core(i);
+ borders[i] = new Border(cores[i]);
+ ++i;
+ }
+ }
+
+ /**
+ * Compute the grid base offset.
+ *
+ * @return Total number of grid cells
+ */
+ private long computeGridBaseOffsets() {
+ StringBuffer buf = LOG.isDebuggingFinest() ? new StringBuffer() : null;
+ double[] min = domain[0], max = domain[1];
+ long total = 1;
+ for(int d = 0; d < dim; d++) {
+ final double mi = min[d], ma = max[d], wi = ma - mi;
+ if(mi == Double.NEGATIVE_INFINITY || ma == Double.POSITIVE_INFINITY || mi != mi || ma != ma) {
+ throw new AbortException("Dimension " + d + " contains non-finite values.");
+ }
+ int c = cells[d] = Math.max(1, (int) Math.ceil(wi / gridwidth));
+ offset[d] = mi - (c * gridwidth - wi) * .5;
+ assert (offset[d] <= mi) : "Grid inconsistent.";
+ assert (offset[d] + c * gridwidth >= ma) : "Grid inconsistent.";
+ total *= c;
+ if(total < 0) {
+ LOG.warning("Excessive amount of grid cells (long overflow)! Use larger grid cells.");
+ if (total < 0) {
+ overflown = true;
+ total &= 0x7FFF_FFFF_FFFF_FFFFL;
+ }
+ }
+ if(buf != null) {
+ buf.append(d).append(": min=").append(mi).append(" max=").append(ma);
+ double s = offset[d];
+ for(int i = 0; i <= c; i++) {
+ buf.append(' ').append(s);
+ s += gridwidth;
+ }
+ buf.append('\n');
+ }
+ }
+ if(buf != null) {
+ LOG.debugFinest(buf);
+ }
+ return total;
+ }
+
+ /**
+ * Build the data grid.
+ *
+ * @param relation Data relation
+ * @param numcells Total number of cells
+ * @param offset Offset
+ */
+ protected void buildGrid(Relation<V> relation, int numcells, double[] offset) {
+ grid = new TLongObjectHashMap<ModifiableDBIDs>(numcells >>> 2);
+ for(DBIDIter it = relation.iterDBIDs(); it.valid(); it.advance()) {
+ V obj = relation.get(it);
+ insertIntoGrid(it, obj, 0, 0);
+ }
+ }
+
+ /**
+ * Insert a single object into the grid; potentially into multiple cells (at
+ * most 2^d) via recursion.
+ *
+ * @param id Object ID
+ * @param obj Object
+ * @param d Current dimension
+ * @param v Current cell value
+ */
+ private void insertIntoGrid(DBIDRef id, V obj, int d, int v) {
+ final int cn = cells[d]; // Number of cells in this dimension
+ final int nd = d + 1; // Next dimension
+ int mi = Math.max(0, (int) Math.floor((obj.doubleValue(d) - offset[d] - epsilon) / gridwidth));
+ int ma = Math.min(cn - 1, (int) Math.floor((obj.doubleValue(d) - offset[d] + epsilon) / gridwidth));
+ assert (mi <= ma) : "Grid inconsistent.";
+ for(int i = mi; i <= ma; i++) {
+ int c = v * cn + i;
+ if(nd == cells.length) {
+ ModifiableDBIDs ids = grid.get(c);
+ if(ids == null) {
+ grid.put(c, ids = DBIDUtil.newArray());
+ }
+ ids.add(id);
+ }
+ else {
+ insertIntoGrid(id, obj, nd, c);
+ }
+ }
+ }
+
+ /**
+ * Perform some sanity checks on the grid cells.
+ *
+ * @param numcell Number of cells
+ * @param size Relation size
+ * @return Number of cells with minPts points
+ */
+ protected int checkGridCellSizes(int size, long numcell) {
+ int tcount = 0;
+ int hasmin = 0;
+ double sqcount = 0;
+ for(TLongObjectIterator<ModifiableDBIDs> it = grid.iterator(); it.hasNext();) {
+ it.advance();
+ final int s = it.value().size();
+ if(s >= size >> 1) {
+ LOG.warning("A single cell contains half of the database (" + s//
+ + " objects). This will not scale very well.");
+ }
+ tcount += s;
+ sqcount += s * (long) s;
+ if(s >= minpts) {
+ hasmin++;
+ }
+ }
+ double savings = sqcount / size / size;
+ if(savings >= 1) {
+ LOG.warning("Pairwise distances within each cells are more expensive than a full DBSCAN run due to overlap!");
+ }
+ if (overflown) {
+ LOG.statistics(new StringStatistic(GriDBSCAN.class.getName() + ".all-cells", "overflow"));
+ } else {
+ LOG.statistics(new LongStatistic(GriDBSCAN.class.getName() + ".all-cells", numcell));
+ }
+ LOG.statistics(new LongStatistic(GriDBSCAN.class.getName() + ".used-cells", grid.size()));
+ LOG.statistics(new LongStatistic(GriDBSCAN.class.getName() + ".minpts-cells", hasmin));
+ LOG.statistics(new DoubleStatistic(GriDBSCAN.class.getName() + ".redundancy", tcount / (double) size));
+ LOG.statistics(new DoubleStatistic(GriDBSCAN.class.getName() + ".relative-cost", savings));
+ return hasmin;
+ }
+
+ /**
+ * Set-based expand cluster implementation.
+ *
+ * @param clusterid ID of the current cluster.
+ * @param clusterids Current object to cluster mapping.
+ * @param neighbors Neighbors acquired by initial getNeighbors call.
+ * @param activeSet Set to manage active candidates.
+ * @param rq Range query
+ * @param pprog Object progress
+ * @return cluster size
+ */
+ protected int expandCluster(final DBIDRef seed, final int clusterid, final WritableIntegerDataStore clusterids, final ModifiableDoubleDBIDList neighbors, ArrayModifiableDBIDs activeSet, RangeQuery<V> rq, FiniteProgress pprog) {
+ assert (activeSet.size() == 0);
+ int clustersize = 1 + processCorePoint(seed, neighbors, clusterid, clusterids, activeSet);
+ LOG.incrementProcessed(pprog);
+ // run expandCluster as long as there is another seed
+ final DBIDVar id = DBIDUtil.newVar();
+ while(!activeSet.isEmpty()) {
+ activeSet.pop(id);
+ neighbors.clear();
+ // Evaluate Neighborhood predicate
+ rq.getRangeForDBID(id, epsilon, neighbors);
+ // Evaluate Core-Point predicate
+ if(neighbors.size() >= minpts) {
+ clustersize += processCorePoint(id, neighbors, clusterid, clusterids, activeSet);
+ }
+ LOG.incrementProcessed(pprog);
+ }
+ return clustersize;
+ }
+
+ /**
+ * Process a single core point.
+ *
+ * @param seed Point to process
+ * @param newneighbors New neighbors
+ * @param clusterid Cluster to add to
+ * @param clusterids Cluster assignment storage.
+ * @param activeSet Active set of cluster seeds
+ * @return Number of new points added to cluster
+ */
+ protected int processCorePoint(final DBIDRef seed, DoubleDBIDList newneighbors, final int clusterid, final WritableIntegerDataStore clusterids, ArrayModifiableDBIDs activeSet) {
+ clusterids.putInt(seed, clusterid); // Core point now
+ int clustersize = 0;
+ // The recursion is unrolled into iteration over the active set.
+ for(DoubleDBIDListIter it = newneighbors.iter(); it.valid(); it.advance()) {
+ final int oldassign = clusterids.intValue(it);
+ if(oldassign == UNPROCESSED) {
+ if(it.doubleValue() > 0.) { // We can skip points at distance 0.
+ activeSet.add(it);
+ }
+ }
+ else if(oldassign != NOISE) {
+ continue; // Member of some cluster.
+ }
+ clustersize++;
+ clusterids.putInt(it, -clusterid);
+ }
+ return clustersize;
+ }
+
+ /**
+ * Merge cluster information.
+ *
+ * @param cellids IDs in current cell
+ * @param temporary Temporary assignments
+ * @param clusterids Merged cluster assignment
+ */
+ protected void mergeClusterInformation(ModifiableDBIDs cellids, WritableIntegerDataStore temporary, WritableDataStore<Assignment> clusterids) {
+ FiniteProgress mprog = LOG.isVerbose() ? new FiniteProgress("Collecting result", cellids.size(), LOG) : null;
+ for(DBIDIter id = cellids.iter(); id.valid(); id.advance()) {
+ int nclus = temporary.intValue(id);
+ if(nclus > NOISE) { // Core point
+ Core core = cores[nclus];
+ assert (core.parent > NOISE);
+ Assignment oclus = clusterids.get(id);
+ if(oclus == null) { // No assignment yet (= NOISE)
+ clusterids.put(id, core);
+ }
+ else if(oclus instanceof Core) { // Core and core - merge!
+ core.mergeWith((Core) oclus);
+ }
+ else if(oclus instanceof Border) { // Core and border point, merge!
+ core.mergeWith(((Border) oclus).core);
+ clusterids.put(id, core);
+ }
+ else { // Point is border for multiple clusters
+ assert (oclus instanceof MultiBorder);
+ if(LOG.isDebuggingFinest()) {
+ LOG.debugFinest("Multi-Merge: " + nclus + " - " + oclus + " -> " + core);
+ }
+ // Find minimum:
+ int m = core.parent, m2 = ((MultiBorder) oclus).getCore().parent;
+ m = m < m2 ? m : m2;
+ assert (m > NOISE);
+ // Execute all merges:
+ for(Border b : ((MultiBorder) oclus).cs) {
+ cores[b.core.parent].parent = m;
+ }
+ core.parent = m;
+ clusterids.put(id, core);
+ }
+ }
+ else if(nclus < 0) { // Border point
+ Border border = borders[-nclus];
+ Assignment oclus = clusterids.get(id);
+ if(oclus == null) { // No assignment yet.
+ clusterids.put(id, border);
+ }
+ else if(oclus instanceof Core) { // Border and core point - merge
+ ((Core) oclus).mergeWith(border.core);
+ }
+ else if(oclus instanceof Border) { // Border and border
+ if(((Border) oclus).core.parent != border.core.parent) {
+ clusterids.put(id, new MultiBorder((Border) oclus, border));
+ }
+ }
+ else {
+ assert (oclus instanceof MultiBorder);
+ clusterids.put(id, ((MultiBorder) oclus).update(border));
+ }
+ }
+ else {
+ assert (nclus == NOISE); // Ignore noise.
+ }
+ LOG.incrementProcessed(mprog);
+ }
+ LOG.ensureCompleted(mprog);
+ }
+ }
+
+ /**
+ * Point assignment.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ protected static interface Assignment {
+ // Empty
+ }
+
+ /**
+ * Core point assignment.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ protected static class Core implements Assignment {
+ /**
+ * Cluster number
+ */
+ protected int parent;
+
+ /**
+ * Constructor.
+ *
+ * @param parent Cluster number
+ */
+ protected Core(int parent) {
+ assert (parent > GriDBSCAN.Instance.NOISE);
+ this.parent = parent;
+ }
+
+ /**
+ * Merge two cores.
+ *
+ * @param o Other core
+ */
+ public void mergeWith(Core o) {
+ o.parent = this.parent = (parent < o.parent ? parent : o.parent);
+ }
+
+ @Override
+ public String toString() {
+ return "Core[" + parent + "]";
+ }
+ }
+
+ /**
+ * Border point assignment.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ protected static class Border implements Assignment, Comparable<Border> {
+ /**
+ * Cluster number
+ */
+ protected Core core;
+
+ /**
+ * Constructor.
+ *
+ * @param core Cluster number
+ */
+ protected Border(Core core) {
+ this.core = core;
+ }
+
+ @Override
+ public String toString() {
+ return "Border[" + core.parent + "]";
+ }
+
+ @Override
+ public int compareTo(Border o) {
+ return Integer.compare(o.core.parent, this.core.parent);
+ }
+ }
+
+ /**
+ * Multiple border point assignment.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ protected static class MultiBorder implements Assignment {
+ /**
+ * Cluster numbers
+ */
+ protected Border[] cs;
+
+ /**
+ * Constructor.
+ *
+ * @param i First cluster border
+ * @param j Second cluster border
+ */
+ protected MultiBorder(Border i, Border j) {
+ assert (i.core != j.core);
+ this.cs = new Border[] { i, j };
+ }
+
+ /**
+ * Add a new border to the existing borders.
+ *
+ * @param border New border.
+ */
+ public Assignment update(Border border) {
+ Arrays.sort(cs);
+ int j = 1;
+ boolean found = (cs[0].core == border.core);
+ for(int i = 1; i < cs.length; i++) {
+ if(cs[i].core != cs[i - 1].core) {
+ cs[j++] = cs[i];
+ }
+ found |= (cs[i].core == border.core);
+ }
+ if(found) {
+ if(j == 1) {
+ Border r = cs[0];
+ cs = null; // Prevent further use
+ return r;
+ }
+ if(j < cs.length) {
+ cs = Arrays.copyOf(cs, j);
+ }
+ return this;
+ }
+ if(j + 1 != cs.length) {
+ cs = Arrays.copyOf(cs, j + 1);
+ }
+ cs[j] = border;
+ return this;
+ }
+
+ /**
+ * Get the core this is assigned to.
+ *
+ * @return Core
+ */
+ public Core getCore() {
+ Core a = cs[0].core;
+ for(int i = 1; i < cs.length; i++) {
+ Core v = cs[i].core;
+ a = a.parent > v.parent ? a : v; // max, of negative values
+ }
+ assert (a.parent > GriDBSCAN.Instance.NOISE);
+ return a;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder buf = new StringBuilder();
+ buf.append("MultiBorder[");
+ for(Border b : cs) {
+ buf.append(b.core.parent).append(',');
+ }
+ buf.append(']');
+ return buf.toString();
+ }
+ }
+
+ @Override
+ public TypeInformation[] getInputTypeRestriction() {
+ // We strictly need a vector field of fixed dimensionality!
+ TypeInformation type = new CombinedTypeInformation(TypeUtil.NUMBER_VECTOR_FIELD, getDistanceFunction().getInputTypeRestriction());
+ return TypeUtil.array(type);
+ }
+
+ @Override
+ protected Logging getLogger() {
+ return LOG;
+ }
+
+ /**
+ * Parameterization class.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ *
+ * @param <O> Vector type to use
+ */
+ public static class Parameterizer<O extends NumberVector> extends AbstractDistanceBasedAlgorithm.Parameterizer<O> {
+ /**
+ * Parameter to control the grid width.
+ *
+ * Must be at least two times epsilon.
+ */
+ public static final OptionID GRID_ID = new OptionID("gridbscan.gridwidth", "Width of the grid used, must be at least two times epsilon.");
+
+ /**
+ * Holds the epsilon radius threshold.
+ */
+ protected double epsilon;
+
+ /**
+ * Holds the minimum cluster size.
+ */
+ protected int minpts;
+
+ /**
+ * Width of the grid cells. Must be at least 2 epsilon!
+ */
+ protected double gridwidth;
+
+ @Override
+ protected void makeOptions(Parameterization config) {
+ // Disabled: super.makeOptions(config);
+ // Because we currently only allow Lp norms:
+ ObjectParameter<DistanceFunction<? super O>> distanceFunctionP = makeParameterDistanceFunction(EuclideanDistanceFunction.class, LPNormDistanceFunction.class);
+ if(config.grab(distanceFunctionP)) {
+ distanceFunction = distanceFunctionP.instantiateClass(config);
+ }
+
+ DoubleParameter epsilonP = new DoubleParameter(DBSCAN.Parameterizer.EPSILON_ID) //
+ .addConstraint(CommonConstraints.GREATER_THAN_ZERO_DOUBLE);
+ if(config.grab(epsilonP)) {
+ epsilon = epsilonP.getValue();
+ }
+
+ IntParameter minptsP = new IntParameter(DBSCAN.Parameterizer.MINPTS_ID) //
+ .addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT);
+ if(config.grab(minptsP)) {
+ minpts = minptsP.getValue();
+ if(minpts <= 2) {
+ LOG.warning("DBSCAN with minPts <= 2 is equivalent to single-link clustering at a single height. Consider using larger values of minPts.");
+ }
+ }
+
+ DoubleParameter gridP = new DoubleParameter(GRID_ID) //
+ .addConstraint(CommonConstraints.GREATER_THAN_ZERO_DOUBLE);
+ if(epsilon > 0.) {
+ gridP.setDefaultValue(10. * epsilon);
+ gridP.addConstraint(new GreaterEqualConstraint(1. * epsilon));
+ }
+ if(config.grab(gridP)) {
+ gridwidth = gridP.doubleValue();
+ }
+ }
+
+ @Override
+ protected GriDBSCAN<O> makeInstance() {
+ return new GriDBSCAN<>(distanceFunction, epsilon, minpts, gridwidth);
+ }
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/NaiveMeanShiftClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/NaiveMeanShiftClustering.java
index 0d1e9fe2..b6b43047 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/NaiveMeanShiftClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/NaiveMeanShiftClustering.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/SNNClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/SNNClustering.java
index 2cc48637..39da3e7f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/SNNClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/SNNClustering.java
@@ -68,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.uses SharedNearestNeighborSimilarityFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationClusteringAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationClusteringAlgorithm.java
index a1ef9768..0216d475 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationClusteringAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationClusteringAlgorithm.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf AffinityPropagationInitialization
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationInitialization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationInitialization.java
index 5532f8c8..891b8a3e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationInitialization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/AffinityPropagationInitialization.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* Initialization methods for affinity propagation.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public interface AffinityPropagationInitialization<O> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/DistanceBasedInitializationWithMedian.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/DistanceBasedInitializationWithMedian.java
index 1bdff0c3..e514df53 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/DistanceBasedInitializationWithMedian.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/DistanceBasedInitializationWithMedian.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Distance based initialization.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/SimilarityBasedInitializationWithMedian.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/SimilarityBasedInitializationWithMedian.java
index d8abe9c1..3086d4fb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/SimilarityBasedInitializationWithMedian.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/affinitypropagation/SimilarityBasedInitializationWithMedian.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Similarity based initialization.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/AbstractBiclustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/AbstractBiclustering.java
index 2a0896ea..9d1b2f91 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/AbstractBiclustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/AbstractBiclustering.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ExceptionMessages;
* of the {@link NumberVector}s.
*
* @author Arthur Zimek
+ * @since 0.2
* @param <V> a certain subtype of NumberVector - the data matrix is supposed to
* consist of rows where each row relates to an object of type V and the
* columns relate to the attribute values of these objects
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/ChengAndChurch.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/ChengAndChurch.java
index ceb13976..cf957fc0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/ChengAndChurch.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/biclustering/ChengAndChurch.java
@@ -61,6 +61,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.2
* @param <V> Vector type.
*/
@Reference(authors = "Y. Cheng, G. M. Church", title = "Biclustering of expression data", booktitle = "Proc. 8th International Conference on Intelligent Systems for Molecular Biology (ISMB)")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/CASH.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/CASH.java
index 43c0528d..1db2d79f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/CASH.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/CASH.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.algorithm.clustering.correlation;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2015
+ Copyright (C) 2016
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -95,6 +95,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has CASHInterval
* @apiviz.has ParameterizationFunction
@@ -109,84 +110,36 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
title = "Robust clustering in arbitraily oriented subspaces", //
booktitle = "Proc. 8th SIAM Int. Conf. on Data Mining (SDM'08), Atlanta, GA, 2008", //
url = "http://www.siam.org/proceedings/datamining/2008/dm08_69_AchtertBoehmDavidKroegerZimek.pdf")
-public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<Model>>implements ClusteringAlgorithm<Clustering<Model>> {
+public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<Model>> implements ClusteringAlgorithm<Clustering<Model>> {
/**
* The logger for this class.
*/
private static final Logging LOG = Logging.getLogger(CASH.class);
/**
- * Parameter to specify the threshold for minimum number of points in a
- * cluster, must be an integer greater than 0.
- * <p>
- * Key: {@code -cash.minpts}
- * </p>
+ * Threshold for minimum number of points in a cluster
*/
- public static final OptionID MINPTS_ID = new OptionID("cash.minpts", "Threshold for minimum number of points in a cluster.");
+ protected int minPts;
/**
- * Parameter to specify the maximum level for splitting the hypercube, must be
- * an integer greater than 0.
- * <p>
- * Key: {@code -cash.maxlevel}
- * </p>
+ * Maximum level for splitting the hypercube.
*/
- public static final OptionID MAXLEVEL_ID = new OptionID("cash.maxlevel", "The maximum level for splitting the hypercube.");
+ protected int maxLevel;
/**
- * Parameter to specify the minimum dimensionality of the subspaces to be
- * found, must be an integer greater than 0.
- * <p>
- * Default value: {@code 1}
- * </p>
- * <p>
- * Key: {@code -cash.mindim}
- * </p>
+ * Minimum dimensionality of the subspaces to be found
*/
- public static final OptionID MINDIM_ID = new OptionID("cash.mindim", "The minimum dimensionality of the subspaces to be found.");
+ protected int minDim;
/**
- * Parameter to specify the maximum jitter for distance values, must be a
- * double greater than 0.
- * <p>
- * Key: {@code -cash.jitter}
- * </p>
+ * Maximum jitter for distance values.
*/
- public static final OptionID JITTER_ID = new OptionID("cash.jitter", "The maximum jitter for distance values.");
+ protected double jitter;
/**
- * Flag to indicate that an adjustment of the applied heuristic for choosing
- * an interval is performed after an interval is selected.
- * <p>
- * Key: {@code -cash.adjust}
- * </p>
+ * Apply adjustment heuristic for interval choosing.
*/
- public static final OptionID ADJUST_ID = new OptionID("cash.adjust", "Flag to indicate that an adjustment of the applied heuristic for choosing an interval " + "is performed after an interval is selected.");
-
- /**
- * Holds the value of {@link #MINPTS_ID}.
- */
- private int minPts;
-
- /**
- * Holds the value of {@link #MAXLEVEL_ID}.
- */
- private int maxLevel;
-
- /**
- * Holds the value of {@link #MINDIM_ID}.
- */
- private int minDim;
-
- /**
- * Holds the value of {@link #JITTER_ID}.
- */
- private double jitter;
-
- /**
- * Holds the value of {@link #ADJUST_ID}.
- */
- private boolean adjust;
+ protected boolean adjust;
/**
* Holds the dimensionality for noise.
@@ -711,7 +664,7 @@ public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<M
// set the parameters
ListParameterization parameters = new ListParameterization();
parameters.addParameter(PCAFilteredRunner.Parameterizer.PCA_EIGENPAIR_FILTER, FirstNEigenPairFilter.class.getName());
- parameters.addParameter(FirstNEigenPairFilter.EIGENPAIR_FILTER_N, Integer.toString(dim - 1));
+ parameters.addParameter(FirstNEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_N, Integer.toString(dim - 1));
DependencyDerivator<DoubleVector> derivator = null;
Class<DependencyDerivator<DoubleVector>> cls = ClassGenericsUtil.uglyCastIntoSubclass(DependencyDerivator.class);
derivator = parameters.tryInstantiate(cls);
@@ -784,7 +737,7 @@ public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<M
ListParameterization parameters = new ListParameterization();
parameters.addParameter(PCAFilteredRunner.Parameterizer.PCA_EIGENPAIR_FILTER, FirstNEigenPairFilter.class.getName());
- parameters.addParameter(FirstNEigenPairFilter.EIGENPAIR_FILTER_N, Integer.toString(dimensionality));
+ parameters.addParameter(FirstNEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_N, Integer.toString(dimensionality));
DependencyDerivator<DoubleVector> derivator = null;
Class<DependencyDerivator<DoubleVector>> cls = ClassGenericsUtil.uglyCastIntoSubclass(DependencyDerivator.class);
derivator = parameters.tryInstantiate(cls);
@@ -841,14 +794,77 @@ public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<M
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
- protected int minpts;
-
- protected int maxlevel;
-
- protected int mindim;
-
+ /**
+ * Parameter to specify the threshold for minimum number of points in a
+ * cluster, must be an integer greater than 0.
+ * <p>
+ * Key: {@code -cash.minpts}
+ * </p>
+ */
+ public static final OptionID MINPTS_ID = new OptionID("cash.minpts", "Threshold for minimum number of points in a cluster.");
+
+ /**
+ * Parameter to specify the maximum level for splitting the hypercube, must
+ * be an integer greater than 0.
+ * <p>
+ * Key: {@code -cash.maxlevel}
+ * </p>
+ */
+ public static final OptionID MAXLEVEL_ID = new OptionID("cash.maxlevel", "The maximum level for splitting the hypercube.");
+
+ /**
+ * Parameter to specify the minimum dimensionality of the subspaces to be
+ * found, must be an integer greater than 0.
+ * <p>
+ * Default value: {@code 1}
+ * </p>
+ * <p>
+ * Key: {@code -cash.mindim}
+ * </p>
+ */
+ public static final OptionID MINDIM_ID = new OptionID("cash.mindim", "The minimum dimensionality of the subspaces to be found.");
+
+ /**
+ * Parameter to specify the maximum jitter for distance values, must be a
+ * double greater than 0.
+ * <p>
+ * Key: {@code -cash.jitter}
+ * </p>
+ */
+ public static final OptionID JITTER_ID = new OptionID("cash.jitter", "The maximum jitter for distance values.");
+
+ /**
+ * Flag to indicate that an adjustment of the applied heuristic for choosing
+ * an interval is performed after an interval is selected.
+ * <p>
+ * Key: {@code -cash.adjust}
+ * </p>
+ */
+ public static final OptionID ADJUST_ID = new OptionID("cash.adjust", "Flag to indicate that an adjustment of the applied heuristic for choosing an interval " + "is performed after an interval is selected.");
+
+ /**
+ * Threshold for minimum number of points in a cluster
+ */
+ protected int minPts;
+
+ /**
+ * Maximum level for splitting the hypercube.
+ */
+ protected int maxLevel;
+
+ /**
+ * Minimum dimensionality of the subspaces to be found
+ */
+ protected int minDim;
+
+ /**
+ * Maximum jitter for distance values.
+ */
protected double jitter;
+ /**
+ * Apply adjustment heuristic for interval choosing.
+ */
protected boolean adjust;
@Override
@@ -857,17 +873,17 @@ public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<M
IntParameter minptsP = new IntParameter(MINPTS_ID);
minptsP.addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT);
if(config.grab(minptsP)) {
- minpts = minptsP.getValue();
+ minPts = minptsP.getValue();
}
IntParameter maxlevelP = new IntParameter(MAXLEVEL_ID);
maxlevelP.addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT);
if(config.grab(maxlevelP)) {
- maxlevel = maxlevelP.getValue();
+ maxLevel = maxlevelP.getValue();
}
IntParameter mindimP = new IntParameter(MINDIM_ID, 1);
mindimP.addConstraint(CommonConstraints.GREATER_EQUAL_ONE_INT);
if(config.grab(mindimP)) {
- mindim = mindimP.getValue();
+ minDim = mindimP.getValue();
}
DoubleParameter jitterP = new DoubleParameter(JITTER_ID);
jitterP.addConstraint(CommonConstraints.GREATER_THAN_ZERO_DOUBLE);
@@ -882,7 +898,7 @@ public class CASH<V extends NumberVector> extends AbstractAlgorithm<Clustering<M
@Override
protected CASH<NumberVector> makeInstance() {
- return new CASH<>(minpts, maxlevel, mindim, jitter, adjust);
+ return new CASH<>(minPts, maxLevel, minDim, jitter, adjust);
}
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/COPAC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/COPAC.java
index 06e64343..72de0a55 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/COPAC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/COPAC.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has DimensionModel
* @apiviz.composedOf COPACNeighborPredicate
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ERiC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ERiC.java
index 8fb11eaf..f73e9e70 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ERiC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ERiC.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf COPAC
* @apiviz.composedOf DBSCAN
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/FourC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/FourC.java
index 52d043ec..63fe9d81 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/FourC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/FourC.java
@@ -47,19 +47,20 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* 4C identifies local subgroups of data objects sharing a uniform correlation.
* The algorithm is based on a combination of PCA and density-based clustering
* (DBSCAN).
- *
+ *
* Reference:
* <p>
* C. Böhm, K. Kailing, P. Kröger, A. Zimek:<br />
* Computing Clusters of Correlation Connected Objects. <br>
* In Proc. ACM SIGMOD Int. Conf. on Management of Data, Paris, France, 2004.
* </p>
- *
+ *
* @author Arthur Zimek
- *
+ * @since 0.2
+ *
* @apiviz.composedOf FourCNeighborPredicate
* @apiviz.composedOf FourCCorePredicate
- *
+ *
* @param <V> type of NumberVector handled by this Algorithm
*/
@Title("4C: Computing Correlation Connected Clusters")
@@ -77,7 +78,7 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Constructor.
- *
+ *
* @param settings FourC settings.
*/
public FourC(FourC.Settings settings) {
@@ -96,9 +97,9 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Class wrapping the 4C parameter settings.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Settings {
@@ -135,9 +136,9 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Parameterization class for 4C settings.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
@@ -178,7 +179,7 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Configure the epsilon radius parameter.
- *
+ *
* @param config Parameter source
*/
protected void configEpsilon(Parameterization config) {
@@ -191,7 +192,7 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Configure the minPts aka "mu" parameter.
- *
+ *
* @param config Parameter source
*/
protected void configMinPts(Parameterization config) {
@@ -204,18 +205,18 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Configure the delta parameter.
- *
+ *
* @param config Parameter source
*/
protected void configDelta(Parameterization config) {
// Flag for using absolute variances
- Flag absoluteF = new Flag(LimitEigenPairFilter.EIGENPAIR_FILTER_ABSOLUTE);
+ Flag absoluteF = new Flag(LimitEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_ABSOLUTE);
if(config.grab(absoluteF)) {
settings.absolute = absoluteF.isTrue();
}
// Parameter delta
- DoubleParameter deltaP = new DoubleParameter(LimitEigenPairFilter.EIGENPAIR_FILTER_DELTA) //
+ DoubleParameter deltaP = new DoubleParameter(LimitEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_DELTA) //
.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE);
if(!settings.absolute) {
deltaP.setDefaultValue(DEFAULT_DELTA);
@@ -230,7 +231,7 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Configure the kappa parameter.
- *
+ *
* @param config Parameter source
*/
protected void configKappa(Parameterization config) {
@@ -244,7 +245,7 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Configure the delta parameter.
- *
+ *
* @param config Parameter source
*/
protected void configLambda(Parameterization config) {
@@ -265,9 +266,9 @@ public class FourC<V extends NumberVector> extends GeneralizedDBSCAN {
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer<O extends NumberVector> extends AbstractParameterizer {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/HiCO.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/HiCO.java
index 0bbd012a..6a741ce1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/HiCO.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/HiCO.java
@@ -74,11 +74,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* In: Proc. Int. Conf. on Scientific and Statistical Database Management
* (SSDBM'06), Vienna, Austria, 2006.
* </p>
- *
+ *
* @author Elke Achtert
- *
+ * @since 0.3
+ *
* @apiviz.composedOf HiCO.Instance
- *
+ *
* @param <V> the type of NumberVector handled by the algorithm
*/
@Title("Mining Hierarchies of Correlation Clusters")
@@ -117,7 +118,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
/**
* Constructor.
- *
+ *
* @param indexfactory Index factory
* @param mu Mu parameter
*/
@@ -138,7 +139,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
/**
* Instance of the OPTICS algorithm.
- *
+ *
* @author Erich Schubert
*
* @apiviz.uses FilteredLocalPCAIndex
@@ -275,7 +276,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
/**
* Sort new candidates by their distance, for determining the core size.
- *
+ *
* @author Erich Schubert
*
* @apiviz.exclude
@@ -298,7 +299,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
/**
* Computes the correlation distance between the two subspaces defined by the
* specified PCAs.
- *
+ *
* @param pca1 first PCA
* @param pca2 second PCA
* @param dimensionality the dimensionality of the data space
@@ -370,7 +371,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
* <code>v</code> at column <code>corrDim</code>. After insertion the matrix
* <code>v</code> is orthonormalized and column <code>corrDim</code> of matrix
* <code>e_czech</code> is set to the <code>corrDim</code>-th unit vector.
- *
+ *
* @param v the orthonormal matrix of the eigenvectors
* @param e_czech the selection matrix of the strong eigenvectors
* @param vector the vector to be inserted
@@ -411,9 +412,9 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer<V extends NumberVector> extends AbstractParameterizer {
@@ -421,7 +422,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
* Parameter to specify the smoothing factor, must be an integer greater
* than 0. The {link {@link #MU_ID}-nearest neighbor is used to compute the
* correlation reachability of an object.
- *
+ *
* <p>
* Key: {@code -hico.mu}
* </p>
@@ -515,7 +516,7 @@ public class HiCO<V extends NumberVector> extends GeneralizedOPTICS<V, Correlati
ListParameterization params = new ListParameterization();
// preprocessor
params.addParameter(KNNQueryFilteredPCAIndex.Factory.Parameterizer.K_ID, k);
- params.addParameter(PercentageEigenPairFilter.ALPHA_ID, alpha);
+ params.addParameter(PercentageEigenPairFilter.Parameterizer.ALPHA_ID, alpha);
ChainedParameterization chain = new ChainedParameterization(params, config);
chain.errorsTo(config);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/LMCLUS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/LMCLUS.java
index 934d3fc6..0a302005 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/LMCLUS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/LMCLUS.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Ernst Waas
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Robert Haralick, Rave Harpaz", title = "Linear manifold clustering in high dimensional spaces by stochastic search", booktitle = "Pattern Recognition volume 40, Issue 10", url = "http://dx.doi.org/10.1016/j.patcog.2007.01.020")
public class LMCLUS extends AbstractAlgorithm<Clustering<Model>> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ORCLUS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ORCLUS.java
index 4e5c3fbc..413675a8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ORCLUS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/ORCLUS.java
@@ -75,6 +75,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has PCARunner
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHInterval.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHInterval.java
index bf935864..42f1f474 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHInterval.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHInterval.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
* and a set of objects ids associated with this interval.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has de.lmu.ifi.dbs.elki.algorithm.clustering.correlation.cash.CASHIntervalSplit
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHIntervalSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHIntervalSplit.java
index 1edec3a9..038495f2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHIntervalSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/CASHIntervalSplit.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* Supports the splitting of CASH intervals.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class CASHIntervalSplit {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/ParameterizationFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/ParameterizationFunction.java
index 31fea80f..1b0ec58f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/ParameterizationFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/correlation/cash/ParameterizationFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* belonging to the normal vector n.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class ParameterizationFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/AbstractEMModelFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/AbstractEMModelFactory.java
index 36ae7804..0b165c75 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/AbstractEMModelFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/AbstractEMModelFactory.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for initializing EM.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type
* @param <M> Model type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModel.java
index 544362da..e31089d5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* Simpler model for a single Gaussian cluster, without covariances.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class DiagonalGaussianModel implements EMClusterModel<EMModel> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModelFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModelFactory.java
index 3f3bf914..66fb548b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModelFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/DiagonalGaussianModelFactory.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* corresponds to the {@code 'VVI'} model in Mclust (R).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has DiagonalGaussianModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EM.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EM.java
index 208e8450..039c0174 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EM.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EM.java
@@ -63,14 +63,16 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Clustering by expectation maximization (EM-Algorithm), also known as Gaussian
* Mixture Modeling (GMM).
*
+ * Reference:
* <p>
- * Reference: A. P. Dempster, N. M. Laird, D. B. Rubin:<br />
- * Maximum Likelihood from Incomplete Data via the EM algorithm.<br>
+ * A. P. Dempster, N. M. Laird, D. B. Rubin:<br />
+ * Maximum Likelihood from Incomplete Data via the EM algorithm.<br />
* In Journal of the Royal Statistical Society, Series B, 39(1), 1977, pp. 1-31
* </p>
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf EMClusterModelFactory
*
@@ -83,7 +85,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
title = "Maximum Likelihood from Incomplete Data via the EM algorithm", //
booktitle = "Journal of the Royal Statistical Society, Series B, 39(1), 1977, pp. 1-31", //
url = "http://www.jstor.org/stable/2984875")
-@Alias({ "de.lmu.ifi.dbs.elki.algorithm.clustering.EM", "EM" })
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.EM")
public class EM<V extends NumberVector, M extends MeanModel> extends AbstractAlgorithm<Clustering<M>> implements ClusteringAlgorithm<Clustering<M>> {
/**
* The logger for this class.
@@ -392,7 +394,7 @@ public class EM<V extends NumberVector, M extends MeanModel> extends AbstractAlg
initializer = initialP.instantiateClass(config);
}
- DoubleParameter deltaP = new DoubleParameter(DELTA_ID, 1e-5)//
+ DoubleParameter deltaP = new DoubleParameter(DELTA_ID, 1e-7)//
.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE);
if(config.grab(deltaP)) {
delta = deltaP.getValue();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModel.java
index aaf66839..c89d85d0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.model.MeanModel;
* Models useable in EM clustering.
*
* @author Erich Schubert
+ * @since 0.3
*/
public interface EMClusterModel<M extends MeanModel> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModelFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModelFactory.java
index d486d5d3..a4f1e486 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModelFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/EMClusterModelFactory.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
* Factory for initializing the EM models.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModel.java
index 4c020bc1..3b433af1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* Model for a single Gaussian cluster.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class MultivariateGaussianModel implements EMClusterModel<EMModel> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModelFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModelFactory.java
index 8e767a0f..e47cb1ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModelFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/MultivariateGaussianModelFactory.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* {@code 'VVV'} model in Mclust (R).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has MultivariateGaussianModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModel.java
index 7aa5b92b..97296d45 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModel.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* Simple spherical Gaussian cluster.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SphericalGaussianModel implements EMClusterModel<EMModel> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModelFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModelFactory.java
index 8b2dfd57..0b32a962 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModelFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/em/SphericalGaussianModelFactory.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* corresponds to the {@code 'VVI'} model in Mclust (R).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SphericalGaussianModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/AbstractRangeQueryNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/AbstractRangeQueryNeighborPredicate.java
index 53f70aac..aa78033d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/AbstractRangeQueryNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/AbstractRangeQueryNeighborPredicate.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract local model neighborhood predicate.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/COPACNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/COPACNeighborPredicate.java
index a2ec0e2e..f8aa1b97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/COPACNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/COPACNeighborPredicate.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> the type of NumberVector handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/CorePredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/CorePredicate.java
index f87227c1..cd957770 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/CorePredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/CorePredicate.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Note the Factory/Instance split of this interface.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/ERiCNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/ERiCNeighborPredicate.java
index d137ee67..cbe169ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/ERiCNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/ERiCNeighborPredicate.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> the type of NumberVector handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/EpsilonNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/EpsilonNeighborPredicate.java
index 8610521a..e3fdb443 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/EpsilonNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/EpsilonNeighborPredicate.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCCorePredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCCorePredicate.java
index ecd569e9..72b96fa0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCCorePredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCCorePredicate.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCNeighborPredicate.java
index e9f50c41..71b4cf66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/FourCNeighborPredicate.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> the type of NumberVector handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/GeneralizedDBSCAN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/GeneralizedDBSCAN.java
index b6b9d74f..86753fcd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/GeneralizedDBSCAN.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/GeneralizedDBSCAN.java
@@ -68,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Erich Schubert
* @author Arthur Zimek
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/LSDBC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/LSDBC.java
index bd145c14..5c6ddafe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/LSDBC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/LSDBC.java
@@ -75,6 +75,7 @@ import gnu.trove.list.array.TIntArrayList;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/MinPtsCorePredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/MinPtsCorePredicate.java
index ff58902d..405ba28a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/MinPtsCorePredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/MinPtsCorePredicate.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/NeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/NeighborPredicate.java
index 1e2aa716..9d760a4d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/NeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/NeighborPredicate.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Note the Factory/Instance split of this interface.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConCorePredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConCorePredicate.java
index 0ae26c40..e0cd1547 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConCorePredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConCorePredicate.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConNeighborPredicate.java
index 26991ca9..9da9cc21 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/gdbscan/PreDeConNeighborPredicate.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Peer Kröger
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> the type of NumberVector handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AGNES.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AGNES.java
index 41de1cac..484c83b7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AGNES.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AGNES.java
@@ -27,14 +27,8 @@ import de.lmu.ifi.dbs.elki.algorithm.AbstractDistanceBasedAlgorithm;
import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.database.Database;
-import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
-import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
-import de.lmu.ifi.dbs.elki.database.datastore.WritableDBIDDataStore;
-import de.lmu.ifi.dbs.elki.database.datastore.WritableDoubleDataStore;
-import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
-import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
@@ -57,7 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* This is the naive O(n^3) algorithm. See {@link SLINK} for a much faster
* algorithm (however, only for single-linkage).
- *
+ *
* This implementation uses the pointer-based representation used by SLINK, so
* that the extraction algorithms we have can be used with either of them.
*
@@ -92,8 +86,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf LinkageMethod
+ * @apiviz.composedOf PointerHierarchyRepresentationBuilder
*
* @param <O> Object type
*/
@@ -116,7 +112,7 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
/**
* Constructor.
- *
+ *
* @param distanceFunction Distance function to use
* @param linkage Linkage method
*/
@@ -136,7 +132,7 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
/**
* Run the algorithm
- *
+ *
* @param db Database
* @param relation Relation
* @return Clustering hierarchy
@@ -162,21 +158,16 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
initializeDistanceMatrix(scratch, dq, ix, iy, square);
// Initialize space for result:
- WritableDBIDDataStore pi = DataStoreUtil.makeDBIDStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_STATIC);
- WritableDoubleDataStore lambda = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_STATIC, Double.POSITIVE_INFINITY);
- WritableIntegerDataStore csize = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP, 1);
- for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
- pi.put(it, it);
- }
+ PointerHierarchyRepresentationBuilder builder = new PointerHierarchyRepresentationBuilder(ids);
// Repeat until everything merged into 1 cluster
FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Agglomerative clustering", size - 1, LOG) : null;
int wsize = size;
for(int i = 1; i < size; i++) {
- int x = findMerge(wsize, scratch, ix, iy, pi, lambda, csize);
+ int x = findMerge(wsize, scratch, ix, iy, builder);
if(x == wsize - 1) {
--wsize;
- for(ix.seek(wsize - 1); lambda.doubleValue(ix) < Double.POSITIVE_INFINITY; ix.retract()) {
+ for(ix.seek(wsize - 1); builder.isLinked(ix); ix.retract()) {
--wsize;
}
}
@@ -184,12 +175,12 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
}
LOG.ensureCompleted(prog);
- return new PointerHierarchyRepresentationResult(ids, pi, lambda);
+ return builder.complete();
}
/**
* Compute the size of a complete x by x triangle (minus diagonal)
- *
+ *
* @param x Offset
* @return Size of complete triangle
*/
@@ -199,7 +190,7 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
/**
* Initialize a distance matrix.
- *
+ *
* @param scratch Scratch space to be used.
* @param dq Distance query
* @param ix Data iterator
@@ -221,29 +212,27 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
/**
* Perform the next merge step in AGNES.
- *
+ *
* @param size Data set size
* @param scratch Scratch space.
* @param ix First iterator
* @param iy Second iterator
- * @param pi Parent storage
- * @param lambda Lambda (join distance) storage
- * @param csize Cluster sizes
+ * @param builder Pointer representation builder
* @return x, for shrinking the working set.
*/
- protected int findMerge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, WritableDBIDDataStore pi, WritableDoubleDataStore lambda, WritableIntegerDataStore csize) {
+ protected int findMerge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, PointerHierarchyRepresentationBuilder builder) {
double mindist = Double.POSITIVE_INFINITY;
int x = -1, y = -1;
// Find minimum:
for(int ox = 0, xbase = 0; ox < size; xbase += ox++) {
// Skip if object has already joined a cluster:
- if(lambda.doubleValue(ix.seek(ox)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ix.seek(ox))) {
continue;
}
assert(xbase == triangleSize(ox));
for(int oy = 0; oy < ox; oy++) {
// Skip if object has already joined a cluster:
- if(lambda.doubleValue(iy.seek(oy)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(iy.seek(oy))) {
continue;
}
final int idx = xbase + oy;
@@ -255,25 +244,23 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
}
}
assert(x >= 0 && y >= 0);
- merge(size, scratch, ix, iy, pi, lambda, csize, mindist, x, y);
+ merge(size, scratch, ix, iy, builder, mindist, x, y);
return x;
}
/**
* Execute the cluster merge.
- *
+ *
* @param size Data set size
* @param scratch Scratch space.
* @param ix First iterator
* @param iy Second iterator
- * @param pi Parent storage
- * @param lambda Lambda (join distance) storage
- * @param csize Cluster sizes
+ * @param builder Hierarchy builder
* @param mindist Distance that was used for merging
* @param x First matrix position
* @param y Second matrix position
*/
- protected void merge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, WritableDBIDDataStore pi, WritableDoubleDataStore lambda, WritableIntegerDataStore csize, double mindist, int x, int y) {
+ protected void merge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y) {
// Avoid allocating memory, by reusing existing iterators:
ix.seek(x);
iy.seek(y);
@@ -283,41 +270,39 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
// Perform merge in data structure: x -> y
assert(y < x);
// Since y < x, prefer keeping y, dropping x.
- lambda.put(ix, mindist);
- pi.put(ix, iy);
+ builder.add(ix, mindist, iy);
// Update cluster size for y:
- final int sizex = csize.intValue(ix), sizey = csize.intValue(iy);
- csize.put(iy, sizex + sizey);
+ final int sizex = builder.getSize(ix), sizey = builder.getSize(iy);
+ builder.setSize(iy, sizex + sizey);
// Note: this changes iy.
- updateMatrix(size, scratch, iy, lambda, csize, mindist, x, y, sizex, sizey);
+ updateMatrix(size, scratch, iy, builder, mindist, x, y, sizex, sizey);
}
/**
* Update the scratch distance matrix.
- *
+ *
* @param size Data set size
* @param scratch Scratch matrix.
* @param ij Iterator to reuse
- * @param lambda Lambda (join distance) storage
- * @param csize Cluster sizes
+ * @param builder Hierarchy builder
* @param mindist Distance that was used for merging
* @param x First matrix position
* @param y Second matrix position
* @param sizex Old size of first cluster
* @param sizey Old size of second cluster
*/
- protected void updateMatrix(int size, double[] scratch, DBIDArrayIter ij, WritableDoubleDataStore lambda, WritableIntegerDataStore csize, double mindist, int x, int y, final int sizex, final int sizey) {
+ protected void updateMatrix(int size, double[] scratch, DBIDArrayIter ij, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y, final int sizex, final int sizey) {
// Update distance matrix. Note: miny < minx
final int xbase = triangleSize(x), ybase = triangleSize(y);
// Write to (y, j), with j < y
int j = 0;
for(; j < y; j++) {
- if(lambda.doubleValue(ij.seek(j)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ij.seek(j))) {
continue;
}
- final int sizej = csize.intValue(ij);
+ final int sizej = builder.getSize(ij);
final int yb = ybase + j;
scratch[yb] = linkage.combine(sizex, scratch[xbase + j], sizey, scratch[yb], sizej, mindist);
}
@@ -325,20 +310,20 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
// Write to (j, y), with y < j < x
int jbase = triangleSize(j);
for(; j < x; jbase += j++) {
- if(lambda.doubleValue(ij.seek(j)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ij.seek(j))) {
continue;
}
- final int sizej = csize.intValue(ij);
+ final int sizej = builder.getSize(ij);
final int jb = jbase + y;
scratch[jb] = linkage.combine(sizex, scratch[xbase + j], sizey, scratch[jb], sizej, mindist);
}
jbase += j++; // Skip x
// Write to (j, y), with y < x < j
for(; j < size; jbase += j++) {
- if(lambda.doubleValue(ij.seek(j)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ij.seek(j))) {
continue;
}
- final int sizej = csize.intValue(ij);
+ final int sizej = builder.getSize(ij);
scratch[jbase + y] = linkage.combine(sizex, scratch[jbase + x], sizey, scratch[jbase + y], sizej, mindist);
}
}
@@ -356,11 +341,11 @@ public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchy
/**
* Parameterization class
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
- *
+ *
* @param <O> Object type
*/
public static class Parameterizer<O> extends AbstractDistanceBasedAlgorithm.Parameterizer<O> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AbstractHDBSCAN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AbstractHDBSCAN.java
index 8febff49..a38f629f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AbstractHDBSCAN.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AbstractHDBSCAN.java
@@ -66,6 +66,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf HDBSCANAdapter
* @apiviz.composedOf HeapMSTCollector
@@ -107,7 +108,7 @@ public abstract class AbstractHDBSCAN<O, R extends Result> extends AbstractDista
protected WritableDoubleDataStore computeCoreDists(DBIDs ids, KNNQuery<O> knnQ, int minPts) {
final Logging LOG = getLogger();
final WritableDoubleDataStore coredists = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_DB);
- FiniteProgress cprog = LOG.isVerbose() ? new FiniteProgress("Computing core sizes.", ids.size(), LOG) : null;
+ FiniteProgress cprog = LOG.isVerbose() ? new FiniteProgress("Computing core sizes", ids.size(), LOG) : null;
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
coredists.put(iter, knnQ.getKNNForDBID(iter, minPts).getKNNDistance());
LOG.incrementProcessed(cprog);
@@ -234,7 +235,7 @@ public abstract class AbstractHDBSCAN<O, R extends Result> extends AbstractDista
pi.put(iter, iter); // Initialize
}
DBIDVar p = DBIDUtil.newVar(), q = DBIDUtil.newVar(), n = DBIDUtil.newVar();
- FiniteProgress pprog = LOG.isVerbose() ? new FiniteProgress("Converting MST to pointer representation.", heap.size(), LOG) : null;
+ FiniteProgress pprog = LOG.isVerbose() ? new FiniteProgress("Converting MST to pointer representation", heap.size(), LOG) : null;
while(!heap.isEmpty()) {
final double dist = heap.peekKey();
final long pair = heap.peekValue();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AnderbergHierarchicalClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AnderbergHierarchicalClustering.java
index 0484b7ad..f30bd8df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AnderbergHierarchicalClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/AnderbergHierarchicalClustering.java
@@ -29,14 +29,8 @@ import de.lmu.ifi.dbs.elki.algorithm.AbstractDistanceBasedAlgorithm;
import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.database.Database;
-import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
-import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
-import de.lmu.ifi.dbs.elki.database.datastore.WritableDBIDDataStore;
-import de.lmu.ifi.dbs.elki.database.datastore.WritableDoubleDataStore;
-import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
-import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
@@ -52,16 +46,16 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
/**
* This is a modification of the classic AGNES algorithm for hierarchical
* clustering using a nearest-neighbor heuristic for acceleration.
- *
+ *
* Instead of scanning the matrix (with cost O(n^2)) to find the minimum, the
* nearest neighbor of each object is remembered. On the downside, we need to
* check these values at every merge, and it may now cost O(n^2) to perform a
* merge, so there is no worst-case advantage to this approach. The average case
* however improves from O(n^3) to O(n^2), which yields a considerable
* improvement in running time.
- *
+ *
* This optimization is attributed to M. R. Anderberg.
- *
+ *
* Reference:
* <p>
* M. R. Anderberg<br />
@@ -71,8 +65,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf LinkageMethod
+ * @apiviz.composedOf PointerHierarchyRepresentationBuilder
*
* @param <O> Object type
*/
@@ -92,7 +88,7 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
/**
* Constructor.
- *
+ *
* @param distanceFunction Distance function to use
* @param linkage Linkage method
*/
@@ -103,7 +99,7 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
/**
* Run the algorithm
- *
+ *
* @param db Database
* @param relation Relation
* @return Clustering hierarchy
@@ -135,21 +131,16 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
initializeNNCache(scratch, bestd, besti);
// Initialize space for result:
- WritableDBIDDataStore pi = DataStoreUtil.makeDBIDStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_STATIC);
- WritableDoubleDataStore lambda = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_STATIC, Double.POSITIVE_INFINITY);
- WritableIntegerDataStore csize = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP, 1);
- for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
- pi.put(it, it);
- }
+ PointerHierarchyRepresentationBuilder builder = new PointerHierarchyRepresentationBuilder(ids);
// Repeat until everything merged into 1 cluster
FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Agglomerative clustering", size - 1, LOG) : null;
int wsize = size;
for(int i = 1; i < size; i++) {
- int x = findMerge(wsize, scratch, ix, iy, bestd, besti, pi, lambda, csize);
+ int x = findMerge(wsize, scratch, ix, iy, bestd, besti, builder);
if(x == wsize - 1) {
--wsize;
- for(ix.seek(wsize - 1); lambda.doubleValue(ix) < Double.POSITIVE_INFINITY; ix.retract()) {
+ for(ix.seek(wsize - 1); builder.isLinked(ix); ix.retract()) {
--wsize;
}
}
@@ -157,12 +148,12 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
}
LOG.ensureCompleted(prog);
- return new PointerHierarchyRepresentationResult(ids, pi, lambda);
+ return builder.complete();
}
/**
* Initialize the NN cache.
- *
+ *
* @param scratch Scatch space
* @param bestd Best distance
* @param besti Best index
@@ -193,21 +184,19 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
/**
* Perform the next merge step.
- *
+ *
* Due to the cache, this is now O(n) each time, instead of O(n*n).
- *
+ *
* @param size Data set size
* @param scratch Scratch space.
* @param ix First iterator
* @param iy Second iterator
* @param bestd Best distance
* @param besti Index of best distance
- * @param pi Parent storage
- * @param lambda Lambda (join distance) storage
- * @param csize Cluster sizes
+ * @param builder Hierarchy builder
* @return x, for shrinking the working set.
*/
- protected int findMerge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, double[] bestd, int[] besti, WritableDBIDDataStore pi, WritableDoubleDataStore lambda, WritableIntegerDataStore csize) {
+ protected int findMerge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, double[] bestd, int[] besti, PointerHierarchyRepresentationBuilder builder) {
double mindist = Double.POSITIVE_INFINITY;
int x = -1, y = -1;
// Find minimum:
@@ -223,27 +212,25 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
}
}
assert(x >= 0 && y >= 0);
- merge(size, scratch, ix, iy, bestd, besti, pi, lambda, csize, mindist, x < y ? y : x, x < y ? x : y);
+ merge(size, scratch, ix, iy, bestd, besti, builder, mindist, x < y ? y : x, x < y ? x : y);
return x;
}
/**
* Execute the cluster merge.
- *
+ *
* @param size Data set size
* @param scratch Scratch space.
* @param ix First iterator
* @param iy Second iterator
* @param bestd Best distance
* @param besti Index of best distance
- * @param pi Parent storage
- * @param lambda Lambda (join distance) storage
- * @param csize Cluster sizes
+ * @param builder Hierarchy builder
* @param mindist Distance that was used for merging
* @param x First matrix position
* @param y Second matrix position
*/
- protected void merge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, double[] bestd, int[] besti, WritableDBIDDataStore pi, WritableDoubleDataStore lambda, WritableIntegerDataStore csize, double mindist, int x, int y) {
+ protected void merge(int size, double[] scratch, DBIDArrayIter ix, DBIDArrayIter iy, double[] bestd, int[] besti, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y) {
// Avoid allocating memory, by reusing existing iterators:
ix.seek(x);
iy.seek(y);
@@ -253,17 +240,16 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
// Perform merge in data structure: x -> y
assert(y < x);
// Since y < x, prefer keeping y, dropping x.
- lambda.put(ix, mindist);
- pi.put(ix, iy);
+ builder.add(ix, mindist, iy);
// Update cluster size for y:
- final int sizex = csize.intValue(ix), sizey = csize.intValue(iy);
- csize.put(iy, sizex + sizey);
+ final int sizex = builder.getSize(ix), sizey = builder.getSize(iy);
+ builder.setSize(iy, sizex + sizey);
// Deactivate x in cache:
besti[x] = -1;
// Note: this changes iy.
- updateMatrix(size, scratch, iy, bestd, besti, lambda, csize, mindist, x, y, sizex, sizey);
+ updateMatrix(size, scratch, iy, bestd, besti, builder, mindist, x, y, sizex, sizey);
if(besti[y] == x) {
findBest(size, scratch, bestd, besti, y);
}
@@ -271,31 +257,30 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
/**
* Update the scratch distance matrix.
- *
+ *
* @param size Data set size
* @param scratch Scratch matrix.
* @param ij Iterator to reuse
* @param bestd Best distance
* @param besti Index of best distance
- * @param lambda Lambda (join distance) storage
- * @param csize Cluster sizes
+ * @param builder Hierarchy builder
* @param mindist Distance that was used for merging
* @param x First matrix position
* @param y Second matrix position
* @param sizex Old size of first cluster
* @param sizey Old size of second cluster
*/
- protected void updateMatrix(int size, double[] scratch, DBIDArrayIter ij, double[] bestd, int[] besti, WritableDoubleDataStore lambda, WritableIntegerDataStore csize, double mindist, int x, int y, final int sizex, final int sizey) {
+ protected void updateMatrix(int size, double[] scratch, DBIDArrayIter ij, double[] bestd, int[] besti, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y, final int sizex, final int sizey) {
// Update distance matrix. Note: miny < minx
final int xbase = AGNES.triangleSize(x), ybase = AGNES.triangleSize(y);
// Write to (y, j), with j < y
int j = 0;
for(; j < y; j++) {
- if(lambda.doubleValue(ij.seek(j)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ij.seek(j))) {
continue;
}
- final int sizej = csize.intValue(ij);
+ final int sizej = builder.getSize(ij);
final int yb = ybase + j;
final double d = scratch[yb] = linkage.combine(sizex, scratch[xbase + j], sizey, scratch[yb], sizej, mindist);
updateCache(size, scratch, bestd, besti, x, y, j, d);
@@ -304,10 +289,10 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
// Write to (j, y), with y < j < x
int jbase = AGNES.triangleSize(j);
for(; j < x; jbase += j++) {
- if(lambda.doubleValue(ij.seek(j)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ij.seek(j))) {
continue;
}
- final int sizej = csize.intValue(ij);
+ final int sizej = builder.getSize(ij);
final int jb = jbase + y;
final double d = scratch[jb] = linkage.combine(sizex, scratch[xbase + j], sizey, scratch[jb], sizej, mindist);
updateCache(size, scratch, bestd, besti, x, y, j, d);
@@ -315,10 +300,10 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
jbase += j++; // Skip x
// Write to (j, y), with y < x < j
for(; j < size; jbase += j++) {
- if(lambda.doubleValue(ij.seek(j)) < Double.POSITIVE_INFINITY) {
+ if(builder.isLinked(ij.seek(j))) {
continue;
}
- final int sizej = csize.intValue(ij);
+ final int sizej = builder.getSize(ij);
final double d = scratch[jbase + y] = linkage.combine(sizex, scratch[jbase + x], sizey, scratch[jbase + y], sizej, mindist);
updateCache(size, scratch, bestd, besti, x, y, j, d);
}
@@ -390,11 +375,11 @@ public class AnderbergHierarchicalClustering<O> extends AbstractDistanceBasedAlg
/**
* Parameterization class
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
- *
+ *
* @param <O> Object type
*/
public static class Parameterizer<O> extends AbstractDistanceBasedAlgorithm.Parameterizer<O> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CLINK.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CLINK.java
index 65eba0cd..711cc5c7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CLINK.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CLINK.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has CompleteLinkageMethod
*
@@ -65,7 +66,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
title = "An Efficient Algorithm for the Complete Link Cluster Method", //
booktitle = "The Computer Journal 20.4", //
url = "http://dx.doi.org/10.1093/comjnl/20.4.364")
-@Alias({ "CLINK", "Defays" })
+@Alias("Defays")
public class CLINK<O> extends SLINK<O> {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CentroidLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CentroidLinkageMethod.java
index 9fc13e20..5d33f693 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CentroidLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CentroidLinkageMethod.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "centroid", "upgmc" })
@Reference(authors = "A. K. Jain and R. C. Dubes", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CompleteLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CompleteLinkageMethod.java
index 28c6841d..241137e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CompleteLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/CompleteLinkageMethod.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Complete-linkage clustering method.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Alias({ "complete", "clink", "complete-link", "farthest-neighbor" })
public class CompleteLinkageMethod implements LinkageMethod {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/GroupAverageLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/GroupAverageLinkageMethod.java
index c618775e..551f84cb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/GroupAverageLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/GroupAverageLinkageMethod.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "upgma", "average", "average-link", "average-linkage", "UPGMA" })
@Reference(authors = "A. K. Jain and R. C. Dubes", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HDBSCANLinearMemory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HDBSCANLinearMemory.java
index 37dfd01f..b402d65f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HDBSCANLinearMemory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HDBSCANLinearMemory.java
@@ -74,8 +74,11 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
+ *
+ * @apiviz.has PointerDensityHierarchyRepresentationResult
*/
@Title("HDBSCAN: Hierarchical Density-Based Spatial Clustering of Applications with Noise")
@Description("Density-Based Clustering Based on Hierarchical Density Estimates")
@@ -119,7 +122,7 @@ public class HDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensityHie
final int numedges = ids.size() - 1;
DoubleLongHeap heap = new DoubleLongMinHeap(numedges);
// 2. Build spanning tree.
- FiniteProgress mprog = LOG.isVerbose() ? new FiniteProgress("Computing minimum spanning tree (n-1 edges).", numedges, LOG) : null;
+ FiniteProgress mprog = LOG.isVerbose() ? new FiniteProgress("Computing minimum spanning tree (n-1 edges)", numedges, LOG) : null;
PrimsMinimumSpanningTree.processDense(ids,//
new HDBSCANAdapter(ids, coredists, distQ), //
new HeapMSTCollector(heap, mprog, LOG));
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HierarchicalClusteringAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HierarchicalClusteringAlgorithm.java
index 0dfb31e0..80f72a69 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HierarchicalClusteringAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/HierarchicalClusteringAlgorithm.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.Database;
* {@link de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical.extraction.ExtractFlatClusteringFromHierarchy}.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has PointerHierarchyRepresentationResult
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/LinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/LinkageMethod.java
index ea853eec..de134e1d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/LinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/LinkageMethod.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "G. N. Lance and W. T. Williams", //
title = "A general theory of classificatory sorting strategies 1. Hierarchical systems", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/MedianLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/MedianLinkageMethod.java
index 6eb2e156..20f83feb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/MedianLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/MedianLinkageMethod.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "J. C. Gower", //
title = "A comparison of some methods of cluster analysis", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerDensityHierarchyRepresentationResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerDensityHierarchyRepresentationResult.java
index 581841b8..b37e82af 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerDensityHierarchyRepresentationResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerDensityHierarchyRepresentationResult.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* which is a density estimation.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class PointerDensityHierarchyRepresentationResult extends PointerHierarchyRepresentationResult {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationBuilder.java
new file mode 100644
index 00000000..8e15bf81
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationBuilder.java
@@ -0,0 +1,171 @@
+package de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical;
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2015
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableDBIDDataStore;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableDoubleDataStore;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.logging.Logging;
+
+/**
+ * Class to help building a pointer hierarchy.
+ *
+ * @author Erich Schubert
+ * @since 0.7.1
+ *
+ * @apiviz.has PointerHierarchyRepresentationResult
+ */
+public class PointerHierarchyRepresentationBuilder {
+ /**
+ * Class logger.
+ */
+ private static final Logging LOG = Logging.getLogger(PointerHierarchyRepresentationBuilder.class);
+
+ /**
+ * The DBIDs in this result.
+ */
+ protected final DBIDs ids;
+
+ /**
+ * The parent DBID relation.
+ */
+ protected WritableDBIDDataStore parent;
+
+ /**
+ * Distance to the parent object.
+ */
+ protected WritableDoubleDataStore parentDistance;
+
+ /**
+ * Last linking distance.
+ */
+ protected double prevdist;
+
+ /**
+ * Cluster size storage. May be uninitialized!
+ */
+ protected WritableIntegerDataStore csize;
+
+ /**
+ * Constructor.
+ *
+ * @param ids IDs
+ */
+ public PointerHierarchyRepresentationBuilder(DBIDs ids) {
+ super();
+ this.ids = ids;
+ this.parent = DataStoreUtil.makeDBIDStorage(ids, DataStoreFactory.HINT_DB | DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_STATIC);
+ this.parentDistance = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_DB | DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_STATIC, Double.POSITIVE_INFINITY);
+ this.prevdist = Double.NEGATIVE_INFINITY;
+ for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
+ parent.put(it, it);
+ }
+ }
+
+ /**
+ * Add an element to the pointer representation.
+ *
+ * Important: If an algorithm does not produce links in an increasing fashion,
+ * a warning will be issued and the linking distance will be increased.
+ * Otherwise, the hierarchy would be misinterpreted when links are executed
+ * ordered by their distance.
+ *
+ * @param cur Current object
+ * @param distance Link distance
+ * @param par Parent
+ */
+ public void add(DBIDRef cur, double distance, DBIDRef par) {
+ if(distance < prevdist) {
+ LOG.warning("Non-monotone hierarchical clustering detected. Adjusting linking distance from " + distance + " to " + prevdist);
+ distance = prevdist;
+ }
+ parent.putDBID(cur, par);
+ double olddist = parentDistance.putDouble(cur, distance);
+ assert (olddist == Double.POSITIVE_INFINITY) : "Object was already linked!";
+ prevdist = distance;
+ }
+
+ /**
+ * Finalize the result.
+ *
+ * @return Completed result
+ */
+ public PointerHierarchyRepresentationResult complete() {
+ if(csize != null) {
+ csize.destroy();
+ csize = null;
+ }
+ return new PointerHierarchyRepresentationResult(ids, parent, parentDistance);
+ }
+
+ /**
+ * Get the cluster size of the current object.
+ *
+ * @param id Object id
+ * @return Cluster size (initially 1).
+ */
+ public int getSize(DBIDRef id) {
+ if(csize == null) {
+ csize = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP, 1);
+ }
+ return csize.intValue(id);
+ }
+
+ /**
+ * Set the cluster size of an object.
+ *
+ * @param id Object to set
+ * @param size Cluster size
+ */
+ public void setSize(DBIDRef id, int size) {
+ if(csize == null) {
+ csize = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP, 1);
+ }
+ csize.putInt(id, size);
+ }
+
+ /**
+ * Test if an object is already linked.
+ *
+ * @param id Object
+ * @return {@code true} if the object is already linked.
+ */
+ public boolean isLinked(DBIDRef id) {
+ return parentDistance.doubleValue(id) < Double.POSITIVE_INFINITY;
+ }
+
+ /**
+ * Get the current linking distance of an object.
+ *
+ * @param id Object
+ * @return Distance, or infinity
+ */
+ public double getDistance(DBIDRef id) {
+ return parentDistance.doubleValue(id);
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationResult.java
index 2369c6e5..fbd3d6b9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/PointerHierarchyRepresentationResult.java
@@ -24,8 +24,19 @@ package de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical;
*/
import de.lmu.ifi.dbs.elki.database.datastore.DBIDDataStore;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
import de.lmu.ifi.dbs.elki.database.datastore.DoubleDataStore;
+import de.lmu.ifi.dbs.elki.database.datastore.IntegerDataStore;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
import de.lmu.ifi.dbs.elki.result.BasicResult;
/**
@@ -36,7 +47,12 @@ import de.lmu.ifi.dbs.elki.result.BasicResult;
* {@link de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical.extraction.ExtractFlatClusteringFromHierarchy}
* can be used to extract partitions from this graph.
*
+ * This class can also compute dendrogram positions, but using a faster
+ * algorithm than the one proposed by Sibson 1971, using only O(n log n) time
+ * due to sorting, but using an additional temporary array.
+ *
* @author Erich Schubert
+ * @since 0.6.0
*/
public class PointerHierarchyRepresentationResult extends BasicResult {
/**
@@ -55,8 +71,13 @@ public class PointerHierarchyRepresentationResult extends BasicResult {
DoubleDataStore parentDistance;
/**
+ * Position storage, computed on demand.
+ */
+ IntegerDataStore positions = null;
+
+ /**
* Constructor.
- *
+ *
* @param ids IDs processed.
* @param parent Parent pointer.
* @param parentDistance Distance to parent.
@@ -70,7 +91,7 @@ public class PointerHierarchyRepresentationResult extends BasicResult {
/**
* Get the clustered DBIDs.
- *
+ *
* @return DBIDs
*/
public DBIDs getDBIDs() {
@@ -79,7 +100,7 @@ public class PointerHierarchyRepresentationResult extends BasicResult {
/**
* Get the parent DBID relation.
- *
+ *
* @return Parent relation.
*/
public DBIDDataStore getParentStore() {
@@ -88,10 +109,98 @@ public class PointerHierarchyRepresentationResult extends BasicResult {
/**
* Get the distance to the parent.
- *
+ *
* @return Parent distance.
*/
public DoubleDataStore getParentDistanceStore() {
return parentDistance;
}
+
+ /**
+ * Get / compute the positions.
+ *
+ * @return Dendrogram positions
+ */
+ public IntegerDataStore getPositions() {
+ if(positions != null) {
+ return positions; // Return cached.
+ }
+ ArrayDBIDs order = topologicalSort(ids, parent, parentDistance);
+ DBIDArrayIter it = order.iter();
+ final int last = order.size() - 1;
+ // Subtree sizes of each element:
+ WritableIntegerDataStore siz = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_DB, 1);
+ DBIDVar v1 = DBIDUtil.newVar();
+ for(it.seek(0); it.valid(); it.advance()) {
+ if(DBIDUtil.equal(it, parent.assignVar(it, v1))) {
+ continue;
+ }
+ siz.increment(v1, siz.intValue(it));
+ }
+ // Assertion only holds for exact e.g. single linkage
+ //assert (siz.intValue(it.seek(last)) == ids.size());
+ WritableIntegerDataStore pos = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_DB, -1);
+ WritableIntegerDataStore ins = DataStoreUtil.makeIntegerStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP, -1);
+ int defins = 0;
+ // Place elements based on their successor
+ for(it.seek(last); it.valid(); it.retract()) {
+ int size = siz.intValue(it);
+ parent.assignVar(it, v1); // v1 = parent
+ final int ipos = ins.intValue(v1);
+ // Assertion only holds for exact e.g. single linkage
+ // assert (ipos >= 0);
+ if(ipos < 0 || DBIDUtil.equal(it, v1)) {
+ // Root: use interval [defins; defins + size]
+ ins.putInt(it, defins);
+ pos.putInt(it, defins + size - 1);
+ defins += size;
+ continue;
+ }
+ // Insertion position of parent = leftmost
+ pos.putInt(it, ipos + size - 1);
+ ins.putInt(it, ipos);
+ ins.increment(v1, size);
+ }
+ ins.destroy();
+ return positions = pos;
+ }
+
+ /**
+ * Perform topological sorting based on the successor order.
+ *
+ * @param oids IDs to sort
+ * @param parent Parent relationship.
+ * @param parentDistance Distance to parent.
+ * @return Sorted order
+ */
+ public static ArrayDBIDs topologicalSort(DBIDs oids, DBIDDataStore parent, DoubleDataStore parentDistance) {
+ // We used to simply use this:
+ // But for e.g. Median Linkage, this would lead to problems, as links are
+ // not necessarily performed in ascending order anymore!
+ ArrayModifiableDBIDs ids = DBIDUtil.newArray(oids);
+ ids.sort(new DataStoreUtil.DescendingByDoubleDataStoreAndId(parentDistance));
+ final int size = ids.size();
+ ModifiableDBIDs seen = DBIDUtil.newHashSet(size);
+ ArrayModifiableDBIDs order = DBIDUtil.newArray(size);
+ DBIDVar v1 = DBIDUtil.newVar(), prev = DBIDUtil.newVar();
+ for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
+ if(!seen.add(it)) {
+ continue;
+ }
+ order.add(it);
+ prev.set(it); // Copy
+ while(!DBIDUtil.equal(prev, parent.assignVar(prev, v1))) {
+ if(!seen.add(v1)) {
+ break;
+ }
+ order.add(v1);
+ prev.set(v1); // Copy
+ }
+ }
+ // Reverse the array:
+ for(int i = 0, j = size - 1; i < j; i++, j--) {
+ order.swap(i, j);
+ }
+ return order;
+ }
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINK.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINK.java
index 71213208..f41a18bb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINK.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINK.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has SingleLinkageMethod
*
@@ -74,7 +75,8 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
title = "SLINK: An optimally efficient algorithm for the single-link cluster method", //
booktitle = "The Computer Journal 16 (1973), No. 1, p. 30-34.", //
url = "http://dx.doi.org/10.1093/comjnl/16.1.30")
-@Alias(value = { "de.lmu.ifi.dbs.elki.algorithm.clustering.SLINK", "clustering.SLINK", "SLINK", "single-link", "single-linkage" })
+@Alias({ "de.lmu.ifi.dbs.elki.algorithm.clustering.SLINK", "clustering.SLINK", //
+"single-link", "single-linkage" })
public class SLINK<O> extends AbstractDistanceBasedAlgorithm<O, PointerHierarchyRepresentationResult>implements HierarchicalClusteringAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINKHDBSCANLinearMemory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINKHDBSCANLinearMemory.java
index 8f1c6195..d89da303 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINKHDBSCANLinearMemory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SLINKHDBSCANLinearMemory.java
@@ -50,22 +50,22 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
/**
* Linear memory implementation of HDBSCAN clustering based on SLINK.
- *
+ *
* By not building a distance matrix, we can reduce memory usage to linear
* memory only; but at the cost of roughly double the runtime (unless using
* indexes) as we first need to compute all kNN distances (for core sizes), then
* recompute distances when building the spanning tree.
- *
+ *
* This version uses the SLINK algorithm to directly produce the pointer
* representation expected by the extraction methods. The SLINK algorithm is
* closely related to Prim's minimum spanning tree, but produces the more
* compact pointer representation instead of an edges list.
- *
+ *
* This implementation does <em>not</em> include the cluster extraction
* discussed as Step 4. This functionality should however already be provided by
* {@link de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical.extraction.HDBSCANHierarchyExtraction}
* . For this reason, we also do <em>not include self-edges</em>.
- *
+ *
* Reference:
* <p>
* R. J. G. B. Campello, D. Moulavi, and J. Sander<br />
@@ -73,8 +73,11 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Pacific-Asia Conference on Advances in Knowledge Discovery and Data Mining,
* PAKDD
* </p>
- *
+ *
* @author Erich Schubert
+ * @since 0.6.0
+ *
+ * @apiviz.has PointerDensityHierarchyRepresentationResult
*/
@Title("HDBSCAN: Hierarchical Density-Based Spatial Clustering of Applications with Noise")
@Description("Density-Based Clustering Based on Hierarchical Density Estimates")
@@ -90,7 +93,7 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* Constructor.
- *
+ *
* @param distanceFunction Distance function
* @param minPts Minimum number of points for density
*/
@@ -100,7 +103,7 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* Run the algorithm
- *
+ *
* @param db Database
* @param relation Relation
* @return Clustering hierarchy
@@ -143,7 +146,7 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* First step: Initialize P(id) = id, L(id) = infinity.
- *
+ *
* @param id the id of the object to be inserted into the pointer
* representation
* @param pi Pi data store
@@ -160,7 +163,7 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* Second step: Determine the pairwise distances from all objects in the
* pointer representation to the new object with the specified id.
- *
+ *
* @param id the id of the object to be inserted into the pointer
* representation
* @param processedIDs the already processed ids
@@ -179,7 +182,7 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* Third step: Determine the values for P and L
- *
+ *
* @param id the id of the object to be inserted into the pointer
* representation
* @param pi Pi data store
@@ -220,7 +223,7 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* Fourth step: Actualize the clusters if necessary
- *
+ *
* @param id the id of the current object
* @param pi Pi data store
* @param lambda Lambda data store
@@ -254,11 +257,11 @@ public class SLINKHDBSCANLinearMemory<O> extends AbstractHDBSCAN<O, PointerDensi
/**
* Parameterization class
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
- *
+ *
* @param <O> Object type
*/
public static class Parameterizer<O> extends AbstractHDBSCAN.Parameterizer<O> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SingleLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SingleLinkageMethod.java
index f16393de..73cf4b99 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SingleLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/SingleLinkageMethod.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "K. Florek and J. Łukaszewicz and J. Perkal and H. Steinhaus and S. Zubrzycki", //
title = "Sur la liaison et la division des points d'un ensemble fini",//
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WardLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WardLinkageMethod.java
index 80194a87..ad61d6da 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WardLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WardLinkageMethod.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "J. H. Ward Jr", //
title = "Hierarchical grouping to optimize an objective function", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WeightedAverageLinkageMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WeightedAverageLinkageMethod.java
index 162d4bc9..3cb583f8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WeightedAverageLinkageMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/WeightedAverageLinkageMethod.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "A. K. Jain and R. C. Dubes", //
title = "Algorithms for Clustering Data", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/ExtractFlatClusteringFromHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/ExtractFlatClusteringFromHierarchy.java
index 5f4bbd70..9d055b03 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/ExtractFlatClusteringFromHierarchy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/ExtractFlatClusteringFromHierarchy.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
@@ -69,10 +70,12 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* TODO: add an hierarchy simplification step.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses HierarchicalClusteringAlgorithm
* @apiviz.uses PointerHierarchyRepresentationResult
*/
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical.ExtractFlatClusteringFromHierarchy")
public class ExtractFlatClusteringFromHierarchy implements ClusteringAlgorithm<Clustering<DendrogramModel>> {
/**
* Class logger.
@@ -182,8 +185,7 @@ public class ExtractFlatClusteringFromHierarchy implements ClusteringAlgorithm<C
// Sort DBIDs by lambda. We need this for two things:
// a) to determine the stop distance from "minclusters" parameter
// b) to process arrows in decreasing / increasing order
- ArrayModifiableDBIDs order = DBIDUtil.newArray(ids);
- order.sort(new DataStoreUtil.AscendingByDoubleDataStore(lambda));
+ ArrayDBIDs order = PointerHierarchyRepresentationResult.topologicalSort(ids, pi, lambda);
DBIDArrayIter it = order.iter(); // Used multiple times!
final int split = findSplit(order, it, lambda);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/HDBSCANHierarchyExtraction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/HDBSCANHierarchyExtraction.java
index 20c5e211..80c32ae4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/HDBSCANHierarchyExtraction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/HDBSCANHierarchyExtraction.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
import de.lmu.ifi.dbs.elki.database.datastore.DoubleDataStore;
import de.lmu.ifi.dbs.elki.database.datastore.WritableDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
@@ -81,6 +82,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* one-element clusters to reduce garbage collection overhead.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.uses HierarchicalClusteringAlgorithm
* @apiviz.uses PointerHierarchyRepresentationResult
@@ -153,8 +155,7 @@ public class HDBSCANHierarchyExtraction implements ClusteringAlgorithm<Clusterin
FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Extracting clusters", ids.size(), LOG) : null;
// Sort DBIDs by lambda, to process merges in increasing order.
- ArrayModifiableDBIDs order = DBIDUtil.newArray(ids);
- order.sort(new DataStoreUtil.AscendingByDoubleDataStore(lambda));
+ ArrayDBIDs order = PointerHierarchyRepresentationResult.topologicalSort(ids, pi, lambda);
WritableDataStore<TempCluster> cluster_map = DataStoreUtil.makeStorage(ids, DataStoreFactory.HINT_TEMP, TempCluster.class);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/SimplifiedHierarchyExtraction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/SimplifiedHierarchyExtraction.java
index 236e7e0a..b84d1a6f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/SimplifiedHierarchyExtraction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/hierarchical/extraction/SimplifiedHierarchyExtraction.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
import de.lmu.ifi.dbs.elki.database.datastore.DoubleDataStore;
import de.lmu.ifi.dbs.elki.database.datastore.WritableDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.ArrayModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
@@ -73,6 +74,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.uses HierarchicalClusteringAlgorithm
* @apiviz.uses PointerHierarchyRepresentationResult
@@ -138,8 +140,7 @@ public class SimplifiedHierarchyExtraction implements ClusteringAlgorithm<Cluste
FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Extracting clusters", ids.size(), LOG) : null;
// Sort DBIDs by lambda, to process merges in increasing order.
- ArrayModifiableDBIDs order = DBIDUtil.newArray(ids);
- order.sort(new DataStoreUtil.AscendingByDoubleDataStore(lambda));
+ ArrayDBIDs order = PointerHierarchyRepresentationResult.topologicalSort(ids, pi, lambda);
WritableDataStore<TempCluster> cluster_map = DataStoreUtil.makeStorage(ids, DataStoreFactory.HINT_TEMP, TempCluster.class);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/AbstractKMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/AbstractKMeans.java
index 40fb313d..5df1bee8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/AbstractKMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/AbstractKMeans.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for k-means implementations.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf KMeansInitialization
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/BestOfMultipleKMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/BestOfMultipleKMeans.java
index 292e74db..84fb877c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/BestOfMultipleKMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/BestOfMultipleKMeans.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> Vector type
* @param <M> Model type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/CLARA.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/CLARA.java
index 4e2bf7a8..42ea12b6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/CLARA.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/CLARA.java
@@ -66,6 +66,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> Vector type
*/
@@ -124,7 +125,7 @@ public class CLARA<V> extends KMedoidsPAM<V> {
WritableIntegerDataStore bestclusters = null;
Random rnd = random.getSingleThreadedRandom();
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Random samples.", numsamples, LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Processing random samples", numsamples, LOG) : null;
for(int j = 0; j < numsamples; j++) {
DBIDs rids = DBIDUtil.randomSample(ids, sampling, rnd);
// Choose initial medoids
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeans.java
index b242b407..697655d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeans.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* Some constants and options shared among kmeans family algorithms.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <V> Number vector type
* @param <M> Actual model type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBatchedLloyd.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBatchedLloyd.java
index c6082176..8885fc46 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBatchedLloyd.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBatchedLloyd.java
@@ -69,6 +69,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* blocks.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has KMeansModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBisecting.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBisecting.java
index 70b6a30e..92e00e0d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBisecting.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansBisecting.java
@@ -61,6 +61,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Stephan Baier
+ * @since 0.6.0
*
* @param <V> Vector type
* @param <M> Model type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansCompare.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansCompare.java
new file mode 100644
index 00000000..5632621a
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansCompare.java
@@ -0,0 +1,271 @@
+package de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2015
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.initialization.KMeansInitialization;
+import de.lmu.ifi.dbs.elki.data.Cluster;
+import de.lmu.ifi.dbs.elki.data.Clustering;
+import de.lmu.ifi.dbs.elki.data.NumberVector;
+import de.lmu.ifi.dbs.elki.data.model.KMeansModel;
+import de.lmu.ifi.dbs.elki.database.Database;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
+import de.lmu.ifi.dbs.elki.database.relation.Relation;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.logging.progress.IndefiniteProgress;
+import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
+import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
+import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
+import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+
+/**
+ * Compare-Means: Accelerated k-means by exploiting the triangle inequality and
+ * pairwise distances of means to prune candidate means.
+ *
+ * Reference:
+ * <p>
+ * S. J. Phillips<br />
+ * Acceleration of k-means and related clustering algorithms<br />
+ * Proc. 4th Int. Workshop on Algorithm Engineering and Experiments (ALENEX
+ * 2002)
+ * </p>
+ *
+ * @author Erich Schubert
+ * @since 0.5.0
+ *
+ * @apiviz.has KMeansModel
+ *
+ * @param <V> vector datatype
+ */
+@Title("Compare-Means")
+@Reference(authors = "S. J. Phillips", //
+title = "Acceleration of k-means and related clustering algorithms", //
+booktitle = "Proc. 4th Int. Workshop on Algorithm Engineering and Experiments (ALENEX 2002)", //
+url = "http://dx.doi.org/10.1007/3-540-45643-0_13")
+public class KMeansCompare<V extends NumberVector> extends AbstractKMeans<V, KMeansModel> {
+ /**
+ * The logger for this class.
+ */
+ private static final Logging LOG = Logging.getLogger(KMeansCompare.class);
+
+ /**
+ * Key for statistics logging.
+ */
+ private static final String KEY = KMeansCompare.class.getName();
+
+ /**
+ * Constructor.
+ *
+ * @param distanceFunction distance function
+ * @param k k parameter
+ * @param maxiter Maxiter parameter
+ * @param initializer Initialization method
+ */
+ public KMeansCompare(NumberVectorDistanceFunction<? super V> distanceFunction, int k, int maxiter, KMeansInitialization<? super V> initializer) {
+ super(distanceFunction, k, maxiter, initializer);
+ }
+
+ @Override
+ public Clustering<KMeansModel> run(Database database, Relation<V> relation) {
+ if(relation.size() <= 0) {
+ return new Clustering<>("k-Means Clustering", "kmeans-clustering");
+ }
+ // Choose initial means
+ if(LOG.isStatistics()) {
+ LOG.statistics(new StringStatistic(KEY + ".initialization", initializer.toString()));
+ }
+ List<Vector> means = initializer.chooseInitialMeans(database, relation, k, getDistanceFunction(), Vector.FACTORY);
+ // Setup cluster assignment store
+ List<ModifiableDBIDs> clusters = new ArrayList<>();
+ for(int i = 0; i < k; i++) {
+ clusters.add(DBIDUtil.newHashSet((int) (relation.size() * 2. / k)));
+ }
+ WritableIntegerDataStore assignment = DataStoreUtil.makeIntegerStorage(relation.getDBIDs(), DataStoreFactory.HINT_TEMP | DataStoreFactory.HINT_HOT, -1);
+ double[] varsum = new double[k];
+
+ // Cluster distances
+ double[][] cdist = new double[k][k];
+
+ IndefiniteProgress prog = LOG.isVerbose() ? new IndefiniteProgress("K-Means iteration", LOG) : null;
+ DoubleStatistic varstat = LOG.isStatistics() ? new DoubleStatistic(this.getClass().getName() + ".variance-sum") : null;
+ LongStatistic diststat = LOG.isStatistics() ? new LongStatistic(KEY + ".distance-computations") : null;
+ int iteration = 0;
+ for(; maxiter <= 0 || iteration < maxiter; iteration++) {
+ LOG.incrementProcessed(prog);
+ recomputeSeperation(means, cdist, diststat);
+ boolean changed = assignToNearestCluster(relation, means, clusters, assignment, varsum, cdist, diststat);
+ logVarstat(varstat, varsum);
+ if(LOG.isStatistics()) {
+ LOG.statistics(diststat);
+ }
+ // Stop if no cluster assignment changed.
+ if(!changed) {
+ break;
+ }
+ // Recompute means.
+ means = means(clusters, means, relation);
+ }
+ LOG.setCompleted(prog);
+ if(LOG.isStatistics()) {
+ LOG.statistics(new LongStatistic(KEY + ".iterations", iteration));
+ }
+
+ // Wrap result
+ Clustering<KMeansModel> result = new Clustering<>("k-Means Clustering", "kmeans-clustering");
+ for(int i = 0; i < clusters.size(); i++) {
+ DBIDs ids = clusters.get(i);
+ if(ids.size() == 0) {
+ continue;
+ }
+ KMeansModel model = new KMeansModel(means.get(i), varsum[i]);
+ result.addToplevelCluster(new Cluster<>(ids, model));
+ }
+ return result;
+ }
+
+ /**
+ * Recompute the separation of cluster means.
+ *
+ * @param means Means
+ * @param cdist Center-to-Center distances
+ * @param diststat Distance counting statistic
+ */
+ private void recomputeSeperation(List<Vector> means, double[][] cdist, LongStatistic diststat) {
+ final int k = means.size();
+ for(int i = 1; i < k; i++) {
+ Vector mi = means.get(i);
+ for(int j = 0; j < i; j++) {
+ double d = distanceFunction.distance(mi, means.get(j));
+ cdist[i][j] = d;
+ cdist[j][i] = d;
+ }
+ }
+ if(diststat != null) {
+ diststat.increment((k * (k - 1)) >> 1);
+ }
+ }
+
+ /**
+ * Reassign objects, but only if their bounds indicate it is necessary to do
+ * so.
+ *
+ * @param relation Data
+ * @param means Current means
+ * @param clusters Current clusters
+ * @param assignment Cluster assignment
+ * @param varsum Variance sum counter
+ * @param cdist Centroid distances
+ * @param diststat Distance statistics
+ * @return true when the object was reassigned
+ */
+ private boolean assignToNearestCluster(Relation<V> relation, List<Vector> means, List<ModifiableDBIDs> clusters, WritableIntegerDataStore assignment, double[] varsum, double[][] cdist, LongStatistic diststat) {
+ assert (k == means.size());
+ long dists = 0;
+ boolean changed = false;
+ // Reset all clusters
+ Arrays.fill(varsum, 0.);
+ for(ModifiableDBIDs cluster : clusters) {
+ cluster.clear();
+ }
+ final NumberVectorDistanceFunction<?> df = getDistanceFunction();
+ double mult = (df instanceof SquaredEuclideanDistanceFunction) ? 4 : 2;
+ for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
+ final int cur = assignment.intValue(iditer), ini = cur >= 0 ? cur : 0;
+ // Distance to current mean:
+ V fv = relation.get(iditer);
+ double mindist = df.distance(fv, means.get(ini));
+ ++dists;
+ final double thresh = mult * mindist;
+ int minIndex = ini;
+ for(int i = 0; i < k; i++) {
+ if(i == ini || cdist[minIndex][i] >= thresh) { // Compare pruning
+ continue;
+ }
+ double dist = df.distance(fv, means.get(i));
+ ++dists;
+ if(dist < mindist) {
+ minIndex = i;
+ mindist = dist;
+ }
+ }
+ varsum[minIndex] += mindist;
+ clusters.get(minIndex).add(iditer);
+ changed |= assignment.putInt(iditer, minIndex) != minIndex;
+ }
+ // Increment distance computations counter.
+ if(diststat != null) {
+ diststat.increment(dists);
+ }
+ return changed;
+ }
+
+ @Override
+ protected Logging getLogger() {
+ return LOG;
+ }
+
+ /**
+ * Parameterization class.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ public static class Parameterizer<V extends NumberVector> extends AbstractKMeans.Parameterizer<V> {
+ @Override
+ protected Logging getLogger() {
+ return LOG;
+ }
+
+ @Override
+ protected void getParameterDistanceFunction(Parameterization config) {
+ super.getParameterDistanceFunction(config);
+ if(distanceFunction instanceof SquaredEuclideanDistanceFunction) {
+ return; // Proper choice.
+ }
+ if(distanceFunction != null && !distanceFunction.isMetric()) {
+ LOG.warning("Compare k-means requires a metric distance, and k-means should only be used with squared Euclidean distance!");
+ }
+ }
+
+ @Override
+ protected KMeansCompare<V> makeInstance() {
+ return new KMeansCompare<>(distanceFunction, k, maxiter, initializer);
+ }
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansElkan.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansElkan.java
index e2dcf88c..58015327 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansElkan.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansElkan.java
@@ -47,11 +47,14 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunction;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.IndefiniteProgress;
+import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
/**
* Elkan's fast k-means by exploiting the triangle inequality.
@@ -69,6 +72,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has KMeansModel
*
@@ -90,15 +94,22 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
private static final String KEY = KMeansElkan.class.getName();
/**
+ * Flag whether to compute the final variance statistic.
+ */
+ private boolean varstat = false;
+
+ /**
* Constructor.
*
* @param distanceFunction distance function
* @param k k parameter
* @param maxiter Maxiter parameter
* @param initializer Initialization method
+ * @param varstat Compute the variance statistic
*/
- public KMeansElkan(NumberVectorDistanceFunction<? super V> distanceFunction, int k, int maxiter, KMeansInitialization<? super V> initializer) {
+ public KMeansElkan(NumberVectorDistanceFunction<? super V> distanceFunction, int k, int maxiter, KMeansInitialization<? super V> initializer, boolean varstat) {
super(distanceFunction, k, maxiter, initializer);
+ this.varstat = varstat;
}
@Override
@@ -108,7 +119,7 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
}
// Choose initial means
if(LOG.isStatistics()) {
- LOG.statistics(new StringStatistic(KEY + ".initializer", initializer.toString()));
+ LOG.statistics(new StringStatistic(KEY + ".initialization", initializer.toString()));
}
List<Vector> means = initializer.chooseInitialMeans(database, relation, k, getDistanceFunction(), Vector.FACTORY);
// Setup cluster assignment store
@@ -136,7 +147,7 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
double[][] cdist = new double[k][k];
IndefiniteProgress prog = LOG.isVerbose() ? new IndefiniteProgress("K-Means iteration", LOG) : null;
- LongStatistic varstat = LOG.isStatistics() ? new LongStatistic(this.getClass().getName() + ".reassignments") : null;
+ LongStatistic rstat = LOG.isStatistics() ? new LongStatistic(this.getClass().getName() + ".reassignments") : null;
int iteration = 0;
for(; maxiter <= 0 || iteration < maxiter; iteration++) {
LOG.incrementProcessed(prog);
@@ -148,9 +159,9 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
recomputeSeperation(means, sep, cdist); // #1
changed = assignToNearestCluster(relation, means, sums, clusters, assignment, sep, cdist, upper, lower);
}
- if(varstat != null) {
- varstat.setLong(changed);
- LOG.statistics(varstat);
+ if(rstat != null) {
+ rstat.setLong(changed);
+ LOG.statistics(rstat);
}
// Stop if no cluster assignment changed.
if(changed == 0) {
@@ -178,6 +189,7 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
lower.destroy();
// Wrap result
+ double totalvariance = 0.;
Clustering<KMeansModel> result = new Clustering<>("k-Means Clustering", "kmeans-clustering");
for(int i = 0; i < clusters.size(); i++) {
DBIDs ids = clusters.get(i);
@@ -189,9 +201,13 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
varsum += distanceFunction.distance(mean, relation.get(it));
}
+ totalvariance += varsum;
KMeansModel model = new KMeansModel(mean, varsum);
result.addToplevelCluster(new Cluster<>(ids, model));
}
+ if(LOG.isStatistics() && varstat) {
+ LOG.statistics(new DoubleStatistic(this.getClass().getName() + ".variance-sum", totalvariance));
+ }
return result;
}
@@ -395,6 +411,16 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
* @apiviz.exclude
*/
public static class Parameterizer<V extends NumberVector> extends AbstractKMeans.Parameterizer<V> {
+ /**
+ * Flag to compute the final clustering variance statistic.
+ */
+ public static final OptionID VARSTAT_ID = new OptionID("kmeans.varstat", "Compute the final clustering variance statistic. Needs an additional full pass over the data set.");
+
+ /**
+ * Compute the final variance statisic.
+ */
+ protected boolean varstat = false;
+
@Override
protected Logging getLogger() {
return LOG;
@@ -412,8 +438,17 @@ public class KMeansElkan<V extends NumberVector> extends AbstractKMeans<V, KMean
}
@Override
+ protected void makeOptions(Parameterization config) {
+ super.makeOptions(config);
+ Flag varF = new Flag(VARSTAT_ID);
+ if(config.grab(varF)) {
+ varstat = varF.isTrue();
+ }
+ }
+
+ @Override
protected KMeansElkan<V> makeInstance() {
- return new KMeansElkan<>(distanceFunction, k, maxiter, initializer);
+ return new KMeansElkan<>(distanceFunction, k, maxiter, initializer, varstat);
}
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHamerly.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHamerly.java
index 1b114701..06228525 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHamerly.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHamerly.java
@@ -46,11 +46,14 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunction;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.IndefiniteProgress;
+import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
/**
* Hamerly's fast k-means by exploiting the triangle inequality.
@@ -63,6 +66,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has KMeansModel
*
@@ -84,15 +88,22 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
private static final String KEY = KMeansHamerly.class.getName();
/**
+ * Flag whether to compute the final variance statistic.
+ */
+ private boolean varstat = false;
+
+ /**
* Constructor.
*
* @param distanceFunction distance function
* @param k k parameter
* @param maxiter Maxiter parameter
* @param initializer Initialization method
+ * @param varstat Compute the variance statistic
*/
- public KMeansHamerly(NumberVectorDistanceFunction<? super V> distanceFunction, int k, int maxiter, KMeansInitialization<? super V> initializer) {
+ public KMeansHamerly(NumberVectorDistanceFunction<? super V> distanceFunction, int k, int maxiter, KMeansInitialization<? super V> initializer, boolean varstat) {
super(distanceFunction, k, maxiter, initializer);
+ this.varstat = varstat;
}
@Override
@@ -102,7 +113,7 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
}
// Choose initial means
if(LOG.isStatistics()) {
- LOG.statistics(new StringStatistic(KEY + ".initializer", initializer.toString()));
+ LOG.statistics(new StringStatistic(KEY + ".initialization", initializer.toString()));
}
List<Vector> means = initializer.chooseInitialMeans(database, relation, k, getDistanceFunction(), Vector.FACTORY);
// Setup cluster assignment store
@@ -124,7 +135,7 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
double[] sep = new double[k];
IndefiniteProgress prog = LOG.isVerbose() ? new IndefiniteProgress("K-Means iteration", LOG) : null;
- LongStatistic varstat = LOG.isStatistics() ? new LongStatistic(KEY + ".reassignments") : null;
+ LongStatistic rstat = LOG.isStatistics() ? new LongStatistic(KEY + ".reassignments") : null;
int iteration = 0;
for(; maxiter <= 0 || iteration < maxiter; iteration++) {
LOG.incrementProcessed(prog);
@@ -136,9 +147,9 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
recomputeSeperation(means, sep);
changed = assignToNearestCluster(relation, means, sums, clusters, assignment, sep, upper, lower);
}
- if(varstat != null) {
- varstat.setLong(changed);
- LOG.statistics(varstat);
+ if(rstat != null) {
+ rstat.setLong(changed);
+ LOG.statistics(rstat);
}
// Stop if no cluster assignment changed.
if(changed == 0) {
@@ -167,6 +178,7 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
lower.destroy();
// Wrap result
+ double totalvariance = 0.;
Clustering<KMeansModel> result = new Clustering<>("k-Means Clustering", "kmeans-clustering");
for(int i = 0; i < clusters.size(); i++) {
DBIDs ids = clusters.get(i);
@@ -178,9 +190,13 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
varsum += distanceFunction.distance(mean, relation.get(it));
}
+ totalvariance += varsum;
KMeansModel model = new KMeansModel(mean, varsum);
result.addToplevelCluster(new Cluster<>(ids, model));
}
+ if(LOG.isStatistics() && varstat) {
+ LOG.statistics(new DoubleStatistic(this.getClass().getName() + ".variance-sum", totalvariance));
+ }
return result;
}
@@ -389,6 +405,16 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
* @apiviz.exclude
*/
public static class Parameterizer<V extends NumberVector> extends AbstractKMeans.Parameterizer<V> {
+ /**
+ * Flag to compute the final clustering variance statistic.
+ */
+ public static final OptionID VARSTAT_ID = new OptionID("kmeans.varstat", "Compute the final clustering variance statistic. Needs an additional full pass over the data set.");
+
+ /**
+ * Compute the final variance statisic.
+ */
+ protected boolean varstat = false;
+
@Override
protected Logging getLogger() {
return LOG;
@@ -406,8 +432,17 @@ public class KMeansHamerly<V extends NumberVector> extends AbstractKMeans<V, KMe
}
@Override
+ protected void makeOptions(Parameterization config) {
+ super.makeOptions(config);
+ Flag varF = new Flag(VARSTAT_ID);
+ if(config.grab(varF)) {
+ varstat = varF.isTrue();
+ }
+ }
+
+ @Override
protected KMeansHamerly<V> makeInstance() {
- return new KMeansHamerly<>(distanceFunction, k, maxiter, initializer);
+ return new KMeansHamerly<>(distanceFunction, k, maxiter, initializer, varstat);
}
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHybridLloydMacQueen.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHybridLloydMacQueen.java
index cd025b03..476f95f2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHybridLloydMacQueen.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansHybridLloydMacQueen.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* processing and Lloyd-Style batch steps.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has KMeansModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansLloyd.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansLloyd.java
index d8b69f54..c32f22c1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansLloyd.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansLloyd.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -53,15 +54,16 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
/**
* The standard k-means algorithm, using Lloyd-style bulk iterations.
*
+ * Reference:
* <p>
- * Reference:<br />
- * S. Lloyd<br/>
+ * S. Lloyd:<br/>
* Least squares quantization in PCM<br/>
* IEEE Transactions on Information Theory 28 (2)<br/>
* previously published as Bell Telephone Laboratories Paper
* </p>
*
* @author Arthur Zimek
+ * @since 0.5.0
*
* @apiviz.landmark
* @apiviz.has KMeansModel
@@ -74,6 +76,8 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
title = "Least squares quantization in PCM", //
booktitle = "IEEE Transactions on Information Theory 28 (2): 129–137.", //
url = "http://dx.doi.org/10.1109/TIT.1982.1056489")
+@Alias({ "de.lmu.ifi.dbs.elki.algorithm.clustering.KMeans", //
+"de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.KMeans" })
public class KMeansLloyd<V extends NumberVector> extends AbstractKMeans<V, KMeansModel> {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansMacQueen.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansMacQueen.java
index 176fa311..4f22497d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansMacQueen.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansMacQueen.java
@@ -58,14 +58,16 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* convergence, although MacQueen likely only meant to do a single pass over the
* data.
*
+ * Reference:
* <p>
- * Reference:<br />
- * J. MacQueen: Some Methods for Classification and Analysis of Multivariate
- * Observations. <br />
+ * J. MacQueen:<br />
+ * Some Methods for Classification and Analysis of Multivariate Observations.
+ * <br />
* In 5th Berkeley Symp. Math. Statist. Prob., Vol. 1, 1967, pp 281-297.
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
* @apiviz.has KMeansModel
*
* @param <V> vector type to use
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansSort.java
new file mode 100644
index 00000000..c119c4ec
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMeansSort.java
@@ -0,0 +1,284 @@
+package de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2015
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.initialization.KMeansInitialization;
+import de.lmu.ifi.dbs.elki.data.Cluster;
+import de.lmu.ifi.dbs.elki.data.Clustering;
+import de.lmu.ifi.dbs.elki.data.NumberVector;
+import de.lmu.ifi.dbs.elki.data.model.KMeansModel;
+import de.lmu.ifi.dbs.elki.database.Database;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory;
+import de.lmu.ifi.dbs.elki.database.datastore.DataStoreUtil;
+import de.lmu.ifi.dbs.elki.database.datastore.WritableIntegerDataStore;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
+import de.lmu.ifi.dbs.elki.database.relation.Relation;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.logging.progress.IndefiniteProgress;
+import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
+import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
+import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
+import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.DoubleIntegerArrayQuickSort;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+
+/**
+ * Sort-Means: Accelerated k-means by exploiting the triangle inequality and
+ * pairwise distances of means to prune candidate means (with sorting).
+ *
+ * Reference:
+ * <p>
+ * S. J. Phillips<br />
+ * Acceleration of k-means and related clustering algorithms<br />
+ * Proc. 4th Int. Workshop on Algorithm Engineering and Experiments (ALENEX
+ * 2002)
+ * </p>
+ *
+ * @author Erich Schubert
+ * @since 0.7.1
+ *
+ * @apiviz.has KMeansModel
+ *
+ * @param <V> vector datatype
+ */
+@Title("Sort-Means")
+@Reference(authors = "S. J. Phillips", //
+title = "Acceleration of k-means and related clustering algorithms", //
+booktitle = "Proc. 4th Int. Workshop on Algorithm Engineering and Experiments (ALENEX 2002)", //
+url = "http://dx.doi.org/10.1007/3-540-45643-0_13")
+public class KMeansSort<V extends NumberVector> extends AbstractKMeans<V, KMeansModel> {
+ /**
+ * The logger for this class.
+ */
+ private static final Logging LOG = Logging.getLogger(KMeansSort.class);
+
+ /**
+ * Key for statistics logging.
+ */
+ private static final String KEY = KMeansSort.class.getName();
+
+ /**
+ * Constructor.
+ *
+ * @param distanceFunction distance function
+ * @param k k parameter
+ * @param maxiter Maxiter parameter
+ * @param initializer Initialization method
+ */
+ public KMeansSort(NumberVectorDistanceFunction<? super V> distanceFunction, int k, int maxiter, KMeansInitialization<? super V> initializer) {
+ super(distanceFunction, k, maxiter, initializer);
+ }
+
+ @Override
+ public Clustering<KMeansModel> run(Database database, Relation<V> relation) {
+ if(relation.size() <= 0) {
+ return new Clustering<>("k-Means Clustering", "kmeans-clustering");
+ }
+ // Choose initial means
+ if(LOG.isStatistics()) {
+ LOG.statistics(new StringStatistic(KEY + ".initialization", initializer.toString()));
+ }
+ List<Vector> means = initializer.chooseInitialMeans(database, relation, k, getDistanceFunction(), Vector.FACTORY);
+ // Setup cluster assignment store
+ List<ModifiableDBIDs> clusters = new ArrayList<>();
+ for(int i = 0; i < k; i++) {
+ clusters.add(DBIDUtil.newHashSet((int) (relation.size() * 2. / k)));
+ }
+ WritableIntegerDataStore assignment = DataStoreUtil.makeIntegerStorage(relation.getDBIDs(), DataStoreFactory.HINT_TEMP | DataStoreFactory.HINT_HOT, -1);
+ double[] varsum = new double[k];
+
+ // Cluster distances
+ double[][] cdist = new double[k][k];
+ int[][] cnum = new int[k][k - 1];
+
+ IndefiniteProgress prog = LOG.isVerbose() ? new IndefiniteProgress("K-Means iteration", LOG) : null;
+ DoubleStatistic varstat = LOG.isStatistics() ? new DoubleStatistic(this.getClass().getName() + ".variance-sum") : null;
+ LongStatistic diststat = LOG.isStatistics() ? new LongStatistic(KEY + ".distance-computations") : null;
+ int iteration = 0;
+ for(; maxiter <= 0 || iteration < maxiter; iteration++) {
+ LOG.incrementProcessed(prog);
+ recomputeSeperation(means, cdist, cnum, diststat);
+ boolean changed = assignToNearestCluster(relation, means, clusters, assignment, varsum, cdist, cnum, diststat);
+ logVarstat(varstat, varsum);
+ if(LOG.isStatistics()) {
+ LOG.statistics(diststat);
+ }
+ // Stop if no cluster assignment changed.
+ if(!changed) {
+ break;
+ }
+ // Recompute means.
+ means = means(clusters, means, relation);
+ }
+ LOG.setCompleted(prog);
+ if(LOG.isStatistics()) {
+ LOG.statistics(new LongStatistic(KEY + ".iterations", iteration));
+ }
+
+ // Wrap result
+ Clustering<KMeansModel> result = new Clustering<>("k-Means Clustering", "kmeans-clustering");
+ for(int i = 0; i < clusters.size(); i++) {
+ DBIDs ids = clusters.get(i);
+ if(ids.size() == 0) {
+ continue;
+ }
+ KMeansModel model = new KMeansModel(means.get(i), varsum[i]);
+ result.addToplevelCluster(new Cluster<>(ids, model));
+ }
+ return result;
+ }
+
+ /**
+ * Recompute the separation of cluster means.
+ *
+ * @param means Means
+ * @param cdist Center-to-Center distances
+ * @param cnum Center numbers
+ * @param diststat Distance counting statistic
+ */
+ private void recomputeSeperation(List<Vector> means, double[][] cdist, int[][] cnum, LongStatistic diststat) {
+ final int k = means.size();
+ for(int i = 1; i < k; i++) {
+ Vector mi = means.get(i);
+ for(int j = 0; j < i; j++) {
+ double d = distanceFunction.distance(mi, means.get(j));
+ cdist[i][j] = d;
+ cdist[j][i] = d;
+ }
+ }
+ double[] buf = new double[k - 1];
+ for(int i = 0; i < k; i++) {
+ System.arraycopy(cdist[i], 0, buf, 0, i);
+ System.arraycopy(cdist[i], i + 1, buf, i, k - i - 1);
+ for(int j = 0; j < buf.length; j++) {
+ cnum[i][j] = j < i ? j : (j + 1);
+ }
+ DoubleIntegerArrayQuickSort.sort(buf, cnum[i], k - 1);
+ }
+ if(diststat != null) {
+ diststat.increment((k * (k - 1)) >> 1);
+ }
+ }
+
+ /**
+ * Reassign objects, but only if their bounds indicate it is necessary to do
+ * so.
+ *
+ * @param relation Data
+ * @param means Current means
+ * @param clusters Current clusters
+ * @param assignment Cluster assignment
+ * @param varsum Variance sum counter
+ * @param cdist Centroid distances
+ * @param cnum Centroid nearest neighbors
+ * @param diststat Distance statistics
+ * @return true when the object was reassigned
+ */
+ private boolean assignToNearestCluster(Relation<V> relation, List<Vector> means, List<ModifiableDBIDs> clusters, WritableIntegerDataStore assignment, double[] varsum, double[][] cdist, int[][] cnum, LongStatistic diststat) {
+ assert (k == means.size());
+ long dists = 0;
+ boolean changed = false;
+ // Reset all clusters
+ Arrays.fill(varsum, 0.);
+ for(ModifiableDBIDs cluster : clusters) {
+ cluster.clear();
+ }
+ final NumberVectorDistanceFunction<?> df = getDistanceFunction();
+ double mult = (df instanceof SquaredEuclideanDistanceFunction) ? 4 : 2;
+ for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
+ final int cur = assignment.intValue(iditer), ini = cur >= 0 ? cur : 0;
+ // Distance to current mean:
+ V fv = relation.get(iditer);
+ double mindist = df.distance(fv, means.get(ini));
+ ++dists;
+ final double threshold = mult * mindist;
+ int minIndex = ini;
+ for(int i : cnum[ini]) {
+ if(cdist[minIndex][i] >= threshold) { // Sort pruning
+ break; // All following can only be worse.
+ }
+ double dist = df.distance(fv, means.get(i));
+ ++dists;
+ if(dist < mindist) {
+ minIndex = i;
+ mindist = dist;
+ }
+ }
+ varsum[minIndex] += mindist;
+ clusters.get(minIndex).add(iditer);
+ changed |= assignment.putInt(iditer, minIndex) != minIndex;
+ }
+ // Increment distance computations counter.
+ if(diststat != null) {
+ diststat.increment(dists);
+ }
+ return changed;
+ }
+
+ @Override
+ protected Logging getLogger() {
+ return LOG;
+ }
+
+ /**
+ * Parameterization class.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ public static class Parameterizer<V extends NumberVector> extends AbstractKMeans.Parameterizer<V> {
+ @Override
+ protected Logging getLogger() {
+ return LOG;
+ }
+
+ @Override
+ protected void getParameterDistanceFunction(Parameterization config) {
+ super.getParameterDistanceFunction(config);
+ if(distanceFunction instanceof SquaredEuclideanDistanceFunction) {
+ return; // Proper choice.
+ }
+ if(distanceFunction != null && !distanceFunction.isMetric()) {
+ LOG.warning("Compare k-means requires a metric distance, and k-means should only be used with squared Euclidean distance!");
+ }
+ }
+
+ @Override
+ protected KMeansSort<V> makeInstance() {
+ return new KMeansSort<>(distanceFunction, k, maxiter, initializer);
+ }
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java
index 6d8b5874..7e4b4524 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMediansLloyd.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has MeanModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsEM.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsEM.java
index 567d6753..cc06a4d5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsEM.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsEM.java
@@ -72,6 +72,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* (this variation is likely not worth publishing on its own).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has MedoidModel
* @apiviz.composedOf KMedoidsInitialization
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsPAM.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsPAM.java
index fc3bdd5f..4d45eb3d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsPAM.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/KMedoidsPAM.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has MedoidModel
* @apiviz.composedOf KMedoidsInitialization
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/SingleAssignmentKMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/SingleAssignmentKMeans.java
index 5fa88a33..b4413904 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/SingleAssignmentKMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/SingleAssignmentKMeans.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Pseudo-k-Means variations, that assigns each object to the nearest center.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has KMeansModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/XMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/XMeans.java
index d354327b..75a87daa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/XMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/XMeans.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Tibor Goldschwendt
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> Vector type
* @param <M> Model type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/AbstractKMeansInitialization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/AbstractKMeansInitialization.java
index 723c86cc..72f9a887 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/AbstractKMeansInitialization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/AbstractKMeansInitialization.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Abstract base class for common k-means initializations.
*
* @author Erich Schubert
+ * @since 0.3
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestPointsInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestPointsInitialMeans.java
index 4fa0d004..a686f345 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestPointsInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestPointsInitialMeans.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
@@ -52,9 +53,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* times will be more likely to return the same local minima.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type for kMedoids and kMedians
*/
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.FarthestPointsInitialMeans")
public class FarthestPointsInitialMeans<O> extends AbstractKMeansInitialization<NumberVector> implements KMedoidsInitialization<O> {
/**
* Discard the first vector.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestSumPointsInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestSumPointsInitialMeans.java
index 9cceb4f2..9f223dac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestSumPointsInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FarthestSumPointsInitialMeans.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
* times will be more likely to return the same local minima.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type for kmedoids and kmedians
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FirstKInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FirstKInitialMeans.java
index beab423e..210994e5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FirstKInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/FirstKInitialMeans.java
@@ -34,15 +34,18 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
/**
* Initialize K-means by using the first k objects as initial means.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type for KMedoids
*/
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.FirstKInitialMeans")
public class FirstKInitialMeans<O> implements KMeansInitialization<NumberVector>, KMedoidsInitialization<O> {
/**
* Constructor.
@@ -84,4 +87,4 @@ public class FirstKInitialMeans<O> implements KMeansInitialization<NumberVector>
return new FirstKInitialMeans<>();
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansInitialization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansInitialization.java
index 55ffb65e..c1cd71a0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansInitialization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansInitialization.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
* Interface for initializing K-Means
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansPlusPlusInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansPlusPlusInitialMeans.java
index c1518d18..11bfef59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansPlusPlusInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMeansPlusPlusInitialMeans.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
@@ -56,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <O> Vector type
*/
@@ -63,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
title = "k-means++: the advantages of careful seeding", //
booktitle = "Proc. of the Eighteenth Annual ACM-SIAM Symposium on Discrete Algorithms, SODA 2007", //
url = "http://dx.doi.org/10.1145/1283383.1283494")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.KMeansPlusPlusInitialMeans")
public class KMeansPlusPlusInitialMeans<O> extends AbstractKMeansInitialization<NumberVector> implements KMedoidsInitialization<O> {
/**
* Constructor.
@@ -232,4 +235,4 @@ public class KMeansPlusPlusInitialMeans<O> extends AbstractKMeansInitialization<
return new KMeansPlusPlusInitialMeans<>(rnd);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMedoidsInitialization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMedoidsInitialization.java
index 0ae3723e..2dc11c52 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMedoidsInitialization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/KMedoidsInitialization.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
* this initialization will only return members of the original data set.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <V> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PAMInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PAMInitialMeans.java
index 396d79e6..ea11330e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PAMInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PAMInitialMeans.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.math.MathUtil;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
@@ -57,12 +58,14 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <O> Object type for KMedoids initialization
*/
@Reference(title = "Clustering my means of Medoids", //
authors = "Kaufman, L. and Rousseeuw, P.J.", //
booktitle = "Statistical Data Analysis Based on the L_1–Norm and Related Methods")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.PAMInitialMeans")
public class PAMInitialMeans<O> implements KMeansInitialization<NumberVector>, KMedoidsInitialization<O> {
/**
* Class logger.
@@ -78,6 +81,9 @@ public class PAMInitialMeans<O> implements KMeansInitialization<NumberVector>, K
@Override
public <T extends NumberVector, V extends NumberVector> List<V> chooseInitialMeans(Database database, Relation<T> relation, int k, NumberVectorDistanceFunction<? super T> distanceFunction, NumberVector.Factory<V> factory) {
+ if(relation.size() < k) {
+ throw new AbortException("Database has less than k objects.");
+ }
// Ugly cast; but better than code duplication.
@SuppressWarnings("unchecked")
Relation<O> rel = (Relation<O>) relation;
@@ -97,38 +103,33 @@ public class PAMInitialMeans<O> implements KMeansInitialization<NumberVector>, K
public DBIDs chooseInitialMedoids(int k, DBIDs ids, DistanceQuery<? super O> distQ) {
ArrayModifiableDBIDs medids = DBIDUtil.newArray(k);
DBIDVar bestid = DBIDUtil.newVar();
- WritableDoubleDataStore mindist = null;
+ // We need three temporary storage arrays:
+ WritableDoubleDataStore mindist, bestd, tempd;
+ mindist = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP);
+ bestd = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP);
+ tempd = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP);
// First mean is chosen by having the smallest distance sum to all others.
{
double best = Double.POSITIVE_INFINITY;
- WritableDoubleDataStore newd = null;
FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Choosing initial mean", ids.size(), LOG) : null;
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
- if(newd == null) {
- newd = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP);
- }
- int sum = 0;
+ double sum = 0, d;
for(DBIDIter iter2 = ids.iter(); iter2.valid(); iter2.advance()) {
- double d = distQ.distance(iter, iter2);
- sum += d;
- newd.putDouble(iter2, d);
+ sum += d = distQ.distance(iter, iter2);
+ tempd.putDouble(iter2, d);
}
if(sum < best) {
best = sum;
bestid.set(iter);
- if(mindist != null) {
- mindist.destroy();
- }
- mindist = newd;
- newd = null;
+ // Swap mindist and newd:
+ WritableDoubleDataStore temp = mindist;
+ mindist = tempd;
+ tempd = temp;
}
LOG.incrementProcessed(prog);
}
LOG.ensureCompleted(prog);
- if(newd != null) {
- newd.destroy();
- }
medids.add(bestid);
}
assert(mindist != null);
@@ -138,44 +139,40 @@ public class PAMInitialMeans<O> implements KMeansInitialization<NumberVector>, K
LOG.incrementProcessed(prog); // First one was just chosen.
for(int i = 1; i < k; i++) {
double best = Double.POSITIVE_INFINITY;
- WritableDoubleDataStore bestd = null, newd = null;
+ bestid.unset();
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
if(medids.contains(iter)) {
continue;
}
- if(newd == null) {
- newd = DataStoreUtil.makeDoubleStorage(ids, DataStoreFactory.HINT_HOT | DataStoreFactory.HINT_TEMP);
- }
- double sum = 0.;
+ double sum = 0., v;
for(DBIDIter iter2 = ids.iter(); iter2.valid(); iter2.advance()) {
- double v = MathUtil.min(distQ.distance(iter, iter2), mindist.doubleValue(iter2));
- sum += v;
- newd.put(iter2, v);
+ sum += v = MathUtil.min(distQ.distance(iter, iter2), mindist.doubleValue(iter2));
+ tempd.put(iter2, v);
}
if(sum < best) {
best = sum;
bestid.set(iter);
- if(bestd != null) {
- bestd.destroy();
- }
- bestd = newd;
- newd = null;
+ // Swap bestd and newd:
+ WritableDoubleDataStore temp = bestd;
+ bestd = tempd;
+ tempd = temp;
}
}
- if(bestd == null) {
+ if(!bestid.isSet()) {
throw new AbortException("No median found that improves the criterion function?!? Too many infinite distances.");
}
medids.add(bestid);
- if(newd != null) {
- newd.destroy();
- }
- mindist.destroy();
- mindist = bestd;
+ // Swap bestd and mindist:
+ WritableDoubleDataStore temp = bestd;
+ bestd = mindist;
+ mindist = temp;
LOG.incrementProcessed(prog);
}
LOG.ensureCompleted(prog);
mindist.destroy();
+ bestd.destroy();
+ tempd.destroy();
return medids;
}
@@ -192,4 +189,4 @@ public class PAMInitialMeans<O> implements KMeansInitialization<NumberVector>, K
return new PAMInitialMeans<>();
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PredefinedInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PredefinedInitialMeans.java
index ca8a612a..b01651b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PredefinedInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/PredefinedInitialMeans.java
@@ -38,12 +38,13 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.VectorListParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleArrayListParameter;
/**
* Run k-means with prespecified initial means.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class PredefinedInitialMeans extends AbstractKMeansInitialization<NumberVector> {
/**
@@ -147,9 +148,12 @@ public class PredefinedInitialMeans extends AbstractKMeansInitialization<NumberV
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- VectorListParameter meansP = new VectorListParameter(INITIAL_MEANS);
+ DoubleArrayListParameter meansP = new DoubleArrayListParameter(INITIAL_MEANS);
if(config.grab(meansP)) {
- initialMeans = meansP.getValue();
+ initialMeans = new ArrayList<>(meansP.getValue().size());
+ for(double[] v : meansP.getValue()) {
+ initialMeans.add(new Vector(v));
+ }
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyChosenInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyChosenInitialMeans.java
index b6cfad8d..bb03b278 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyChosenInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyChosenInitialMeans.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
@@ -51,12 +52,14 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* available in Biometrics).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Vector type
*/
@Reference(authors = "E. W. Forgy", //
title = "Cluster analysis of multivariate data: efficiency versus interpretability of classifications", //
booktitle = "Biometrics 21(3)")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.RandomlyChosenInitialMeans")
public class RandomlyChosenInitialMeans<O> extends AbstractKMeansInitialization<NumberVector> implements KMedoidsInitialization<O> {
/**
* Constructor.
@@ -95,4 +98,4 @@ public class RandomlyChosenInitialMeans<O> extends AbstractKMeansInitialization<
return new RandomlyChosenInitialMeans<>(rnd);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyGeneratedInitialMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyGeneratedInitialMeans.java
index bc2181e8..30d1b00f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyGeneratedInitialMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/RandomlyGeneratedInitialMeans.java
@@ -33,13 +33,16 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
import de.lmu.ifi.dbs.elki.math.MathUtil;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
/**
* Initialize k-means by generating random vectors (within the data sets value
* range).
*
* @author Erich Schubert
+ * @since 0.5.0
*/
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.RandomlyGeneratedInitialMeans")
public class RandomlyGeneratedInitialMeans extends AbstractKMeansInitialization<NumberVector> {
/**
* Constructor.
@@ -84,4 +87,4 @@ public class RandomlyGeneratedInitialMeans extends AbstractKMeansInitialization<
return new RandomlyGeneratedInitialMeans(rnd);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/SampleKMeansInitialization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/SampleKMeansInitialization.java
index ac7f7f27..f5ed00f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/SampleKMeansInitialization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/initialization/SampleKMeansInitialization.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanDistanceFunction;
import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ChainedParameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization;
@@ -53,9 +54,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Initialize k-means by running k-means on a sample of the data set only.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> Vector type
*/
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.kmeans.SampleKMeansInitialization")
public class SampleKMeansInitialization<V extends NumberVector> extends AbstractKMeansInitialization<V> {
/**
* Variant of kMeans to use for initialization.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/KMeansProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/KMeansProcessor.java
index c0e34f12..f2b9db1f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/KMeansProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/KMeansProcessor.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.parallel.processor.Processor;
* Parallel k-means implementation.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/ParallelLloydKMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/ParallelLloydKMeans.java
index a10d45ae..e214581a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/ParallelLloydKMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/parallel/ParallelLloydKMeans.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.parallel.ParallelExecutor;
* Parallel implementation of k-Means clustering.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has KMeansProcessor
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AbstractKMeansQualityMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AbstractKMeansQualityMeasure.java
index 721b74b6..cc4c00ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AbstractKMeansQualityMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AbstractKMeansQualityMeasure.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Tibor Goldschwendt
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "D. Pelleg, A. Moore", //
booktitle = "X-means: Extending K-means with Efficient Estimation on the Number of Clusters", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AkaikeInformationCriterion.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AkaikeInformationCriterion.java
index e1e72b51..aafd6173 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AkaikeInformationCriterion.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/AkaikeInformationCriterion.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Tibor Goldschwendt
* @author Erich Schubert
+ * @since 0.2
*/
@Reference(authors = "H. Akaike", //
title = "On entropy maximization principle", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterion.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterion.java
index 8b21753d..22ad56d9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterion.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterion.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Tibor Goldschwendt
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "G. Schwarz", //
title = "Estimating the dimension of a model", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterionZhao.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterionZhao.java
index 755d7137..6a18269a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterionZhao.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/BayesianInformationCriterionZhao.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Tibor Goldschwendt
* @author Erich Schubert
+ * @since 0.2
*/
@Reference(authors = "Q. Zhao, M. Xu, P. Fränti", //
title = "Knee Point Detection on Bayesian Information Criterion", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/KMeansQualityMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/KMeansQualityMeasure.java
index bd0f12a1..100c2dfc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/KMeansQualityMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/KMeansQualityMeasure.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
* Important note: some measures are ascending, others are descending!
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <O> Input Object restriction type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterMeanDistanceQualityMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterMeanDistanceQualityMeasure.java
index cd7a4d14..e7069ac0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterMeanDistanceQualityMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterMeanDistanceQualityMeasure.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
* The average of all average pairwise distances in a cluster.
*
* @author Stephan Baier
+ * @since 0.6.0
*/
public class WithinClusterMeanDistanceQualityMeasure implements KMeansQualityMeasure<NumberVector> {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterVarianceQualityMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterVarianceQualityMeasure.java
index 09017413..fbd04dbd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterVarianceQualityMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/kmeans/quality/WithinClusterVarianceQualityMeasure.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunctio
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.6.0
*/
public class WithinClusterVarianceQualityMeasure extends AbstractKMeansQualityMeasure<NumberVector> {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/meta/ExternalClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/meta/ExternalClustering.java
index ef8045a9..634eb057 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/meta/ExternalClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/meta/ExternalClustering.java
@@ -79,6 +79,7 @@ import gnu.trove.map.hash.TIntObjectHashMap;
* considered noise clusters.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf CSVReaderFormat
* @apiviz.has Clustering
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/onedimensional/KNNKernelDensityMinimaClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/onedimensional/KNNKernelDensityMinimaClustering.java
index 71167a90..4b2d5b8a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/onedimensional/KNNKernelDensityMinimaClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/onedimensional/KNNKernelDensityMinimaClustering.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* performing kernel density estimation.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class KNNKernelDensityMinimaClustering<V extends NumberVector> extends AbstractAlgorithm<Clustering<ClusterModel>> implements ClusteringAlgorithm<Clustering<ClusterModel>> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/AbstractOPTICS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/AbstractOPTICS.java
index da4c94f1..da0a6dc3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/AbstractOPTICS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/AbstractOPTICS.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> the type of DatabaseObjects handled by the algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/ClusterOrder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/ClusterOrder.java
index 93a24407..dc50b086 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/ClusterOrder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/ClusterOrder.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.result.OrderingResult;
* Class to store the result of an ordering clustering algorithm such as OPTICS.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/CorrelationClusterOrder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/CorrelationClusterOrder.java
index 6b94e358..d8bdf5a8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/CorrelationClusterOrder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/CorrelationClusterOrder.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.7.0
*/
public class CorrelationClusterOrder extends ClusterOrder {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/DeLiClu.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/DeLiClu.java
index e2017f85..27737f60 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/DeLiClu.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/DeLiClu.java
@@ -80,6 +80,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.7.0
* @param <NV> the type of NumberVector handled by this Algorithm
*/
@Title("DeliClu: Density-Based Hierarchical Clustering")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/FastOPTICS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/FastOPTICS.java
index 9ec79b29..5df5712b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/FastOPTICS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/FastOPTICS.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Johannes Schneider
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf RandomProjectedNeighborsAndDensities
*/
@@ -158,7 +159,7 @@ public class FastOPTICS<V extends NumberVector> extends AbstractAlgorithm<Cluste
neighs = index.getNeighs(); // get neighbors of points
// compute ordering as for OPTICS
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("OPTICS clustering.", ids.size(), LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("FastOPTICS clustering", ids.size(), LOG) : null;
processed = DBIDUtil.newHashSet(ids.size());
order = new ClusterOrder(ids, "FastOPTICS Cluster Order", "fast-optics");
for(DBIDIter it = ids.iter(); it.valid(); it.advance()) {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/GeneralizedOPTICS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/GeneralizedOPTICS.java
index 771d59e8..5b47ec16 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/GeneralizedOPTICS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/GeneralizedOPTICS.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.QuickSelect;
* distances, and serves as a base for several other algorithms (HiCO, HiSC).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeap.java
index cb1265eb..a7d7b3f7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeap.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Instance
*
@@ -69,8 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
title = "OPTICS: Ordering Points to Identify the Clustering Structure", //
booktitle = "Proc. ACM SIGMOD Int. Conf. on Management of Data (SIGMOD '99)", //
url = "http://dx.doi.org/10.1145/304181.304187")
-@Alias({ "OPTICS", "de.lmu.ifi.dbs.elki.algorithm.clustering.OPTICS", //
-"de.lmu.ifi.dbs.elki.algorithm.clustering.optics.OPTICS" })
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.OPTICS")
public class OPTICSHeap<O> extends AbstractOPTICS<O> {
/**
* The logger for this class.
@@ -213,4 +213,4 @@ public class OPTICSHeap<O> extends AbstractOPTICS<O> {
return new OPTICSHeap<>(distanceFunction, epsilon, minpts);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeapEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeapEntry.java
index 89e6ebb1..0b181442 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeapEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSHeapEntry.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* Entry in the priority heap.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.exclude
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSList.java
index 34d822cc..313bba79 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSList.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf OPTICSList.Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSTypeAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSTypeAlgorithm.java
index 695ef8fd..9b9cde62 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSTypeAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSTypeAlgorithm.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.Database;
* Interface for OPTICS type algorithms, that can be analyzed by OPTICS Xi etc.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has ClusterOrder
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSXi.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSXi.java
index 087876dc..7ce0bba1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSXi.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/optics/OPTICSXi.java
@@ -66,12 +66,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* This removes a popular type of artifacts.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf OPTICSTypeAlgorithm oneway - «runs»
* @apiviz.uses ClusterOrder oneway - «reads»
* @apiviz.has SteepAreaResult oneway - «produces»
*/
-@Alias({ "OPTICSXi", "de.lmu.ifi.dbs.elki.algorithm.clustering.OPTICSXi" })
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.OPTICSXi")
public class OPTICSXi extends AbstractAlgorithm<Clustering<OPTICSModel>> implements ClusteringAlgorithm<Clustering<OPTICSModel>> {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/CLIQUE.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/CLIQUE.java
index 86aa3b3f..c8dada62 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/CLIQUE.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/CLIQUE.java
@@ -85,6 +85,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has SubspaceModel
* @apiviz.has CLIQUESubspace
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DOC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DOC.java
index 896519b3..a19ea88a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DOC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DOC.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Florian Nuecke
+ * @since 0.6.0
*
* @apiviz.has SubspaceModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DiSH.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DiSH.java
index 1bbd4def..7653246f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DiSH.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/DiSH.java
@@ -95,6 +95,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses DiSHPreferenceVectorIndex
* @apiviz.has SubspaceModel
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/HiSC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/HiSC.java
index 64bde076..088b81d9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/HiSC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/HiSC.java
@@ -69,6 +69,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.3
*
* @apiviz.uses HiSCPreferenceVectorIndex
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/P3C.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/P3C.java
index 03670579..02e7792c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/P3C.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/P3C.java
@@ -93,6 +93,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Florian Nuecke
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses EM
* @apiviz.has SubspaceModel
@@ -363,7 +364,7 @@ public class P3C<V extends NumberVector> extends AbstractAlgorithm<Clustering<Su
* @return p-signatures
*/
private ArrayList<Signature> mergeClusterCores(final int binCount, ArrayList<Signature> signatures) {
- MutableProgress mergeProgress = LOG.isVerbose() ? new MutableProgress("Merging signatures.", signatures.size(), LOG) : null;
+ MutableProgress mergeProgress = LOG.isVerbose() ? new MutableProgress("Merging signatures", signatures.size(), LOG) : null;
// Annotate dimensions to 1-signatures for quick stopping.
int[] firstdim = new int[signatures.size()];
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PROCLUS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PROCLUS.java
index 45cc4c97..dcc84d20 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PROCLUS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PROCLUS.java
@@ -88,6 +88,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has SubspaceModel
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PreDeCon.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PreDeCon.java
index f7533443..9a98396b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PreDeCon.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/PreDeCon.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Peer Kröger
+ * @since 0.2
*
* @apiviz.has PreDeCon.Settings
* @apiviz.composedOf PreDeConNeighborPredicate
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SUBCLU.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SUBCLU.java
index b8856044..f20064be 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SUBCLU.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SUBCLU.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses DBSCAN
* @apiviz.uses DimensionSelectingSubspaceDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SubspaceClusteringAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SubspaceClusteringAlgorithm.java
index 453b26dc..e3f97350 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SubspaceClusteringAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/SubspaceClusteringAlgorithm.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.model.SubspaceModel;
* {@link SubspaceModel}, that can then be post-processed for outlier detection.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <M> Model type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEInterval.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEInterval.java
index 510f10a8..7305d43f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEInterval.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEInterval.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* Represents an interval in a certain dimension of the data space.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class CLIQUEInterval implements Comparable<CLIQUEInterval> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUESubspace.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUESubspace.java
index cda00f8b..280702cb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUESubspace.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUESubspace.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* Represents a subspace of the original data space in the CLIQUE algorithm.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has CoverageComparator
* @apiviz.composedOf CLIQUEUnit
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEUnit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEUnit.java
index cf96670e..f7b581a7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEUnit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/subspace/clique/CLIQUEUnit.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
* Represents a unit in the CLIQUE algorithm.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf CLIQUEInterval
* @apiviz.composedOf ModifiableDBIDs
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelClustering.java
index 29006f01..d2ba1b38 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelClustering.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.database.ids.HashSetModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
@@ -65,16 +66,18 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
*
* If an assignment of an object to multiple clusters is desired, the labels of
* the object indicating the clusters need to be separated by blanks and the
- * flag {@link #MULTIPLE_ID} needs to be set.
+ * flag {@link Parameterizer#MULTIPLE_ID} needs to be set.
*
* TODO: handling of data sets with no labels?
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses de.lmu.ifi.dbs.elki.data.ClassLabel
*/
@Title("Clustering by label")
@Description("Cluster points by a (pre-assigned!) label. For comparing results with a reference clustering.")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.ByLabelClustering")
public class ByLabelClustering extends AbstractAlgorithm<Clustering<Model>> implements ClusteringAlgorithm<Clustering<Model>> {
/**
* The logger for this class.
@@ -82,24 +85,12 @@ public class ByLabelClustering extends AbstractAlgorithm<Clustering<Model>> impl
private static final Logging LOG = Logging.getLogger(ByLabelClustering.class);
/**
- * Flag to indicate that multiple cluster assignment is possible. If an
- * assignment to multiple clusters is desired, the labels indicating the
- * clusters need to be separated by blanks.
- */
- public static final OptionID MULTIPLE_ID = new OptionID("bylabelclustering.multiple", "Flag to indicate that only subspaces with large coverage " + "(i.e. the fraction of the database that is covered by the dense units) " + "are selected, the rest will be pruned.");
-
- /**
- * Pattern to recognize noise clusters by.
- */
- public static final OptionID NOISE_ID = new OptionID("bylabelclustering.noise", "Pattern to recognize noise classes by their label.");
-
- /**
- * Holds the value of {@link #MULTIPLE_ID}.
+ * Allow multiple cluster assignment.
*/
private boolean multiple;
/**
- * Holds the value of {@link #NOISE_ID}.
+ * Pattern to recognize noise clusters by.
*/
private Pattern noisepattern = null;
@@ -248,8 +239,26 @@ public class ByLabelClustering extends AbstractAlgorithm<Clustering<Model>> impl
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
+ /**
+ * Flag to indicate that multiple cluster assignment is possible. If an
+ * assignment to multiple clusters is desired, the labels indicating the
+ * clusters need to be separated by blanks.
+ */
+ public static final OptionID MULTIPLE_ID = new OptionID("bylabelclustering.multiple", "Flag to indicate that only subspaces with large coverage " + "(i.e. the fraction of the database that is covered by the dense units) " + "are selected, the rest will be pruned.");
+
+ /**
+ * Parameter to specify the pattern to recognize noise clusters by.
+ */
+ public static final OptionID NOISE_ID = new OptionID("bylabelclustering.noise", "Pattern to recognize noise classes by their label.");
+
+ /**
+ * Allow multiple cluster assignment.
+ */
protected boolean multiple;
+ /**
+ * Pattern to recognize noise clusters by.
+ */
protected Pattern noisepat;
@Override
@@ -272,4 +281,4 @@ public class ByLabelClustering extends AbstractAlgorithm<Clustering<Model>> impl
return new ByLabelClustering(multiple, noisepat);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelHierarchicalClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelHierarchicalClustering.java
index e246c4e6..d48efe68 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelHierarchicalClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelHierarchicalClustering.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.database.ids.HashSetModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.ModifiableDBIDs;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -64,11 +65,13 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* TODO: Noise handling (e.g. allow the user to specify a noise label pattern?)
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses de.lmu.ifi.dbs.elki.data.ClassLabel
*/
@Title("Hierarchical clustering by label")
@Description("Cluster points by a (pre-assigned!) label. For comparing results with a reference clustering.")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.ByLabelHierarchicalClustering")
public class ByLabelHierarchicalClustering extends AbstractAlgorithm<Clustering<Model>> implements ClusteringAlgorithm<Clustering<Model>> {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelOrAllInOneClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelOrAllInOneClustering.java
index 12af74ba..7de4c4f0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelOrAllInOneClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByLabelOrAllInOneClustering.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* "all-in-one" clustering.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class ByLabelOrAllInOneClustering extends ByLabelClustering {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByModelClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByModelClustering.java
index 9832ea4a..0583ceb5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByModelClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/ByModelClustering.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* reference result / golden standard used by the generator).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses Model
*/
@@ -68,12 +69,7 @@ public class ByModelClustering extends AbstractAlgorithm<Clustering<Model>> impl
private static final Logging LOG = Logging.getLogger(ByModelClustering.class);
/**
- * Pattern to recognize noise clusters with
- */
- public static final OptionID NOISE_ID = new OptionID("bymodel.noise", "Pattern to recognize noise models by their label.");
-
- /**
- * Holds the value of {@link #NOISE_ID}.
+ * Pattern to recognize noise clusters with.
*/
private Pattern noisepattern = null;
@@ -144,6 +140,14 @@ public class ByModelClustering extends AbstractAlgorithm<Clustering<Model>> impl
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
+ /**
+ * Parameter to specify the pattern to recognize noise clusters with.
+ */
+ public static final OptionID NOISE_ID = new OptionID("bymodel.noise", "Pattern to recognize noise models by their label.");
+
+ /**
+ * Pattern to recognize noise clusters with
+ */
protected Pattern noisepat;
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllInOne.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllInOne.java
index 64c103c3..188db3e9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllInOne.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllInOne.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -44,9 +45,11 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Useful for evaluation and testing.
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Trivial all-in-one clustering")
@Description("Returns a 'tivial' clustering which just considers all points to be one big cluster.")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.TrivialAllInOne")
public class TrivialAllInOne extends AbstractAlgorithm<Clustering<Model>> implements ClusteringAlgorithm<Clustering<Model>> {
/**
* The logger for this class.
@@ -77,4 +80,4 @@ public class TrivialAllInOne extends AbstractAlgorithm<Clustering<Model>> implem
protected Logging getLogger() {
return LOG;
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllNoise.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllNoise.java
index db4cb8dd..4db4dfed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllNoise.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/trivial/TrivialAllNoise.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -43,9 +44,11 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Useful for evaluation and testing.
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Trivial all-noise clustering")
@Description("Returns a 'trivial' clustering which just considers all points as noise points.")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.clustering.TrivialAllNoise")
public class TrivialAllNoise extends AbstractAlgorithm<Clustering<Model>> implements ClusteringAlgorithm<Clustering<Model>> {
/**
* The logger for this class.
@@ -76,4 +79,4 @@ public class TrivialAllNoise extends AbstractAlgorithm<Clustering<Model>> implem
protected Logging getLogger() {
return LOG;
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CKMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CKMeans.java
index 14915807..3d095cbd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CKMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CKMeans.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* however, is constant.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "S. D. Lee, B. Kao, R. Cheng", //
title = "Reducing UK-means to K-means", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CenterOfMassMetaClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CenterOfMassMetaClustering.java
index 1187ff30..961e7fc2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CenterOfMassMetaClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/CenterOfMassMetaClustering.java
@@ -66,6 +66,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <C> Clustering result type (inherited from inner algorithm)
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCAN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCAN.java
index 47f3e6bb..4c177463 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCAN.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCAN.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf FDBSCANNeighborPredicate
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCANNeighborPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCANNeighborPredicate.java
index a51ec92a..8fc3bd03 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCANNeighborPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/FDBSCANNeighborPredicate.java
@@ -76,6 +76,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/RepresentativeUncertainClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/RepresentativeUncertainClustering.java
index da377ea1..c1ee8ed8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/RepresentativeUncertainClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/RepresentativeUncertainClustering.java
@@ -104,6 +104,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleObjPair;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has RepresentativenessEvaluation
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/UKMeans.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/UKMeans.java
index fc602d1f..14aee8aa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/UKMeans.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/clustering/uncertain/UKMeans.java
@@ -76,6 +76,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Klaus Arthur Schmidt
+ * @since 0.7.0
*/
@Reference(authors = "M. Chau, R. Cheng, B. Kao, J. Ng", //
title = "Uncertain data mining: An example in clustering location data", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/APRIORI.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/APRIORI.java
index 64cfa509..3555e307 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/APRIORI.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/APRIORI.java
@@ -23,9 +23,6 @@ package de.lmu.ifi.dbs.elki.algorithm.itemsetmining;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import gnu.trove.iterator.TLongIntIterator;
-import gnu.trove.map.hash.TLongIntHashMap;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
@@ -46,11 +43,14 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.statistics.Duration;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
import de.lmu.ifi.dbs.elki.result.FrequentItemsetsResult;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
+import gnu.trove.iterator.TLongIntIterator;
+import gnu.trove.map.hash.TLongIntHashMap;
/**
* The APRIORI algorithm for Mining Association Rules.
@@ -72,6 +72,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Itemset
* @apiviz.uses BitVector
@@ -82,6 +83,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
title = "Fast Algorithms for Mining Association Rules", //
booktitle = "Proc. 20th Int. Conf. on Very Large Data Bases (VLDB '94), Santiago de Chile, Chile 1994", //
url = "http://www.vldb.org/conf/1994/P487.PDF")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.APRIORI")
public class APRIORI extends AbstractFrequentItemsetAlgorithm {
/**
* The logger for this class.
@@ -596,4 +598,4 @@ public class APRIORI extends AbstractFrequentItemsetAlgorithm {
return new APRIORI(minsupp, minlength, maxlength);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/AbstractFrequentItemsetAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/AbstractFrequentItemsetAlgorithm.java
index 31947c33..4f73d247 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/AbstractFrequentItemsetAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/AbstractFrequentItemsetAlgorithm.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Abstract base class for frequent itemset mining.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractFrequentItemsetAlgorithm extends AbstractAlgorithm<FrequentItemsetsResult> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/DenseItemset.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/DenseItemset.java
index d77a0915..7896bb00 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/DenseItemset.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/DenseItemset.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* APRIORI itemset.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class DenseItemset extends Itemset {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Eclat.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Eclat.java
index 47f75c54..9e62c5ed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Eclat.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Eclat.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(title = "New Algorithms for Fast Discovery of Association Rules", //
authors = "M.J. Zaki, S. Parthasarathy, M. Ogihara, and W. Li", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/FPGrowth.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/FPGrowth.java
index 5cdde71a..a09bf551 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/FPGrowth.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/FPGrowth.java
@@ -75,6 +75,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf FPTree
*/
@@ -194,7 +195,7 @@ public class FPGrowth extends AbstractFrequentItemsetAlgorithm {
*/
private int[] countItemSupport(final Relation<BitVector> relation, final int dim) {
final int[] counts = new int[dim];
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Finding frequent 1-items.", relation.size(), LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Finding frequent 1-items", relation.size(), LOG) : null;
for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
SparseFeatureVector<?> bv = relation.get(iditer);
// TODO: only count those which satisfy minlength?
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Itemset.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Itemset.java
index c195a79f..7e6446e7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Itemset.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/Itemset.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation;
* APRIORI itemset.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class Itemset implements Comparable<Itemset> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/OneItemset.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/OneItemset.java
index 9fddd758..63ca1dde 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/OneItemset.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/OneItemset.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* APRIORI itemset.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class OneItemset extends Itemset {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SmallDenseItemset.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SmallDenseItemset.java
index e1b8ca55..c68c65ab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SmallDenseItemset.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SmallDenseItemset.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* APRIORI itemset.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SmallDenseItemset extends Itemset {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SparseItemset.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SparseItemset.java
index 87534439..3eada0a6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SparseItemset.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/itemsetmining/SparseItemset.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* APRIORI itemset.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SparseItemset extends Itemset {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/COP.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/COP.java
index 7f43796b..d2ba2160 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/COP.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/COP.java
@@ -83,6 +83,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <V> the type of NumberVector handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/DWOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/DWOF.java
index a3e9e1d2..51ca8848 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/DWOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/DWOF.java
@@ -90,6 +90,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Omar Yousry
+ * @since 0.6.0
*
* @param <O> the type of DatabaseObjects handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianModel.java
index 25a776e0..4f6ba095 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianModel.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* <em>probability density</em> of the assumed distribution.
*
* @author Lisa Reichert
+ * @since 0.3
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianUniformMixture.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianUniformMixture.java
index cb170573..190bbb55 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianUniformMixture.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/GaussianUniformMixture.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Lisa Reichert
+ * @since 0.3
*
* @param <V> Vector Type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OPTICSOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OPTICSOF.java
index 484736bb..ccde20eb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OPTICSOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OPTICSOF.java
@@ -72,6 +72,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* and Data Mining (PKDD), Prague, Czech Republic
*
* @author Ahmed Hettab
+ * @since 0.3
*
* @apiviz.has KNNQuery
* @apiviz.has RangeQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OutlierAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OutlierAlgorithm.java
index 6d671cd0..fff0310c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OutlierAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/OutlierAlgorithm.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
* Generic super interface for outlier detection algorithms.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/SimpleCOP.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/SimpleCOP.java
index 6b8f645d..271d0467 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/SimpleCOP.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/SimpleCOP.java
@@ -70,6 +70,8 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Algorithm to compute local correlation outlier probability.
*
* This is the simpler, original version of COP, as published in
+ *
+ * Reference:
* <p>
* Arthur Zimek<br />
* Correlation Clustering.<br />
@@ -78,10 +80,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* which has then been refined to the method published as {@link COP}
*
* @author Erich Schubert
+ * @since 0.5.5
* @param <V> the type of NumberVector handled by this Algorithm
*/
@Title("Simple COP: Correlation Outlier Probability")
-@Reference(authors = "Arthur Zimek", title = "Correlation Clustering. PhD thesis, Chapter 18", booktitle = "")
+@Reference(authors = "Arthur Zimek", //
+title = "Correlation Clustering", //
+booktitle = "PhD thesis, Chapter 18")
public class SimpleCOP<V extends NumberVector> extends AbstractDistanceBasedAlgorithm<V, OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/ABOD.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/ABOD.java
index a78f76c9..946c94ad 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/ABOD.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/ABOD.java
@@ -75,6 +75,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Matthias Schubert (Original Code)
* @author Erich Schubert (ELKIfication)
+ * @since 0.2
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/FastABOD.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/FastABOD.java
index 88a606d5..5ff844a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/FastABOD.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/FastABOD.java
@@ -75,6 +75,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Matthias Schubert (Original Code)
* @author Erich Schubert (ELKIfication)
+ * @since 0.6.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/LBABOD.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/LBABOD.java
index 945d3d46..cb0e4114 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/LBABOD.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/anglebased/LBABOD.java
@@ -82,6 +82,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Matthias Schubert (Original Code)
* @author Erich Schubert (ELKIfication)
+ * @since 0.6.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/EMOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/EMOutlier.java
index fc33d88f..62f492e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/EMOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/EMOutlier.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.ProbabilisticOutlierScore;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.Hierarchy.Iter;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
@@ -57,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* object is an outlier.
*
* @author Lisa Reichert
+ * @since 0.3
*
* @apiviz.has EM
*
@@ -65,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
// TODO: re-use an existing EM when present?
@Title("EM Outlier: Outlier Detection based on the generic EM clustering")
@Description("The outlier score assigned is based on the highest cluster probability obtained from EM clustering.")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.EMOutlier")
public class EMOutlier<V extends NumberVector> extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/KMeansOutlierDetection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/KMeansOutlierDetection.java
index 4db56748..b4a7b44c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/KMeansOutlierDetection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/KMeansOutlierDetection.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* publication list</a> for citation information and BibTeX templates).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has KMeans
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/SilhouetteOutlierDetection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/SilhouetteOutlierDetection.java
index 34600968..a4a3d7f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/SilhouetteOutlierDetection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/clustering/SilhouetteOutlierDetection.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* for citation information and BibTeX templates).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has ClusteringAlgorithm
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/AbstractDBOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/AbstractDBOutlier.java
index 6a7a2922..7d7fc950 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/AbstractDBOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/AbstractDBOutlier.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Lisa Reichert
+ * @since 0.3
*
* @param <O> the type of DatabaseObjects handled by this Algorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierDetection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierDetection.java
index bee17874..d9e705d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierDetection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierDetection.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* 3.1.
*
* @author Lisa Reichert
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierScore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierScore.java
index e1775bad..354057a4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierScore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/DBOutlierScore.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Lisa Reichert
+ * @since 0.3
*
* @apiviz.has RangeQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/HilOut.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/HilOut.java
index c748c832..35fe19e0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/HilOut.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/HilOut.java
@@ -85,6 +85,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Jonathan von Brünken
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf HilbertFeatures
* @apiviz.uses HilFeature
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNOutlier.java
index 649ea088..41653ac3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNOutlier.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Lisa Reichert
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNWeightOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNWeightOutlier.java
index 3aeb6da2..5b92cef5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNWeightOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/KNNWeightOutlier.java
@@ -81,6 +81,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Lisa Reichert
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
@@ -125,7 +126,7 @@ public class KNNWeightOutlier<O> extends AbstractDistanceBasedAlgorithm<O, Outli
final DistanceQuery<O> distanceQuery = database.getDistanceQuery(relation, getDistanceFunction());
KNNQuery<O> knnQuery = database.getKNNQuery(distanceQuery, k + 1); // + query point
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Compute kNN weights.", relation.size(), LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Compute kNN weights", relation.size(), LOG) : null;
DoubleMinMax minmax = new DoubleMinMax();
WritableDoubleDataStore knnw_score = DataStoreUtil.makeDoubleStorage(relation.getDBIDs(), DataStoreFactory.HINT_STATIC);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/LocalIsolationCoefficient.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/LocalIsolationCoefficient.java
index 33450eb1..034f6af2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/LocalIsolationCoefficient.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/LocalIsolationCoefficient.java
@@ -68,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ODIN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ODIN.java
index e249e543..534f2be1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ODIN.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ODIN.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ReferenceBasedOutlierDetection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ReferenceBasedOutlierDetection.java
index cf184221..304474a3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ReferenceBasedOutlierDetection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/ReferenceBasedOutlierDetection.java
@@ -81,6 +81,7 @@ import de.lmu.ifi.dbs.elki.utilities.referencepoints.ReferencePointsHeuristic;
*
* @author Lisa Reichert
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf ReferencePointsHeuristic
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/KNNWeightProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/KNNWeightProcessor.java
index 60ebcd8b..3de88864 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/KNNWeightProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/KNNWeightProcessor.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedObject;
* Needs the k nearest neighbors as input, for example from {@link KNNProcessor}
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class KNNWeightProcessor extends AbstractDoubleProcessor {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNOutlier.java
index 3b4c17f1..96c70b60 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNOutlier.java
@@ -76,6 +76,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf KNNProcessor
* @apiviz.composedOf KDistanceProcessor
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNWeightOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNWeightOutlier.java
index 571c2038..7f86e48f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNWeightOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/distance/parallel/ParallelKNNWeightOutlier.java
@@ -76,6 +76,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf KNNWeightProcessor
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IDOS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IDOS.java
index b462b836..442a96a1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IDOS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IDOS.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Jonathan von Brünken
+ * @since 0.7.0
* @author Erich Schubert
*
* @param <O> Object type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IntrinsicDimensionalityOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IntrinsicDimensionalityOutlier.java
index 1b2d25ef..04679930 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IntrinsicDimensionalityOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/intrinsic/IntrinsicDimensionalityOutlier.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Please see their upcoming publications for an improved solution.
*
* @author Erich Schubert
+ * @since 0.3
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/ALOCI.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/ALOCI.java
index f7edae0f..e0fefe2d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/ALOCI.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/ALOCI.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.QuotientOutlierScoreMeta;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -67,27 +68,31 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
/**
* Fast Outlier Detection Using the "approximate Local Correlation Integral".
- *
+ *
* Outlier detection using multiple epsilon neighborhoods.
- *
+ *
* Reference:
* <p>
- * S. Papadimitriou, H. Kitagawa, P. B. Gibbons and C. Faloutsos:<br />
- * LOCI: Fast Outlier Detection Using the Local Correlation Integral.<br />
- * In: Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03), Bangalore,
- * India, 2003.
+ * S. Papadimitriou, H. Kitagawa, P. B. Gibbons and C. Faloutsos: <br />
+ * LOCI: Fast Outlier Detection Using the Local Correlation Integral. <br />
+ * In: Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03)
* </p>
- *
+ *
* @author Jonathan von Brünken
* @author Erich Schubert
- *
+ * @since 0.5.0
+ *
* @apiviz.composedOf ALOCIQuadTree
- *
+ *
* @param <O> Object type
*/
@Title("LOCI: Fast Outlier Detection Using the Local Correlation Integral")
@Description("Algorithm to compute outliers based on the Local Correlation Integral")
-@Reference(authors = "S. Papadimitriou, H. Kitagawa, P. B. Gibbons, C. Faloutsos", title = "LOCI: Fast Outlier Detection Using the Local Correlation Integral", booktitle = "Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03), Bangalore, India, 2003", url = "http://dx.doi.org/10.1109/ICDE.2003.1260802")
+@Reference(authors = "S. Papadimitriou, H. Kitagawa, P. B. Gibbons, C. Faloutsos", //
+title = "LOCI: Fast Outlier Detection Using the Local Correlation Integral", //
+booktitle = "Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03)", //
+url = "http://dx.doi.org/10.1109/ICDE.2003.1260802")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.ALOCI")
public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
@@ -121,7 +126,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Constructor.
- *
+ *
* @param distanceFunction Distance function
* @param nmin Minimum neighborhood size
* @param alpha Alpha value
@@ -246,10 +251,10 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Method for the MDEF calculation
- *
+ *
* @param sn Sampling Neighborhood
* @param cg Counting Neighborhood
- *
+ *
* @return MDEF norm
*/
private static double calculate_MDEF_norm(Node sn, Node cg) {
@@ -294,13 +299,13 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Simple quadtree for ALOCI. Not storing the actual objects, just the counts.
- *
+ *
* Furthermore, the quadtree can be shifted by a specified vector, wrapping
* around min/max
- *
+ *
* @author Jonathan von Brünken
* @author Erich Schubert
- *
+ *
* @apiviz.composedOf Node
*/
static class ALOCIQuadTree {
@@ -326,7 +331,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Constructor.
- *
+ *
* @param min Minimum coordinates
* @param max Maximum coordinates
* @param shift Tree shift offset
@@ -364,7 +369,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Bulk load the tree
- *
+ *
* @param lmin Subtree minimum (unshifted, will be modified)
* @param lmax Subtree maximum (unshifted, will be modified)
* @param children List of children for current parent
@@ -461,7 +466,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Shift and wrap a single dimension.
- *
+ *
* @param obj Object
* @param dim Dimension
* @param level Level (controls scaling/wraping!)
@@ -476,7 +481,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Find the closest node (of depth tlevel or above, if there is no node at
* this depth) for the given vector.
- *
+ *
* @param vec Query vector
* @param tlevel Target level
* @return Node
@@ -511,7 +516,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Node of the ALOCI Quadtree
- *
+ *
* @author Erich Schubert
*/
static class Node {
@@ -547,7 +552,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Constructor.
- *
+ *
* @param code Node code
* @param center Center vector
* @param count Element count
@@ -569,7 +574,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Get level of node.
- *
+ *
* @return Level of node
*/
public int getLevel() {
@@ -578,7 +583,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Get count of subtree
- *
+ *
* @return subtree count
*/
public int getCount() {
@@ -587,7 +592,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Return center vector
- *
+ *
* @return center vector
*/
public Vector getCenter() {
@@ -596,7 +601,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Get sum of squares, recursively
- *
+ *
* @param levels Depth to collect
* @return Sum of squares
*/
@@ -613,7 +618,7 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Get cubic sum.
- *
+ *
* @param levels Level to collect
* @return sum of cubes
*/
@@ -631,9 +636,9 @@ public class ALOCI<O extends NumberVector> extends AbstractAlgorithm<OutlierResu
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer<O extends NumberVector> extends AbstractParameterizer {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/COF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/COF.java
index 87019ae6..61cb915f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/COF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/COF.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/FlexibleLOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/FlexibleLOF.java
index e38e8da2..eae6f530 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/FlexibleLOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/FlexibleLOF.java
@@ -107,6 +107,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* @author Peer Kröger
* @author Erich Schubert
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has LOFResult oneway - - computes
* @apiviz.has KNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/INFLO.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/INFLO.java
index 1e77cab5..375031f9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/INFLO.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/INFLO.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.QuotientOutlierScoreMeta;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -72,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Ahmed Hettab
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
@@ -83,6 +85,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
title = "Ranking outliers using symmetric neighborhood relationship", //
booktitle = "Proc. 10th Pacific-Asia conference on Advances in Knowledge Discovery and Data Mining", //
url = "http://dx.doi.org/10.1007/11731139_68")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.INFLO")
public class INFLO<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/KDEOS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/KDEOS.java
index 1583ac99..92f0d7a9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/KDEOS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/KDEOS.java
@@ -93,6 +93,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has KNNQuery
* @apiviz.has KernelDensityFunction
@@ -203,7 +204,7 @@ public class KDEOS<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult>im
densities.put(iter, new double[knum]);
}
// Distribute densities:
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Computing densities.", ids.size(), LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Computing densities", ids.size(), LOG) : null;
double iminbw = (minBandwidth > 0.) ? 1. / (minBandwidth * scale) : Double.POSITIVE_INFINITY;
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
KNNList neighbors = knnq.getKNNForDBID(iter, kmax + 1);
@@ -269,7 +270,7 @@ public class KDEOS<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult>im
*/
protected void computeOutlierScores(KNNQuery<O> knnq, final DBIDs ids, WritableDataStore<double[]> densities, WritableDoubleDataStore kdeos, DoubleMinMax minmax) {
final int knum = kmax + 1 - kmin;
- FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Computing KDEOS scores.", ids.size(), LOG) : null;
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Computing KDEOS scores", ids.size(), LOG) : null;
double[][] scratch = new double[knum][kmax + 5];
MeanVariance mv = new MeanVariance();
@@ -339,32 +340,32 @@ public class KDEOS<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult>im
/**
* Parameter to specify the kernel density function.
*/
- private static final OptionID KERNEL_ID = new OptionID("kdeos.kernel", "Kernel density function to use.");
+ public static final OptionID KERNEL_ID = new OptionID("kdeos.kernel", "Kernel density function to use.");
/**
* Parameter to specify the minimum bandwidth.
*/
- private static final OptionID KERNEL_MIN_ID = new OptionID("kdeos.kernel.minbw", "Minimum bandwidth for kernel density estimation.");
+ public static final OptionID KERNEL_MIN_ID = new OptionID("kdeos.kernel.minbw", "Minimum bandwidth for kernel density estimation.");
/**
* Parameter to specify the kernel scaling factor.
*/
- private static final OptionID KERNEL_SCALE_ID = new OptionID("kdeos.kernel.scale", "Scaling factor for the kernel function.");
+ public static final OptionID KERNEL_SCALE_ID = new OptionID("kdeos.kernel.scale", "Scaling factor for the kernel function.");
/**
* Minimum value of k to analyze.
*/
- private static final OptionID KMIN_ID = new OptionID("kdeos.k.min", "Minimum value of k to analyze.");
+ public static final OptionID KMIN_ID = new OptionID("kdeos.k.min", "Minimum value of k to analyze.");
/**
* Maximum value of k to analyze.
*/
- private static final OptionID KMAX_ID = new OptionID("kdeos.k.max", "Maximum value of k to analyze.");
+ public static final OptionID KMAX_ID = new OptionID("kdeos.k.max", "Maximum value of k to analyze.");
/**
* Intrinsic dimensionality.
*/
- private static final OptionID IDIM_ID = new OptionID("kdeos.idim", "Intrinsic dimensionality of this data set. Use -1 for using the true data dimensionality, but values such as 0-2 often offer better performance.");
+ public static final OptionID IDIM_ID = new OptionID("kdeos.idim", "Intrinsic dimensionality of this data set. Use -1 for using the true data dimensionality, but values such as 0-2 often offer better performance.");
/**
* Kernel function to use for density estimation.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDF.java
index 056a6ba3..c4067504 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDF.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.kernelfunctions.KernelDensityFunction
import de.lmu.ifi.dbs.elki.result.outlier.BasicOutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.DatabaseUtil;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -77,6 +78,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has KNNQuery
* @apiviz.has KernelDensityFunction
@@ -87,6 +89,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
title = "Outlier Detection with Kernel Density Functions", //
booktitle = "Machine Learning and Data Mining in Pattern Recognition", //
url = "http://dx.doi.org/10.1007/978-3-540-73499-4_6")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.LDF")
public class LDF<O extends NumberVector> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDOF.java
index b41af3bd..9dadf0e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDOF.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOCI.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOCI.java
index 7b332639..f8623bcc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOCI.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOCI.java
@@ -63,26 +63,33 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
/**
* Fast Outlier Detection Using the "Local Correlation Integral".
- *
+ *
* Exact implementation only, not aLOCI. See {@link ALOCI}.
- *
+ *
* Outlier detection using multiple epsilon neighborhoods.
- *
+ *
* This implementation has O(n<sup>3</sup> log n) runtime complexity!
- *
- * Based on: S. Papadimitriou, H. Kitagawa, P. B. Gibbons and C. Faloutsos:
- * LOCI: Fast Outlier Detection Using the Local Correlation Integral. In: Proc.
- * 19th IEEE Int. Conf. on Data Engineering (ICDE '03), Bangalore, India, 2003.
- *
+ *
+ * Reference:
+ * <p>
+ * S. Papadimitriou, H. Kitagawa, P. B. Gibbons and C. Faloutsos: <br />
+ * LOCI: Fast Outlier Detection Using the Local Correlation Integral. <br />
+ * In: Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03)
+ * </p>
+ *
* @author Erich Schubert
- *
+ * @since 0.2
+ *
* @apiviz.has RangeQuery
- *
+ *
* @param <O> Object type
*/
@Title("LOCI: Fast Outlier Detection Using the Local Correlation Integral")
@Description("Algorithm to compute outliers based on the Local Correlation Integral")
-@Reference(authors = "S. Papadimitriou, H. Kitagawa, P. B. Gibbons, C. Faloutsos", title = "LOCI: Fast Outlier Detection Using the Local Correlation Integral", booktitle = "Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03), Bangalore, India, 2003", url = "http://dx.doi.org/10.1109/ICDE.2003.1260802")
+@Reference(authors = "S. Papadimitriou, H. Kitagawa, P. B. Gibbons, C. Faloutsos", //
+title = "LOCI: Fast Outlier Detection Using the Local Correlation Integral", //
+booktitle = "Proc. 19th IEEE Int. Conf. on Data Engineering (ICDE '03)", //
+url = "http://dx.doi.org/10.1109/ICDE.2003.1260802")
@Alias({ "de.lmu.ifi.dbs.elki.algorithm.outlier.LOCI" })
public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> implements OutlierAlgorithm {
/**
@@ -91,39 +98,23 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
private static final Logging LOG = Logging.getLogger(LOCI.class);
/**
- * Parameter to specify the maximum radius of the neighborhood to be
- * considered, must be suitable to the distance function specified.
- */
- public static final OptionID RMAX_ID = new OptionID("loci.rmax", "The maximum radius of the neighborhood to be considered.");
-
- /**
- * Parameter to specify the minimum neighborhood size
- */
- public static final OptionID NMIN_ID = new OptionID("loci.nmin", "Minimum neighborhood size to be considered.");
-
- /**
- * Parameter to specify the averaging neighborhood scaling.
- */
- public static final OptionID ALPHA_ID = new OptionID("loci.alpha", "Scaling factor for averaging neighborhood");
-
- /**
- * Holds the value of {@link #RMAX_ID}.
+ * Maximum radius.
*/
private double rmax;
/**
- * Holds the value of {@link #NMIN_ID}.
+ * Minimum neighborhood size.
*/
- private int nmin;
+ private int nmin = 0;
/**
- * Holds the value of {@link #ALPHA_ID}.
+ * Scaling of averaging neighborhood.
*/
- private double alpha;
+ private double alpha = 0.5;
/**
* Constructor.
- *
+ *
* @param distanceFunction Distance function
* @param rmax Maximum radius
* @param nmin Minimum neighborhood size
@@ -138,7 +129,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Run the algorithm
- *
+ *
* @param database Database to process
* @param relation Relation to process
* @return Outlier result
@@ -228,7 +219,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Preprocessing step: determine the radii of interest for each point.
- *
+ *
* @param ids IDs to process
* @param rangeQuery Range query
* @param interestingDistances Distances of interest
@@ -284,7 +275,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Array of double-int values.
- *
+ *
* @author Erich Schubert
*
* @apiviz.exclude
@@ -307,7 +298,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Constructor.
- *
+ *
* @param alloc Initial allocation.
*/
public DoubleIntArrayList(int alloc) {
@@ -318,7 +309,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Collection size.
- *
+ *
* @return Size
*/
public int size() {
@@ -327,7 +318,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Get the key at the given position.
- *
+ *
* @param i Position
* @return Key
*/
@@ -337,7 +328,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Get the value at the given position.
- *
+ *
* @param i Position
* @return Value
*/
@@ -347,7 +338,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Get the value at the given position.
- *
+ *
* @param i Position
* @param val New value
*/
@@ -357,7 +348,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Append a key-value pair.
- *
+ *
* @param key Key to append
* @param val Value to append.
*/
@@ -373,7 +364,7 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Find the last position with a smaller or equal key.
- *
+ *
* @param search Key
* @return Position
*/
@@ -412,18 +403,43 @@ public class LOCI<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> im
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
- *
+ *
* @param <O> Object type
*/
public static class Parameterizer<O> extends AbstractDistanceBasedAlgorithm.Parameterizer<O> {
+ /**
+ * Parameter to specify the maximum radius of the neighborhood to be
+ * considered, must be suitable to the distance function specified.
+ */
+ public static final OptionID RMAX_ID = new OptionID("loci.rmax", "The maximum radius of the neighborhood to be considered.");
+
+ /**
+ * Parameter to specify the minimum neighborhood size
+ */
+ public static final OptionID NMIN_ID = new OptionID("loci.nmin", "Minimum neighborhood size to be considered.");
+
+ /**
+ * Parameter to specify the averaging neighborhood scaling.
+ */
+ public static final OptionID ALPHA_ID = new OptionID("loci.alpha", "Scaling factor for averaging neighborhood");
+
+ /**
+ * Maximum radius.
+ */
protected double rmax;
+ /**
+ * Minimum neighborhood size.
+ */
protected int nmin = 0;
+ /**
+ * Scaling of averaging neighborhood.
+ */
protected double alpha = 0.5;
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOF.java
index 87b1be8c..52fbeafc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LOF.java
@@ -87,6 +87,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Erich Schubert
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has KNNQuery
*
@@ -98,7 +99,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
title = "LOF: Identifying Density-Based Local Outliers", //
booktitle = "Proc. 2nd ACM SIGMOD Int. Conf. on Management of Data (SIGMOD '00), Dallas, TX, 2000", //
url = "http://dx.doi.org/10.1145/342009.335388")
-@Alias({ "de.lmu.ifi.dbs.elki.algorithm.outlier.LOF", "LOF" })
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.LOF")
public class LOF<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LoOP.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LoOP.java
index 48589698..16f46a33 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LoOP.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LoOP.java
@@ -90,6 +90,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* </ul>
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.has KNNQuery
*
@@ -101,7 +102,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
title = "LoOP: Local Outlier Probabilities", //
booktitle = "Proceedings of the 18th International Conference on Information and Knowledge Management (CIKM), Hong Kong, China, 2009", //
url = "http://dx.doi.org/10.1145/1645953.1646195")
-@Alias({ "de.lmu.ifi.dbs.elki.algorithm.outlier.LoOP", "LoOP" })
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.LoOP")
public class LoOP<O> extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/OnlineLOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/OnlineLOF.java
index 715d3c0e..6a9344b3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/OnlineLOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/OnlineLOF.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.StepProgress;
import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
import de.lmu.ifi.dbs.elki.result.outlier.BasicOutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization;
import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
@@ -63,10 +64,12 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* BUG: this currently does not appear to work.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has FlexibleLOF.LOFResult oneway - - updates
*/
// TODO: related to publication?
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.OnlineLOF")
public class OnlineLOF<O> extends FlexibleLOF<O> {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimpleKernelDensityLOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimpleKernelDensityLOF.java
index af32988e..80c41e57 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimpleKernelDensityLOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimpleKernelDensityLOF.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.kernelfunctions.KernelDensityFunction
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.QuotientOutlierScoreMeta;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.DatabaseUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
@@ -66,12 +67,14 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* estimation instead of the local reachability density.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has KNNQuery
* @apiviz.has KernelDensityFunction
*
* @param <O> the type of objects handled by this Algorithm
*/
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.SimpleKernelDensityLOF")
public class SimpleKernelDensityLOF<O extends NumberVector> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimplifiedLOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimplifiedLOF.java
index 17ebdabf..5705e7aa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimplifiedLOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/SimplifiedLOF.java
@@ -68,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has KNNQuery
*
@@ -77,7 +78,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
title = "Local Outlier Detection Reconsidered: a Generalized View on Locality with Applications to Spatial, Video, and Network Outlier Detection", //
booktitle = "Data Mining and Knowledge Discovery, 28(1): 190–237, 2014.", //
url = "http://dx.doi.org/10.1007/s10618-012-0300-z")
-@Alias({ "SimplifiedLOF", "outlier.SimplifiedLOF", "de.lmu.ifi.dbs.elki.algorithm.outlier.SimplifiedLOF" })
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.SimpleLOF")
public class SimplifiedLOF<O> extends AbstractDistanceBasedAlgorithm<O, OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
@@ -172,7 +173,7 @@ public class SimplifiedLOF<O> extends AbstractDistanceBasedAlgorithm<O, OutlierR
* @param lofminmax Minimum and maximum scores
*/
private void computeSimplifiedLOFs(DBIDs ids, KNNQuery<O> knnq, WritableDoubleDataStore slrds, WritableDoubleDataStore lofs, DoubleMinMax lofminmax) {
- FiniteProgress progressLOFs = LOG.isVerbose() ? new FiniteProgress("Simplified LOF scores.", ids.size(), LOG) : null;
+ FiniteProgress progressLOFs = LOG.isVerbose() ? new FiniteProgress("Simplified LOF scores", ids.size(), LOG) : null;
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
final double lof;
final double lrdp = slrds.doubleValue(iter);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/VarianceOfVolume.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/VarianceOfVolume.java
index 3dffe213..93f62bea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/VarianceOfVolume.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/VarianceOfVolume.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has KNNQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LOFProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LOFProcessor.java
index 095a1b5b..c6c7b315 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LOFProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LOFProcessor.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedDouble;
* Processor for computing the LOF.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LRDProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LRDProcessor.java
index e9c48cbf..c21a45af 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LRDProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/LRDProcessor.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedDouble;
* Processor for the "local reachability density" of LOF.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelLOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelLOF.java
index 59b69931..04b7f1da 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelLOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelLOF.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has LRDProcessor
* @apiviz.has LOFProcessor
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelSimplifiedLOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelSimplifiedLOF.java
index 9be38c34..d57972e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelSimplifiedLOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/ParallelSimplifiedLOF.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SimplifiedLRDProcessor
* @apiviz.has LOFProcessor
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/SimplifiedLRDProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/SimplifiedLRDProcessor.java
index 0ee9a862..c075c674 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/SimplifiedLRDProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/parallel/SimplifiedLRDProcessor.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedDouble;
* Note: we compute 1/lrd, the local reachability distance.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/ExternalDoubleOutlierScore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/ExternalDoubleOutlierScore.java
index 2791b800..63226bc9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/ExternalDoubleOutlierScore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/ExternalDoubleOutlierScore.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
* score specified with an algorithm-specific prefix.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has ScalingFunction
* @apiviz.has File
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/FeatureBagging.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/FeatureBagging.java
index 6a7a41f3..1354b5c0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/FeatureBagging.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/FeatureBagging.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
*
* @author Erich Schubert
* @author Remigius Wojdanowski
+ * @since 0.4.0
*/
@Title("Feature Bagging for Outlier Detection")
@Reference(title = "Feature Bagging for Outlier Detection", authors = "A. Lazarevic, V. Kumar", booktitle = "Proc. of the 11th ACM SIGKDD international conference on Knowledge discovery in data mining", url = "http://dx.doi.org/10.1145/1081870.1081891")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/HiCS.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/HiCS.java
index 4dcf83ec..e38dd7aa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/HiCS.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/HiCS.java
@@ -94,6 +94,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Jan Brusis
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf GoodnessOfFitTest
* @apiviz.composedOf OutlierAlgorithm
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/RescaleMetaOutlierAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/RescaleMetaOutlierAlgorithm.java
index f6f3fabc..fa940477 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/RescaleMetaOutlierAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/RescaleMetaOutlierAlgorithm.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* Scale another outlier score using the given scaling function.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf OutlierAlgorithm
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/SimpleOutlierEnsemble.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/SimpleOutlierEnsemble.java
index 591ab776..16d07d05 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/SimpleOutlierEnsemble.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/meta/SimpleOutlierEnsemble.java
@@ -64,6 +64,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* Simple outlier ensemble method.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.composedOf EnsembleVoting
* @apiviz.uses OutlierResult oneway - - reads
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractDistanceBasedSpatialOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractDistanceBasedSpatialOutlier.java
index 829c9010..3ee1d13e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractDistanceBasedSpatialOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractDistanceBasedSpatialOutlier.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for distance-based spatial outlier detection methods.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Object type for neighborhood
* @param <O> Non-spatial object type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractNeighborhoodOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractNeighborhoodOutlier.java
index 2be79793..0fed345b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractNeighborhoodOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/AbstractNeighborhoodOutlier.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* neighborhood.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuGLSBackwardSearchAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuGLSBackwardSearchAlgorithm.java
index 70f0eddb..13499720 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuGLSBackwardSearchAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuGLSBackwardSearchAlgorithm.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* that make the optimization problem convex.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <V> Vector type to use for distances
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMeanMultipleAttributes.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMeanMultipleAttributes.java
index f0783700..2322205f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMeanMultipleAttributes.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMeanMultipleAttributes.java
@@ -69,6 +69,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Spatial Vector
* @param <O> Attribute Vector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianAlgorithm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianAlgorithm.java
index a5cb7423..cae611b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianAlgorithm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianAlgorithm.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Outliers.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Neighborhood type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianMultipleAttributes.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianMultipleAttributes.java
index 1093b449..9af83939 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianMultipleAttributes.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMedianMultipleAttributes.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Spatial Vector
* @param <O> Non Spatial Vector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMoranScatterplotOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMoranScatterplotOutlier.java
index 5e8a7086..78e7fbd4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMoranScatterplotOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuMoranScatterplotOutlier.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* upper left or lower right are Spatial Outliers.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Neighborhood type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuRandomWalkEC.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuRandomWalkEC.java
index 6892200c..793b6977 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuRandomWalkEC.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuRandomWalkEC.java
@@ -75,6 +75,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <P> Spatial Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuScatterplotOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuScatterplotOutlier.java
index 16cd6625..b0a31a2c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuScatterplotOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuScatterplotOutlier.java
@@ -69,6 +69,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Neighborhood object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuZTestOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuZTestOutlier.java
index ba93c79c..13f7488d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuZTestOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/CTLuZTestOutlier.java
@@ -69,6 +69,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Neighborhood type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SLOM.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SLOM.java
index c18c69e0..ff2a671d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SLOM.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SLOM.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* still not be too useful then), which will result in divisions by zero.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> the type the spatial neighborhood is defined over
* @param <O> the type of objects handled by the algorithm
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SOF.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SOF.java
index 31083439..32747bf3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SOF.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/SOF.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* A LOF variation simplified with reachDist(o,p) == dist(o,p).
*
* @author Ahmed Hettab
+ * @since 0.4.0
*
* @param <N> Neighborhood object type
* @param <O> Attribute object type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/TrimmedMeanApproach.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/TrimmedMeanApproach.java
index 6581bb82..2e5b305b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/TrimmedMeanApproach.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/TrimmedMeanApproach.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Ahmed Hettab
+ * @since 0.4.0
* @param <N> Neighborhood object type
*/
@Title("A Trimmed Mean Approach to Finding Spatial Outliers")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/AbstractPrecomputedNeighborhood.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/AbstractPrecomputedNeighborhood.java
index abf42e98..da5c3d5c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/AbstractPrecomputedNeighborhood.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/AbstractPrecomputedNeighborhood.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Abstract base class for precomputed neighborhoods.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractPrecomputedNeighborhood implements NeighborSetPredicate {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExtendedNeighborhood.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExtendedNeighborhood.java
index ba37400b..8284ace8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExtendedNeighborhood.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExtendedNeighborhood.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* neighborhood.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ExtendedNeighborhood extends AbstractPrecomputedNeighborhood {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExternalNeighborhood.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExternalNeighborhood.java
index 7881633c..4d0dd24a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExternalNeighborhood.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/ExternalNeighborhood.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* A precomputed neighborhood, loaded from an external file.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ExternalNeighborhood extends AbstractPrecomputedNeighborhood {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/NeighborSetPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/NeighborSetPredicate.java
index d953ece1..9ae428e6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/NeighborSetPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/NeighborSetPredicate.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
* Predicate to obtain the neighbors of a reference object as set.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface NeighborSetPredicate extends Result {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/PrecomputedKNearestNeighborNeighborhood.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/PrecomputedKNearestNeighborNeighborhood.java
index 923cd39d..0a70ae85 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/PrecomputedKNearestNeighborNeighborhood.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/PrecomputedKNearestNeighborNeighborhood.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Neighborhoods based on k nearest neighbors.
*
* @author Ahmed Hettab
+ * @since 0.4.0
*/
public class PrecomputedKNearestNeighborNeighborhood extends AbstractPrecomputedNeighborhood {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/LinearWeightedExtendedNeighborhood.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/LinearWeightedExtendedNeighborhood.java
index b45fd3cc..54753e17 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/LinearWeightedExtendedNeighborhood.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/LinearWeightedExtendedNeighborhood.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* TODO: make actual weighting parameterizable?
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class LinearWeightedExtendedNeighborhood implements WeightedNeighborSetPredicate {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/UnweightedNeighborhoodAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/UnweightedNeighborhoodAdapter.java
index 5476791d..def719cf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/UnweightedNeighborhoodAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/UnweightedNeighborhoodAdapter.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* weighted neighborhoods.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class UnweightedNeighborhoodAdapter implements WeightedNeighborSetPredicate {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/WeightedNeighborSetPredicate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/WeightedNeighborSetPredicate.java
index aeb91741..3e9a301c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/WeightedNeighborSetPredicate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/spatial/neighborhood/weighted/WeightedNeighborSetPredicate.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Neighbor predicate with weight support.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface WeightedNeighborSetPredicate {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AbstractAggarwalYuOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AbstractAggarwalYuOutlier.java
index 54fc9853..63e58864 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AbstractAggarwalYuOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AbstractAggarwalYuOutlier.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.IntIntPair;
*
* @author Ahmed Hettab
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuEvolutionary.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuEvolutionary.java
index 829347dc..e856ce62 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuEvolutionary.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuEvolutionary.java
@@ -23,8 +23,6 @@ package de.lmu.ifi.dbs.elki.algorithm.outlier.subspace;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import gnu.trove.iterator.TIntIterator;
-import gnu.trove.list.array.TIntArrayList;
import java.util.ArrayList;
import java.util.Arrays;
@@ -50,6 +48,7 @@ import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
import de.lmu.ifi.dbs.elki.result.outlier.InvertedOutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.Heap;
import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.TopBoundedHeap;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
@@ -61,6 +60,8 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
+import gnu.trove.iterator.TIntIterator;
+import gnu.trove.list.array.TIntArrayList;
/**
* Evolutionary variant (EAFOD) of the high-dimensional outlier detection
@@ -75,6 +76,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
*
* @author Ahmed Hettab
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has EvolutionarySearch oneway - - runs
* @apiviz.has Individuum oneway - - obtains
@@ -85,6 +87,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
@Title("EAFOD: the evolutionary outlier detection algorithm")
@Description("Outlier detection for high dimensional data")
@Reference(authors = "C.C. Aggarwal, P. S. Yu", title = "Outlier detection for high dimensional data", booktitle = "Proc. ACM SIGMOD Int. Conf. on Management of Data (SIGMOD 2001), Santa Barbara, CA, 2001", url = "http://dx.doi.org/10.1145/375663.375668")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.AggarwalYuEvolutionary")
public class AggarwalYuEvolutionary<V extends NumberVector> extends AbstractAggarwalYuOutlier<V> {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuNaive.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuNaive.java
index e141ad48..3c601dda 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuNaive.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/AggarwalYuNaive.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
import de.lmu.ifi.dbs.elki.result.outlier.InvertedOutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -64,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.IntIntPair;
*
* @author Ahmed Hettab
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type
*/
@@ -71,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.IntIntPair;
@Title("BruteForce: Outlier detection for high dimensional data")
@Description("Examines all possible sets of k dimensional projections")
@Reference(authors = "C.C. Aggarwal, P. S. Yu", title = "Outlier detection for high dimensional data", booktitle = "Proc. ACM SIGMOD Int. Conf. on Management of Data (SIGMOD 2001), Santa Barbara, CA, 2001", url = "http://dx.doi.org/10.1145/375663.375668")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.AggarwalYuNaive")
public class AggarwalYuNaive<V extends NumberVector> extends AbstractAggarwalYuOutlier<V> {
/**
* The logger for this class.
@@ -188,4 +191,4 @@ public class AggarwalYuNaive<V extends NumberVector> extends AbstractAggarwalYuO
return new AggarwalYuNaive<>(k, phi);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OUTRES.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OUTRES.java
index 6f7ee1f4..66d8ef5f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OUTRES.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OUTRES.java
@@ -83,6 +83,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
*
* @author Viktoria Pleintinger
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf KernelDensityEstimator
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OutRankS1.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OutRankS1.java
index 54047472..4ba34c10 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OutRankS1.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/OutRankS1.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Title("OutRank: ranking outliers in high dimensional data")
@Description("Ranking outliers in high dimensional data - score 1")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/SOD.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/SOD.java
index db1a969c..8b0ac7c7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/SOD.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/subspace/SOD.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
import de.lmu.ifi.dbs.elki.result.textwriter.TextWriteable;
import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.Heap;
import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.TiedTopBoundedHeap;
@@ -85,6 +86,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has SODModel oneway - - computes
* @apiviz.has SharedNearestNeighborSimilarityFunction
@@ -94,6 +96,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
@Title("SOD: Subspace outlier degree")
@Description("Outlier Detection in Axis-Parallel Subspaces of High Dimensional Data")
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", title = "Outlier Detection in Axis-Parallel Subspaces of High Dimensional Data", booktitle = "Proceedings of the 13th Pacific-Asia Conference on Knowledge Discovery and Data Mining (PAKDD), Bangkok, Thailand, 2009", url = "http://dx.doi.org/10.1007/978-3-642-01307-2")
+@Alias("de.lmu.ifi.dbs.elki.algorithm.outlier.SOD")
public class SOD<V extends NumberVector> extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/ByLabelOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/ByLabelOutlier.java
index dfd35c78..6c2fc6c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/ByLabelOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/ByLabelOutlier.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* reference algorithm in comparisons.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ByLabelOutlier extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAllOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAllOutlier.java
index 5ef77e12..3a8d1528 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAllOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAllOutlier.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.ProbabilisticOutlierScore;
* reference algorithm in comparisons.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class TrivialAllOutlier extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAverageCoordinateOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAverageCoordinateOutlier.java
index 4fe722a2..06da97e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAverageCoordinateOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialAverageCoordinateOutlier.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierScoreMeta;
* convert a 1d data set into a score, e.g. in geodata.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class TrivialAverageCoordinateOutlier extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialGeneratedOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialGeneratedOutlier.java
index c837e246..82155c2b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialGeneratedOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialGeneratedOutlier.java
@@ -64,6 +64,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* generator model information is still available.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class TrivialGeneratedOutlier extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialNoOutlier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialNoOutlier.java
index e25c35f5..d5df4573 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialNoOutlier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/outlier/trivial/TrivialNoOutlier.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.ProbabilisticOutlierScore;
* algorithm in comparisons.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class TrivialNoOutlier extends AbstractAlgorithm<OutlierResult> implements OutlierAlgorithm {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AddSingleScale.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AddSingleScale.java
index 6f243996..9e15127e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AddSingleScale.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AddSingleScale.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* FIXME: this should become part of relation metadata.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Description("Setup a scaling so that all dimensions are scaled equally in visualization.")
public class AddSingleScale implements Algorithm {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AveragePrecisionAtK.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AveragePrecisionAtK.java
index a5a9291e..8a31f956 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AveragePrecisionAtK.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/AveragePrecisionAtK.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* at k, when ranking the objects by distance.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceQuantileSampler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceQuantileSampler.java
index 5f0ae42a..fe7b98f0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceQuantileSampler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceQuantileSampler.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* algorithms.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
*/
@@ -164,6 +165,8 @@ public class DistanceQuantileSampler<O> extends AbstractDistanceBasedAlgorithm<O
* @author Erich Schubert
*
* @param <O> Object type
+ *
+ * @apiviz.exclude
*/
public static class Parameterizer<O> extends AbstractDistanceBasedAlgorithm.Parameterizer<O> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceStatisticsWithClasses.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceStatisticsWithClasses.java
index 4cc4a35c..bb3808b8 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceStatisticsWithClasses.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/DistanceStatisticsWithClasses.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* set.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EstimateIntrinsicDimensionality.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EstimateIntrinsicDimensionality.java
index 8bc0cfe8..f78ff82c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EstimateIntrinsicDimensionality.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EstimateIntrinsicDimensionality.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Note: this algorithm does not produce a result, but only logs statistics.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
index 27c9d1ed..8c1ff8e3 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRankingQuality.java
@@ -82,6 +82,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* TODO: Add sampling
*
* @author Erich Schubert
+ * @since 0.2
* @param <V> Vector type
*/
@Title("Evaluate Ranking Quality")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRetrievalPerformance.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRetrievalPerformance.java
index 6ca75b0c..ec70970a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRetrievalPerformance.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/EvaluateRetrievalPerformance.java
@@ -64,6 +64,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* distance.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has RetrievalPerformanceResult
* @apiviz.composedOf KNNEvaluator
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/HopkinsStatisticClusteringTendency.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/HopkinsStatisticClusteringTendency.java
index 7ce4e428..e41b77df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/HopkinsStatisticClusteringTendency.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/HopkinsStatisticClusteringTendency.java
@@ -78,6 +78,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Lisa Reichert
* @author Erich Schubert
+ * @since 0.7.0
*/
// TODO: allow using more than one k
@Reference(authors = "B. Hopkins and J. G. Skellam", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RangeQuerySelectivity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RangeQuerySelectivity.java
index 5fb7d785..cf6294d0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RangeQuerySelectivity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RangeQuerySelectivity.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* TODO: Add sampling
*
* @author Erich Schubert
+ * @since 0.7.0
* @param <V> Vector type
*/
public class RangeQuerySelectivity<V extends NumberVector> extends AbstractDistanceBasedAlgorithm<V, Result> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RankingQualityHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RankingQualityHistogram.java
index bfdf190a..d009628f 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RankingQualityHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/algorithm/statistics/RankingQualityHistogram.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* TODO: Add sampling
*
* @author Erich Schubert
+ * @since 0.2
* @param <O> Object type
*/
@Title("Ranking Quality Histogram")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/AbstractApplication.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/AbstractApplication.java
index 167b2991..f0ba3652 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/AbstractApplication.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/AbstractApplication.java
@@ -30,7 +30,6 @@ import java.util.Properties;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.Logging.Level;
import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
-import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
@@ -41,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.UnspecifiedParameterException;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.SerializedParameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.TrackParameters;
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses LoggingConfiguration oneway
* @apiviz.excludeSubtypes
@@ -152,7 +153,7 @@ public abstract class AbstractApplication {
return;
}
if(debugP.isDefined()) {
- LoggingUtil.parseDebugParameter(debugP);
+ Parameterizer.parseDebugParameter(debugP);
}
}
catch(Exception e) {
@@ -375,6 +376,40 @@ public abstract class AbstractApplication {
}
return null;
}
+
+ /**
+ * Parse the option string to configure logging.
+ *
+ * @param param Parameter to process.
+ *
+ * @throws WrongParameterValueException On parsing errors
+ */
+ public static final void parseDebugParameter(StringParameter param) throws WrongParameterValueException {
+ String[] opts = param.getValue().split(",");
+ for(String opt : opts) {
+ try {
+ String[] chunks = opt.split("=");
+ if(chunks.length == 1) {
+ try {
+ java.util.logging.Level level = Level.parse(chunks[0]);
+ LoggingConfiguration.setDefaultLevel(level);
+ }
+ catch(IllegalArgumentException e) {
+ LoggingConfiguration.setLevelFor(chunks[0], Level.FINEST.getName());
+ }
+ }
+ else if(chunks.length == 2) {
+ LoggingConfiguration.setLevelFor(chunks[0], chunks[1]);
+ }
+ else {
+ throw new WrongParameterValueException(param, param.getValue(), "More than one '=' in debug parameter.");
+ }
+ }
+ catch(IllegalArgumentException e) {
+ throw (new WrongParameterValueException(param, param.getValue(), "Could not process value.", e));
+ }
+ }
+ }
@Override
protected abstract AbstractApplication makeInstance();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ClassifierHoldoutEvaluationTask.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ClassifierHoldoutEvaluationTask.java
index c49c42c5..91570cee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ClassifierHoldoutEvaluationTask.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ClassifierHoldoutEvaluationTask.java
@@ -83,6 +83,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* TODO: add support for predefined test and training pairs!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ConvertToBundleApplication.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ConvertToBundleApplication.java
index ad7d17dc..55057b05 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ConvertToBundleApplication.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ConvertToBundleApplication.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Convert an input file to the more efficient ELKI bundle format.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class ConvertToBundleApplication extends AbstractApplication {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ELKILauncher.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ELKILauncher.java
index 6d23d902..5830a601 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ELKILauncher.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/ELKILauncher.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.ELKIServiceRegistry;
* Class to launch ELKI.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses AbstractApplication
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/GeneratorXMLSpec.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/GeneratorXMLSpec.java
index 45e97e9f..e6a1b18a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/GeneratorXMLSpec.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/GeneratorXMLSpec.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Generate a data set based on a specified model (using an XML specification)
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf GeneratorXMLDatabaseConnection
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/KDDCLIApplication.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/KDDCLIApplication.java
index 7138d7f4..bd5740b5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/KDDCLIApplication.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/KDDCLIApplication.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* {@link de.lmu.ifi.dbs.elki.datasource.DatabaseConnection DatabaseConnection}.
*
* @author Arthur Zimek
+ * @since 0.3
*
* @apiviz.composedOf KDDTask
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceInOnDiskMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceInOnDiskMatrix.java
index 56b1f377..6994cac9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceInOnDiskMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceInOnDiskMatrix.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* Precompute an on-disk distance matrix, using double precision.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has OnDiskUpperTriangleMatrix
* @apiviz.has DistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceKNNLists.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceKNNLists.java
index dc1df9e5..d6cfc429 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceKNNLists.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceKNNLists.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* Precompute the k nearest neighbors in a disk cache.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has DistanceFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceRangeQueries.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceRangeQueries.java
index 4ccba594..6b42b27c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceRangeQueries.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheDoubleDistanceRangeQueries.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* Precompute the k nearest neighbors in a disk cache.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has DistanceFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheFloatDistanceInOnDiskMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheFloatDistanceInOnDiskMatrix.java
index f9d7a2c2..a12b13cb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheFloatDistanceInOnDiskMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/cache/CacheFloatDistanceInOnDiskMatrix.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* Precompute an on-disk distance matrix, using float precision.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has OnDiskUpperTriangleMatrix
* @apiviz.has DistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/experiments/EvaluateIntrinsicDimensionalityEstimators.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/experiments/EvaluateIntrinsicDimensionalityEstimators.java
index 27784179..3dea86bc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/experiments/EvaluateIntrinsicDimensionalityEstimators.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/experiments/EvaluateIntrinsicDimensionalityEstimators.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* estimators.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class EvaluateIntrinsicDimensionalityEstimators extends AbstractApplication {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/geo/VisualizeGeodesicDistances.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/geo/VisualizeGeodesicDistances.java
index 4ecbe8c3..76776eb0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/geo/VisualizeGeodesicDistances.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/geo/VisualizeGeodesicDistances.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Niels Dörre
* @author Erich Schubert
+ * @since 0.5.5
*/
public class VisualizeGeodesicDistances extends AbstractApplication {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/ComputeKNNOutlierScores.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/ComputeKNNOutlierScores.java
index 934255b4..d89d535f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/ComputeKNNOutlierScores.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/ComputeKNNOutlierScores.java
@@ -105,6 +105,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <O> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/EvaluatePrecomputedOutlierScores.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/EvaluatePrecomputedOutlierScores.java
index 94abafa1..0107dc64 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/EvaluatePrecomputedOutlierScores.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/EvaluatePrecomputedOutlierScores.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
*
* @author Erich Schubert
* @author Guilherme Oliveira Campos
+ * @since 0.7.0
*/
public class EvaluatePrecomputedOutlierScores extends AbstractApplication {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/GreedyEnsembleExperiment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/GreedyEnsembleExperiment.java
index d36da97b..6a614f99 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/GreedyEnsembleExperiment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/greedyensemble/GreedyEnsembleExperiment.java
@@ -97,6 +97,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "E. Schubert, R. Wojdanowski, A. Zimek, H.-P. Kriegel", //
title = "On Evaluation of Outlier Rankings and Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java
index e18bd633..b0e17e6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckELKIServices.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* implementations.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses ELKIServiceLoader
*/
@@ -243,6 +244,7 @@ public class CheckELKIServices {
if(parts.length > 1) {
StringBuilder buf = new StringBuilder();
buf.append("Class ").append(classname);
+ buf.append(" in ").append(parent.getCanonicalName());
buf.append(" has the following extraneous aliases:");
for(int i = 1; i < parts.length; i++) {
buf.append(' ').append(parts[i]);
@@ -261,6 +263,7 @@ public class CheckELKIServices {
if(buf == null) {
buf = new StringBuilder();
buf.append("Class ").append(classname);
+ buf.append(" in ").append(parent.getCanonicalName());
buf.append(" is missing the following aliases:");
}
buf.append(' ').append(a);
@@ -274,6 +277,7 @@ public class CheckELKIServices {
buf.append('\n');
}
buf.append("Class ").append(classname);
+ buf.append(" in ").append(parent.getCanonicalName());
buf.append(" has the following extraneous aliases:");
for(String a : aliases) {
buf.append(' ').append(a);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java
index a278f287..4c106f83 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/CheckParameterizables.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* interface.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
* @apiviz.uses AbstractParameterizer
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
index eea3dad6..8325872b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentParameters.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.application.AbstractApplication;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.Logging.Level;
import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
+import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
import de.lmu.ifi.dbs.elki.utilities.ELKIServiceRegistry;
import de.lmu.ifi.dbs.elki.utilities.ELKIServiceScanner;
@@ -70,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.UnParameter
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ClassListParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ClassParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
import de.lmu.ifi.dbs.elki.utilities.xml.HTMLUtil;
@@ -78,6 +80,7 @@ import de.lmu.ifi.dbs.elki.utilities.xml.HTMLUtil;
* {@link Parameter}s. Used in documentation generation only.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Parameter
*/
@@ -182,7 +185,7 @@ public class DocumentParameters {
throw new RuntimeException(e);
}
try {
- PrintStream byclassstream = new PrintStream(new BufferedOutputStream(byclassfo));
+ PrintStream byclassstream = new PrintStream(new BufferedOutputStream(byclassfo), false, "UTF-8");
makeByClassOverviewWiki(byclass, new WikiStream(byclassstream));
byclassstream.flush();
byclassstream.close();
@@ -245,7 +248,9 @@ public class DocumentParameters {
private static void buildParameterIndex(Map<Class<?>, List<Parameter<?>>> byclass, Map<OptionID, List<Pair<Parameter<?>, Class<?>>>> byopt) {
final ArrayList<TrackedParameter> options = new ArrayList<>();
ExecutorService es = Executors.newSingleThreadExecutor();
- for(final Class<?> cls : ELKIServiceRegistry.findAllImplementations(Object.class, false, true)) {
+ List<Class<?>> objs = ELKIServiceRegistry.findAllImplementations(Object.class, false, true);
+ Collections.sort(objs, new ELKIServiceScanner.ClassSorter());
+ for(final Class<?> cls : objs) {
// Doesn't have a proper name?
if(cls.getCanonicalName() == null) {
continue;
@@ -720,9 +725,18 @@ public class DocumentParameters {
Element maindl = htmldoc.createElement(HTMLUtil.HTML_DL_TAG);
body.appendChild(maindl);
- List<OptionID> opts = new ArrayList<>(byopt.keySet());
- Collections.sort(opts, new SortByOption());
+ final Comparator<OptionID> osort = new SortByOption();
+ final Comparator<Class<?>> csort = new ELKIServiceScanner.ClassSorter();
+ Comparator<Pair<Parameter<?>, Class<?>>> psort = new Comparator<Pair<Parameter<?>, Class<?>>>() {
+ @Override
+ public int compare(Pair<Parameter<?>, Class<?>> o1, Pair<Parameter<?>, Class<?>> o2) {
+ int c = osort.compare(o1.first.getOptionID(), o2.first.getOptionID());
+ return (c != 0) ? c : csort.compare(o1.second, o2.second);
+ }
+ };
+ List<OptionID> opts = new ArrayList<>(byopt.keySet());
+ Collections.sort(opts, osort);
for(OptionID oid : opts) {
final Parameter<?> firstopt = byopt.get(oid).get(0).getFirst();
// DT = definition term
@@ -787,7 +801,9 @@ public class DocumentParameters {
optdd.appendChild(p);
}
optdd.appendChild(classesul);
- for(Pair<Parameter<?>, Class<?>> clinst : byopt.get(oid)) {
+ List<Pair<Parameter<?>, Class<?>>> plist = byopt.get(oid);
+ Collections.sort(plist, psort);
+ for(Pair<Parameter<?>, Class<?>> clinst : plist) {
// DT definition term: option name, in TT for typewriter optics
Element classli = htmldoc.createElement(HTMLUtil.HTML_LI_TAG);
@@ -1020,9 +1036,11 @@ public class DocumentParameters {
if(par instanceof ClassParameter<?>) {
appendDefaultClassLink(htmldoc, par, p);
}
+ else if(par instanceof RandomParameter && par.getDefaultValue() == RandomFactory.DEFAULT) {
+ p.appendChild(htmldoc.createTextNode("use global random seed"));
+ }
else {
- Object def = par.getDefaultValue();
- p.appendChild(htmldoc.createTextNode(def.toString()));
+ p.appendChild(htmldoc.createTextNode(par.getDefaultValueAsString()));
}
optdd.appendChild(p);
}
@@ -1047,9 +1065,11 @@ public class DocumentParameters {
final Class<?> name = ((ClassParameter<?>) par).getDefaultValue();
out.javadocLink(name, null);
}
+ else if(par instanceof RandomParameter && par.getDefaultValue() == RandomFactory.DEFAULT) {
+ out.print("use global random seed");
+ }
else {
- Object def = par.getDefaultValue();
- out.print(def.toString());
+ out.print(par.getDefaultValueAsString());
}
out.println();
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
index 7d448fca..66f2bda8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.xml.HTMLUtil;
* Build a reference documentation for all available parameters.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses Reference
*/
@@ -105,7 +106,7 @@ public class DocumentReferences {
try {
File refwiki = new File(args[1]);
FileOutputStream reffow = new FileOutputStream(refwiki);
- PrintStream refstreamW = new PrintStream(reffow);
+ PrintStream refstreamW = new PrintStream(reffow, false, "UTF-8");
documentReferencesWiki(refs, refstreamW);
refstreamW.flush();
refstreamW.close();
@@ -330,7 +331,28 @@ public class DocumentReferences {
@Override
public int compare(Pair<Reference, TreeSet<Object>> p1, Pair<Reference, TreeSet<Object>> p2) {
final Object o1 = p1.second.first(), o2 = p2.second.first();
- return COMPARATOR.compare(o1, o2);
+ int c = COMPARATOR.compare(o1, o2);
+ if(c == 0) {
+ Reference r1 = p1.first, r2 = p2.first;
+ c = compareNull(r1.title(), r2.title());
+ c = (c != 0) ? c : compareNull(r1.authors(), r2.authors());
+ c = (c != 0) ? c : compareNull(r1.booktitle(), r2.booktitle());
+ }
+ return c;
+ }
+
+ /**
+ * Null-tolerant String comparison.
+ *
+ * @param s1 First string
+ * @param s2 Second string
+ * @return Order
+ */
+ private int compareNull(String s1, String s2) {
+ return (s1 == s2) ? 0 //
+ : (s1 == null) ? -1 //
+ : (s2 == null) ? +1 //
+ : s1.compareTo(s2);
}
});
return refs;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONBuffer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONBuffer.java
index 740f3856..418771c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONBuffer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONBuffer.java
@@ -29,6 +29,7 @@ import java.util.Stack;
* Helper class to produce JSON output. Try hard to ensure validity of the output.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf StringBuilder
* @apiviz.has JSONBuffer.JSONException
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONResultHandler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONResultHandler.java
index 316c7950..14c0b77f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONResultHandler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONResultHandler.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Handle results by serving them via a web server to mapping applications.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf JSONWebServer
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONWebServer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONWebServer.java
index e133e3ab..6e216e81 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONWebServer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/application/jsmap/JSONWebServer.java
@@ -61,6 +61,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* A simple web server to serve data base contents to a JavaScript client.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* TODO: use Jetty or something similar on the long run.
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/AbstractNumberVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/AbstractNumberVector.java
index cffa3de9..4a228c0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/AbstractNumberVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/AbstractNumberVector.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayLikeUtil;
* AbstractNumberVector is an abstract implementation of FeatureVector.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public abstract class AbstractNumberVector implements NumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Bit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Bit.java
index 46e85cac..13a39e37 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Bit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Bit.java
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
* A boolean number type.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class Bit extends Number {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/BitVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/BitVector.java
index 914bd5cc..ef6deeac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/BitVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/BitVector.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Vector using a dense bit set encoding, based on {@code long[]} storage.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.composedOf Bit
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ByteVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ByteVector.java
index c5e296c6..a77733b1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ByteVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ByteVector.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Vector using {@code byte[]} storage.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class ByteVector extends AbstractNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ClassLabel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ClassLabel.java
index 03d4743c..7bc2f257 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ClassLabel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ClassLabel.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* other classes by a classifier.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public abstract class ClassLabel implements Comparable<ClassLabel> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Cluster.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Cluster.java
index fd2d1f68..6cd1a286 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Cluster.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Cluster.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* @param <M> Model object type
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Clustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Clustering.java
index 928ca7e3..f61bf17b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Clustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Clustering.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.ModifiableHierarch
* or getAllClusters().
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf Cluster oneway - n
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/DoubleVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/DoubleVector.java
index 7c8a7dbc..3824dfbb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/DoubleVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/DoubleVector.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Vector type using {@code double[]} storage for real numbers.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ExternalID.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ExternalID.java
index 9b5fbd94..e8912070 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ExternalID.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ExternalID.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.data;
* External ID objects.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf String
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FeatureVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FeatureVector.java
index e3a74300..e4dc4808 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FeatureVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FeatureVector.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* actually store numerical features.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface FeatureVector<D> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FloatVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FloatVector.java
index 657102c7..4cc3ca21 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FloatVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/FloatVector.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* much memory as {@link DoubleVector}.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class FloatVector extends AbstractNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HierarchicalClassLabel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HierarchicalClassLabel.java
index 8c911a0f..79640642 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HierarchicalClassLabel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HierarchicalClassLabel.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* of classes.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.composedOf Comparable
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HyperBoundingBox.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HyperBoundingBox.java
index 903249ca..33de8fd1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HyperBoundingBox.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/HyperBoundingBox.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* HyperBoundingBox represents a hyperrectangle in the multidimensional space.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class HyperBoundingBox implements SpatialComparable, Externalizable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/IntegerVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/IntegerVector.java
index 5d724171..e91b0bd1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/IntegerVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/IntegerVector.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Vector type using {@code int[]} storage.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class IntegerVector extends AbstractNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/LabelList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/LabelList.java
index 6b5850da..72ec61fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/LabelList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/LabelList.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* A list of string labels.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf String
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ModifiableHyperBoundingBox.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ModifiableHyperBoundingBox.java
index d9a2d1c9..a117c6f4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ModifiableHyperBoundingBox.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ModifiableHyperBoundingBox.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
* MBR class allowing modifications (as opposed to {@link HyperBoundingBox}).
*
* @author Marisa Thoma
+ * @since 0.3
*/
public class ModifiableHyperBoundingBox extends HyperBoundingBox {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/NumberVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/NumberVector.java
index 60a0036e..a946285b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/NumberVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/NumberVector.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Object that is element of a real vector space of type N.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has Vector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/OneDimensionalDoubleVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/OneDimensionalDoubleVector.java
index d50bcc85..5c044a0f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/OneDimensionalDoubleVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/OneDimensionalDoubleVector.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* as we want to implement the interface.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class OneDimensionalDoubleVector extends AbstractNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ShortVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ShortVector.java
index 02711118..9d275842 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ShortVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/ShortVector.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Vector type using {@code short[]} storage.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class ShortVector extends AbstractNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SimpleClassLabel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SimpleClassLabel.java
index 13ccc4a7..56df7df6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SimpleClassLabel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SimpleClassLabel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* A simple class label casting a String as it is as label.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.composedOf String
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseByteVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseByteVector.java
index 53ebc1e2..dc97e6c6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseByteVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseByteVector.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* value (limited to -128..+127).
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class SparseByteVector extends AbstractNumberVector implements SparseNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseDoubleVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseDoubleVector.java
index 358763d7..44158a88 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseDoubleVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseDoubleVector.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* value.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class SparseDoubleVector extends AbstractNumberVector implements SparseNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFeatureVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFeatureVector.java
index b0eee337..ba82b56f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFeatureVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFeatureVector.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.data;
* Extended interface for sparse feature vector types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
*/
public interface SparseFeatureVector<D> extends FeatureVector<D> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFloatVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFloatVector.java
index 90613041..108210ce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFloatVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseFloatVector.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* value.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class SparseFloatVector extends AbstractNumberVector implements SparseNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseIntegerVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseIntegerVector.java
index cb2ee455..aa561714 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseIntegerVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseIntegerVector.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* integer value.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class SparseIntegerVector extends AbstractNumberVector implements SparseNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseNumberVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseNumberVector.java
index bbacaba0..f3252f24 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseNumberVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseNumberVector.java
@@ -29,6 +29,7 @@ import gnu.trove.map.TIntDoubleMap;
* Combines the SparseFeatureVector and NumberVector.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface SparseNumberVector extends NumberVector, SparseFeatureVector<Number> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseShortVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseShortVector.java
index 17624a6b..1864788e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseShortVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/SparseShortVector.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* value.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class SparseShortVector extends AbstractNumberVector implements SparseNumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Subspace.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Subspace.java
index 96d86a41..c18d9bb3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Subspace.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/Subspace.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* Represents a subspace of the original data space.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.owns de.lmu.ifi.dbs.elki.data.Subspace.DimensionComparator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/VectorUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/VectorUtil.java
index 2e42b498..5959d64c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/VectorUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/VectorUtil.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.QuickSelect;
* Note: obviously, many functions are class methods or database related.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/AbstractModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/AbstractModel.java
index 7d825480..db1c52c4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/AbstractModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/AbstractModel.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Abstract base class for Cluster Models.
*
* @author Erich Schubert
+ * @since 0.2
*/
public abstract class AbstractModel implements Model {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterModel.java
index 81b3f5bf..53b49d2e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterModel.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.data.model;
* Wrapper class to provide the basic properties of a Bicluster.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class BiclusterModel implements Model {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterWithInversionsModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterWithInversionsModel.java
index bc6ae177..721b9ffe 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterWithInversionsModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/BiclusterWithInversionsModel.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* have inverted rows.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class BiclusterWithInversionsModel extends BiclusterModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ClusterModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ClusterModel.java
index 5081c9b5..26fb91ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ClusterModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ClusterModel.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.data.model;
* static {@link #CLUSTER} object.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CoreObjectsModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CoreObjectsModel.java
index cc99f84d..7d476382 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CoreObjectsModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CoreObjectsModel.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* DBSCAN implementation when the {@code -gdbscan.core-model} flag is set.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class CoreObjectsModel extends AbstractModel implements TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationAnalysisSolution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationAnalysisSolution.java
index 7a0b4901..d2408775 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationAnalysisSolution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationAnalysisSolution.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* dependencies.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.composedOf LinearEquationSystem
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationModel.java
index 9b6dfcde..1e638497 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/CorrelationModel.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* Cluster model using a filtered PCA result and an centroid.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf PCAFilteredResult
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DendrogramModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DendrogramModel.java
index 1a339677..e129b4f3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DendrogramModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DendrogramModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Model for dendrograms, provides the distance to the child cluster.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
// TODO: comments
public class DendrogramModel extends AbstractModel {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DimensionModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DimensionModel.java
index e867fede..5b8a978f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DimensionModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/DimensionModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Cluster model just providing a cluster dimensionality.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class DimensionModel extends AbstractModel implements TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/EMModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/EMModel.java
index eabffce7..1b91e405 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/EMModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/EMModel.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Matrix.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class EMModel extends MeanModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/KMeansModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/KMeansModel.java
index eef678cc..3bcb24c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/KMeansModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/KMeansModel.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* produced by k-means (so the Voronoi cell visualization is sensible).
*
* @author Erich Schubert
+ * @since 0.2
*/
public class KMeansModel extends MeanModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/LinearEquationModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/LinearEquationModel.java
index 0c6f9871..afa56261 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/LinearEquationModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/LinearEquationModel.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Cluster model containing a linear equation system for the cluster.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf LinearEquationSystem
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MeanModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MeanModel.java
index 7a5c71b9..350a8678 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MeanModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MeanModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriteable;
* Cluster model that stores a mean for the cluster.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class MeanModel extends PrototypeModel<Vector> implements TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MedoidModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MedoidModel.java
index 1654490a..add3fe2b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MedoidModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/MedoidModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriteable;
* Cluster model that stores a mean for the cluster.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class MedoidModel extends PrototypeModel<DBID> implements TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/Model.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/Model.java
index d30eddfd..369688e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/Model.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/Model.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.data.model;
* Base interface for Model classes.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ModelUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ModelUtil.java
index 16b6ca27..891bc733 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ModelUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/ModelUtil.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayLikeUtil;
* Utility classes for dealing with cluster models.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.uses Model
* @apiviz.uses NumberVector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/OPTICSModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/OPTICSModel.java
index 96e56f2e..02b21a30 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/OPTICSModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/OPTICSModel.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.data.model;
* Model for an OPTICS cluster
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class OPTICSModel extends AbstractModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/PrototypeModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/PrototypeModel.java
index d8f836fa..8ce14e0d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/PrototypeModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/PrototypeModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Cluster model that stores a prototype for each cluster.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class PrototypeModel<V> extends AbstractModel implements TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/SubspaceModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/SubspaceModel.java
index 38064c8f..bfc30205 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/SubspaceModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/model/SubspaceModel.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
*
* @author Erich Schubert
* @author Elke Achtert
+ * @since 0.3
*
* @apiviz.composedOf Subspace
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/FeatureSelection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/FeatureSelection.java
index d3c0abfe..eab1f1ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/FeatureSelection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/FeatureSelection.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntListParameter;
* Projection class for number vectors.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses FeatureVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LatLngToECEFProjection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LatLngToECEFProjection.java
index 3b63e257..5549dd26 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LatLngToECEFProjection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LatLngToECEFProjection.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* coordinates to ECEF (earth-centered earth-fixed).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf EarthModel
* @apiviz.uses NumberVector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LngLatToECEFProjection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LngLatToECEFProjection.java
index 56316949..22448c73 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LngLatToECEFProjection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/LngLatToECEFProjection.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* coordinates to ECEF (earth-centered earth-fixed).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf EarthModel
* @apiviz.uses NumberVector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
index caeb9de9..77cf5e47 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/NumericalFeatureSelection.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntListParameter;
* Projection class for number vectors.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses NumberVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/Projection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/Projection.java
index aa057fe0..b88c4bb6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/Projection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/Projection.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
* Projection interface.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <IN> Input data type
* @param <OUT> Output data type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/RandomProjection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/RandomProjection.java
index 6318ce10..04fe210f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/RandomProjection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/projection/RandomProjection.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* suggested for locality sensitive hashing (LSH).
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses NumberVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/Polygon.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/Polygon.java
index b574645c..cd58ed8d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/Polygon.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/Polygon.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayListIter;
* polygons are simple.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf Vector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/PolygonsObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/PolygonsObject.java
index 98aae9cf..fdee5f60 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/PolygonsObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/PolygonsObject.java
@@ -31,6 +31,7 @@ import java.util.Iterator;
* Object representation consisting of (multiple) polygons.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Polygon
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialComparable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialComparable.java
index 999c24a1..4d605472 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialComparable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialComparable.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.data.spatial;
* Defines the required methods needed for comparison of spatial objects.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMaxComparator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMaxComparator.java
index c773cde6..04e6d351 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMaxComparator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMaxComparator.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* dimension.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses SpatialComparable
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMeanComparator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMeanComparator.java
index 2992d901..5b7b14ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMeanComparator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMeanComparator.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* dimension.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses SpatialComparable
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMinComparator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMinComparator.java
index 2bf1f0e5..6ae90d64 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMinComparator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialSingleMinComparator.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* dimension.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses SpatialComparable
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialUtil.java
index 59d1c282..864ef7fc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/spatial/SpatialUtil.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayAdapter;
* Utility class with spatial functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterface.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterface.java
index f7521c67..1b3175d1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterface.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterface.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException;
* Interface for cluster generators
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface GeneratorInterface {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterfaceDynamic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterfaceDynamic.java
index 4898319a..1a9ed0f0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterfaceDynamic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorInterfaceDynamic.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.data.synthetic.bymodel;
* and the generation of additional new points.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface GeneratorInterfaceDynamic extends GeneratorInterface {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorMain.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorMain.java
index 9db74eb7..ad5c6e67 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorMain.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorMain.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException;
* be as expected.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has GeneratorInterface
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorSingleCluster.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorSingleCluster.java
index 850cfbcc..b4add21d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorSingleCluster.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorSingleCluster.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException;
* according to the same model)
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf Distribution
* @apiviz.composedOf AffineTransformation
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorStatic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorStatic.java
index 9b25c7fb..8cf4b241 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorStatic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/synthetic/bymodel/GeneratorStatic.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* that will return only a given set of points.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class GeneratorStatic implements GeneratorInterface {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/AlternativeTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/AlternativeTypeInformation.java
index 7bad02cb..14083bac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/AlternativeTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/AlternativeTypeInformation.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.data.type;
* operator.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf TypeInformation
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/CombinedTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/CombinedTypeInformation.java
index 839b65d7..7af7532e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/CombinedTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/CombinedTypeInformation.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.data.type;
* Class that combines multiple type restrictions into one using an "and" operator.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf TypeInformation
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/FieldTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/FieldTypeInformation.java
index 00ce847b..b0375996 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/FieldTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/FieldTypeInformation.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.data.type;
* TODO: implement polygon and rectangle types!
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public interface FieldTypeInformation extends TypeInformation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/MultivariateSeriesTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/MultivariateSeriesTypeInformation.java
index 72c017c5..16372da1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/MultivariateSeriesTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/MultivariateSeriesTypeInformation.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* Type information for multi-variate time series.
*
* @author Sebastian Hollizeck
+ * @since 0.7.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/NoSupportedDataTypeException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/NoSupportedDataTypeException.java
index 9ab4141e..1e899f5f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/NoSupportedDataTypeException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/NoSupportedDataTypeException.java
@@ -29,6 +29,7 @@ import java.util.Collection;
* Exception thrown when no supported data type was found.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses TypeInformation oneway - -
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/SimpleTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/SimpleTypeInformation.java
index 36633198..4ff6fbae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/SimpleTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/SimpleTypeInformation.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* Class wrapping a particular data type.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf ByteBufferSerializer
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformation.java
index dfbc74e4..bb1fbd08 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformation.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.data.type;
* Class wrapping a particular data type.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface TypeInformation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformationSerializer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformationSerializer.java
index 9a8d74ae..c9661419 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformationSerializer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeInformationSerializer.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* possible.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.composedOf SimpleTypeSerializer
* @apiviz.composedOf VectorTypeSerializer
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeUtil.java
index 85c0abf7..4a6eb8d7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/TypeUtil.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* Utility package containing various common types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has TypeInformation oneway - -
* @apiviz.landmark
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorFieldTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorFieldTypeInformation.java
index e6526c61..efcb8dd7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorFieldTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorFieldTypeInformation.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* Type information to specify that a type has a fixed dimensionality.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorTypeInformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorTypeInformation.java
index c193a3fd..12276165 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorTypeInformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/type/VectorTypeInformation.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* Construct a type information for vector spaces with fixed dimensionality.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has FeatureVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/AbstractUncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/AbstractUncertainObject.java
index ed5bab03..766740f9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/AbstractUncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/AbstractUncertainObject.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractUncertainObject implements UncertainObject {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/DiscreteUncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/DiscreteUncertainObject.java
index 5d7cfc22..c29ab470 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/DiscreteUncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/DiscreteUncertainObject.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.DoubleVector;
* (possibly weighted) number of samples.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public interface DiscreteUncertainObject extends UncertainObject {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/SimpleGaussianContinuousUncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/SimpleGaussianContinuousUncertainObject.java
index d3958f36..bf60cd39 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/SimpleGaussianContinuousUncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/SimpleGaussianContinuousUncertainObject.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* TODO: currently, only a 3 sigma bounding box is supported.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SimpleGaussianContinuousUncertainObject extends AbstractUncertainObject {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UncertainObject.java
index ea1dfa3d..a96452b6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UncertainObject.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
* TODO: Eventually allow float precision, too.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has DoubleVector oneway - «contains/produces»
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UniformContinuousUncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UniformContinuousUncertainObject.java
index 7c236f70..868a745c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UniformContinuousUncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UniformContinuousUncertainObject.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*/
public class UniformContinuousUncertainObject extends AbstractUncertainObject {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UnweightedDiscreteUncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UnweightedDiscreteUncertainObject.java
index 877361fa..6b527e4e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UnweightedDiscreteUncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/UnweightedDiscreteUncertainObject.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "N. Dalvi, C. Ré, D. Suciu", //
title = "Probabilistic databases: diamonds in the dirt", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/WeightedDiscreteUncertainObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/WeightedDiscreteUncertainObject.java
index 0b08dcbc..8657720f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/WeightedDiscreteUncertainObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/WeightedDiscreteUncertainObject.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "O. Benjelloun, A. D. Sarma, A. Halevy, J. Widom", //
title = "ULDBs: Databases with uncertainty and lineage", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/AbstractDiscreteUncertainifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/AbstractDiscreteUncertainifier.java
index 4ee534cc..190ccc6a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/AbstractDiscreteUncertainifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/AbstractDiscreteUncertainifier.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Factory class for discrete uncertain objects.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <UO> Uncertain object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/SimpleGaussianUncertainifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/SimpleGaussianUncertainifier.java
index 0e7c01df..0056d687 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/SimpleGaussianUncertainifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/SimpleGaussianUncertainifier.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* Vector factory
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SimpleGaussianContinuousUncertainObject
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/Uncertainifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/Uncertainifier.java
index 02a7b537..6bd584e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/Uncertainifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/Uncertainifier.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* Class to derive uncertain object from exact vectors.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <UO> Object type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UniformUncertainifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UniformUncertainifier.java
index 96153685..3e141b05 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UniformUncertainifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UniformUncertainifier.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* Factory class.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has UniformContinuousUncertainObject
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UnweightedDiscreteUncertainifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UnweightedDiscreteUncertainifier.java
index 632c58f9..17c3d812 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UnweightedDiscreteUncertainifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/UnweightedDiscreteUncertainifier.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* {@link SimpleGaussianUncertainifier}).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has UnweightedDiscreteUncertainObject
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/WeightedDiscreteUncertainifier.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/WeightedDiscreteUncertainifier.java
index fb63a992..3b499de4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/WeightedDiscreteUncertainifier.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/data/uncertain/uncertainifier/WeightedDiscreteUncertainifier.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* {@link SimpleGaussianUncertainifier}).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has WeightedDiscreteUncertainObject
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
index 0c038369..b9424041 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/AbstractDatabase.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* <tt>-enableDebug de.lmu.ifi.dbs.elki.database=FINEST</tt>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf DatabaseEventManager
* @apiviz.has IndexFactory
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/Database.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/Database.java
index d553da17..4a008919 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/Database.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/Database.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.result.HierarchicalResult;
* parameters for dynamic instantiation.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has DistanceQuery oneway - - provides
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/DatabaseEventManager.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/DatabaseEventManager.java
index 3ddba18e..5251366c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/DatabaseEventManager.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/DatabaseEventManager.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.result.ResultListener;
* Class to manage database events such as insertions and removals.
*
* @author Elke Achtert
+ * @since 0.4.0
* @apiviz.has ResultListener
*/
public class DatabaseEventManager {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/HashmapDatabase.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/HashmapDatabase.java
index 90fd55ea..56ec0706 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/HashmapDatabase.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/HashmapDatabase.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.composedOf HashSetModifiableDBIDs
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ProxyDatabase.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ProxyDatabase.java
index eb8dd05b..5c635f96 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ProxyDatabase.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ProxyDatabase.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* A proxy database to use e.g. for projections and partitions.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ProxyDatabase extends AbstractDatabase {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/QueryUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/QueryUtil.java
index 26262575..a3bfd071 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/QueryUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/QueryUtil.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.SimilarityFunction;
* Static class with utilities related to querying a database.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
index da13c5fa..cc889e6f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/StaticArrayDatabase.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.composedOf ArrayStaticDBIDs
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/UpdatableDatabase.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/UpdatableDatabase.java
index 45f7ad78..48333aab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/UpdatableDatabase.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/UpdatableDatabase.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException;
* that cannot be done in dynamic databases.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface UpdatableDatabase extends Database {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java
index b79be1f4..8d9d08c8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DBIDDataStore.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* DBID-valued data store (avoids boxing/unboxing).
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDDataStore extends DataStore<DBID> {
/**
@@ -40,7 +41,7 @@ public interface DBIDDataStore extends DataStore<DBID> {
*/
@Override
@Deprecated
- public DBID get(DBIDRef id);
+ DBID get(DBIDRef id);
/**
* Retrieves an object from the storage.
@@ -49,5 +50,5 @@ public interface DBIDDataStore extends DataStore<DBID> {
* @param var Variable to update.
* @return {@code var}
*/
- public DBIDVar assignVar(DBIDRef id, DBIDVar var);
+ DBIDVar assignVar(DBIDRef id, DBIDVar var);
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java
index 2c306486..e78fc591 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStore.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
* Generic storage interface for objects indexed by {@link DBID}.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Data type
*/
@@ -41,5 +42,5 @@ public interface DataStore<T> extends Result {
* @param id Database ID.
* @return Object or {@code null}
*/
- public T get(DBIDRef id);
+ T get(DBIDRef id);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java
index 294a3a19..79afd440 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreEvent.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* {@link DataStoreListener} of the change.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @see DataStore
* @see DataStoreListener
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java
index 63a12693..17c3221b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreFactory.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Use {@link #FACTORY} for a static instance.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory,interface
* @apiviz.has WritableDataStore oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java
index 70e0a3f6..c9501dd6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreIDMap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Interface to map DBIDs to integer record ids for use in storage.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DataStoreIDMap {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java
index 60a1bc16..edf37bf9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreListener.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.datastore;
* {@link DataStore}.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.uses DataStoreEvent oneway - - listens
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java
index 5602e0d7..7976759b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DataStoreUtil.java
@@ -26,14 +26,16 @@ package de.lmu.ifi.dbs.elki.database.datastore;
import java.util.Comparator;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
/**
* Storage utility class. Mostly a shorthand for
* {@link DataStoreFactory#FACTORY}.
- *
+ *
* @author Erich Schubert
- *
+ * @since 0.4.0
+ *
* @apiviz.landmark
* @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreFactory
*/
@@ -41,7 +43,7 @@ public final class DataStoreUtil {
/**
* Make a new storage, to associate the given ids with an object of class
* dataclass.
- *
+ *
* @param <T> stored data type
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
@@ -55,7 +57,7 @@ public final class DataStoreUtil {
/**
* Make a new storage, to associate the given ids with an object of class
* dataclass.
- *
+ *
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
* @return new data store
@@ -67,7 +69,7 @@ public final class DataStoreUtil {
/**
* Make a new storage, to associate the given ids with an object of class
* dataclass.
- *
+ *
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
* @return new data store
@@ -79,7 +81,7 @@ public final class DataStoreUtil {
/**
* Make a new storage, to associate the given ids with an object of class
* dataclass.
- *
+ *
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
* @param def Default value
@@ -92,7 +94,7 @@ public final class DataStoreUtil {
/**
* Make a new storage, to associate the given ids with an object of class
* dataclass.
- *
+ *
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
* @return new data store
@@ -104,7 +106,7 @@ public final class DataStoreUtil {
/**
* Make a new storage, to associate the given ids with an object of class
* dataclass.
- *
+ *
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
* @param def Default value
@@ -117,7 +119,7 @@ public final class DataStoreUtil {
/**
* Make a new record storage, to associate the given ids with an object of
* class dataclass.
- *
+ *
* @param ids DBIDs to store data for
* @param hints Hints for the storage manager
* @param dataclasses classes to store
@@ -129,9 +131,9 @@ public final class DataStoreUtil {
/**
* Sort objects by a double relation
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class AscendingByDoubleDataStore implements Comparator<DBIDRef> {
@@ -139,7 +141,7 @@ public final class DataStoreUtil {
* Scores to use for sorting.
*/
private final DoubleDataStore scores;
-
+
/**
* Constructor.
*
@@ -158,9 +160,9 @@ public final class DataStoreUtil {
/**
* Sort objects by a double relation
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class DescendingByDoubleDataStore implements Comparator<DBIDRef> {
@@ -168,7 +170,7 @@ public final class DataStoreUtil {
* Scores to use for sorting.
*/
private final DoubleDataStore scores;
-
+
/**
* Constructor.
*
@@ -184,4 +186,64 @@ public final class DataStoreUtil {
return Double.compare(scores.doubleValue(id2), scores.doubleValue(id1));
}
}
+
+ /**
+ * Sort objects by a double relation
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ public static class AscendingByDoubleDataStoreAndId implements Comparator<DBIDRef> {
+ /**
+ * Scores to use for sorting.
+ */
+ private final DoubleDataStore scores;
+
+ /**
+ * Constructor.
+ *
+ * @param scores Scores for sorting
+ */
+ public AscendingByDoubleDataStoreAndId(DoubleDataStore scores) {
+ super();
+ this.scores = scores;
+ }
+
+ @Override
+ public int compare(DBIDRef id1, DBIDRef id2) {
+ int c = Double.compare(scores.doubleValue(id1), scores.doubleValue(id2));
+ return c != 0 ? c : DBIDUtil.compare(id1, id2);
+ }
+ }
+
+ /**
+ * Sort objects by a double relation
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ public static class DescendingByDoubleDataStoreAndId implements Comparator<DBIDRef> {
+ /**
+ * Scores to use for sorting.
+ */
+ private final DoubleDataStore scores;
+
+ /**
+ * Constructor.
+ *
+ * @param scores Scores for sorting
+ */
+ public DescendingByDoubleDataStoreAndId(DoubleDataStore scores) {
+ super();
+ this.scores = scores;
+ }
+
+ @Override
+ public int compare(DBIDRef id1, DBIDRef id2) {
+ int c = Double.compare(scores.doubleValue(id2), scores.doubleValue(id1));
+ return c != 0 ? c : DBIDUtil.compare(id1, id2);
+ }
+ }
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java
index 8cf6cdf1..8f52f996 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/DoubleDataStore.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Double-valued data store (avoids boxing/unboxing).
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DoubleDataStore extends DataStore<Double> {
/**
@@ -38,7 +39,7 @@ public interface DoubleDataStore extends DataStore<Double> {
*/
@Override
@Deprecated
- public Double get(DBIDRef id);
+ Double get(DBIDRef id);
/**
* Retrieves an object from the storage.
@@ -46,5 +47,5 @@ public interface DoubleDataStore extends DataStore<Double> {
* @param id Database ID.
* @return Double value
*/
- public double doubleValue(DBIDRef id);
+ double doubleValue(DBIDRef id);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java
index 986f4fc8..7747bcb3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/IntegerDataStore.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Integer-valued data store (avoids boxing/unboxing).
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface IntegerDataStore extends DataStore<Integer> {
/**
@@ -38,7 +39,7 @@ public interface IntegerDataStore extends DataStore<Integer> {
*/
@Override
@Deprecated
- public Integer get(DBIDRef id);
+ Integer get(DBIDRef id);
/**
* Retrieves a value from the storage.
@@ -46,5 +47,5 @@ public interface IntegerDataStore extends DataStore<Integer> {
* @param id Database ID.
* @return Double value
*/
- public int intValue(DBIDRef id);
+ int intValue(DBIDRef id);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java
index b98f4d13..be06aa13 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/RecordStore.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.datastore;
* Represents a storage which stores multiple values per object in a record fashion.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has de.lmu.ifi.dbs.elki.database.datastore.DataStore oneway - - projectsTo
*/
@@ -40,5 +41,5 @@ public interface RecordStore {
* @param datatype data class
* @return writable storage
*/
- public <T> DataStore<T> getStorage(int col, Class<? super T> datatype);
+ <T> DataStore<T> getStorage(int col, Class<? super T> datatype);
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java
index 38fd8adb..df0001ec 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDBIDDataStore.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Data store specialized for doubles. Avoids boxing/unboxing.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore<DBID> {
/**
@@ -39,7 +40,7 @@ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore<
*/
@Override
@Deprecated
- public DBID put(DBIDRef id, DBID value);
+ DBID put(DBIDRef id, DBID value);
/**
* Associates the specified value with the specified id in this storage. If
@@ -49,7 +50,7 @@ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore<
* @param id Database ID.
* @param value Value to store.
*/
- public void putDBID(DBIDRef id, DBIDRef value);
+ void putDBID(DBIDRef id, DBIDRef value);
/**
* Associates the specified value with the specified id in this storage. If
@@ -59,5 +60,5 @@ public interface WritableDBIDDataStore extends DBIDDataStore, WritableDataStore<
* @param id Database ID.
* @param value Value to store.
*/
- public void put(DBIDRef id, DBIDRef value);
+ void put(DBIDRef id, DBIDRef value);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java
index 8baf622e..33f213b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDataStore.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Writable data store.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
@@ -44,13 +45,13 @@ public interface WritableDataStore<T> extends DataStore<T> {
* @param value Value to store.
* @return previous value
*/
- public T put(DBIDRef id, T value);
+ T put(DBIDRef id, T value);
/**
* Deallocate the storage, freeing the memory and notifies the registered
* listeners.
*/
- public void destroy();
+ void destroy();
/**
* Delete the contents for a particular ID and notifies the registered
@@ -58,5 +59,10 @@ public interface WritableDataStore<T> extends DataStore<T> {
*
* @param id Database ID.
*/
- public void delete(DBIDRef id);
+ void delete(DBIDRef id);
+
+ /**
+ * Clear the storage (resetting it to the default value).
+ */
+ void clear();
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java
index 8a3f9e8a..ac7fa2f2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableDoubleDataStore.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Data store specialized for doubles. Avoids boxing/unboxing.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataStore<Double> {
/**
@@ -38,7 +39,7 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt
*/
@Override
@Deprecated
- public Double put(DBIDRef id, Double value);
+ Double put(DBIDRef id, Double value);
/**
* Associates the specified value with the specified id in this storage. If
@@ -49,7 +50,7 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt
* @param value Value to store.
* @return previous value
*/
- public double putDouble(DBIDRef id, double value);
+ double putDouble(DBIDRef id, double value);
/**
* Associates the specified value with the specified id in this storage. If
@@ -60,8 +61,7 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt
* @param value Value to store.
* @return previous value
*/
- public double put(DBIDRef id, double value);
-
+ double put(DBIDRef id, double value);
/**
* Increment the specified value with the specified id in this storage.
@@ -69,10 +69,5 @@ public interface WritableDoubleDataStore extends DoubleDataStore, WritableDataSt
* @param id Database ID.
* @param value Value to add to the previous value.
*/
- public void increment(DBIDRef id, double value);
-
- /**
- * Reinitialize (reset to default value).
- */
- public void clear();
+ void increment(DBIDRef id, double value);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java
index 0303f45e..09bbc77f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableIntegerDataStore.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Data store specialized for doubles. Avoids boxing/unboxing.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface WritableIntegerDataStore extends IntegerDataStore, WritableDataStore<Integer> {
/**
@@ -38,7 +39,7 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData
*/
@Override
@Deprecated
- public Integer put(DBIDRef id, Integer value);
+ Integer put(DBIDRef id, Integer value);
/**
* Associates the specified value with the specified id in this storage. If
@@ -49,7 +50,7 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData
* @param value Value to store.
* @return previous value
*/
- public int putInt(DBIDRef id, int value);
+ int putInt(DBIDRef id, int value);
/**
* Associates the specified value with the specified id in this storage. If
@@ -60,7 +61,7 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData
* @param value Value to store.
* @return previous value
*/
- public int put(DBIDRef id, int value);
+ int put(DBIDRef id, int value);
/**
* Increment a value.
@@ -68,5 +69,5 @@ public interface WritableIntegerDataStore extends IntegerDataStore, WritableData
* @param id Database ID.
* @param adjust Value to add to the previous value.
*/
- public void increment(DBIDRef id, int adjust);
+ void increment(DBIDRef id, int adjust);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java
index 73106b28..81148c63 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/WritableRecordStore.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Represents a storage which stores multiple values per object in a record fashion.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
@@ -44,7 +45,7 @@ public interface WritableRecordStore extends RecordStore {
* @return writable storage
*/
@Override
- public <T> WritableDataStore<T> getStorage(int col, Class<? super T> datatype);
+ <T> WritableDataStore<T> getStorage(int col, Class<? super T> datatype);
/**
* Remove an object from the store, all columns.
@@ -52,5 +53,5 @@ public interface WritableRecordStore extends RecordStore {
* @param id object ID to remove
* @return success code
*/
- public boolean remove(DBIDRef id);
+ boolean remove(DBIDRef id);
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java
index 2c73ada4..f557f529 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDBIDStore.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* A class to answer representation queries using the stored Array.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap
*/
@@ -60,7 +61,7 @@ public class ArrayDBIDStore implements WritableDBIDDataStore {
this.data = DBIDUtil.newArray(size);
// Initialize
DBIDRef inv = DBIDUtil.invalid();
- for (int i = 0; i < size; i++) {
+ for(int i = 0; i < size; i++) {
data.add(inv);
}
this.idmap = idmap;
@@ -106,8 +107,19 @@ public class ArrayDBIDStore implements WritableDBIDDataStore {
}
@Override
+ public void clear() {
+ // Re-initialize
+ DBIDRef inv = DBIDUtil.invalid();
+ final int size = data.size();
+ data.clear();
+ for(int i = 0; i < size; i++) {
+ data.add(inv);
+ }
+ }
+
+ @Override
public void delete(DBIDRef id) {
- throw new UnsupportedOperationException("Can't delete from a static array storage.");
+ put(id, DBIDUtil.invalid());
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java
index d1a8672e..5f6d687d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayDoubleStore.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* A class to answer representation queries using the stored Array.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java
index 6b6ac14a..b4a4d7fc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayIntegerStore.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* A class to answer representation queries using the stored Array.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap
*/
@@ -48,6 +49,11 @@ public class ArrayIntegerStore implements WritableIntegerDataStore {
private DataStoreIDMap idmap;
/**
+ * Default value (for {@link #clear()}).
+ */
+ private int def;
+
+ /**
* Constructor.
*
* @param size Size
@@ -67,6 +73,7 @@ public class ArrayIntegerStore implements WritableIntegerDataStore {
public ArrayIntegerStore(int size, DataStoreIDMap idmap, int def) {
super();
this.data = new int[size];
+ this.def = def;
if(def != 0) {
Arrays.fill(this.data, def);
}
@@ -123,7 +130,12 @@ public class ArrayIntegerStore implements WritableIntegerDataStore {
@Override
public void delete(DBIDRef id) {
- throw new UnsupportedOperationException("Can't delete from a static array storage.");
+ put(id, def);
+ }
+
+ @Override
+ public void clear() {
+ Arrays.fill(data, def);
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java
index 62f07448..deb949ff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayRecordStore.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* A class to answer representation queries using the stored Array.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf DataStoreIDMap
* @apiviz.has ArrayRecordStore.StorageAccessor oneway - - projectsTo
@@ -128,12 +129,17 @@ public class ArrayRecordStore implements WritableRecordStore {
@Override
public void destroy() {
- throw new UnsupportedOperationException("ArrayStore record columns cannot be destroyed.");
+ throw new UnsupportedOperationException("ArrayStore record columns cannot (yet) be destroyed.");
}
@Override
public void delete(DBIDRef id) {
- throw new UnsupportedOperationException("ArrayStore record values cannot be deleted.");
+ put(id, null);
+ }
+
+ @Override
+ public void clear() {
+ throw new UnsupportedOperationException("ArrayStore record columns cannot (yet) be cleared.");
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java
index 35871ed9..bbfa967f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/ArrayStore.java
@@ -1,5 +1,7 @@
package de.lmu.ifi.dbs.elki.database.datastore.memory;
+import java.util.Arrays;
+
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -33,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ObjectNotFoundException;
* A class to answer representation queries using the stored Array.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap
*
@@ -86,7 +89,12 @@ public class ArrayStore<T> implements WritableDataStore<T> {
@Override
public void delete(DBIDRef id) {
- throw new UnsupportedOperationException("Can't delete from a static array storage.");
+ put(id, null);
+ }
+
+ @Override
+ public void clear() {
+ Arrays.fill(data, null);
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java
index 11b3cbb2..9016e6cf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDBIDStore.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* Writable data store for double values.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class MapIntegerDBIDDBIDStore implements WritableDBIDDataStore {
/**
@@ -76,17 +77,6 @@ public class MapIntegerDBIDDBIDStore implements WritableDBIDDataStore {
}
@Override
- public void destroy() {
- map.clear();
- map = null;
- }
-
- @Override
- public void delete(DBIDRef id) {
- map.remove(DBIDUtil.asInteger(id));
- }
-
- @Override
public void put(DBIDRef id, DBIDRef value) {
map.put(DBIDUtil.asInteger(id), DBIDUtil.asInteger(value));
}
@@ -102,4 +92,20 @@ public class MapIntegerDBIDDBIDStore implements WritableDBIDDataStore {
DBIDFactory.FACTORY.assignVar(var, val);
return var;
}
+
+ @Override
+ public void delete(DBIDRef id) {
+ map.remove(DBIDUtil.asInteger(id));
+ }
+
+ @Override
+ public void destroy() {
+ map.clear();
+ map = null;
+ }
+
+ @Override
+ public void clear() {
+ map.clear();
+ }
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java
index 5e21f6b4..4629a942 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDDoubleStore.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* Writable data store for double values.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class MapIntegerDBIDDoubleStore implements WritableDoubleDataStore {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java
index 2474aa4a..37fb84c0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDIntegerStore.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* Writable data store for double values.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class MapIntegerDBIDIntegerStore implements WritableIntegerDataStore {
/**
@@ -112,4 +113,9 @@ public class MapIntegerDBIDIntegerStore implements WritableIntegerDataStore {
public void increment(DBIDRef id, int adjust) {
map.adjustOrPutValue(DBIDUtil.asInteger(id), adjust, adjust);
}
+
+ @Override
+ public void clear() {
+ map.clear();
+ }
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java
index 66f885d5..6461ad97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDRecordStore.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* record.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has MapIntegerDBIDRecordStore.StorageAccessor oneway - - projectsTo
*/
@@ -165,7 +166,12 @@ public class MapIntegerDBIDRecordStore implements WritableRecordStore {
@Override
public void delete(DBIDRef id) {
- throw new UnsupportedOperationException("Record storage values cannot be deleted.");
+ throw new UnsupportedOperationException("Record storage accessors cannot be deleted.");
+ }
+
+ @Override
+ public void clear() {
+ throw new UnsupportedOperationException("Record storage accessors cannot be cleared.");
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java
index 08e31971..2d21dccb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapIntegerDBIDStore.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* wrapper around a regular map.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Representation object type
*/
@@ -94,6 +95,11 @@ public class MapIntegerDBIDStore<T> implements WritableDataStore<T> {
}
@Override
+ public void clear() {
+ data.clear();
+ }
+
+ @Override
public String getLongName() {
return "raw";
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java
index 6ed7f581..e6cf1198 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapRecordStore.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* record.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has MapRecordStore.StorageAccessor oneway - - projectsTo
*/
@@ -90,7 +91,7 @@ public class MapRecordStore implements WritableRecordStore {
@SuppressWarnings("unchecked")
protected <T> T get(DBIDRef id, int index) {
Object[] d = data.get(DBIDUtil.deref(id));
- if (d == null) {
+ if(d == null) {
return null;
}
return (T) d[index];
@@ -108,7 +109,7 @@ public class MapRecordStore implements WritableRecordStore {
@SuppressWarnings("unchecked")
protected <T> T set(DBIDRef id, int index, T value) {
Object[] d = data.get(DBIDUtil.deref(id));
- if (d == null) {
+ if(d == null) {
d = new Object[rlen];
data.put(DBIDUtil.deref(id), d);
}
@@ -157,6 +158,11 @@ public class MapRecordStore implements WritableRecordStore {
}
@Override
+ public void clear() {
+ throw new UnsupportedOperationException("Record storage accessors cannot (yet) be cleared.");
+ }
+
+ @Override
public void delete(DBIDRef id) {
throw new UnsupportedOperationException("Record storage values cannot be deleted.");
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java
index 98e5fc57..758e8bec 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MapStore.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* wrapper around a regular map.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Representation object type
*/
@@ -87,6 +88,11 @@ public class MapStore<T> implements WritableDataStore<T> {
}
@Override
+ public void clear() {
+ data.clear();
+ }
+
+ @Override
public String getLongName() {
return "raw";
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java
index 649de071..6e9427f5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/datastore/memory/MemoryDataStoreFactory.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* in-memory.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.has ArrayStore oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayDBIDs.java
index c48e575d..8fc27ff3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayDBIDs.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Interface for array based DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has DBIDArrayIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayModifiableDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayModifiableDBIDs.java
index 498d090a..c879ae95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayModifiableDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayModifiableDBIDs.java
@@ -28,6 +28,7 @@ import java.util.Comparator;
* Array-oriented implementation of a modifiable DBID collection.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has DBIDArrayMIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayStaticDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayStaticDBIDs.java
index 7331edce..623b102d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayStaticDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ArrayStaticDBIDs.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Unmodifiable, indexed DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface ArrayStaticDBIDs extends ArrayDBIDs, StaticDBIDs {
// empty.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBID.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBID.java
index 3fb4cc93..66001a7a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBID.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBID.java
@@ -34,6 +34,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* consistent across multiple results/databases.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayIter.java
index 9168e7c6..0f638fe0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayIter;
* Array iterators that can also go backwards and seek.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDArrayIter extends DBIDIter, ArrayIter {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayMIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayMIter.java
index e4bca297..5da6b6ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayMIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDArrayMIter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Modifiable array iterator.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDArrayMIter extends DBIDArrayIter, DBIDMIter {
// Nothing new, see {@link DBIDArrayIter} and {@link DBIDMIter}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDFactory.java
index dc424b71..6ac06aab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDFactory.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.FixedSizeByteBufferSerializer;
* instance to use.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses DBID oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDIter.java
index d2c816a2..f9e9e381 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDIter.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* </ul>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDMIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDMIter.java
index d52e87ed..7dc3dca6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDMIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDMIter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.MIter;
* Modifiable DBID iterator.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDMIter extends DBIDIter, MIter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDPair.java
index 29d993ea..675f8810 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDPair.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* using {@link de.lmu.ifi.dbs.elki.utilities.pairs.Pair}
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.database.ids.DBID
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRange.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRange.java
index 710ec3c6..1e515893 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRange.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRange.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.datastore.DataStoreIDMap;
* Static DBID range.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDRange extends ArrayStaticDBIDs, DataStoreIDMap {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRef.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRef.java
index 80b69a1e..7f051e35 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRef.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDRef.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* are a good example how the DBIDRef may change.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDUtil.java
index ae85fa12..c9f2c1f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDUtil.java
@@ -41,11 +41,12 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
/**
* DBID Utility functions.
- *
+ *
* @author Erich Schubert
- *
+ * @since 0.4.0
+ *
* @apiviz.landmark
- *
+ *
* @apiviz.has DBIDs
* @apiviz.has DBIDRef
* @apiviz.composedOf DBIDFactory
@@ -65,7 +66,7 @@ public final class DBIDUtil {
/**
* Get the invalid special ID.
- *
+ *
* @return invalid ID value
*/
public static DBIDRef invalid() {
@@ -74,9 +75,9 @@ public final class DBIDUtil {
/**
* Import and integer as DBID.
- *
+ *
* Note: this may not be possible for some factories!
- *
+ *
* @param id Integer ID to import
* @return DBID
*/
@@ -86,9 +87,9 @@ public final class DBIDUtil {
/**
* Export a DBID as int.
- *
+ *
* Note: this may not be possible for some factories!
- *
+ *
* @param id DBID to export
* @return integer value
*/
@@ -98,7 +99,7 @@ public final class DBIDUtil {
/**
* Compare two DBIDs.
- *
+ *
* @param id1 First ID
* @param id2 Second ID
* @return Comparison result
@@ -109,7 +110,7 @@ public final class DBIDUtil {
/**
* Test two DBIDs for equality.
- *
+ *
* @param id1 First ID
* @param id2 Second ID
* @return Comparison result
@@ -120,7 +121,7 @@ public final class DBIDUtil {
/**
* Dereference a DBID reference.
- *
+ *
* @param ref DBID reference
* @return DBID
*/
@@ -133,7 +134,7 @@ public final class DBIDUtil {
/**
* Format a DBID as string.
- *
+ *
* @param id DBID
* @return String representation
*/
@@ -143,7 +144,7 @@ public final class DBIDUtil {
/**
* Format a DBID as string.
- *
+ *
* @param ids DBIDs
* @return String representation
*/
@@ -163,7 +164,7 @@ public final class DBIDUtil {
/**
* Get a serializer for DBIDs.
- *
+ *
* @return DBID serializer
*/
public static ByteBufferSerializer<DBID> getDBIDSerializer() {
@@ -172,7 +173,7 @@ public final class DBIDUtil {
/**
* Get a serializer for DBIDs with static size.
- *
+ *
* @return DBID serializer
*/
public static ByteBufferSerializer<DBID> getDBIDSerializerStatic() {
@@ -181,7 +182,7 @@ public final class DBIDUtil {
/**
* Generate a single DBID.
- *
+ *
* @return A single DBID
*/
public static DBID generateSingleDBID() {
@@ -190,7 +191,7 @@ public final class DBIDUtil {
/**
* Return a single DBID for reuse.
- *
+ *
* @param id DBID to deallocate
*/
public static void deallocateSingleDBID(DBID id) {
@@ -199,7 +200,7 @@ public final class DBIDUtil {
/**
* Generate a static DBID range.
- *
+ *
* @param size Requested size
* @return DBID range
*/
@@ -209,7 +210,7 @@ public final class DBIDUtil {
/**
* Deallocate a static DBID range.
- *
+ *
* @param range Range to deallocate
*/
public static void deallocateDBIDRange(DBIDRange range) {
@@ -218,7 +219,7 @@ public final class DBIDUtil {
/**
* Make a new DBID variable.
- *
+ *
* @param val Initial value.
* @return Variable
*/
@@ -228,7 +229,7 @@ public final class DBIDUtil {
/**
* Make a new DBID variable.
- *
+ *
* @return Variable
*/
public static DBIDVar newVar() {
@@ -237,7 +238,7 @@ public final class DBIDUtil {
/**
* Make a new (modifiable) array of DBIDs.
- *
+ *
* @return New array
*/
public static ArrayModifiableDBIDs newArray() {
@@ -246,7 +247,7 @@ public final class DBIDUtil {
/**
* Make a new (modifiable) hash set of DBIDs.
- *
+ *
* @return New hash set
*/
public static HashSetModifiableDBIDs newHashSet() {
@@ -255,7 +256,7 @@ public final class DBIDUtil {
/**
* Make a new (modifiable) array of DBIDs.
- *
+ *
* @param size Size hint
* @return New array
*/
@@ -265,7 +266,7 @@ public final class DBIDUtil {
/**
* Make a new (modifiable) hash set of DBIDs.
- *
+ *
* @param size Size hint
* @return New hash set
*/
@@ -275,7 +276,7 @@ public final class DBIDUtil {
/**
* Make a new (modifiable) array of DBIDs.
- *
+ *
* @param existing Existing DBIDs
* @return New array
*/
@@ -285,7 +286,7 @@ public final class DBIDUtil {
/**
* Make a new (modifiable) hash set of DBIDs.
- *
+ *
* @param existing Existing DBIDs
* @return New hash set
*/
@@ -295,7 +296,7 @@ public final class DBIDUtil {
/**
* Compute the set intersection of two sets.
- *
+ *
* @param first First set
* @param second Second set
* @return result.
@@ -316,7 +317,7 @@ public final class DBIDUtil {
/**
* Compute the set intersection size of two sets.
- *
+ *
* @param first First set
* @param second Second set
* @return size
@@ -345,7 +346,7 @@ public final class DBIDUtil {
/**
* Compute the set intersection size of two sets.
- *
+ *
* @param first First set
* @param second Second set
* @return size
@@ -362,7 +363,7 @@ public final class DBIDUtil {
/**
* Compute the set symmetric intersection of two sets.
- *
+ *
* @param first First set
* @param second Second set
* @param firstonly OUTPUT: elements only in first. MUST BE EMPTY
@@ -393,7 +394,7 @@ public final class DBIDUtil {
/**
* Returns the union of the two specified collection of IDs.
- *
+ *
* @param ids1 the first collection
* @param ids2 the second collection
* @return the union of ids1 and ids2 without duplicates
@@ -407,7 +408,7 @@ public final class DBIDUtil {
/**
* Returns the difference of the two specified collection of IDs.
- *
+ *
* @param ids1 the first collection
* @param ids2 the second collection
* @return the difference of ids1 minus ids2
@@ -420,7 +421,7 @@ public final class DBIDUtil {
/**
* Wrap an existing DBIDs collection to be unmodifiable.
- *
+ *
* @param existing Existing collection
* @return Unmodifiable collection
*/
@@ -442,7 +443,7 @@ public final class DBIDUtil {
/**
* Ensure that the given DBIDs are array-indexable.
- *
+ *
* @param ids IDs
* @return Array DBIDs.
*/
@@ -457,7 +458,7 @@ public final class DBIDUtil {
/**
* Ensure that the given DBIDs support fast "contains" operations.
- *
+ *
* @param ids IDs
* @return Set DBIDs.
*/
@@ -472,7 +473,7 @@ public final class DBIDUtil {
/**
* Ensure modifiable.
- *
+ *
* @param ids IDs
* @return Modifiable DBIDs.
*/
@@ -493,10 +494,10 @@ public final class DBIDUtil {
/**
* Make a DBID pair.
- *
+ *
* @param id1 first ID
* @param id2 second ID
- *
+ *
* @return DBID pair
*/
public static DBIDPair newPair(DBIDRef id1, DBIDRef id2) {
@@ -505,7 +506,7 @@ public final class DBIDUtil {
/**
* Make a DoubleDBIDPair.
- *
+ *
* @param val double value
* @param id ID
* @return new pair
@@ -516,9 +517,9 @@ public final class DBIDUtil {
/**
* Create an appropriate heap for the distance type.
- *
+ *
* This will use a double heap if appropriate.
- *
+ *
* @param k K value
* @return New heap of size k, appropriate for this distance type.
*/
@@ -528,7 +529,7 @@ public final class DBIDUtil {
/**
* Build a new heap from a given list.
- *
+ *
* @param exist Existing result
* @return New heap
*/
@@ -538,7 +539,7 @@ public final class DBIDUtil {
/**
* Produce a random shuffling of the given DBID array.
- *
+ *
* @param ids Original DBIDs
* @param rnd Random generator
*/
@@ -548,7 +549,7 @@ public final class DBIDUtil {
/**
* Produce a random shuffling of the given DBID array.
- *
+ *
* @param ids Original DBIDs
* @param random Random generator
*/
@@ -558,22 +559,24 @@ public final class DBIDUtil {
/**
* Produce a random shuffling of the given DBID array.
- *
- * Only the first {@code limit} elements will be randomized.
- *
+ *
+ * Only the first {@code limit} elements will be fully randomized, but the
+ * remaining objects will also be changed.
+ *
* @param ids Original DBIDs
* @param random Random generator
* @param limit Shuffling limit.
*/
public static void randomShuffle(ArrayModifiableDBIDs ids, Random random, final int limit) {
+ final int end = ids.size();
for(int i = 1; i < limit; i++) {
- ids.swap(i - 1, i + random.nextInt(limit - i));
+ ids.swap(i - 1, i + random.nextInt(end - i));
}
}
/**
* Produce a random sample of the given DBIDs.
- *
+ *
* @param source Original DBIDs
* @param k k Parameter
* @param seed Random generator seed
@@ -585,7 +588,7 @@ public final class DBIDUtil {
/**
* Produce a random sample of the given DBIDs.
- *
+ *
* @param source Original DBIDs
* @param k k Parameter
* @param seed Random generator seed
@@ -602,7 +605,7 @@ public final class DBIDUtil {
/**
* Produce a random sample of the given DBIDs.
- *
+ *
* @param source Original DBIDs
* @param k k Parameter
* @param rnd Random generator
@@ -614,7 +617,7 @@ public final class DBIDUtil {
/**
* Produce a random sample of the given DBIDs.
- *
+ *
* @param source Original DBIDs
* @param k k Parameter
* @param random Random generator
@@ -645,7 +648,7 @@ public final class DBIDUtil {
ArrayModifiableDBIDs sample = DBIDUtil.newArray(source);
randomShuffle(sample, random, k);
// Delete trailing elements
- for(int i = sample.size() - 1; i > k; i--) {
+ for(int i = sample.size() - 1; i >= k; i--) {
sample.remove(i);
}
return sample;
@@ -654,7 +657,7 @@ public final class DBIDUtil {
/**
* Produce a random sample of the given DBIDs.
- *
+ *
* @param ids Original ids
* @param rate Sampling rate
* @param random Random generator
@@ -666,7 +669,7 @@ public final class DBIDUtil {
/**
* Produce a random sample of the given DBIDs.
- *
+ *
* @param ids Original ids
* @param rate Sampling rate
* @param random Random generator
@@ -711,7 +714,7 @@ public final class DBIDUtil {
/**
* Randomly split IDs into {@code p} partitions of almost-equal size.
- *
+ *
* @param ids Original DBIDs
* @param p Desired number of partitions.
* @param rnd Random generator
@@ -722,7 +725,7 @@ public final class DBIDUtil {
/**
* Randomly split IDs into {@code p} partitions of almost-equal size.
- *
+ *
* @param oids Original DBIDs
* @param p Desired number of partitions.
* @param random Random generator
@@ -752,7 +755,7 @@ public final class DBIDUtil {
/**
* Get a subset of the KNN result.
- *
+ *
* @param list Existing list
* @param k k
* @return Subset
@@ -769,7 +772,7 @@ public final class DBIDUtil {
/**
* Create a modifiable list to store distance-DBID pairs.
- *
+ *
* @param size Estimated upper list size
* @return Empty list
*/
@@ -779,7 +782,7 @@ public final class DBIDUtil {
/**
* Create a modifiable list to store distance-DBID pairs.
- *
+ *
* @return Empty list
*/
public static ModifiableDoubleDBIDList newDistanceDBIDList() {
@@ -788,7 +791,7 @@ public final class DBIDUtil {
/**
* Assert that the presented ids constitute a continuous {@link DBIDRange}.
- *
+ *
* @param ids ID range.
* @return DBID range.
* @throws AbortException
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDVar.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDVar.java
index adfa9aed..80dfaf53 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDVar.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDVar.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.datastore.DBIDDataStore;
* candidate.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDVar extends DBIDRef, ArrayDBIDs, SetDBIDs {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDs.java
index 47ab6c2b..95a07f80 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DBIDs.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Interface for a collection of database references (IDs).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.composedOf DBID
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDList.java
index 4ac19f95..355f9c17 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDList.java
@@ -50,6 +50,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* </pre>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListIter.java
index 92fe9233..6435a048 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListIter.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* {@link de.lmu.ifi.dbs.elki.database.ids.DBIDRef}.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListMIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListMIter.java
index 0e371ff8..638c32ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListMIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDListMIter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Modifiable DBIDList iterator.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface DoubleDBIDListMIter extends DoubleDBIDListIter, DBIDArrayMIter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDPair.java
index 725861d6..1a49ad56 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/DoubleDBIDPair.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* object reference.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface DoubleDBIDPair extends DBIDRef, Comparable<DoubleDBIDPair> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/EmptyDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/EmptyDBIDs.java
index 5c1c3e2d..444b632c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/EmptyDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/EmptyDBIDs.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
* Empty DBID collection.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf EmptyDBIDIterator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetDBIDs.java
index c7deb732..e5a3c4d3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetDBIDs.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Hash-organized DBIDs
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface HashSetDBIDs extends SetDBIDs {
// Empty marker interface
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetModifiableDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetModifiableDBIDs.java
index e5cde131..f3a43b8b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetModifiableDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/HashSetModifiableDBIDs.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Set-oriented implementation of a modifiable DBID collection.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface HashSetModifiableDBIDs extends HashSetDBIDs, ModifiableDBIDs {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNHeap.java
index f2ae4c0e..73fddbb2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNHeap.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* {@link de.lmu.ifi.dbs.elki.database.ids.DBIDUtil#newHeap}!
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNList.java
index 94c26a5f..f23e81e2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/KNNList.java
@@ -51,6 +51,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* </pre>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDBIDs.java
index fa88c373..f59f1d92 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDBIDs.java
@@ -25,43 +25,46 @@ package de.lmu.ifi.dbs.elki.database.ids;
/**
* Interface for a generic modifiable DBID collection.
- *
+ *
* Note: we had this use the Java Collections API for a long time, however this
* prevented certain optimizations. So it now only mimics the Collections API
* <em>deliberately</em>.
- *
+ *
* @author Erich Schubert
- *
+ * @since 0.4.0
+ *
* @apiviz.has DBIDMIter
*/
public interface ModifiableDBIDs extends DBIDs {
/**
* Add DBIDs to collection.
- *
+ *
* @param ids IDs to add.
- * @return {@code true} when modified
+ * @return {@code true} if the collection changed.
*/
boolean addDBIDs(DBIDs ids);
/**
* Remove DBIDs from collection.
- *
+ *
* @param ids IDs to remove.
- * @return {@code true} when modified
+ * @return {@code true} if the collection changed.
*/
boolean removeDBIDs(DBIDs ids);
/**
* Add a single DBID to the collection.
- *
+ *
* @param id ID to add
+ * @return {@code true} if the collection changed.
*/
boolean add(DBIDRef id);
/**
* Remove a single DBID from the collection.
- *
+ *
* @param id ID to remove
+ * @return {@code true} if the collection changed.
*/
boolean remove(DBIDRef id);
@@ -72,9 +75,9 @@ public interface ModifiableDBIDs extends DBIDs {
/**
* Get a <em>modifiable</em> DBID iterator (a more efficient API).
- *
+ *
* usage example:
- *
+ *
* <pre>
* {@code
* for(DBIDMIter iter = ids.iter(); iter.valid(); iter.advance()) {
@@ -83,7 +86,7 @@ public interface ModifiableDBIDs extends DBIDs {
* }
* }
* </pre>
- *
+ *
* @return modifiable iterator
*/
@Override
@@ -93,6 +96,8 @@ public interface ModifiableDBIDs extends DBIDs {
* Pop (get and remove) one DBID from the set, into a variable.
*
* @param outvar Output variable
+ * @return Always {@code outvar}, for inlining
+ * @throws ArrayIndexOutOfBoundsException when empty.
*/
- void pop(DBIDVar outvar);
+ DBIDVar pop(DBIDVar outvar);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDoubleDBIDList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDoubleDBIDList.java
index 964e18d0..8b4409ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDoubleDBIDList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/ModifiableDoubleDBIDList.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Modifiable API for Distance-DBID results
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf DoubleDBIDPair
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/SetDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/SetDBIDs.java
index bcae4fec..cead3cb6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/SetDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/SetDBIDs.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* "contains" lookups.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface SetDBIDs extends DBIDs {
// empty marker interface
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/StaticDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/StaticDBIDs.java
index f1b96812..3b4ccc16 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/StaticDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/StaticDBIDs.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.ids;
* Unmodifiable DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface StaticDBIDs extends DBIDs {
// Empty marker interface.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/KNNSubList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/KNNSubList.java
index 1563efd4..770c3792 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/KNNSubList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/KNNSubList.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.KNNList;
* Sublist of an existing result to contain only the first k elements.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class KNNSubList implements KNNList {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java
index f71498bd..b61b2a98 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/MaskedDBIDs.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* View on an ArrayDBIDs masked using a BitMask for efficient mask changing.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses DBIDs
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java
index 637ad758..698e63ab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableArrayDBIDs.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* Unmodifiable wrapper for DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses ArrayDBIDs
* @apiviz.has UnmodifiableDBIDArrayIter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java
index 16ff1f81..7ce291e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/generic/UnmodifiableDBIDs.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.StaticDBIDs;
* Unmodifiable wrapper for DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses DBIDs
* @apiviz.has UnmodifiableDBIDIter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java
index cbf29e9c..6ad8c6fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/AbstractIntegerDBIDFactory.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.FixedSizeByteBufferSerializer;
* Abstract base class for DBID factories.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses IntegerDBID oneway - - «create»
* @apiviz.uses IntegerDBIDPair oneway - - «create»
@@ -83,7 +84,8 @@ abstract class AbstractIntegerDBIDFactory implements DBIDFactory {
@Override
public String toString(DBIDRef id) {
- return (id != null) ? Integer.toString(id.internalGetIndex()) : "null";
+ return (id != null && id.internalGetIndex() != Integer.MIN_VALUE) //
+ ? Integer.toString(id.internalGetIndex()) : "null";
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayModifiableIntegerDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayModifiableIntegerDBIDs.java
index 835bcd8d..8aa6813c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayModifiableIntegerDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayModifiableIntegerDBIDs.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Class using a primitive int[] array as storage.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
class ArrayModifiableIntegerDBIDs implements ArrayModifiableDBIDs, IntegerArrayDBIDs {
/**
@@ -271,7 +272,7 @@ class ArrayModifiableIntegerDBIDs implements ArrayModifiableDBIDs, IntegerArrayD
}
@Override
- public void pop(DBIDVar var) {
+ public DBIDVar pop(DBIDVar var) {
if(size == 0) {
throw new ArrayIndexOutOfBoundsException("Cannot pop() from an empty array.");
}
@@ -282,6 +283,7 @@ class ArrayModifiableIntegerDBIDs implements ArrayModifiableDBIDs, IntegerArrayD
// less efficient, involves object creation.
var.set(get(--size));
}
+ return var;
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayStaticIntegerDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayStaticIntegerDBIDs.java
index 210dbb15..fb171416 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayStaticIntegerDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ArrayStaticIntegerDBIDs.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
* Static (no modifications allowed) set of Database Object IDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
class ArrayStaticIntegerDBIDs implements IntegerArrayStaticDBIDs {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNHeap.java
index 7162dbc2..1fe22b71 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNHeap.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleIntegerMaxHeap;
* Class to efficiently manage a kNN heap.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has DoubleIntegerDBIDKNNList
* @apiviz.composedOf DoubleIntegerMaxHeap
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNList.java
index 449497d1..e0e891e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDKNNList.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
* the results to be sorted!
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class DoubleIntegerDBIDKNNList extends DoubleIntegerDBIDList implements IntegerDBIDKNNList {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDList.java
index 6f551189..9c97f779 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDList.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.DoubleIntegerArrayQui
* Class to store double distance, integer DBID results.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses DoubleIntegerArrayQuickSort
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListIter.java
index 0cd7f33a..f944df03 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
* Combination interface of the DoubleDBIDListIter with IntegerDBIDIter.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public interface DoubleIntegerDBIDListIter extends DoubleDBIDListIter, IntegerDBIDIter {
// No additional methods.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListKNNHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListKNNHeap.java
index 82c0f184..4ddf7ba3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListKNNHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListKNNHeap.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.KNNList;
* order.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
class DoubleIntegerDBIDListKNNHeap extends DoubleIntegerDBIDKNNList implements KNNHeap {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListMIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListMIter.java
index 59824d85..d46b2952 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListMIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDListMIter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListMIter;
* Combination interface for modifiable iterators.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
interface DoubleIntegerDBIDListMIter extends DoubleIntegerDBIDListIter, DoubleDBIDListMIter {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPair.java
index 7cb247ce..f18ab125 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPair.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDPair;
* Pair containing a double value and an integer DBID.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
class DoubleIntegerDBIDPair implements DoubleDBIDPair, IntegerDBIDRef {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairKNNListHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairKNNListHeap.java
index ee06d7fa..eb2c8267 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairKNNListHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairKNNListHeap.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.database.ids.KNNList;
* Currently unused, needs benchmarking.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf DoubleIntegerDBIDPair
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairList.java
index 990e572f..593ba6ed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/DoubleIntegerDBIDPairList.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList;
* Currently unused. Needs benchmarking.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
class DoubleIntegerDBIDPairList implements ModifiableDoubleDBIDList, IntegerDBIDs {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayDBIDs.java
index 4afc942a..3f93a4b9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayDBIDs.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
* Trivial combination interface.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface IntegerArrayDBIDs extends IntegerDBIDs, ArrayDBIDs {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java
index fac20bca..c3ba28da 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerArrayStaticDBIDs.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ArrayStaticDBIDs;
* Combination of {@link ArrayStaticDBIDs} and {@link IntegerDBIDs}.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
interface IntegerArrayStaticDBIDs extends ArrayStaticDBIDs, IntegerArrayDBIDs {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java
index bdc5196b..11cc8c07 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBID.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.FixedSizeByteBufferSerializer;
* consistent across multiple results/databases.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf DynamicSerializer
* @apiviz.composedOf StaticSerializer
@@ -100,7 +101,7 @@ final class IntegerDBID implements DBID, IntegerDBIDRef {
@Override
public String toString() {
- return Integer.toString(id);
+ return (id != Integer.MIN_VALUE) ? Integer.toString(id) : "null";
}
@Override
@@ -111,11 +112,11 @@ final class IntegerDBID implements DBID, IntegerDBIDRef {
@Override
@Deprecated
public boolean equals(Object obj) {
- if (this == obj) {
+ if(this == obj) {
return true;
}
- if (!(obj instanceof IntegerDBID)) {
- if (obj instanceof DBIDRef) {
+ if(!(obj instanceof IntegerDBID)) {
+ if(obj instanceof DBIDRef) {
LoggingUtil.warning("Programming error: DBID.equals(DBIDRef) is not well-defined. Use DBIDUtil.equal() instead!", new Throwable());
}
return false;
@@ -137,7 +138,7 @@ final class IntegerDBID implements DBID, IntegerDBIDRef {
@Override
public DBID get(int i) {
- if (i != 0) {
+ if(i != 0) {
throw new ArrayIndexOutOfBoundsException();
}
return this;
@@ -145,7 +146,7 @@ final class IntegerDBID implements DBID, IntegerDBIDRef {
@Override
public DBIDVar assignVar(int index, DBIDVar var) {
- if (index != 0) {
+ if(index != 0) {
throw new ArrayIndexOutOfBoundsException();
}
var.set(this);
@@ -165,9 +166,10 @@ final class IntegerDBID implements DBID, IntegerDBIDRef {
@Override
public ArrayDBIDs slice(int begin, int end) {
- if (begin == 0 && end == 1) {
+ if(begin == 0 && end == 1) {
return this;
- } else {
+ }
+ else {
return DBIDUtil.EMPTYDBIDS;
}
}
@@ -232,7 +234,7 @@ final class IntegerDBID implements DBID, IntegerDBIDRef {
@Override
public boolean equals(Object other) {
- if (other instanceof DBID) {
+ if(other instanceof DBID) {
LoggingUtil.warning("Programming error detected: DBIDItr.equals(DBID). Use sameDBID()!", new Throwable());
}
return super.equals(other);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayIter.java
index f0ac9928..4b120c8c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
* Modifiable integer array iterator.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
interface IntegerDBIDArrayIter extends IntegerDBIDIter, DBIDArrayIter {
// Empty
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayMIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayMIter.java
index c9234060..946484ec 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayMIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayMIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayMIter;
* Modifiable integer array iterator.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
interface IntegerDBIDArrayMIter extends IntegerDBIDArrayIter, IntegerDBIDMIter, DBIDArrayMIter {
// Empty
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayQuickSort.java
index bfbde351..7e020554 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayQuickSort.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDArrayQuickSort.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses IntegerArrayDBIDs
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDIter.java
index 687a64b2..08b7fa01 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
* Iterator for integer DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNList.java
index 3fb0d381..c71253de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNList.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.KNNList;
* Combination interface for KNNList and IntegerDBIDs.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public interface IntegerDBIDKNNList extends KNNList, DoubleDBIDList, IntegerDBIDs {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNSubList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNSubList.java
index 4d1095e0..ac050ab9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNSubList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDKNNSubList.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDPair;
* Sublist of an existing result to contain only the first k elements.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class IntegerDBIDKNNSubList implements IntegerDBIDKNNList {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDMIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDMIter.java
index 6bf1cffd..bf6bfcd8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDMIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDMIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDMIter;
* Modifiable iterator interface for integer DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
interface IntegerDBIDMIter extends DBIDMIter, IntegerDBIDIter {
// Empty.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDPair.java
index cd50f00e..5ed718d3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDPair.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* DBID pair using two ints for storage.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
class IntegerDBIDPair implements DBIDPair, IntegerDBIDs {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java
index 2b790fb5..b7a21419 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRange.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.SetDBIDs;
* Representing a DBID range allocation.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
final class IntegerDBIDRange implements IntegerDBIDs, DBIDRange, SetDBIDs {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRef.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRef.java
index da21b007..e2cb0b2e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRef.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDRef.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* DBID reference that references an integer value.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDVar.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDVar.java
index 12e320e9..b2721a20 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDVar.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDVar.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
* should come for free!
*
* @author Erich Schubert
+ * @since 0.4.0
*/
class IntegerDBIDVar implements DBIDVar, IntegerDBIDs {
/**
@@ -165,7 +166,7 @@ class IntegerDBIDVar implements DBIDVar, IntegerDBIDs {
@Override
public String toString() {
- return Integer.toString(id);
+ return (id != Integer.MIN_VALUE) ? Integer.toString(id) : "null";
}
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDs.java
index 3146f829..50c2b950 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/IntegerDBIDs.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Integer DBID collection.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has IntegerDBIDIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ReusingDBIDFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ReusingDBIDFactory.java
index 02819f0f..ac4715a8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ReusingDBIDFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/ReusingDBIDFactory.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* TODO: manage fragmentation of ranges?
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java
index b49ab39a..99b96b03 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/SimpleDBIDFactory.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* negative values.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.stereotype factory
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java
index c3e77e99..e9c3b30c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TrivialDBIDFactory.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* sequence. All IDs will be positive.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.stereotype factory
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java
index 2fc54afd..912a501b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/TroveHashSetModifiableDBIDs.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Implementation using GNU Trove Int Hash Sets.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Itr
*/
@@ -158,7 +159,7 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs, IntegerDBID
}
@Override
- public void pop(DBIDVar outvar) {
+ public DBIDVar pop(DBIDVar outvar) {
if(store.size() == 0) {
throw new ArrayIndexOutOfBoundsException("Cannot pop() from an empty array.");
}
@@ -167,9 +168,8 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs, IntegerDBID
while(i-- > 0 && (states[i] != TPrimitiveHash.FULL)) {
; // Not occupied. Continue
}
- if(i < 0) {
- outvar.unset();
- return;
+ if(i < 0) { // Should never happen because size > 0
+ throw new ArrayIndexOutOfBoundsException("Cannot pop() from an empty array.");
}
final int val = store._set[i];
if(outvar instanceof IntegerDBIDVar) {
@@ -180,6 +180,7 @@ class TroveHashSetModifiableDBIDs implements HashSetModifiableDBIDs, IntegerDBID
}
// Unfortunately, not visible: store.removeAt(i);
store.remove(val);
+ return outvar;
}
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerArrayDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerArrayDBIDs.java
index b7c1fb87..402b780e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerArrayDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerArrayDBIDs.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* Unmodifiable wrapper for DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses IntegerArrayDBIDs
* @apiviz.has UnmodifiableDBIDIter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerDBIDs.java
index 2c4ad2f6..cd48f2b3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/ids/integer/UnmodifiableIntegerDBIDs.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.StaticDBIDs;
* Unmodifiable wrapper for DBIDs.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses IntegerDBIDs
* @apiviz.has UnmodifiableDBIDIter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DatabaseQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DatabaseQuery.java
index 703f0abd..f37694fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DatabaseQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DatabaseQuery.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.database.query;
* Will only contain elemental stuff such as some hints.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DistanceSimilarityQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DistanceSimilarityQuery.java
index 5f0ea430..aae16b79 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DistanceSimilarityQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/DistanceSimilarityQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.query.similarity.SimilarityQuery;
* combined implementations of both.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/LinearScanQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/LinearScanQuery.java
index ad580c97..fa4b43b7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/LinearScanQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/LinearScanQuery.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.database.query;
* Marker interface for linear scan (slow, non-accelerated) queries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses de.lmu.ifi.dbs.elki.database.Database
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java
index f37c7cc7..a52da9af 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDatabaseDistanceQuery.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Run a database query in a database context.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Database object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java
index b6ea580a..77aeccb4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/AbstractDistanceQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* distances.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param O Input object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java
index 2cb55529..3185376b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDDistanceQuery.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DBIDDistanceFunction;
* Run a distance query based on DBIDs
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses DBIDDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java
index 5976d247..70c17202 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DBIDRangeDistanceQuery.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DBIDRangeDistanceFunction;
* Run a distance query based on DBIDRanges
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses DBIDRangeDistanceFunction
@@ -59,6 +60,7 @@ public class DBIDRangeDistanceQuery extends DBIDDistanceQuery {
public DBIDRangeDistanceQuery(Relation<DBID> relation, DBIDRangeDistanceFunction distanceFunction) {
super(relation, distanceFunction);
this.range = DBIDUtil.assertRange(relation.getDBIDs());
+ distanceFunction.checkRange(this.range);
this.distanceFunction = distanceFunction;
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java
index c1ce98a1..6eac7fa8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/DistanceQuery.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
* distances.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java
index 1dbd0dff..a91c7e43 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction;
* Run a database query in a database context.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses PrimitiveDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java
index ccea951b..bb2c7d8c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/PrimitiveDistanceSimilarityQuery.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.PrimitiveSimilarityFuncti
* Combination query class, for convenience.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses PrimitiveSimilarityFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java
index 21e0deda..9ddc5bdb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialDistanceQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.SpatialPrimitiveDistanceFun
* Query interface for spatial distance queries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java
index f7272014..50ff7992 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/distance/SpatialPrimitiveDistanceQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.SpatialPrimitiveDistanceFun
/**
* Distance query for spatial distance functions
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses SpatialPrimitiveDistanceFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/AbstractDistanceKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/AbstractDistanceKNNQuery.java
index 883e4e74..69856801 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/AbstractDistanceKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/AbstractDistanceKNNQuery.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Instance for the query on a particular database.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractDistanceKNNQuery<O> implements KNNQuery<O> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/KNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/KNNQuery.java
index 67010016..cf214a4e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/KNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/KNNQuery.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.query.DatabaseQuery;
* The interface of an actual instance.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has KNNList oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanDistanceKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanDistanceKNNQuery.java
index 31e27242..8e362b56 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanDistanceKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanDistanceKNNQuery.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
* Instance of this query for a particular database.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has DistanceQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanEuclideanDistanceKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanEuclideanDistanceKNNQuery.java
index e4ca590d..807b194f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanEuclideanDistanceKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanEuclideanDistanceKNNQuery.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanD
* retrieve the query object from the relation only once!
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses PrimitiveDistanceQuery
* @apiviz.uses EuclideanDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanPrimitiveDistanceKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanPrimitiveDistanceKNNQuery.java
index ccb52533..a1234a43 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanPrimitiveDistanceKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/LinearScanPrimitiveDistanceKNNQuery.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction;
* retrieve the query object from the relation only once!
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses PrimitiveDistanceQuery
* @apiviz.uses PrimitiveDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/PreprocessorKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/PreprocessorKNNQuery.java
index 6a851b80..10957258 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/PreprocessorKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/knn/PreprocessorKNNQuery.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Instance for a particular database, invoking the preprocessor.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Data object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/AbstractDistanceRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/AbstractDistanceRangeQuery.java
index af121f59..809ccf25 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/AbstractDistanceRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/AbstractDistanceRangeQuery.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* instance
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Database object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanDistanceRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanDistanceRangeQuery.java
index 809d563b..bab6521c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanDistanceRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanDistanceRangeQuery.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
* Default linear scan range query class.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has DistanceQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanEuclideanDistanceRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanEuclideanDistanceRangeQuery.java
index d89b3b60..74e0bc6b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanEuclideanDistanceRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanEuclideanDistanceRangeQuery.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.SquaredEuclideanD
* Optimized linear scan for Euclidean distance range queries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses SquaredEuclideanDistanceFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanPrimitiveDistanceRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanPrimitiveDistanceRangeQuery.java
index 80828bd8..aff636fa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanPrimitiveDistanceRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/LinearScanPrimitiveDistanceRangeQuery.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction;
* once from the relation.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses PrimitiveDistanceQuery
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/RangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/RangeQuery.java
index 3dfe9c5e..f5cf8525 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/RangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/range/RangeQuery.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.query.DatabaseQuery;
* called "range queries".
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses DoubleDBIDList oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/AbstractRKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/AbstractRKNNQuery.java
index 32d19c76..36550fe4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/AbstractRKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/AbstractRKNNQuery.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Instance for the query on a particular database.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractRKNNQuery<O> implements RKNNQuery<O> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/LinearScanRKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/LinearScanRKNNQuery.java
index 60a64552..bd16a8a1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/LinearScanRKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/LinearScanRKNNQuery.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery;
* Default linear scan RKNN query class.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has KNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/PreprocessorRKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/PreprocessorRKNNQuery.java
index 2f971854..4be95a39 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/PreprocessorRKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/PreprocessorRKNNQuery.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Instance for a particular database, invoking the preprocessor.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
public class PreprocessorRKNNQuery<O> implements RKNNQuery<O> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/RKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/RKNNQuery.java
index a0822585..c45aa782 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/RKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/rknn/RKNNQuery.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.query.DatabaseQuery;
* Abstract reverse kNN Query interface.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses DoubleDBIDList oneway - - «create»
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractDBIDSimilarityQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractDBIDSimilarityQuery.java
index 142d0577..f30c4cdb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractDBIDSimilarityQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractDBIDSimilarityQuery.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Run a database query in a database context.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Database object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractSimilarityQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractSimilarityQuery.java
index 44e10020..08b51dcc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractSimilarityQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/AbstractSimilarityQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* similarity functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Input object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/PrimitiveSimilarityQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/PrimitiveSimilarityQuery.java
index b961222c..450f674e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/PrimitiveSimilarityQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/PrimitiveSimilarityQuery.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.PrimitiveSimilarityFuncti
* Run a database query in a database context.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has PrimitiveSimilarityFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/SimilarityQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/SimilarityQuery.java
index 9f9e2531..7dbf7403 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/SimilarityQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/query/similarity/SimilarityQuery.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.SimilarityFunction;
* similarity functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/AbstractRelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/AbstractRelation.java
index 9022c2d0..21694a4c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/AbstractRelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/AbstractRelation.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Abstract base class for relations.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java
index df4da4ef..6ab6753c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ConvertToStringView.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* representation.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ConvertToStringView extends AbstractRelation<String> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java
index f2a3b741..612b0755 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DBIDView.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Pseudo-representation that is the object ID itself.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class DBIDView extends AbstractRelation<DBID> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DoubleRelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DoubleRelation.java
index 73641b9c..35ce7bc4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DoubleRelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/DoubleRelation.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Interface for double-valued relations.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public interface DoubleRelation extends ModifiableRelation<Double> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedDoubleRelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedDoubleRelation.java
index 0d9c2a21..2b2d6ef7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedDoubleRelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedDoubleRelation.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* set(), remove the DBID, then delete().
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class MaterializedDoubleRelation extends AbstractRelation<Double>implements DoubleRelation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java
index a7aa2995..463c5c26 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/MaterializedRelation.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* TODO: is this semantic sane?
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ModifiableRelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ModifiableRelation.java
index 0127fa66..98cd93a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ModifiableRelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ModifiableRelation.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* creation (i.e. notifying them of inserts and deletions).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Data type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java
index 513dab9d..170d5ad2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProjectedView.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Projected relation view (non-materialized)
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <IN> Vector type
* @param <OUT> Vector type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java
index 51306d52..03221e94 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/ProxyView.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* passed on to the wrapped representation.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/Relation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/Relation.java
index 88b4b18d..9bc9eff2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/Relation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/Relation.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.result.HierarchicalResult;
* An object representation from a database.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses DBIDRef
* @apiviz.exclude TooltipStringVisualization
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
index ac9fed6d..2dd8c62e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/database/relation/RelationUtil.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Utility functions for handling database relation.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses Relation oneway
* @apiviz.has CollectionFromRelation
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/AbstractDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/AbstractDatabaseConnection.java
index e75187d4..72c1ff98 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/AbstractDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/AbstractDatabaseConnection.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* already provides the setting of the database according to parameters.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses ObjectFilter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ArrayAdapterDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ArrayAdapterDatabaseConnection.java
index 316ead88..a9cb0cd1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ArrayAdapterDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ArrayAdapterDatabaseConnection.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Note: this class is not parameterizable, but can only be used from Java.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class ArrayAdapterDatabaseConnection implements DatabaseConnection {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/BundleDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/BundleDatabaseConnection.java
index 58d2bbf7..2abd6f83 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/BundleDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/BundleDatabaseConnection.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* indexes.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.composedOf BundleReader
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ConcatenateFilesDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ConcatenateFilesDatabaseConnection.java
index ce639606..c5f98815 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ConcatenateFilesDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ConcatenateFilesDatabaseConnection.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileListParameter
* Database that will loading multiple files, concatenating the results.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class ConcatenateFilesDatabaseConnection extends AbstractDatabaseConnection {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DBIDRangeDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DBIDRangeDatabaseConnection.java
index 117a9eaa..2a50859e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DBIDRangeDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DBIDRangeDatabaseConnection.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* This is useful when using e.g. a distance matrix to access external data.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Description("This class generates a sequence of DBIDs to 'load' into a database. This is useful when using an external data matrix, and not requiring access to the actual vectors.")
public class DBIDRangeDatabaseConnection implements DatabaseConnection {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DatabaseConnection.java
index 77adf35b..42b62315 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/DatabaseConnection.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* an intermediate connection to a database system.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has MultipleObjectsBundle
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/EmptyDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/EmptyDatabaseConnection.java
index 4fb02813..f1198774 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/EmptyDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/EmptyDatabaseConnection.java
@@ -25,6 +25,7 @@ package de.lmu.ifi.dbs.elki.datasource;
import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -32,9 +33,11 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Pseudo database that is empty.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Title("Empty Database")
@Description("Dummy data source that does not provide any objects.")
+@Alias("de.lmu.ifi.dbs.elki.database.connection.EmptyDatabaseConnection")
public class EmptyDatabaseConnection extends AbstractDatabaseConnection {
/**
* Static logger
@@ -59,4 +62,4 @@ public class EmptyDatabaseConnection extends AbstractDatabaseConnection {
protected Logging getLogger() {
return LOG;
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ExternalIDJoinDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ExternalIDJoinDatabaseConnection.java
index 771f6c80..a04fb46d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ExternalIDJoinDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/ExternalIDJoinDatabaseConnection.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* Joins multiple data sources by their label
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses ExternalID
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/FileBasedDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/FileBasedDatabaseConnection.java
index 3fffb19d..a96b5f16 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/FileBasedDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/FileBasedDatabaseConnection.java
@@ -31,7 +31,10 @@ import java.io.InputStream;
import java.util.List;
import de.lmu.ifi.dbs.elki.datasource.filter.ObjectFilter;
+import de.lmu.ifi.dbs.elki.datasource.parser.ArffParser;
+import de.lmu.ifi.dbs.elki.datasource.parser.NumberVectorLabelParser;
import de.lmu.ifi.dbs.elki.datasource.parser.Parser;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.FileUtil;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -42,9 +45,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* File based database connection based on the parser to be set.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
*/
+@Alias("de.lmu.ifi.dbs.elki.database.connection.FileBasedDatabaseConnection")
public class FileBasedDatabaseConnection extends InputStreamDatabaseConnection {
/**
* Constructor.
@@ -115,12 +120,18 @@ public class FileBasedDatabaseConnection extends InputStreamDatabaseConnection {
@Override
protected void makeOptions(Parameterization config) {
+ Class<? extends Parser> defaultParser = NumberVectorLabelParser.class;
// Add the input file first, for usability reasons.
final FileParameter inputParam = new FileParameter(INPUT_ID, FileParameter.FileType.INPUT_FILE);
if(config.grab(inputParam)) {
infile = inputParam.getValue();
+ String nam = infile.getName();
+ if(nam != null && (nam.endsWith(".arff") || nam.endsWith(".arff.gz"))) {
+ defaultParser = ArffParser.class;
+ }
}
- super.makeOptions(config);
+ configParser(config, Parser.class, defaultParser);
+ configFilters(config);
}
@Override
@@ -128,4 +139,4 @@ public class FileBasedDatabaseConnection extends InputStreamDatabaseConnection {
return new FileBasedDatabaseConnection(filters, parser, infile);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/GeneratorXMLDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/GeneratorXMLDatabaseConnection.java
index 8d3df23b..201122ce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/GeneratorXMLDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/GeneratorXMLDatabaseConnection.java
@@ -75,6 +75,7 @@ import de.lmu.ifi.dbs.elki.utilities.xml.XMLNodeIterator;
* supported) data sets that satisfy a given specification file.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf GeneratorMain
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/InputStreamDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/InputStreamDatabaseConnection.java
index 444e15af..e82a2354 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/InputStreamDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/InputStreamDatabaseConnection.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Database connection expecting input from an input stream such as stdin.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.uses Parser oneway - - runs
*/
@@ -132,7 +133,6 @@ public class InputStreamDatabaseConnection extends AbstractDatabaseConnection {
public static class Parameterizer extends AbstractDatabaseConnection.Parameterizer {
@Override
protected void makeOptions(Parameterization config) {
- super.makeOptions(config);
configParser(config, Parser.class, NumberVectorLabelParser.class);
configFilters(config);
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/LabelJoinDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/LabelJoinDatabaseConnection.java
index 2e9e5fc9..28f010e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/LabelJoinDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/LabelJoinDatabaseConnection.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* Joins multiple data sources by their label
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses LabelList
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/MultipleObjectsBundleDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/MultipleObjectsBundleDatabaseConnection.java
index 249135c8..94b9aaa0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/MultipleObjectsBundleDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/MultipleObjectsBundleDatabaseConnection.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* database.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class MultipleObjectsBundleDatabaseConnection implements DatabaseConnection {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/PresortedBlindJoinDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/PresortedBlindJoinDatabaseConnection.java
index 1f36c0bf..2c7a0dc9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/PresortedBlindJoinDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/PresortedBlindJoinDatabaseConnection.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* sources are ordered appropriately!
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Description("Blindly joins multiple data sources, assuming they are ordered the same way.")
public class PresortedBlindJoinDatabaseConnection extends AbstractDatabaseConnection {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/RandomDoubleVectorDatabaseConnection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/RandomDoubleVectorDatabaseConnection.java
index 701f51c5..a34f8fe4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/RandomDoubleVectorDatabaseConnection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/RandomDoubleVectorDatabaseConnection.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Produce a database of random double vectors with each dimension in [0:1].
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class RandomDoubleVectorDatabaseConnection extends AbstractDatabaseConnection {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleMeta.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleMeta.java
index 041961ae..2be09983 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleMeta.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleMeta.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* it improves code readability and type safety.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf SimpleTypeInformation
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleReader.java
index e0534408..a9ee6dce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleReader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleReader.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* TODO: resize buffer when necessary?
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses MappedByteBuffer - - «reads»
* @apiviz.uses FileChannel - - «reads»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleStreamSource.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleStreamSource.java
index 7e98c135..9254e9da 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleStreamSource.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleStreamSource.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* Soruce for a bundle stream
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf BundleMeta
* @apiviz.has BundleStreamSource.Event
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleWriter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleWriter.java
index f4c2ece3..f5e3af9d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleWriter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/BundleWriter.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* Bundle streams that add new columns are not supported.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses BundleStreamSource - - «reads»
* @apiviz.uses WritableByteChannel - - «writes»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/MultipleObjectsBundle.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/MultipleObjectsBundle.java
index a910fb56..507ef6a6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/MultipleObjectsBundle.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/MultipleObjectsBundle.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* with multiple representations outside of any index structure.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/ObjectBundle.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/ObjectBundle.java
index 46ab032e..3af418c4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/ObjectBundle.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/ObjectBundle.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* Shared API for both single-object and multi-object packages.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf BundleMeta
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/SingleObjectBundle.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/SingleObjectBundle.java
index 0f93bcd1..0eacf962 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/SingleObjectBundle.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/SingleObjectBundle.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* representations outside of any index structure.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class SingleObjectBundle implements ObjectBundle {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/StreamFromBundle.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/StreamFromBundle.java
index 10762d4b..085aacdf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/StreamFromBundle.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/bundle/StreamFromBundle.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDVar;
* To use this, invoke {@link MultipleObjectsBundle#asStream()}.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class StreamFromBundle implements BundleStreamSource {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractConversionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractConversionFilter.java
index 57eb6501..dbb492d5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractConversionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractConversionFilter.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Abstract base class for simple conversion filters such as normalizations and projections.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <I> Input object type
* @param <O> Input object type
@@ -74,7 +75,7 @@ public abstract class AbstractConversionFilter<I, O> implements ObjectFilter {
// When necessary, perform an initialization scan
if(prepareStart(castType)) {
- FiniteProgress pprog = logger.isVerbose() ? new FiniteProgress("Preparing normalization.", objects.dataLength(), logger) : null;
+ FiniteProgress pprog = logger.isVerbose() ? new FiniteProgress("Preparing normalization", objects.dataLength(), logger) : null;
for(Object o : column) {
@SuppressWarnings("unchecked")
final I obj = (I) o;
@@ -90,7 +91,7 @@ public abstract class AbstractConversionFilter<I, O> implements ObjectFilter {
bundle.appendColumn(convertedType(castType), castColumn);
// Normalization scan
- FiniteProgress nprog = logger.isVerbose() ? new FiniteProgress("Data normalization.", objects.dataLength(), logger) : null;
+ FiniteProgress nprog = logger.isVerbose() ? new FiniteProgress("Data normalization", objects.dataLength(), logger) : null;
for(int i = 0; i < objects.dataLength(); i++) {
@SuppressWarnings("unchecked")
final I obj = (I) column.get(i);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamConversionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamConversionFilter.java
index 19aa0d53..57b8474a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamConversionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamConversionFilter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.BundleMeta;
* projections.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <I> Input object type
* @param <O> Input object type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamFilter.java
index f2cf7e62..19d8ce05 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractStreamFilter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* Abstract base class for streaming filters.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractStreamFilter implements StreamFilter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorConversionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorConversionFilter.java
index 4c4e92bd..4da87ed1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorConversionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorConversionFilter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* Abstract class for filters that produce number vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <I> Input vector type
* @param <O> Output vector type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorStreamConversionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorStreamConversionFilter.java
index b5111a22..80edde67 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorStreamConversionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/AbstractVectorStreamConversionFilter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* Abstract base class for streaming filters that produce vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <I> Input type
* @param <O> Output vector type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FilterUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FilterUtil.java
index d8da0f62..2dc97ef0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FilterUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FilterUtil.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
* Utilities for implementing filters.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public final class FilterUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FixedDBIDsFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FixedDBIDsFilter.java
index f6ae4a41..0177acb4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FixedDBIDsFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/FixedDBIDsFilter.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* the bundle by adding a column of DBID type to the bundle.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has DBIDRange oneway - - «produces»
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/NoOpFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/NoOpFilter.java
index 872daf19..c8c77e0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/NoOpFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/NoOpFilter.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* just use this dummy filter as first parameter.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class NoOpFilter extends AbstractStreamFilter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/ObjectFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/ObjectFilter.java
index cbf5fa85..ed541778 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/ObjectFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/ObjectFilter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* Object filters as part of the input step.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/StreamFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/StreamFilter.java
index 2e07c52c..9157967e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/StreamFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/StreamFilter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.BundleStreamSource;
* keep a reference to earlier data.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/DropNaNFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/DropNaNFilter.java
index 8eb54ab4..21300cea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/DropNaNFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/DropNaNFilter.java
@@ -44,8 +44,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: add support for sparse vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.DropNaNFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.DropNaNFilter")
public class DropNaNFilter extends AbstractStreamFilter {
/**
* Class logger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/NoMissingValuesFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/NoMissingValuesFilter.java
index 32b92a8a..a7c425e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/NoMissingValuesFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/NoMissingValuesFilter.java
@@ -36,8 +36,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* A filter to remove entries that have missing values.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.NoMissingValuesFilter" })
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.FilterNoMissingValuesFilter", //
+"de.lmu.ifi.dbs.elki.datasource.filter.NoMissingValuesFilter" })
public class NoMissingValuesFilter extends AbstractStreamFilter {
/**
* Class logger
@@ -130,4 +132,4 @@ public class NoMissingValuesFilter extends AbstractStreamFilter {
return new NoMissingValuesFilter();
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/ReplaceNaNWithRandomFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/ReplaceNaNWithRandomFilter.java
index 6ee9e220..a5222d8f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/ReplaceNaNWithRandomFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/ReplaceNaNWithRandomFilter.java
@@ -48,8 +48,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* TODO: add support for sparse vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.ReplaceNaNWithRandomFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.ReplaceNaNWithRandomFilter")
public class ReplaceNaNWithRandomFilter extends AbstractStreamFilter {
/**
* Class logger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/VectorDimensionalityFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/VectorDimensionalityFilter.java
index d0bafa31..33a9c13f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/VectorDimensionalityFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/cleaning/VectorDimensionalityFilter.java
@@ -44,10 +44,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Filter to remove all vectors that do not have the desired dimensionality.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> Vector type
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.VectorDimensionalityFilter" })
public class VectorDimensionalityFilter<V extends NumberVector> extends AbstractStreamFilter {
/**
* Class logger.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractNormalization.java
index e0cd3f09..0e6f783b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractNormalization.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.LinearEquationSystem;
* Abstract super class for all normalizations.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @param <V> Object type processed
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractStreamNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractStreamNormalization.java
index 1e61a206..e8b099ce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractStreamNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/AbstractStreamNormalization.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.LinearEquationSystem;
* Abstract super class for all normalizations.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Object type processed
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/NonNumericFeaturesException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/NonNumericFeaturesException.java
index 16175bc8..4f8cfb56 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/NonNumericFeaturesException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/NonNumericFeaturesException.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.datasource.filter.normalization;
* features have been expected.
*
* @author Arthur Zimek
+ * @since 0.4.0
*/
public class NonNumericFeaturesException extends Exception {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/Normalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/Normalization.java
index 26393bd9..ea08a93e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/Normalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/Normalization.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.LinearEquationSystem;
* dependencies quantitatively adapted to the original space.
*
* @author Arthur Zimek
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has NonNumericFeaturesException
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseBetaNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseBetaNormalization.java
index 2500a370..1b9b9d6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseBetaNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseBetaNormalization.java
@@ -59,13 +59,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* this.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> vector type
*
* @apiviz.uses NumberVector
* @apiviz.uses DistributionEstimator
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseBetaNormalization"})
public class AttributeWiseBetaNormalization<V extends NumberVector> implements Normalization<V> {
/**
* Class logger.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseCDFNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseCDFNormalization.java
index d4028f1e..6d2f77e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseCDFNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseCDFNormalization.java
@@ -64,6 +64,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* but they do not detail how to obtain an appropriate function `F`.
*
* @author Erich Schubert
+ * @since 0.6.0
* @param <V> vector type
*
* @apiviz.uses NumberVector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseErfNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseErfNormalization.java
index 83d24244..a099e533 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseErfNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseErfNormalization.java
@@ -36,12 +36,14 @@ import de.lmu.ifi.dbs.elki.utilities.Alias;
* sense when you have data that has been mean-variance normalized before.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Object type
*
* @apiviz.uses NumberVector
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseErfNormalization"})
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseErfNormalization", //
+"de.lmu.ifi.dbs.elki.datasource.filter.AttributeWiseErfNormalization" })
public class AttributeWiseErfNormalization<V extends NumberVector> extends AbstractNormalization<V> {
/**
* Class logger.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMADNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMADNormalization.java
index cdb60a4d..165aa4a1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMADNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMADNormalization.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ExceptionMessages;
* robust towards outliers, and only slightly more expensive to compute.
*
* @author Erich Schubert
+ * @since 0.6.0
* @param <V> vector type
*
* @apiviz.uses NumberVector
@@ -111,7 +112,7 @@ public class AttributeWiseMADNormalization<V extends NumberVector> implements No
// Scratch space for testing:
double[] test = new double[castColumn.size()];
- FiniteProgress dprog = LOG.isVerbose() ? new FiniteProgress("Analyzing data.", dim, LOG) : null;
+ FiniteProgress dprog = LOG.isVerbose() ? new FiniteProgress("Analyzing data", dim, LOG) : null;
// We iterate over dimensions, this kind of filter needs fast random
// access.
for(int d = 0; d < dim; d++) {
@@ -147,7 +148,7 @@ public class AttributeWiseMADNormalization<V extends NumberVector> implements No
}
LOG.ensureCompleted(dprog);
- FiniteProgress nprog = LOG.isVerbose() ? new FiniteProgress("Data normalization.", objects.dataLength(), LOG) : null;
+ FiniteProgress nprog = LOG.isVerbose() ? new FiniteProgress("Data normalization", objects.dataLength(), LOG) : null;
// Normalization scan
double[] buf = new double[dim];
for(int i = 0; i < objects.dataLength(); i++) {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMeanNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMeanNormalization.java
index 350f6188..4aedfe3d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMeanNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMeanNormalization.java
@@ -38,11 +38,11 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* attribute is scaled to have the same mean (but 0 is not changed).
*
* @author Erich Schubert
+ * @since 0.7.0
* @param <V> vector type
*
* @apiviz.uses NumberVector
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseMeanNormalization"})
public class AttributeWiseMeanNormalization<V extends NumberVector> extends AbstractNormalization<V> {
/**
* Class logger.
@@ -204,4 +204,4 @@ public class AttributeWiseMeanNormalization<V extends NumberVector> extends Abst
protected SimpleTypeInformation<? super V> getInputTypeRestriction() {
return TypeUtil.NUMBER_VECTOR_FIELD;
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMinMaxNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMinMaxNormalization.java
index 7981d4f5..8fbff47e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMinMaxNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseMinMaxNormalization.java
@@ -44,11 +44,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* given minimum and maximum in each dimension.
*
* @author Elke Achtert
+ * @since 0.4.0
* @param <V> vector type
*
* @apiviz.uses NumberVector
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseMinMaxNormalization" })
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseMinMaxNormalization", //
+"de.lmu.ifi.dbs.elki.datasource.filter.AttributeWiseMinMaxNormalization" })
public class AttributeWiseMinMaxNormalization<V extends NumberVector> extends AbstractNormalization<V> {
/**
* Class logger.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseVarianceNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseVarianceNormalization.java
index e997b907..d53f7ffd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseVarianceNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/AttributeWiseVarianceNormalization.java
@@ -46,11 +46,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* given mean and standard deviation in each dimension.
*
* @author Erich Schubert
+ * @since 0.4.0
* @param <V> vector type
*
* @apiviz.uses NumberVector
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseVarianceNormalization", "z" })
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.AttributeWiseVarianceNormalization", //
+"z", "de.lmu.ifi.dbs.elki.datasource.filter.AttributeWiseVarianceNormalization" })
public class AttributeWiseVarianceNormalization<V extends NumberVector> extends AbstractNormalization<V> {
/**
* Class logger.
@@ -277,4 +279,4 @@ public class AttributeWiseVarianceNormalization<V extends NumberVector> extends
return new AttributeWiseVarianceNormalization<>(mean, stddev);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/IntegerRankTieNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/IntegerRankTieNormalization.java
index 03c98023..d9733b78 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/IntegerRankTieNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/IntegerRankTieNormalization.java
@@ -45,8 +45,9 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.IntegerComparator;
* then, followed by the next on "4")
*
* @author Erich Schubert
+ * @since 0.5.0
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.IntegerRankTieNormalization"})
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.normalization.RankTieNormalization")
public class IntegerRankTieNormalization implements ObjectFilter {
/**
* Constructor.
@@ -147,4 +148,4 @@ public class IntegerRankTieNormalization implements ObjectFilter {
return (vx < vy) ? -1 : (vx == vy) ? 0 : +1;
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/InverseDocumentFrequencyNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/InverseDocumentFrequencyNormalization.java
index 3ebce57d..6b730fc1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/InverseDocumentFrequencyNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/columnwise/InverseDocumentFrequencyNormalization.java
@@ -38,12 +38,14 @@ import de.lmu.ifi.dbs.elki.utilities.Alias;
* frequency (IDF). See also: TF-IDF for text analysis.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses SparseNumberVector
*
* @param <V> Vector type
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.InverseDocumentFrequencyNormalization" })
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.InverseDocumentFrequencyNormalization", //
+"de.lmu.ifi.dbs.elki.datasource.filter.InverseDocumentFrequencyNormalization" })
public class InverseDocumentFrequencyNormalization<V extends SparseNumberVector> extends AbstractNormalization<V> {
/**
* Class logger.
@@ -127,4 +129,4 @@ public class InverseDocumentFrequencyNormalization<V extends SparseNumberVector>
protected Logging getLogger() {
return LOG;
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/HellingerHistogramNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/HellingerHistogramNormalization.java
index a79a3047..352e96dd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/HellingerHistogramNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/HellingerHistogramNormalization.java
@@ -39,10 +39,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* {@link de.lmu.ifi.dbs.elki.distance.distancefunction.probabilistic.HellingerDistanceFunction}
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> vector type
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.HellingerHistogramNormalization" })
public class HellingerHistogramNormalization<V extends NumberVector> extends AbstractStreamNormalization<V> {
/**
* Static instance.
@@ -94,4 +94,4 @@ public class HellingerHistogramNormalization<V extends NumberVector> extends Abs
return STATIC;
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceLogRankNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceLogRankNormalization.java
index 8f46b156..d8d0ff95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceLogRankNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceLogRankNormalization.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* largest is 1, but using log_2(1+x).
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMeanVarianceNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMeanVarianceNormalization.java
index a546ccd8..fa1eb6d1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMeanVarianceNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMeanVarianceNormalization.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Normalize vectors such that they have zero mean and unit variance.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMinMaxNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMinMaxNormalization.java
index f0b1ceea..fbbd4d46 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMinMaxNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceMinMaxNormalization.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Normalize vectors such that the smallest attribute is 0, the largest is 1.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceRankNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceRankNormalization.java
index f6058ecb..bd85d912 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceRankNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/InstanceRankNormalization.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* largest is 1.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/LengthNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/LengthNormalization.java
index df00683e..b82d1eba 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/LengthNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/LengthNormalization.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Heidi Kolb
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <V> vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/Log1PlusNormalization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/Log1PlusNormalization.java
index 04e27e73..737869ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/Log1PlusNormalization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/normalization/instancewise/Log1PlusNormalization.java
@@ -41,10 +41,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* By default b=1, and thus the transformation is log2(1+|x|).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <V> vector type
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.Log1PlusNormalization" })
public class Log1PlusNormalization<V extends NumberVector> extends AbstractStreamNormalization<V> {
/**
* Static instance.
@@ -116,4 +116,4 @@ public class Log1PlusNormalization<V extends NumberVector> extends AbstractStrea
return new Log1PlusNormalization<>(boost);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ByLabelFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ByLabelFilter.java
index 381001c0..962e3a7a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ByLabelFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ByLabelFilter.java
@@ -42,10 +42,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* A filter to select data set by their label.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses LabelList oneway - - «reads»
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.ByLabelFilter" })
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.ByLabelFilter", //
+"de.lmu.ifi.dbs.elki.datasource.filter.FilterByLabelFilter" })
public class ByLabelFilter extends AbstractStreamFilter {
/**
* Class logger
@@ -195,4 +197,4 @@ public class ByLabelFilter extends AbstractStreamFilter {
return new ByLabelFilter(pattern, inverted);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/RandomSamplingStreamFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/RandomSamplingStreamFilter.java
index faf6276f..9418a6c1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/RandomSamplingStreamFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/RandomSamplingStreamFilter.java
@@ -40,8 +40,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Subsampling stream filter.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.RandomSamplingStreamFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.RandomSamplingStreamFilter")
public class RandomSamplingStreamFilter extends AbstractStreamFilter {
/**
* Probability
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ShuffleObjectsFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ShuffleObjectsFilter.java
index 1d86a59d..16afb512 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ShuffleObjectsFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/ShuffleObjectsFilter.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* A filter to shuffle the dataset.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.ShuffleObjectsFilter" })
public class ShuffleObjectsFilter implements ObjectFilter {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/SortByLabelFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/SortByLabelFilter.java
index d1a7beb8..5b833c07 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/SortByLabelFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/selection/SortByLabelFilter.java
@@ -39,10 +39,11 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* A filter to sort the data set by some label.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses de.lmu.ifi.dbs.elki.data.LabelList oneway - - «reads»
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.SortByLabelFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.SortByLabelFilter")
public class SortByLabelFilter implements ObjectFilter {
/**
* Class logger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/AbstractSupervisedProjectionVectorFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/AbstractSupervisedProjectionVectorFilter.java
index bd89e7f1..3854ee7d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/AbstractSupervisedProjectionVectorFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/AbstractSupervisedProjectionVectorFilter.java
@@ -23,9 +23,6 @@ package de.lmu.ifi.dbs.elki.datasource.filter.transform;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import gnu.trove.list.TIntList;
-import gnu.trove.list.array.TIntArrayList;
-
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -42,12 +39,13 @@ import de.lmu.ifi.dbs.elki.datasource.filter.typeconversions.ClassLabelFilter;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayLikeUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
+import gnu.trove.list.TIntList;
+import gnu.trove.list.array.TIntArrayList;
/**
* Base class for supervised projection methods.
@@ -56,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Angela Peng
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> Vector type
*/
@@ -113,7 +112,7 @@ public abstract class AbstractSupervisedProjectionVectorFilter<V extends NumberV
List<V> vectorcolumn = (List<V>) column;
final VectorFieldTypeInformation<?> vtype = (VectorFieldTypeInformation<?>) type;
@SuppressWarnings("unchecked")
- NumberVector.Factory<V> factory = (NumberVector.Factory<V> ) vtype.getFactory();
+ NumberVector.Factory<V> factory = (NumberVector.Factory<V>) vtype.getFactory();
int dim = vtype.getDimensionality();
if(tdim > dim) {
@@ -127,7 +126,7 @@ public abstract class AbstractSupervisedProjectionVectorFilter<V extends NumberV
Matrix proj = computeProjectionMatrix(vectorcolumn, classcolumn, dim);
for(int i = 0; i < dataLength; i++) {
final Vector pv = proj.times(vectorcolumn.get(i).getColumnVector());
- V filteredObj = factory.newNumberVector(pv, ArrayLikeUtil.VECTORADAPTER);
+ V filteredObj = factory.newNumberVector(pv);
vectorcolumn.set(i, filteredObj);
}
bundle.appendColumn(convertedType(type, factory), column);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java
index af1aa3af..8c1d161c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ClassicMultidimensionalScalingTransform.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* instead.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf SingularValueDecomposition
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/FastMultidimensionalScalingTransform.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/FastMultidimensionalScalingTransform.java
index 121e500b..7270b3ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/FastMultidimensionalScalingTransform.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/FastMultidimensionalScalingTransform.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* This implementation is O(n^2), and uses O(n^2) memory.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/GlobalPrincipalComponentAnalysisTransform.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/GlobalPrincipalComponentAnalysisTransform.java
index 86b30c0c..20b64eb0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/GlobalPrincipalComponentAnalysisTransform.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/GlobalPrincipalComponentAnalysisTransform.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* {@link Parameterizer#FILTER_ID} parameter!
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf PCARunner
* @apiviz.composedOf CovarianceMatrix
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/HistogramJitterFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/HistogramJitterFilter.java
index 609ee0c9..a88ec88d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/HistogramJitterFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/HistogramJitterFilter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.datasource.filter.AbstractVectorStreamConversionFilter;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
import de.lmu.ifi.dbs.elki.math.statistics.distribution.ExponentialDistribution;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -52,10 +53,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* to control the degradation amount.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <V> Vector type
*/
@Description("Add uniform Jitter to a dataset, while preserving the total vector sum.")
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.HistogramJitterFilter")
public class HistogramJitterFilter<V extends NumberVector> extends AbstractVectorStreamConversionFilter<V, V> {
/**
* Jitter amount.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LatLngToECEFFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LatLngToECEFFilter.java
index e82f07d1..9284f4ab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LatLngToECEFFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LatLngToECEFFilter.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Z), such that Euclidean distance is line-of-sight.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses NumberVector
* @apiviz.composedOf EarthModel
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LinearDiscriminantAnalysisFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LinearDiscriminantAnalysisFilter.java
index 58e29021..08ebcc8b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LinearDiscriminantAnalysisFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LinearDiscriminantAnalysisFilter.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Angela Peng
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LngLatToECEFFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LngLatToECEFFilter.java
index fae5ee9f..7fcabaaf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LngLatToECEFFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/LngLatToECEFFilter.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Z), such that Euclidean distance is line-of-sight.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses NumberVector
* @apiviz.composedOf EarthModel
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorFeatureSelectionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorFeatureSelectionFilter.java
index e2a03544..2716b830 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorFeatureSelectionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorFeatureSelectionFilter.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntListParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.4.0
*
* @apiviz.uses NumberVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorRandomFeatureSelectionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorRandomFeatureSelectionFilter.java
index fff1f44a..fca5aa73 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorRandomFeatureSelectionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/NumberVectorRandomFeatureSelectionFilter.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* randomly selected subset of attributes.
*
* @author Arthur Zimek
+ * @since 0.4.0
*
* @apiviz.uses NumberVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/PerturbationFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/PerturbationFilter.java
index 680cd023..afae04a2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/PerturbationFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/PerturbationFilter.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.LongParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
@Title("Data Perturbation for Outlier Detection Ensembles")
@Description("A filter to perturb a datasset on read by an additive noise component, implemented for use in an outlier ensemble (this reference).")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ProjectionFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ProjectionFilter.java
index ed87b8db..2074929e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ProjectionFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/transform/ProjectionFilter.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Apply a projection to the data.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf Projection
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFilter.java
index 4e48adbc..33b715dc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFilter.java
@@ -44,11 +44,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Class that turns a label column into a class label column.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses LabelList oneway - - «reads»
* @apiviz.has ClassLabel
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.ClassLabelFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.ClassLabelFilter")
public class ClassLabelFilter implements ObjectFilter {
/**
* The index of the label to be used as class label, null if no class label is
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFromPatternFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFromPatternFilter.java
index 0d3279ce..1eab3804 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFromPatternFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ClassLabelFromPatternFilter.java
@@ -44,8 +44,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
* Streaming filter to derive an outlier class label.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.ClassLabelFromPatternFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.ClassLabelFromPatternFilter")
public class ClassLabelFromPatternFilter extends AbstractStreamFilter {
/**
* Current meta data
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ExternalIDFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ExternalIDFilter.java
index 72ac5578..b6baaebf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ExternalIDFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/ExternalIDFilter.java
@@ -42,11 +42,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Class that turns a label column into an external ID column.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses LabelList oneway - - «reads»
* @apiviz.has ExternalID oneway - - «produces»
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.ExternalIDFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.ExternalIDFilter")
public class ExternalIDFilter implements ObjectFilter {
/**
* The index of the label to be used as external Id.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/MultivariateTimeSeriesFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/MultivariateTimeSeriesFilter.java
index 4ee50783..5d4e253b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/MultivariateTimeSeriesFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/MultivariateTimeSeriesFilter.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Class to "fold" a flat number vector into a multivariate time series.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SparseVectorFieldFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SparseVectorFieldFilter.java
index 86092f7c..f174eb70 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SparseVectorFieldFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SparseVectorFieldFilter.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.Alias;
* the maximum dimensionality for each vector.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SplitNumberVectorFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SplitNumberVectorFilter.java
index bf1e415f..95e3fd6a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SplitNumberVectorFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/SplitNumberVectorFilter.java
@@ -45,12 +45,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntListParameter;
* Split an existing column into two types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses NumberVector
*
* @param <V> Vector type
*/
-@Alias({ "de.lmu.ifi.dbs.elki.datasource.filter.normalization.SplitNumberVectorFilter" })
+@Alias("de.lmu.ifi.dbs.elki.datasource.filter.SplitNumberVectorFilter")
public class SplitNumberVectorFilter<V extends NumberVector> implements ObjectFilter {
/**
* Selected dimensions.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainSplitFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainSplitFilter.java
index 0ae85cd2..68dcf218 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainSplitFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainSplitFilter.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* uncertain observation.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class UncertainSplitFilter extends AbstractConversionFilter<NumberVector, UnweightedDiscreteUncertainObject> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainifyFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainifyFilter.java
index e45b964c..ccd8e72f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainifyFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/UncertainifyFilter.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Alexander Koos
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <UO> Uncertain object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/WeightedUncertainSplitFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/WeightedUncertainSplitFilter.java
index 48df989b..0a10b036 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/WeightedUncertainSplitFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/filter/typeconversions/WeightedUncertainSplitFilter.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* interpret as uncertain observation.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class WeightedUncertainSplitFilter extends AbstractConversionFilter<NumberVector, WeightedDiscreteUncertainObject> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/AbstractStreamingParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/AbstractStreamingParser.java
index 642a7cf1..3671a447 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/AbstractStreamingParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/AbstractStreamingParser.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Base class for streaming parsers.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses CSVReaderFormat
* @apiviz.composedOf TokenizedReader
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ArffParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ArffParser.java
index 515c68c4..9a2cf786 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ArffParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ArffParser.java
@@ -68,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* TODO: allow optional class labels.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ArffParser implements Parser {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/BitVectorLabelParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/BitVectorLabelParser.java
index e6060bb4..ddef1548 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/BitVectorLabelParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/BitVectorLabelParser.java
@@ -23,12 +23,14 @@ package de.lmu.ifi.dbs.elki.datasource.parser;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import gnu.trove.list.array.TLongArrayList;
+
import de.lmu.ifi.dbs.elki.data.BitVector;
import de.lmu.ifi.dbs.elki.data.LabelList;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
+import gnu.trove.list.array.TLongArrayList;
/**
* Parser for parsing one BitVector per line, bits separated by whitespace.
@@ -37,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Bit. Lines starting with &quot;#&quot; will be ignored.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has BitVector
*/
@@ -47,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
"If this fails, it will be appended to a label. " + //
"(Thus, any label must not be parseable as Bit.) " + //
"Empty lines and lines beginning with \"#\" will be ignored.")
+@Alias("de.lmu.ifi.dbs.elki.parser.BitVectorLabelParser")
public class BitVectorLabelParser extends NumberVectorLabelParser<BitVector> implements Parser {
/**
* Class logger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CSVReaderFormat.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CSVReaderFormat.java
index c0adbabd..5104f83d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CSVReaderFormat.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CSVReaderFormat.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has TokenizedReader
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CategorialDataAsNumberVectorParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CategorialDataAsNumberVectorParser.java
index 86054b86..9f6f9c42 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CategorialDataAsNumberVectorParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/CategorialDataAsNumberVectorParser.java
@@ -40,6 +40,7 @@ import gnu.trove.map.hash.TObjectIntHashMap;
* TODO: specify handling for numerical values.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.landmark
* @apiviz.has NumberVector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ClusteringVectorParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ClusteringVectorParser.java
index e6b8d82b..26dd9acc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ClusteringVectorParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/ClusteringVectorParser.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* TODO: support noise, via negative cluster numbers?
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Clustering
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/LibSVMFormatParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/LibSVMFormatParser.java
index fab7bc60..8e5dae65 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/LibSVMFormatParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/LibSVMFormatParser.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* <tt>#</tt>.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/NumberVectorLabelParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/NumberVectorLabelParser.java
index aaca0190..f3584932 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/NumberVectorLabelParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/NumberVectorLabelParser.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation;
import de.lmu.ifi.dbs.elki.data.type.VectorTypeInformation;
import de.lmu.ifi.dbs.elki.datasource.bundle.BundleMeta;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
import de.lmu.ifi.dbs.elki.utilities.datastructures.hash.Unique;
@@ -59,12 +60,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has NumberVector
*
* @param <V> the type of NumberVector used
*/
+@Alias({ "de.lmu.ifi.dbs.elki.parser.NumberVectorLabelParser", //
+"de.lmu.ifi.dbs.elki.parser.RealVectorLabelParser" })
public class NumberVectorLabelParser<V extends NumberVector> extends AbstractStreamingParser {
/**
* Logging class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/Parser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/Parser.java
index c9ba4d1a..649fb1fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/Parser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/Parser.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* A Parser shall provide a ParsingResult by parsing an InputStream.
*
* @author Arthur Zimek
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses InputStream
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimplePolygonParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimplePolygonParser.java
index 4abd76c6..e291214c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimplePolygonParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimplePolygonParser.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* Unparseable parts will be treated as labels.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has PolygonsObject
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimpleTransactionParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimpleTransactionParser.java
index 6fb96359..5fbf8af7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimpleTransactionParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SimpleTransactionParser.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* of tokens.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has BitVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SparseNumberVectorLabelParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SparseNumberVectorLabelParser.java
index 478a9686..f6061fa6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SparseNumberVectorLabelParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/SparseNumberVectorLabelParser.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has SparseNumberVector
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StreamingParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StreamingParser.java
index a189cd86..a3cb7a99 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StreamingParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StreamingParser.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.BundleStreamSource;
* combination with filters.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface StreamingParser extends Parser, BundleStreamSource {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StringParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StringParser.java
index 0110ea9a..8750df85 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StringParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/StringParser.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
*
* @author Felix Stahlberg
* @author Erich Schubert
+ * @since 0.6.0
*/
@Title("String Parser")
@Description("Parses new line separated strings")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/TermFrequencyParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/TermFrequencyParser.java
index da0aca26..ccaac348 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/TermFrequencyParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/datasource/parser/TermFrequencyParser.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* {@link SimpleTransactionParser} instead.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has SparseNumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDBIDRangeDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDBIDRangeDistanceFunction.java
index b858f6dd..330f1f6a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDBIDRangeDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDBIDRangeDistanceFunction.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* within a consecutive range. This is beneficial for external distances.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractDBIDRangeDistanceFunction extends AbstractDatabaseDistanceFunction<DBID> implements DBIDRangeDistanceFunction {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDatabaseDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDatabaseDistanceFunction.java
index 3bd107ca..851e7dc6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDatabaseDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractDatabaseDistanceFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Abstract super class for distance functions needing a database context.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.has AbstractDatabaseDistanceFunction.Instance
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractIndexBasedDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractIndexBasedDistanceFunction.java
index 73eed528..1676364e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractIndexBasedDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractIndexBasedDistanceFunction.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract super class for distance functions needing a database index.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.has AbstractIndexBasedDistanceFunction.Instance
* @apiviz.composedOf IndexFactory
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorDistanceFunction.java
index b4de6fbf..56dd19ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorDistanceFunction.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
* on number vectors and returning double values.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorNorm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorNorm.java
index 59273fc5..7af85c0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorNorm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractNumberVectorNorm.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* norms.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractPrimitiveDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractPrimitiveDistanceFunction.java
index a19199b9..e06e2c5b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractPrimitiveDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractPrimitiveDistanceFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* AbstractDistanceFunction provides some methods valid for any extending class.
*
* @author Arthur Zimek
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialDistanceFunction.java
index a36faa3f..e73cb7bc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialDistanceFunction.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* distance functions easier.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractSpatialDistanceFunction extends AbstractNumberVectorDistanceFunction implements SpatialPrimitiveDistanceFunction<NumberVector> {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialNorm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialNorm.java
index b8915ef1..bc3fc200 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialNorm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/AbstractSpatialNorm.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* distance functions easier.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java
index b8227739..a51544e7 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ArcCosineDistanceFunction.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* value, i.e., <code>arccos(&lt;v1,v2&gt;)</code>.
*
* @author Arthur Zimek
+ * @since 0.2
*/
@Alias({ "arccos" })
public class ArcCosineDistanceFunction extends AbstractSpatialDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/BrayCurtisDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/BrayCurtisDistanceFunction.java
index 46770514..dafe9c65 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/BrayCurtisDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/BrayCurtisDistanceFunction.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: add a version optimized for sparse vectors / binary data.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Alias({ "bray-curtis", "braycurtis", "sorensen", "dice", "sorensen-dice" })
@Reference(authors = "J. R. Bray and J. T. Curtis", title = "An ordination of the upland forest communities of southern Wisconsin", booktitle = "Ecological monographs 27.4", url = "http://dx.doi.org/10.2307/1942268")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CanberraDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CanberraDistanceFunction.java
index 530ee70d..f373e2e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CanberraDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CanberraDistanceFunction.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "G. N. Lance, W. T. Williams", //
title = "Computer programs for hierarchical polythetic classification (similarity analyses)", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ClarkDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ClarkDistanceFunction.java
index 128d7e80..56f7de86 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ClarkDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/ClarkDistanceFunction.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "M.-M. Deza and E. Deza", title = "Dictionary of distances", booktitle = "Dictionary of distances")
public class ClarkDistanceFunction extends AbstractSpatialDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java
index b0f55abd..ec9a9bf6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/CosineDistanceFunction.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* <code>1-(cosine similarity)</code>.
*
* @author Arthur Zimek
+ * @since 0.2
*/
@Alias({ "cosine" })
public class CosineDistanceFunction extends AbstractSpatialDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDDistanceFunction.java
index 4a1803da..8f3ee417 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDDistanceFunction.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* Example: external precomputed distances
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses DBID oneway - - defined on
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDRangeDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDRangeDistanceFunction.java
index 23284d1a..6c121ce5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDRangeDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DBIDRangeDistanceFunction.java
@@ -1,5 +1,7 @@
package de.lmu.ifi.dbs.elki.distance.distancefunction;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
+
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -34,6 +36,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction;
* Example: external precomputed distances
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses de.lmu.ifi.dbs.elki.database.ids.DBIDRange oneway - - defined on
@@ -47,4 +50,12 @@ public interface DBIDRangeDistanceFunction extends DBIDDistanceFunction {
* @return Distance
*/
double distance(int i1, int i2);
+
+ /**
+ * Validate the range of DBIDs to use. This will log a warning if an obvious
+ * mismatch was found.
+ *
+ * @param range DBID range
+ */
+ void checkRange(DBIDRange range);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DistanceFunction.java
index d53c9e26..375083d1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/DistanceFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Base interface for any kind of distances.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <O> Object type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/IndexBasedDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/IndexBasedDistanceFunction.java
index 8b41f956..9e24c934 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/IndexBasedDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/IndexBasedDistanceFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* Distance function relying on an index (such as preprocessed neighborhoods).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.stereotype factory
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Kulczynski1DistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Kulczynski1DistanceFunction.java
index 2baa2466..da8ea270 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Kulczynski1DistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Kulczynski1DistanceFunction.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "M.-M. Deza and E. Deza", title = "Dictionary of distances", booktitle = "Dictionary of distances")
public class Kulczynski1DistanceFunction extends AbstractSpatialDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/LorentzianDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/LorentzianDistanceFunction.java
index cbb193ac..fdf6de66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/LorentzianDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/LorentzianDistanceFunction.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "M.-M. Deza and E. Deza", title = "Dictionary of distances", booktitle = "Dictionary of distances")
public class LorentzianDistanceFunction extends AbstractSpatialNorm {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/MatrixWeightedDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/MatrixWeightedDistanceFunction.java
index 40b8b900..006e2bd0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/MatrixWeightedDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/MatrixWeightedDistanceFunction.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* Weighted distance for feature vectors.
*
* @author Elke Achtert
+ * @since 0.2
*/
// TODO: Factory with parameterizable weight matrix?
public class MatrixWeightedDistanceFunction extends AbstractNumberVectorDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Norm.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Norm.java
index f25c91be..ba7724a6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Norm.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/Norm.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction;
* Abstract interface for a mathematical norm.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/NumberVectorDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/NumberVectorDistanceFunction.java
index 3b6021e0..7840d0b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/NumberVectorDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/NumberVectorDistanceFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/PrimitiveDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/PrimitiveDistanceFunction.java
index 2a3ae0c1..0995e7b9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/PrimitiveDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/PrimitiveDistanceFunction.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* Primitive distance function that is defined on some kind of object.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
index e1eafbad..d6ced169 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/RandomStableDistanceFunction.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* metrical.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class RandomStableDistanceFunction extends AbstractDatabaseDistanceFunction<DBID> implements DBIDDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SharedNearestNeighborJaccardDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SharedNearestNeighborJaccardDistanceFunction.java
index c11a3448..691a7373 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SharedNearestNeighborJaccardDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SharedNearestNeighborJaccardDistanceFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* coefficient, which is a proper distance metric.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses
* de.lmu.ifi.dbs.elki.index.preprocessed.snn.SharedNearestNeighborIndex
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SpatialPrimitiveDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SpatialPrimitiveDistanceFunction.java
index 2611c36f..d8d246e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SpatialPrimitiveDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/SpatialPrimitiveDistanceFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* API for a spatial primitive distance function.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedCanberraDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedCanberraDistanceFunction.java
index bd4fb5db..8c2b382e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedCanberraDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedCanberraDistanceFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* Weighted Canberra distance function, a variation of Manhattan distance.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class WeightedCanberraDistanceFunction extends AbstractSpatialDistanceFunction implements WeightedNumberVectorDistanceFunction<NumberVector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedNumberVectorDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedNumberVectorDistanceFunction.java
index 682b394a..2890292b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedNumberVectorDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/WeightedNumberVectorDistanceFunction.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* Distance functions where each dimension is assigned a weight.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <V> Vector type, usually NumberVector or above.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/AbstractSimilarityAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/AbstractSimilarityAdapter.java
index f77c4927..31138c4d 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/AbstractSimilarityAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/AbstractSimilarityAdapter.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* equation.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/ArccosSimilarityAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/ArccosSimilarityAdapter.java
index 4931c4e8..87cadf1a 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/ArccosSimilarityAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/ArccosSimilarityAdapter.java
@@ -28,17 +28,20 @@ import de.lmu.ifi.dbs.elki.database.query.similarity.SimilarityQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.distance.similarityfunction.NormalizedSimilarityFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
/**
* Adapter from a normalized similarity function to a distance function using
* <code>arccos(sim)</code>.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Instance
*
* @param <O> Object class to process.
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.adapter.SimilarityAdapterArccos")
public class ArccosSimilarityAdapter<O> extends AbstractSimilarityAdapter<O> {
/**
* Constructor.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LinearAdapterLinear.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LinearAdapterLinear.java
index 63b681e9..4d1f76c4 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LinearAdapterLinear.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LinearAdapterLinear.java
@@ -28,17 +28,20 @@ import de.lmu.ifi.dbs.elki.database.query.similarity.SimilarityQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.distance.similarityfunction.NormalizedSimilarityFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
/**
* Adapter from a normalized similarity function to a distance function using
* <code>1 - sim</code>.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Instance
*
* @param <O> Object class to process.
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.adapter.SimilarityAdapterLinear")
public class LinearAdapterLinear<O> extends AbstractSimilarityAdapter<O> {
/**
* Constructor.
@@ -98,4 +101,4 @@ public class LinearAdapterLinear<O> extends AbstractSimilarityAdapter<O> {
return NORMALIZED_SIMILARITY;
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LnSimilarityAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LnSimilarityAdapter.java
index f3002e1a..1ccc3749 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LnSimilarityAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/adapter/LnSimilarityAdapter.java
@@ -28,17 +28,20 @@ import de.lmu.ifi.dbs.elki.database.query.similarity.SimilarityQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.distance.similarityfunction.NormalizedSimilarityFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
/**
* Adapter from a normalized similarity function to a distance function using
* <code>-log(sim)</code>.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Instance
*
* @param <O> object class to process.
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.adapter.SimilarityAdapterLn")
public class LnSimilarityAdapter<O> extends AbstractSimilarityAdapter<O> {
/**
* Constructor.
@@ -98,4 +101,4 @@ public class LnSimilarityAdapter<O> extends AbstractSimilarityAdapter<O> {
return NORMALIZED_SIMILARITY;
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HSBHistogramQuadraticDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HSBHistogramQuadraticDistanceFunction.java
index ec5e4a90..48383915 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HSBHistogramQuadraticDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HSBHistogramQuadraticDistanceFunction.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntListParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "J. R. Smith, S. F. Chang", title = "VisualSEEk: a fully automated content-based image query system", booktitle = "Proceedings of the fourth ACM international conference on Multimedia 1997", url = "http://dx.doi.org/10.1145/244130.244151")
public class HSBHistogramQuadraticDistanceFunction extends MatrixWeightedDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HistogramIntersectionDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HistogramIntersectionDistanceFunction.java
index e4141684..ba5e129b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HistogramIntersectionDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/HistogramIntersectionDistanceFunction.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* International Journal of Computer Vision, 7(1), 32, 1991
*
* @author Erich Schubert
+ * @since 0.3
*/
@Title("Color histogram intersection distance")
@Description("Distance function for color histograms that emphasizes 'strong' bins.")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/RGBHistogramQuadraticDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/RGBHistogramQuadraticDistanceFunction.java
index 70935d28..01540f98 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/RGBHistogramQuadraticDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/colorhistogram/RGBHistogramQuadraticDistanceFunction.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "J. Hafner, H. S.Sawhney, W. Equits, M. Flickner, W. Niblack", title = "Efficient Color Histogram Indexing for Quadratic Form Distance Functions", booktitle = "IEEE Trans. on Pattern Analysis and Machine Intelligence, Vol. 17, No. 7, July 1995", url = "http://dx.doi.org/10.1109/34.391417")
public class RGBHistogramQuadraticDistanceFunction extends MatrixWeightedDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsolutePearsonCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsolutePearsonCorrelationDistanceFunction.java
index c0033742..df2c3018 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsolutePearsonCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsolutePearsonCorrelationDistanceFunction.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* uncorrelated.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class AbsolutePearsonCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsoluteUncenteredCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsoluteUncenteredCorrelationDistanceFunction.java
index 50321129..b37719db 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsoluteUncenteredCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/AbsoluteUncenteredCorrelationDistanceFunction.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* but uses a fixed mean of 0 instead of the sample mean.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class AbsoluteUncenteredCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/PearsonCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/PearsonCorrelationDistanceFunction.java
index 0a0c6dc9..0bcafa43 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/PearsonCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/PearsonCorrelationDistanceFunction.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* will be intermediate (around 1).
*
* @author Arthur Zimek
+ * @since 0.3
*/
public class PearsonCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredPearsonCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredPearsonCorrelationDistanceFunction.java
index ea1cede4..f98235d4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredPearsonCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredPearsonCorrelationDistanceFunction.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* 1).
*
* @author Arthur Zimek
+ * @since 0.3
*/
public class SquaredPearsonCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredUncenteredCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredUncenteredCorrelationDistanceFunction.java
index 5f39b0ad..0828c82a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredUncenteredCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/SquaredUncenteredCorrelationDistanceFunction.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* but uses a fixed mean of 0 instead of the sample mean.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class SquaredUncenteredCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/UncenteredCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/UncenteredCorrelationDistanceFunction.java
index 83bb7e7d..e5f6dd18 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/UncenteredCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/UncenteredCorrelationDistanceFunction.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* uses a fixed mean of 0 instead of the sample mean.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class UncenteredCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedPearsonCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedPearsonCorrelationDistanceFunction.java
index 60ed0638..70c8f34e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedPearsonCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedPearsonCorrelationDistanceFunction.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.3
*/
public class WeightedPearsonCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction implements WeightedNumberVectorDistanceFunction<NumberVector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedSquaredPearsonCorrelationDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedSquaredPearsonCorrelationDistanceFunction.java
index 4ec94227..108f8f97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedSquaredPearsonCorrelationDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/correlation/WeightedSquaredPearsonCorrelationDistanceFunction.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.3
*/
public class WeightedSquaredPearsonCorrelationDistanceFunction extends AbstractNumberVectorDistanceFunction implements WeightedNumberVectorDistanceFunction<NumberVector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/AsciiDistanceParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/AsciiDistanceParser.java
index 2122f43b..61552730 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/AsciiDistanceParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/AsciiDistanceParser.java
@@ -29,6 +29,7 @@ import java.io.InputStream;
import de.lmu.ifi.dbs.elki.datasource.parser.CSVReaderFormat;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.IndefiniteProgress;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -41,11 +42,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Parser for parsing one distance value per line.
*
* A line must have the following format: {@code id1 id2 distanceValue}, where
- * id1 and id2 are integers representing the two ids belonging to the distance
- * value. Lines starting with &quot;#&quot; will be ignored.
+ * id1 and id2 are integers starting at 0 representing the two ids belonging to
+ * the distance value. Lines starting with &quot;#&quot; will be ignored.
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses CSVReaderFormat
* @apiviz.composedOf TokenizedReader
@@ -54,8 +56,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*/
@Title("Number Distance Parser")
@Description("Parser for the following line format:\n" //
- + "id1 id2 distanceValue, where id1 and is2 are integers representing the two ids belonging to the distance value.\n" //
- + "The ids and the distance value are separated by whitespace. Empty lines and lines beginning with \"#\" will be ignored.")
++ "id1 id2 distanceValue, where id1 and is2 are integers starting at 0 representing the two ids belonging to the distance value.\n" //
++ "The ids and the distance value are separated by whitespace. Empty lines and lines beginning with \"#\" will be ignored.")
+@Alias({ "de.lmu.ifi.dbs.elki.datasource.parser.NumberDistanceParser", //
+"de.lmu.ifi.dbs.elki.distance.distancefunction.external.NumberDistanceParser", //
+"de.lmu.ifi.dbs.elki.parser.NumberDistanceParser" })
public class AsciiDistanceParser implements DistanceParser {
/**
* The logger for this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedDoubleDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedDoubleDistanceFunction.java
index 6bfd6df0..5ad01b72 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedDoubleDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedDoubleDistanceFunction.java
@@ -26,7 +26,9 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
import java.io.File;
import java.io.IOException;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractDBIDRangeDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.persistent.OnDiskUpperTriangleMatrix;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -42,11 +44,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* matrix of an external binary matrix file.
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("File based double distance for database objects.")
@Description("Loads double distance values from an external matrix.")
public class DiskCacheBasedDoubleDistanceFunction extends AbstractDBIDRangeDistanceFunction {
- // TODO: constructor with file.
+ /**
+ * Class logger.
+ */
+ private static final Logging LOG = Logging.getLogger(DiskCacheBasedDoubleDistanceFunction.class);
/**
* Magic to identify double cache matrices
@@ -68,6 +74,17 @@ public class DiskCacheBasedDoubleDistanceFunction extends AbstractDBIDRangeDista
this.cache = cache;
}
+ /**
+ * Constructor.
+ *
+ * @param matrixfile File name
+ * @throws IOException
+ */
+ public DiskCacheBasedDoubleDistanceFunction(File matrixfile) throws IOException {
+ super();
+ this.cache = new OnDiskUpperTriangleMatrix(matrixfile, DOUBLE_CACHE_MAGIC, 0, ByteArrayUtil.SIZE_DOUBLE, false);
+ }
+
@Override
public double distance(int i1, int i2) {
// the smaller id is the first key
@@ -84,6 +101,13 @@ public class DiskCacheBasedDoubleDistanceFunction extends AbstractDBIDRangeDista
}
@Override
+ public void checkRange(DBIDRange range) {
+ if(cache.getMatrixSize() < range.size()) {
+ LOG.warning("Distance matrix has size " + cache.getMatrixSize() + " but range has size: " + range.size());
+ }
+ }
+
+ @Override
public boolean equals(Object obj) {
if(obj == null) {
return false;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedFloatDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedFloatDistanceFunction.java
index de8d96b4..b6731a30 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedFloatDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DiskCacheBasedFloatDistanceFunction.java
@@ -26,7 +26,9 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
import java.io.File;
import java.io.IOException;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractDBIDRangeDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.persistent.OnDiskUpperTriangleMatrix;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -41,11 +43,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* of an external binary matrix file.
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("File based float distance for database objects.")
@Description("Loads float distance values from an external matrix.")
public class DiskCacheBasedFloatDistanceFunction extends AbstractDBIDRangeDistanceFunction {
- // TODO: constructor with file.
+ /**
+ * Class logger.
+ */
+ private static final Logging LOG = Logging.getLogger(DiskCacheBasedFloatDistanceFunction.class);
/**
* Magic to identify double cache matrices
@@ -67,6 +73,17 @@ public class DiskCacheBasedFloatDistanceFunction extends AbstractDBIDRangeDistan
this.cache = cache;
}
+ /**
+ * Constructor.
+ *
+ * @param matrixfile File name
+ * @throws IOException
+ */
+ public DiskCacheBasedFloatDistanceFunction(File matrixfile) throws IOException {
+ super();
+ this.cache = new OnDiskUpperTriangleMatrix(matrixfile, FLOAT_CACHE_MAGIC, 0, ByteArrayUtil.SIZE_FLOAT, false);
+ }
+
@Override
public double distance(int i1, int i2) {
// the smaller id is the first key
@@ -94,6 +111,13 @@ public class DiskCacheBasedFloatDistanceFunction extends AbstractDBIDRangeDistan
return this.cache.equals(other.cache);
}
+ @Override
+ public void checkRange(DBIDRange range) {
+ if(cache.getMatrixSize() < range.size()) {
+ LOG.warning("Distance matrix has size " + cache.getMatrixSize() + " but range has size: " + range.size());
+ }
+ }
+
/**
* Parameterization class.
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceCacheWriter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceCacheWriter.java
index cd73b73e..3d83db66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceCacheWriter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceCacheWriter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
* Interface to plug in the cache storage into the parser.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DistanceCacheWriter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceParser.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceParser.java
index 28234d75..d495427b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceParser.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/DistanceParser.java
@@ -30,6 +30,7 @@ import java.io.InputStream;
* InputStream.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.uses DistanceCacheWriter oneway - - «create»
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedDoubleDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedDoubleDistanceFunction.java
index 4f872766..cbbf7fa2 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedDoubleDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedDoubleDistanceFunction.java
@@ -1,5 +1,28 @@
package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import de.lmu.ifi.dbs.elki.database.ids.DBID;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
+import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
+import de.lmu.ifi.dbs.elki.database.relation.Relation;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractDBIDRangeDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.FileUtil;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
+import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
+import gnu.trove.impl.Constants;
+
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -26,26 +49,6 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
import gnu.trove.map.TLongDoubleMap;
import gnu.trove.map.hash.TLongDoubleHashMap;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import de.lmu.ifi.dbs.elki.database.ids.DBID;
-import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
-import de.lmu.ifi.dbs.elki.database.relation.Relation;
-import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractDBIDRangeDistanceFunction;
-import de.lmu.ifi.dbs.elki.utilities.FileUtil;
-import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
-import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
-import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
-
/**
* Distance function that is based on double distances given by a distance
* matrix of an external ASCII file.
@@ -58,6 +61,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf DistanceCacheWriter
*/
@@ -65,6 +69,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
@Description("Loads double distance values from an external text file.")
public class FileBasedDoubleDistanceFunction extends AbstractDBIDRangeDistanceFunction {
/**
+ * Class logger.
+ */
+ private static final Logging LOG = Logging.getLogger(FileBasedDoubleDistanceFunction.class);
+
+ /**
* The distance cache
*/
private TLongDoubleMap cache;
@@ -80,6 +89,11 @@ public class FileBasedDoubleDistanceFunction extends AbstractDBIDRangeDistanceFu
private File matrixfile;
/**
+ * Minimum and maximum IDs seen.
+ */
+ private int min, max;
+
+ /**
* Constructor.
*
* @param parser Parser
@@ -106,18 +120,25 @@ public class FileBasedDoubleDistanceFunction extends AbstractDBIDRangeDistanceFu
@Override
public double distance(int i1, int i2) {
- if(i1 == i2) {
- return 0.;
- }
- return cache.get(makeKey(i1, i2));
+ return (i1 == i2) ? 0. : cache.get(makeKey(i1 + min, i2 + min));
}
private void loadCache(DistanceParser parser, File matrixfile) throws IOException {
InputStream in = new BufferedInputStream(FileUtil.tryGzipInput(new FileInputStream(matrixfile)));
- cache = new TLongDoubleHashMap();
+ cache = new TLongDoubleHashMap(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR, -1L, Double.POSITIVE_INFINITY);
+ min = Integer.MAX_VALUE;
+ max = Integer.MIN_VALUE;
parser.parse(in, new DistanceCacheWriter() {
@Override
public void put(int id1, int id2, double distance) {
+ if(id1 < id2) {
+ min = id1 < min ? id1 : min;
+ max = id2 > max ? id2 : max;
+ }
+ else {
+ min = id2 < min ? id2 : min;
+ max = id1 > max ? id1 : max;
+ }
cache.put(makeKey(id1, id2), distance);
}
@@ -126,6 +147,9 @@ public class FileBasedDoubleDistanceFunction extends AbstractDBIDRangeDistanceFu
return cache.containsKey(makeKey(id1, id2));
}
});
+ if(min != 0) {
+ LOG.verbose("Distance matrix is supposed to be 0-indexed. Choosing offset " + min + " to compensate.");
+ }
}
/**
@@ -142,6 +166,14 @@ public class FileBasedDoubleDistanceFunction extends AbstractDBIDRangeDistanceFu
}
@Override
+ public void checkRange(DBIDRange range) {
+ final int size = max + 1 - min;
+ if(size < range.size()) {
+ LOG.warning("Distance matrix has size " + size + " but range has size: " + range.size());
+ }
+ }
+
+ @Override
public boolean equals(Object obj) {
if(obj == null) {
return false;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedFloatDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedFloatDistanceFunction.java
index d14afb5d..51ae874e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedFloatDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/external/FileBasedFloatDistanceFunction.java
@@ -1,5 +1,27 @@
package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import de.lmu.ifi.dbs.elki.database.ids.DBID;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
+import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
+import de.lmu.ifi.dbs.elki.database.relation.Relation;
+import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractDBIDRangeDistanceFunction;
+import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.FileUtil;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
+import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
+import gnu.trove.impl.Constants;
+
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -26,25 +48,6 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.external;
import gnu.trove.map.TLongFloatMap;
import gnu.trove.map.hash.TLongFloatHashMap;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import de.lmu.ifi.dbs.elki.database.ids.DBID;
-import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
-import de.lmu.ifi.dbs.elki.database.relation.Relation;
-import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractDBIDRangeDistanceFunction;
-import de.lmu.ifi.dbs.elki.utilities.FileUtil;
-import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
-import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
-import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
-
/**
* Distance function that is based on float distances given by a distance matrix
* of an external ASCII file.
@@ -57,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf DistanceCacheWriter
*/
@@ -64,6 +68,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
@Description("Loads float distance values from an external text file.")
public class FileBasedFloatDistanceFunction extends AbstractDBIDRangeDistanceFunction {
/**
+ * Class logger.
+ */
+ private static final Logging LOG = Logging.getLogger(FileBasedFloatDistanceFunction.class);
+
+ /**
* The distance cache
*/
private TLongFloatMap cache;
@@ -79,6 +88,11 @@ public class FileBasedFloatDistanceFunction extends AbstractDBIDRangeDistanceFun
private File matrixfile;
/**
+ * Minimum and maximum IDs seen.
+ */
+ private int min, max;
+
+ /**
* Constructor.
*
* @param parser Parser
@@ -105,15 +119,25 @@ public class FileBasedFloatDistanceFunction extends AbstractDBIDRangeDistanceFun
@Override
public double distance(int i1, int i2) {
- return (i1 == i2) ? 0. : cache.get(makeKey(i1, i2));
+ return (i1 == i2) ? 0. : cache.get(makeKey(i1 + min, i2 + min));
}
private void loadCache(DistanceParser parser, File matrixfile) throws IOException {
InputStream in = new BufferedInputStream(FileUtil.tryGzipInput(new FileInputStream(matrixfile)));
- cache = new TLongFloatHashMap();
+ cache = new TLongFloatHashMap(Constants.DEFAULT_CAPACITY, Constants.DEFAULT_LOAD_FACTOR, -1L, Float.POSITIVE_INFINITY);
+ min = Integer.MAX_VALUE;
+ max = Integer.MIN_VALUE;
parser.parse(in, new DistanceCacheWriter() {
@Override
public void put(int id1, int id2, double distance) {
+ if(id1 < id2) {
+ min = id1 < min ? id1 : min;
+ max = id2 > max ? id2 : max;
+ }
+ else {
+ min = id2 < min ? id2 : min;
+ max = id1 > max ? id1 : max;
+ }
cache.put(makeKey(id1, id2), (float) distance);
}
@@ -122,6 +146,9 @@ public class FileBasedFloatDistanceFunction extends AbstractDBIDRangeDistanceFun
return cache.containsKey(makeKey(id1, id2));
}
});
+ if(min != 0) {
+ LOG.verbose("Distance matrix is supposed to be 0-indexed. Choosing offset " + min + " to compensate.");
+ }
}
/**
@@ -138,6 +165,14 @@ public class FileBasedFloatDistanceFunction extends AbstractDBIDRangeDistanceFun
}
@Override
+ public void checkRange(DBIDRange range) {
+ final int size = max + 1 - min;
+ if(size < range.size()) {
+ LOG.warning("Distance matrix has size " + size + " but range has size: " + range.size());
+ }
+ }
+
+ @Override
public boolean equals(Object obj) {
if(obj == null) {
return false;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/DimensionSelectingLatLngDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/DimensionSelectingLatLngDistanceFunction.java
index 203e9e1c..8e8f9310 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/DimensionSelectingLatLngDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/DimensionSelectingLatLngDistanceFunction.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf EarthModel
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LatLngDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LatLngDistanceFunction.java
index 2ccb13ec..b7528a41 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LatLngDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LatLngDistanceFunction.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf EarthModel
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LngLatDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LngLatDistanceFunction.java
index 2e1f0c13..faf541a1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LngLatDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/geo/LngLatDistanceFunction.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf EarthModel
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/HistogramMatchDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/HistogramMatchDistanceFunction.java
index 089460f3..cd1d0be5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/HistogramMatchDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/HistogramMatchDistanceFunction.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "L.N. Vaserstein", //
title = "Markov processes over denumerable products of spaces describing large systems of automata", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/KolmogorovSmirnovDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/KolmogorovSmirnovDistanceFunction.java
index a078eae3..7645e5fd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/KolmogorovSmirnovDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/histogram/KolmogorovSmirnovDistanceFunction.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* i.e. they should be some 1-dimensional histogram.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class KolmogorovSmirnovDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/EuclideanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/EuclideanDistanceFunction.java
index 422ea5d0..d17756f9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/EuclideanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/EuclideanDistanceFunction.java
@@ -32,8 +32,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Euclidean distance for {@link NumberVector}s.
*
* @author Arthur Zimek
+ * @since 0.2
*/
-@Alias({ "euclidean", "euclid", "l2", "EuclideanDistanceFunction", "de.lmu.ifi.dbs.elki.distance.distancefunction.EuclideanDistanceFunction" })
+@Alias({ "euclidean", "euclid", "l2", //
+"de.lmu.ifi.dbs.elki.distance.distancefunction.EuclideanDistanceFunction" })
public class EuclideanDistanceFunction extends LPIntegerNormDistanceFunction {
/**
* Static instance. Use this!
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPIntegerNormDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPIntegerNormDistanceFunction.java
index 055e96cf..56d03b41 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPIntegerNormDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPIntegerNormDistanceFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* machine version.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPNormDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPNormDistanceFunction.java
index 88b5edc5..aa8b9e80 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPNormDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/LPNormDistanceFunction.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* LP-Norm for {@link NumberVector}s.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/ManhattanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/ManhattanDistanceFunction.java
index f0562aa0..f82514ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/ManhattanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/ManhattanDistanceFunction.java
@@ -32,8 +32,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Manhattan distance for {@link NumberVector}s.
*
* @author Arthur Zimek
+ * @since 0.2
*/
-@Alias({ "taxicab", "cityblock", "l1", "ManhattanDistanceFunction", "de.lmu.ifi.dbs.elki.distance.distancefunction.ManhattanDistanceFunction" })
+@Alias({ "taxicab", "cityblock", "l1", //
+"de.lmu.ifi.dbs.elki.distance.distancefunction.ManhattanDistanceFunction" })
public class ManhattanDistanceFunction extends LPIntegerNormDistanceFunction {
/**
* The static instance to use.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MaximumDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MaximumDistanceFunction.java
index 84c1e7a2..dce6a67e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MaximumDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MaximumDistanceFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Maximum distance for {@link NumberVector}s.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "maximum", "max", "chebyshev", "de.lmu.ifi.dbs.elki.distance.distancefunction.MaximumDistanceFunction" })
public class MaximumDistanceFunction extends LPNormDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MinimumDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MinimumDistanceFunction.java
index 1d218718..3ce7da42 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MinimumDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/MinimumDistanceFunction.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Maximum distance for {@link NumberVector}s.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "minimum", "min", "de.lmu.ifi.dbs.elki.distance.distancefunction.MinimumDistanceFunction" })
public class MinimumDistanceFunction extends AbstractSpatialNorm {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseEuclideanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseEuclideanDistanceFunction.java
index b6085f9a..91960751 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseEuclideanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseEuclideanDistanceFunction.java
@@ -24,13 +24,16 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski;
*/
import de.lmu.ifi.dbs.elki.data.SparseNumberVector;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
/**
* Euclidean distance function, optimized for {@link SparseNumberVector}s.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.SparseEuclideanDistanceFunction")
public class SparseEuclideanDistanceFunction extends SparseLPNormDistanceFunction {
/**
* Static instance
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseLPNormDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseLPNormDistanceFunction.java
index 28e3e33e..97ffe515 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseLPNormDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseLPNormDistanceFunction.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractPrimitiveDistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.Norm;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
@@ -37,8 +38,10 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* LP-Norm, optimized for {@link SparseNumberVector}s.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
// TODO: implement SpatialDistanceFunction
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.SparseLPNormDistanceFunction")
public class SparseLPNormDistanceFunction extends AbstractPrimitiveDistanceFunction<SparseNumberVector> implements Norm<SparseNumberVector> {
/**
* P parameter and its inverse.
@@ -153,4 +156,4 @@ public class SparseLPNormDistanceFunction extends AbstractPrimitiveDistanceFunct
return new SparseLPNormDistanceFunction(p);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseManhattanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseManhattanDistanceFunction.java
index ffb6bdfc..a83a0ac4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseManhattanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseManhattanDistanceFunction.java
@@ -24,13 +24,16 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski;
*/
import de.lmu.ifi.dbs.elki.data.SparseNumberVector;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
/**
* Manhattan distance, optimized for {@link SparseNumberVector}s.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.SparseManhattanDistanceFunction")
public class SparseManhattanDistanceFunction extends SparseLPNormDistanceFunction {
/**
* Static instance
@@ -112,4 +115,4 @@ public class SparseManhattanDistanceFunction extends SparseLPNormDistanceFunctio
return SparseManhattanDistanceFunction.STATIC;
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseMaximumDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseMaximumDistanceFunction.java
index 237453c8..5a33c6aa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseMaximumDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SparseMaximumDistanceFunction.java
@@ -23,13 +23,16 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import de.lmu.ifi.dbs.elki.data.SparseNumberVector;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
/**
* Maximum distance, optimized for {@link SparseNumberVector}s.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.SparseMaximumDistanceFunction")
public class SparseMaximumDistanceFunction extends SparseLPNormDistanceFunction {
/**
* Static instance
@@ -123,4 +126,4 @@ public class SparseMaximumDistanceFunction extends SparseLPNormDistanceFunction
return SparseMaximumDistanceFunction.STATIC;
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SquaredEuclideanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SquaredEuclideanDistanceFunction.java
index 387dfa86..7714282c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SquaredEuclideanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/SquaredEuclideanDistanceFunction.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* computing the square root.
*
* @author Arthur Zimek
+ * @since 0.2
*/
@Alias({ "squaredeuclidean", "de.lmu.ifi.dbs.elki.distance.distancefunction.SquaredEuclideanDistanceFunction" })
public class SquaredEuclideanDistanceFunction extends AbstractSpatialNorm {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedEuclideanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedEuclideanDistanceFunction.java
index 3fbfc28e..fe163c43 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedEuclideanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedEuclideanDistanceFunction.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* Weighted Euclidean distance for {@link NumberVector}s.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class WeightedEuclideanDistanceFunction extends WeightedLPNormDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedLPNormDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedLPNormDistanceFunction.java
index 6f9a99c2..dc75a0bd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedLPNormDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedLPNormDistanceFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.WeightedNumberVectorDistanceFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParameter;
@@ -37,7 +38,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* Weighted version of the Minkowski L_p norm distance for {@link NumberVector}.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.WeightedLPNormDistanceFunction")
public class WeightedLPNormDistanceFunction extends LPNormDistanceFunction implements WeightedNumberVectorDistanceFunction<NumberVector> {
/**
* Weight array
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedManhattanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedManhattanDistanceFunction.java
index 473c24fb..2d2483a6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedManhattanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedManhattanDistanceFunction.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* {@link NumberVector}s.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class WeightedManhattanDistanceFunction extends WeightedLPNormDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedMaximumDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedMaximumDistanceFunction.java
index 14f1d899..71a4bf7e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedMaximumDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedMaximumDistanceFunction.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* {@link NumberVector}s.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class WeightedMaximumDistanceFunction extends WeightedLPNormDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedSquaredEuclideanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedSquaredEuclideanDistanceFunction.java
index b57e0317..9e6a5868 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedSquaredEuclideanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/minkowski/WeightedSquaredEuclideanDistanceFunction.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractSpatialNorm;
import de.lmu.ifi.dbs.elki.distance.distancefunction.WeightedNumberVectorDistanceFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParameter;
@@ -38,7 +39,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleListParamet
* same rankings as Euclidean distance, but saves computing the square root.
*
* @author Arthur Zimek
+ * @since 0.4.0
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.WeightedSquaredEuclideanDistanceFunction")
public class WeightedSquaredEuclideanDistanceFunction extends AbstractSpatialNorm implements WeightedNumberVectorDistanceFunction<NumberVector> {
/**
* Weight array
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/ChiSquaredDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/ChiSquaredDistanceFunction.java
index 06b7bf79..5eb40eea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/ChiSquaredDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/ChiSquaredDistanceFunction.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Alias("chisq")
@Reference(authors = "J. Puzicha, J.M. Buhmann, Y. Rubner, C. Tomasi", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/HellingerDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/HellingerDistanceFunction.java
index f955520a..ba191a46 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/HellingerDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/HellingerDistanceFunction.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: support acceleration for sparse vectors
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "E. Hellinger", //
title = "Neue Begründung der Theorie quadratischer Formen von unendlichvielen Veränderlichen", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java
index 55f9a476..16814c4c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JeffreyDivergenceDistanceFunction.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "J. Puzicha, J.M. Buhmann, Y. Rubner, C. Tomasi", //
title = "Empirical evaluation of dissimilarity measures for color and texture", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JensenShannonDivergenceDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JensenShannonDivergenceDistanceFunction.java
index 18eb33bf..6b20a3f7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JensenShannonDivergenceDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/JensenShannonDivergenceDistanceFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* scaled by half.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class JensenShannonDivergenceDistanceFunction extends JeffreyDivergenceDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceAsymmetricDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceAsymmetricDistanceFunction.java
index 48cd39e4..064fc6df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceAsymmetricDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceAsymmetricDistanceFunction.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "S. Kullback", title = "Information theory and statistics", booktitle = "Information theory and statistics, Courier Dover Publications, 1997.")
@Alias("kl")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceReverseAsymmetricDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceReverseAsymmetricDistanceFunction.java
index 1e96ee0e..4bfe9521 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceReverseAsymmetricDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/KullbackLeiblerDivergenceReverseAsymmetricDistanceFunction.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "S. Kullback", title = "Information theory and statistics", booktitle = "Information theory and statistics, Courier Dover Publications, 1997.")
@Alias("kli")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/SqrtJensenShannonDivergenceDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/SqrtJensenShannonDivergenceDistanceFunction.java
index ca99a4c8..b792f97c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/SqrtJensenShannonDivergenceDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/probabilistic/SqrtJensenShannonDivergenceDistanceFunction.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "D. M. Endres, J. E. Schindelin", title = "A new metric for probability distributions", booktitle = "IEEE Transactions on Information Theory, 49(7)", url = "http://dx.doi.org/10.1109/TIT.2003.813506")
public class SqrtJensenShannonDivergenceDistanceFunction extends AbstractNumberVectorDistanceFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/AbstractSetDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/AbstractSetDistanceFunction.java
index 814d144e..bce8437c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/AbstractSetDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/AbstractSetDistanceFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractPrimitiveDistanceFu
* Abstract base class for set distance functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/HammingDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/HammingDistanceFunction.java
index 4d467db9..a04c5d37 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/HammingDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/HammingDistanceFunction.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: add a sparse (but not binary) optimized version?
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "R. W. Hamming", //
title = "Error detecting and error correcting codes", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/JaccardSimilarityDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/JaccardSimilarityDistanceFunction.java
index 954339ec..c13b4af0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/JaccardSimilarityDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/set/JaccardSimilarityDistanceFunction.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.NumberVectorDistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.PrimitiveDistanceFunction;
import de.lmu.ifi.dbs.elki.distance.similarityfunction.NormalizedPrimitiveSimilarityFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
@@ -56,12 +57,14 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Vector type
*/
@Reference(authors = "P. Jaccard", //
title = "Distribution de la florine alpine dans la Bassin de Dranses et dans quelques regiones voisines", //
booktitle = "Bulletin del la Société Vaudoise des Sciences Naturelles")
+@Alias("de.lmu.ifi.dbs.elki.distance.similarityfunction.JaccardPrimitiveSimilarityFunction")
public class JaccardSimilarityDistanceFunction<O extends FeatureVector<?>> extends AbstractSetDistanceFunction<O> implements NormalizedPrimitiveSimilarityFunction<O>, NumberVectorDistanceFunction<O>, PrimitiveDistanceFunction<O> {
/**
* Constructor. No parameters.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/LevenshteinDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/LevenshteinDistanceFunction.java
index 5a6aa5f6..a2b098e5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/LevenshteinDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/LevenshteinDistanceFunction.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Felix Stahlberg
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses String
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/NormalizedLevenshteinDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/NormalizedLevenshteinDistanceFunction.java
index 8a48038d..f2b3d7db 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/NormalizedLevenshteinDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/strings/NormalizedLevenshteinDistanceFunction.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Felix Stahlberg
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses String
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDistanceFunction.java
index 98d753ff..17f493cd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/AbstractDimensionsSelectingDistanceFunction.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntListParameter;
* Selected dimensions are encuded as bits in a {@code long[]}.
*
* @author Elke Achtert
+ * @since 0.2
* @param <V> the type of FeatureVector to compute the distances in between
*/
public abstract class AbstractDimensionsSelectingDistanceFunction<V extends FeatureVector<?>> extends AbstractPrimitiveDistanceFunction<V> implements PrimitiveDistanceFunction<V>, DimensionSelectingSubspaceDistanceFunction<V> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java
index e96dfd33..0e46d953 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/DimensionSelectingSubspaceDistanceFunction.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
* Interface for dimension selecting subspace distance functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/OnedimensionalDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/OnedimensionalDistanceFunction.java
index 58b16354..e37287e3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/OnedimensionalDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/OnedimensionalDistanceFunction.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
import de.lmu.ifi.dbs.elki.data.type.VectorFieldTypeInformation;
import de.lmu.ifi.dbs.elki.data.type.VectorTypeInformation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractSpatialNorm;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -40,7 +41,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* absolute difference of their values in a specified dimension only.
*
* @author Elke Achtert
+ * @since 0.2
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.subspace.DimensionSelectingDistanceFunction")
public class OnedimensionalDistanceFunction extends AbstractSpatialNorm implements DimensionSelectingSubspaceDistanceFunction<NumberVector> {
/**
* The dimension to be considered for distance computation.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java
index baa67c60..57895724 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceEuclideanDistanceFunction.java
@@ -25,6 +25,7 @@ package de.lmu.ifi.dbs.elki.distance.distancefunction.subspace;
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
/**
@@ -32,7 +33,9 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* dimensions.
*
* @author Elke Achtert
+ * @since 0.2
*/
+@Alias("de.lmu.ifi.dbs.elki.distance.distancefunction.subspace.DimensionsSelectingEuclideanDistanceFunction")
public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFunction {
/**
* Constructor.
@@ -144,4 +147,4 @@ public class SubspaceEuclideanDistanceFunction extends SubspaceLPNormDistanceFun
return new SubspaceEuclideanDistanceFunction(dimensions);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java
index 69ca26a2..f3102c76 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceLPNormDistanceFunction.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* dimensions.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class SubspaceLPNormDistanceFunction extends AbstractDimensionsSelectingDistanceFunction<NumberVector> implements SpatialPrimitiveDistanceFunction<NumberVector>, Norm<NumberVector>, NumberVectorDistanceFunction<NumberVector> {
/**
@@ -198,4 +199,4 @@ public class SubspaceLPNormDistanceFunction extends AbstractDimensionsSelectingD
return new SubspaceLPNormDistanceFunction(p, dimensions);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java
index 4e2e1ed5..87168695 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceManhattanDistanceFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* dimensions.
*
* @author Elke Achtert
+ * @since 0.5.0
*/
public class SubspaceManhattanDistanceFunction extends SubspaceLPNormDistanceFunction {
/**
@@ -130,4 +131,4 @@ public class SubspaceManhattanDistanceFunction extends SubspaceLPNormDistanceFun
return new SubspaceManhattanDistanceFunction(dimensions);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
index edf88ef6..e24ff4cc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/subspace/SubspaceMaximumDistanceFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* dimensions.
*
* @author Elke Achtert
+ * @since 0.5.0
*/
public class SubspaceMaximumDistanceFunction extends SubspaceLPNormDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/AbstractEditDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/AbstractEditDistanceFunction.java
index 6eb4a0cf..37d611a4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/AbstractEditDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/AbstractEditDistanceFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Edit Distance for FeatureVectors.
*
* @author Thomas Bernecker
+ * @since 0.2
*/
public abstract class AbstractEditDistanceFunction extends AbstractNumberVectorDistanceFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DTWDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DTWDistanceFunction.java
index b3a1e19f..deddb490 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DTWDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DTWDistanceFunction.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
*
* @author Thomas Bernecker
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Dynamic Time Warping Distance Function")
@Reference(authors = "Berndt, D. and Clifford, J.", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DerivativeDTWDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DerivativeDTWDistanceFunction.java
index c21997cb..4116fb94 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DerivativeDTWDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/DerivativeDTWDistanceFunction.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Lara Hirschbeck, Daniel Kolb
+ * @since 0.2
*/
@Title("Derivative dynamic time warping")
@Reference(authors = "E. J. Keogh and M. J. Pazzani", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/EDRDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/EDRDistanceFunction.java
index c6d01419..afc7b8de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/EDRDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/EDRDistanceFunction.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Thomas Bernecker
+ * @since 0.2
*/
@Title("Edit Distance on Real Sequence")
@Reference(authors = "L. Chen and M. T. Özsu and V. Oria", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/ERPDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/ERPDistanceFunction.java
index 39341d1e..93fd98bd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/ERPDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/ERPDistanceFunction.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Thomas Bernecker
+ * @since 0.2
*/
@Title("Edit Distance with Real Penalty")
@Reference(authors = "L. Chen and R. Ng", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/LCSSDistanceFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/LCSSDistanceFunction.java
index 2d71ba1c..12e2752d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/LCSSDistanceFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/distancefunction/timeseries/LCSSDistanceFunction.java
@@ -68,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
*
*
* @author Thomas Bernecker
+ * @since 0.2
*/
@Title("Longest Common Subsequence distance function")
@Reference(authors = "M. Vlachos, M. Hadjieleftheriou, D. Gunopulos, E. Keogh", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractDBIDSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractDBIDSimilarityFunction.java
index 9a4f2f58..9c440aee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractDBIDSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractDBIDSimilarityFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Abstract super class for distance functions needing a preprocessor.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
public abstract class AbstractDBIDSimilarityFunction extends AbstractPrimitiveSimilarityFunction<DBID> implements DBIDSimilarityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractIndexBasedSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractIndexBasedSimilarityFunction.java
index 014ed7c9..16ba4e7f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractIndexBasedSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractIndexBasedSimilarityFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract super class for distance functions needing a preprocessor.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.uses IndexFactory
* @apiviz.has Instance oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractPrimitiveSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractPrimitiveSimilarityFunction.java
index 0cfb7c2a..7f1775ed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractPrimitiveSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractPrimitiveSimilarityFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Base implementation of a similarity function.
*
* @author Arthur Zimek
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractVectorSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractVectorSimilarityFunction.java
index 1550c6c3..a09aff09 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractVectorSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/AbstractVectorSimilarityFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.type.TypeUtil;
* Abstract base class for double-valued primitive similarity functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractVectorSimilarityFunction extends AbstractPrimitiveSimilarityFunction<NumberVector> implements PrimitiveSimilarityFunction<NumberVector> {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/DBIDSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/DBIDSimilarityFunction.java
index cd8c8a0e..3db8b672 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/DBIDSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/DBIDSimilarityFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
* function defined over object IDs.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses DBID oneway - - defined on
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/FractionalSharedNearestNeighborSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/FractionalSharedNearestNeighborSimilarityFunction.java
index 046d3725..36195869 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/FractionalSharedNearestNeighborSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/FractionalSharedNearestNeighborSimilarityFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Strings that define a non-negative Integer.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has
* de.lmu.ifi.dbs.elki.index.preprocessed.snn.SharedNearestNeighborIndex
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/IndexBasedSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/IndexBasedSimilarityFunction.java
index 989178b5..1b79330d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/IndexBasedSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/IndexBasedSimilarityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.Index;
* Interface for preprocessor/index based similarity functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Instance oneway - - «create»
* @apiviz.landmark
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/InvertedDistanceSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/InvertedDistanceSimilarityFunction.java
index 3238b263..2e921066 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/InvertedDistanceSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/InvertedDistanceSimilarityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* 1/distance.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski1SimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski1SimilarityFunction.java
index a4f43310..1f84efcb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski1SimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski1SimilarityFunction.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "M.-M. Deza and E. Deza", title = "Dictionary of distances", booktitle = "Dictionary of distances")
public class Kulczynski1SimilarityFunction extends AbstractVectorSimilarityFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski2SimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski2SimilarityFunction.java
index 29fedb2e..15ab839f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski2SimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/Kulczynski2SimilarityFunction.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: add an optimized version for binary data.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "M.-M. Deza and E. Deza", title = "Dictionary of distances", booktitle = "Dictionary of distances")
public class Kulczynski2SimilarityFunction extends AbstractVectorSimilarityFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedPrimitiveSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedPrimitiveSimilarityFunction.java
index 9f7fd624..d43d095e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedPrimitiveSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedPrimitiveSimilarityFunction.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction;
* limited to the 0-1 value range.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedSimilarityFunction.java
index 0194b614..28dc1722 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/NormalizedSimilarityFunction.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction;
* produce values in the range of [0:1].
*
* @author Erich Schubert
+ * @since 0.2
* @param <O> object type
*/
public interface NormalizedSimilarityFunction<O> extends SimilarityFunction<O> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/PrimitiveSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/PrimitiveSimilarityFunction.java
index 308711f0..085e245a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/PrimitiveSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/PrimitiveSimilarityFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.data.type.SimpleTypeInformation;
* function.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SharedNearestNeighborSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SharedNearestNeighborSimilarityFunction.java
index c48b1dd3..6bb6f37b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SharedNearestNeighborSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SharedNearestNeighborSimilarityFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Strings that define a non-negative Integer.
*
* @author Arthur Zimek
+ * @since 0.2
*
* @apiviz.has
* de.lmu.ifi.dbs.elki.index.preprocessed.snn.SharedNearestNeighborIndex
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SimilarityFunction.java
index 95a8d59d..2315ec85 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/SimilarityFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* function.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterIntersectionSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterIntersectionSimilarityFunction.java
index e7758720..dd5d0dcd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterIntersectionSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterIntersectionSimilarityFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Measure the similarity of clusters via the intersection size.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ClusterIntersectionSimilarityFunction extends AbstractPrimitiveSimilarityFunction<Cluster<?>> implements PrimitiveDistanceFunction<Cluster<?>> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterJaccardSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterJaccardSimilarityFunction.java
index f67e4bc3..79993a5a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterJaccardSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusterJaccardSimilarityFunction.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "P. Jaccard", //
title = "Distribution de la florine alpine dans la Bassin de Dranses et dans quelques regiones voisines", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringAdjustedRandIndexSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringAdjustedRandIndexSimilarityFunction.java
index 5d742ad1..255168fb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringAdjustedRandIndexSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringAdjustedRandIndexSimilarityFunction.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "Rand, W. M.", //
title = "Objective Criteria for the Evaluation of Clustering Methods", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringBCubedF1SimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringBCubedF1SimilarityFunction.java
index d4806cc4..58f7c3d9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringBCubedF1SimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringBCubedF1SimilarityFunction.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "Bagga, A. and Baldwin, B.", //
title = "Entity-based cross-document coreferencing using the Vector Space Model", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringDistanceSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringDistanceSimilarityFunction.java
index cc207a26..890c24db 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringDistanceSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringDistanceSimilarityFunction.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.distance.similarityfunction.PrimitiveSimilarityFuncti
* Distance and similarity measure for clusterings.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public interface ClusteringDistanceSimilarityFunction extends PrimitiveSimilarityFunction<Clustering<?>>, PrimitiveDistanceFunction<Clustering<?>> {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringFowlkesMallowsSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringFowlkesMallowsSimilarityFunction.java
index e23fd289..0b9e99a7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringFowlkesMallowsSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringFowlkesMallowsSimilarityFunction.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "Fowlkes, E.B. and Mallows, C.L.", //
title = "A method for comparing two hierarchical clusterings", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringRandIndexSimilarityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringRandIndexSimilarityFunction.java
index 4719d1f6..13572924 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringRandIndexSimilarityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/cluster/ClusteringRandIndexSimilarityFunction.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "Rand, W. M.", //
title = "Objective Criteria for the Evaluation of Clustering Methods", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java
index d747bc01..24195f7a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/KernelMatrix.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
* Kernel matrix representation.
*
* @author Simon Paradies
+ * @since 0.2
*
* @apiviz.uses PrimitiveSimilarityFunction
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java
index 1e0f3515..3a26e43a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LaplaceKernelFunction.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Laplace / exponential radial basis function kernel.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class LaplaceKernelFunction extends AbstractVectorSimilarityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java
index ca0d62fd..39380c11 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/LinearKernelFunction.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* {@link de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.EuclideanDistanceFunction}
*
* @author Simon Paradies
+ * @since 0.2
*/
public class LinearKernelFunction extends PolynomialKernelFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java
index 9fe6b943..16249ec8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/PolynomialKernelFunction.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* vectors V1 and V2 defined by (V1^T*V2)^degree.
*
* @author Simon Paradies
+ * @since 0.2
*/
public class PolynomialKernelFunction extends AbstractVectorSimilarityFunction implements PrimitiveDistanceFunction<NumberVector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java
index c786f77d..b8bfa7e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RadialBasisFunctionKernelFunction.java
@@ -37,8 +37,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Gaussian radial basis function kernel (RBF Kernel).
*
* @author Erich Schubert
+ * @since 0.2
*/
-@Alias({ "rbf" })
+@Alias("rbf")
public class RadialBasisFunctionKernelFunction extends AbstractVectorSimilarityFunction {
/**
* Scaling factor gamma. (= - 1/(2sigma^2))
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java
index 91264881..ea8c746e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/RationalQuadraticKernelFunction.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* RBF kernel ({@link RadialBasisFunctionKernelFunction}).
*
* @author Erich Schubert
+ * @since 0.2
*/
public class RationalQuadraticKernelFunction extends AbstractVectorSimilarityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java
index 82eb5ea6..7a752a3a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/distance/similarityfunction/kernel/SigmoidKernelFunction.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.distance.similarityfunction.kernel;
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.distance.distancefunction.AbstractNumberVectorDistanceFunction;
import de.lmu.ifi.dbs.elki.distance.similarityfunction.AbstractVectorSimilarityFunction;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
@@ -36,7 +37,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* perceptron MLP kernel).
*
* @author Erich Schubert
+ * @since 0.2
*/
+@Alias("sigmoid")
public class SigmoidKernelFunction extends AbstractVectorSimilarityFunction {
/**
* Scaling factor c, bias theta
@@ -59,7 +62,7 @@ public class SigmoidKernelFunction extends AbstractVectorSimilarityFunction {
public double similarity(NumberVector o1, NumberVector o2) {
final int dim = AbstractNumberVectorDistanceFunction.dimensionality(o1, o2);
double sim = 0.;
- for (int i = 0; i < dim; i++) {
+ for(int i = 0; i < dim; i++) {
final double v = o1.doubleValue(i) * o2.doubleValue(i);
sim += v;
}
@@ -93,11 +96,11 @@ public class SigmoidKernelFunction extends AbstractVectorSimilarityFunction {
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
final DoubleParameter cP = new DoubleParameter(C_ID, 1.);
- if (config.grab(cP)) {
+ if(config.grab(cP)) {
c = cP.doubleValue();
}
final DoubleParameter thetaP = new DoubleParameter(THETA_ID, 0.);
- if (config.grab(thetaP)) {
+ if(config.grab(thetaP)) {
theta = thetaP.doubleValue();
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java
index 484b55c5..0763f69e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/AutomaticEvaluation.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.LinearScaling;
* Evaluator that tries to auto-run a number of evaluation methods.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java
index ad8d06db..636b4c8a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/Evaluator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.ResultProcessor;
* evaluations, ...
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java
index c2fd7811..e6cd96a2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/NoAutomaticEvaluation.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* evaluation to run.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class NoAutomaticEvaluation implements Evaluator {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java
index 78be5b52..73098bc5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrix.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.data.ClassLabel;
* can be derived from a confusion matrix.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class ConfusionMatrix {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java
index 87ad6df3..02d35025 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/ConfusionMatrixEvaluationResult.java
@@ -30,10 +30,13 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
/**
* Provides the prediction performance measures for a classifier based on the
* confusion matrix.
- *
+ *
* Note: this API is non-final, and will be refactored soon.
*
* @author Arthur Zimek
+ * @since 0.7.0
+ *
+ * @apiviz.composedOf ConfusionMatrix
*/
public class ConfusionMatrixEvaluationResult implements Result, TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java
index cbe90475..bff2fa7f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/AbstractHoldout.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Split a data set for holdout evaluation.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractHoldout implements Holdout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java
index c3c1df82..ecb872ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/DisjointCrossValidation.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* perform cross-validation. The test sets are guaranteed to be disjoint.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class DisjointCrossValidation extends RandomizedHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java
index 69de2f9e..c2656147 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/Holdout.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* pairs of training and test data sets.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses MultipleObjectsBundle
* @apiviz.has TrainingAndTestSet
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java
index ae638a39..e67d4a14 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/LeaveOneOut.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* remaining instances are training instances.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class LeaveOneOut extends AbstractHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java
index 868462d9..2921fc22 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedCrossValidation.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* to perform cross-validation. The test sets are not guaranteed to be disjoint.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class RandomizedCrossValidation extends RandomizedHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java
index dd390421..aca68ed6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/RandomizedHoldout.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* A holdout providing a seed for randomized operations.
*
* @author Arthur Zimek
+ * @since 0.3
*/
public abstract class RandomizedHoldout extends AbstractHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java
index 3e0c4b2b..60af8179 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/StratifiedCrossValidation.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* deterministic.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class StratifiedCrossValidation extends AbstractHoldout {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java
index 7ee58663..3c1af309 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/classification/holdout/TrainingAndTestSet.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.datasource.bundle.MultipleObjectsBundle;
* training and test set are provided in labels.
*
* @author Arthur Zimek
+ * @since 0.7.0
*/
public class TrainingAndTestSet {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java
index e4958527..4cf9ec0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/BCubed.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "A. Bagga and B. Baldwin", //
title = "Entity-based cross-document coreferencing using the Vector Space Model", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java
index e063b967..b269d2f9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/ClusterContingencyTable.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* Class storing the contingency table and related data on two clusterings.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java
index 85764e2e..e07c84eb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EditDistance.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "Pantel, P. and Lin, D.", title = "Document clustering with committees", booktitle = "Proc. 25th ACM SIGIR conference on Research and development in information retrieval", url = "http://dx.doi.org/10.1145/564376.564412")
public class EditDistance {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java
index b7770f71..17e3abca 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/Entropy.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "Meilă, M.", //
title = "Comparing clusterings by the variation of information", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java
index a4c46191..473e713c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/EvaluateClustering.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.result.EvaluationResult;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultHierarchy;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -48,11 +49,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Evaluate a clustering result by comparing it to an existing cluster label.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses ClusterContingencyTable
* @apiviz.has EvaluateClustering.ScoreResult oneway - - «create»
*/
+@Alias("de.lmu.ifi.dbs.elki.evaluation.paircounting.EvaluatePairCountingFMeasure")
public class EvaluateClustering implements Evaluator {
/**
* Logger for debug output.
@@ -313,4 +316,4 @@ public class EvaluateClustering implements Evaluator {
return new EvaluateClustering(referencealg, noiseSpecialHandling, !selfPairing);
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java
index 9b4c2512..2b801cfb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/LogClusterSizes.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.Hierarchy.Iter;
* cluster sizes and the number of clusters.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class LogClusterSizes implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java
index 3025f367..26f2d5db 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/PairCounting.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* Pair-counting measures.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class PairCounting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java
index bbef4b5f..46bddd77 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/SetMatchingPurity.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Sascha Goldhofer
+ * @since 0.5.0
*/
@Reference(authors = "Meilă, M", //
title = "Comparing clusterings", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java
index 258b983d..60f22623 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/ExtractFlatClusteringFromHierarchyEvaluator.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* from the same clustering, this can be useful.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ExtractFlatClusteringFromHierarchyEvaluator implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java
index 4fa9f44f..456d1fc6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/HDBSCANHierarchyExtractionEvaluator.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* from the same clustering, this can be useful.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class HDBSCANHierarchyExtractionEvaluator implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java
index 871ab121..0644a16c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/extractor/SimplifiedHierarchyExtractionEvaluator.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* from the same clustering, this can be useful.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SimplifiedHierarchyExtractionEvaluator implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java
index e43d9cc5..a96dfc91 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateCIndex.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.distance.distancefunction.minkowski.EuclideanDistanceFunction;
import de.lmu.ifi.dbs.elki.evaluation.Evaluator;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.logging.statistics.DoubleStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
import de.lmu.ifi.dbs.elki.logging.statistics.StringStatistic;
@@ -43,7 +44,9 @@ import de.lmu.ifi.dbs.elki.result.EvaluationResult.MeasurementGroup;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultHierarchy;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleHeap;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleMaxHeap;
+import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleMinHeap;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
@@ -53,10 +56,13 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
/**
* Compute the C-index of a data set.
+ *
+ * Note: This requires pairwise distance computations, so it is not recommended
+ * to use this on larger data sets.
*
* Reference:
* <p>
- * L. J. Hubert and J.R. Levin <br />
+ * L. J. Hubert and J. R. Levin <br />
* A general statistical framework for assessing categorical clustering in free
* recall<br />
* Psychological Bulletin, Vol. 83(6)
@@ -64,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
@@ -115,15 +122,9 @@ public class EvaluateCIndex<O> implements Evaluator {
public double evaluateClustering(Database db, Relation<? extends O> rel, DistanceQuery<O> dq, Clustering<?> c) {
List<? extends Cluster<?>> clusters = c.getAllClusters();
- // theta is the sum, w the number of within group distances
- double theta = 0;
- int w = 0;
- int ignorednoise = 0;
- int isize = clusters.size() <= 1 ? rel.size() : rel.size() / (clusters.size() - 1);
- DoubleArray pairDists = new DoubleArray(isize);
-
- for(int i = 0; i < clusters.size(); i++) {
- Cluster<?> cluster = clusters.get(i);
+ // Count ignored noise, and within-cluster distances
+ int ignorednoise = 0, w = 0;
+ for(Cluster<?> cluster : clusters) {
if(cluster.size() <= 1 || cluster.isNoise()) {
switch(noiseOption){
case IGNORE_NOISE:
@@ -135,41 +136,51 @@ public class EvaluateCIndex<O> implements Evaluator {
break; // Treat like a cluster
}
}
- for(DBIDIter it1 = cluster.getIDs().iter(); it1.valid(); it1.advance()) {
- O obj = rel.get(it1);
- // Compare object to every cluster, but only once
- for(int j = i; j < clusters.size(); j++) {
- Cluster<?> ocluster = clusters.get(j);
- if(ocluster.size() <= 1 || ocluster.isNoise()) {
- switch(noiseOption){
- case IGNORE_NOISE:
- continue; // Ignore this cluster.
- case TREAT_NOISE_AS_SINGLETONS:
- case MERGE_NOISE:
- break; // Treat like a cluster
- }
- }
- for(DBIDIter it2 = ocluster.getIDs().iter(); it2.valid(); it2.advance()) {
- if(DBIDUtil.compare(it1, it2) <= 0) { // Only once.
- continue;
- }
- double dist = dq.distance(obj, rel.get(it2));
- pairDists.add(dist);
- if(ocluster == cluster) { // Within-cluster distances.
- theta += dist;
- w++;
- }
+ w += (cluster.size() * (cluster.size() - 1)) >>> 1;
+ }
+
+ double theta = 0.; // Sum of within-cluster distances
+ double min = 0, max = 0; // Sum of larges and smallest
+ if(w <= (rel.size() * (rel.size() - 1L)) >>> 2) {
+ DoubleHeap maxDists = new DoubleMinHeap(w); // Careful: REALLY minHeap!
+ DoubleHeap minDists = new DoubleMaxHeap(w); // Careful: REALLY maxHeap!
+
+ FiniteProgress prog = LOG.isVerbose() ? new FiniteProgress("Processing clusters for C-Index", clusters.size(), LOG) : null;
+ for(int i = 0; i < clusters.size(); i++) {
+ Cluster<?> cluster = clusters.get(i);
+ if(cluster.size() <= 1 || cluster.isNoise()) {
+ switch(noiseOption){
+ case IGNORE_NOISE:
+ LOG.incrementProcessed(prog);
+ continue; // Ignore
+ case TREAT_NOISE_AS_SINGLETONS:
+ processSingleton(cluster, rel, dq, maxDists, minDists, w);
+ LOG.incrementProcessed(prog);
+ continue;
+ case MERGE_NOISE:
+ break; // Treat like a cluster, below
}
}
+ theta += processCluster(cluster, clusters, i, dq, maxDists, minDists, w);
+ LOG.incrementProcessed(prog);
}
- }
+ LOG.ensureCompleted(prog);
- // Simulate best and worst cases:
- pairDists.sort();
- double min = 0, max = 0;
- for(int i = 0, j = pairDists.size() - 1; i < w; i++, j--) {
- min += pairDists.get(i);
- max += pairDists.get(j);
+ // Simulate best and worst cases:
+ assert (minDists.size() == w);
+ assert (maxDists.size() == w);
+ for(DoubleHeap.UnsortedIter it = minDists.unsortedIter(); it.valid(); it.advance()) {
+ min += it.get();
+ }
+ for(DoubleHeap.UnsortedIter it = maxDists.unsortedIter(); it.valid(); it.advance()) {
+ max += it.get();
+ }
+ assert (max >= min);
+ }
+ else {
+ // Since we have fewer cross-cluster distances than within-cluster
+ // distances, min=max and cIndex = 0.
+ theta = min = max = 0;
}
double cIndex = (max > min) ? (theta - min) / (max - min) : 0.;
@@ -189,6 +200,52 @@ public class EvaluateCIndex<O> implements Evaluator {
return cIndex;
}
+ protected double processCluster(Cluster<?> cluster, List<? extends Cluster<?>> clusters, int i, DistanceQuery<O> dq, DoubleHeap maxDists, DoubleHeap minDists, int w) {
+ double theta = 0.;
+ for(DBIDIter it1 = cluster.getIDs().iter(); it1.valid(); it1.advance()) {
+ // Compare object to every cluster, but only once
+ for(int j = i; j < clusters.size(); j++) {
+ Cluster<?> ocluster = clusters.get(j);
+ if(ocluster.size() <= 1 || ocluster.isNoise()) {
+ switch(noiseOption){
+ case IGNORE_NOISE:
+ continue; // Ignore this cluster.
+ case TREAT_NOISE_AS_SINGLETONS:
+ break; // Treat like a cluster
+ case MERGE_NOISE:
+ break; // Treat like a cluster
+ }
+ }
+ for(DBIDIter it2 = ocluster.getIDs().iter(); it2.valid(); it2.advance()) {
+ if(DBIDUtil.compare(it1, it2) <= 0) { // Only once.
+ continue;
+ }
+ double dist = dq.distance(it1, it2);
+ minDists.add(dist, w);
+ maxDists.add(dist, w);
+ if(ocluster == cluster) { // Within-cluster distances.
+ theta += dist;
+ }
+ }
+ }
+ }
+ return theta;
+ }
+
+ protected void processSingleton(Cluster<?> cluster, Relation<? extends O> rel, DistanceQuery<O> dq, DoubleHeap maxDists, DoubleHeap minDists, int w) {
+ // All other objects are in other clusters!
+ for(DBIDIter it1 = cluster.getIDs().iter(); it1.valid(); it1.advance()) {
+ for(DBIDIter it2 = rel.iterDBIDs(); it2.valid(); it2.advance()) {
+ if(DBIDUtil.compare(it1, it2) <= 0) { // Only once.
+ continue;
+ }
+ double dist = dq.distance(it1, it2);
+ minDists.add(dist, w);
+ maxDists.add(dist, w);
+ }
+ }
+ }
+
@Override
public void processNewResult(ResultHierarchy hier, Result result) {
List<Clustering<?>> crs = ResultUtil.getClusteringResults(result);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java
index c5d2c199..119e9006 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateConcordantPairs.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
@@ -312,7 +313,7 @@ public class EvaluateConcordantPairs<O> implements Evaluator {
/**
* Parameter for the option, how noise should be treated.
*/
- public static final OptionID NOISE_ID = new OptionID("davies-bouldin.noisehandling", "option, how noise should be treated.");
+ public static final OptionID NOISE_ID = new OptionID("concordant-pairs.noisehandling", "Control how noise should be treated.");
/**
* Distance function to use.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java
index ddeef150..d652a13a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateDaviesBouldin.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Stephan Baier
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java
index 2c3a20e0..5a893887 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluatePBMIndex.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java
index b40e6086..257ff1ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSilhouette.java
@@ -92,6 +92,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* TODO: keep all silhouette values, and allow visualization!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java
index a3f7e889..7ae8193c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSimplifiedSilhouette.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java
index eec64fc4..0ea8cbf8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateSquaredErrors.java
@@ -87,6 +87,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* by k-means.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java
index a48a410c..e8935593 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/EvaluateVarianceRatioCriteria.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NoiseHandling
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java
index 7145ed94..759636d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/internal/NoiseHandling.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.evaluation.clustering.internal;
*
* @author Stephan Baier
* @author Erich Schubert
+ * @since 0.7.0
*/
public enum NoiseHandling {
/** Merge all noise into a cluster */
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java
index 08d92c28..50deb3ce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/ClusterPairSegmentAnalysis.java
@@ -29,17 +29,31 @@ import de.lmu.ifi.dbs.elki.evaluation.Evaluator;
import de.lmu.ifi.dbs.elki.result.Result;
import de.lmu.ifi.dbs.elki.result.ResultHierarchy;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
+import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
* Evaluate clustering results by building segments for their pairs: shared
* pairs and differences.
*
+ * Reference:
+ * <p>
+ * Evaluation of Clusterings – Metrics and Visual Support<br />
+ * Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur
+ * Zimek<br />
+ * In: Proc. 28th International Conference on Data Engineering (ICDE) 2012
+ * </p>
+ *
* @author Sascha Goldhofer
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses Clustering
* @apiviz.uses Segments
*/
+@Reference(title = "Evaluation of Clusterings – Metrics and Visual Support", //
+authors = "Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
+booktitle = "Proc. 28th International Conference on Data Engineering (ICDE) 2012", //
+url = "http://dx.doi.org/10.1109/ICDE.2012.128")
public class ClusterPairSegmentAnalysis implements Evaluator {
/**
* Constructor.
@@ -55,7 +69,7 @@ public class ClusterPairSegmentAnalysis implements Evaluator {
public void processNewResult(ResultHierarchy hier, Result result) {
// Get all new clusterings
// TODO: handle clusterings added later, too. Can we update the result?
-
+
List<Clustering<?>> clusterings = ResultUtil.getClusteringResults(result);
// Abort if not enough clusterings to compare
if(clusterings.size() < 2) {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java
index 1ed31b03..4df28760 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segment.java
@@ -33,6 +33,10 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
*
* As such, for each ring (= clustering), a cluster number (or the constant
* {@link #UNCLUSTERED}) is stored.
+ *
+ * @author Sascha Goldhofer
+ * @author Erich Schubert
+ * @since 0.5.0
*/
public class Segment implements Comparable<Segment> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java
index 8b91d5f6..5b59b17f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/clustering/pairsegments/Segments.java
@@ -59,8 +59,8 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* a corresponding object Segment.
* </p>
*
+ * Reference:
* <p>
- * Reference:<br />
* Evaluation of Clusterings – Metrics and Visual Support<br />
* Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur
* Zimek<br />
@@ -68,17 +68,21 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* <p>
- * Details on the experimental setup can be found at: <a
- * href="http://elki.dbs.ifi.lmu.de/wiki/Examples/ClusterEvaluation"
- * >wiki/Examples/ClusterEvaluation</a>
+ * Details on the experimental setup can be found at:
+ * <a href="http://elki.dbs.ifi.lmu.de/wiki/Examples/ClusterEvaluation" >wiki/
+ * Examples/ClusterEvaluation</a>
* </p>
*
* @author Sascha Goldhofer
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf Segment
*/
-@Reference(title = "Evaluation of Clusterings – Metrics and Visual Support", authors = "Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", booktitle = "Proc. 28th International Conference on Data Engineering (ICDE) 2012", url = "http://dx.doi.org/10.1109/ICDE.2012.128")
+@Reference(title = "Evaluation of Clusterings – Metrics and Visual Support", //
+authors = "Elke Achtert, Sascha Goldhofer, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
+booktitle = "Proc. 28th International Conference on Data Engineering (ICDE) 2012", //
+url = "http://dx.doi.org/10.1109/ICDE.2012.128")
public class Segments extends BasicResult implements Iterable<Segment> {
/**
* Class logger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java
index 8a6bd542..64a1ce3c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/histogram/ComputeOutlierHistogram.java
@@ -66,6 +66,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
*
* @author Lisa Reichert
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
* @apiviz.uses OutlierResult
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java
index bde4eaa3..30d3590d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexPurity.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.DatabaseUtil;
* capabilities using the Gini index.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class IndexPurity implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java
index a137b455..5e01462f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/index/IndexStatistics.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* information.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has IndexMetaResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java
index 6674293d..6c84be65 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/JudgeOutlierScores.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
* hits.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has ScoreResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java
index 3ce0e782..a52b829a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionAtKCurve.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* method.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has PrecisionAtKCurve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java
index 3b1d7375..576a0c9b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierPrecisionRecallCurve.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* method.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has PRCurve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java
index f0ebcd88..540cba6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierROCCurve.java
@@ -62,13 +62,15 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* clustering obtained via the given class label.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
* @apiviz.uses OutlierResult
* @apiviz.has ROCResult oneway - - «create»
*/
-@Alias({ "ComputeROCCurve", "de.lmu.ifi.dbs.elki.evaluation.roc.ComputeROCCurve" })
+@Alias({ "de.lmu.ifi.dbs.elki.evaluation.roc.ComputeROCCurve", //
+"de.lmu.ifi.dbs.elki.evaluation.ComputeROCCurve" })
public class OutlierROCCurve implements Evaluator {
/**
* The label we use for marking ROCAUC values.
@@ -142,7 +144,8 @@ public class OutlierROCCurve implements Evaluator {
if(nonefound) {
return;
- // logger.warning("No results found to process with ROC curve analyzer. Got "+iterables.size()+" iterables, "+orderings.size()+" orderings.");
+ // logger.warning("No results found to process with ROC curve analyzer.
+ // Got "+iterables.size()+" iterables, "+orderings.size()+" orderings.");
}
}
@@ -209,6 +212,7 @@ public class OutlierROCCurve implements Evaluator {
* </p>
*/
public static final OptionID POSITIVE_CLASS_NAME_ID = new OptionID("rocauc.positive", "Class label for the 'positive' class.");
+
/**
* Pattern for positive class.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java
index 43612178..407b4ec9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierRankingEvaluation.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* Evaluate outlier scores by their ranking
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java
index b39211df..49ff1a42 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierSmROCCurve.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.PatternParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses OutlierResult
* @apiviz.has SmROCResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java
index 9220d06e..9993e457 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/outlier/OutlierThresholdClustering.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.outlier.OutlierScalingFunction;
* dataset.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class OutlierThresholdClustering implements Evaluator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java
index 9f8e66df..bebb3e71 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AbstractScoreEvaluation.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
* Abstract base class for evaluating a scoring result.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractScoreEvaluation implements ScoreEvaluation {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java
index fadcb3cf..51fe6c59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/AveragePrecisionEvaluation.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Evaluate using average precision.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class AveragePrecisionEvaluation extends AbstractScoreEvaluation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java
index dce8a84b..4d96eaaa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/MaximumF1Evaluation.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Evaluate using the maximum F1 score.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class MaximumF1Evaluation extends AbstractScoreEvaluation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java
index 3850dd3a..ba6786b9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/PrecisionAtKEvaluation.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* (BEP).
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class PrecisionAtKEvaluation extends AbstractScoreEvaluation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java
index 32551238..416ecda1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ROCEvaluation.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* has been used the wrong way, and should be used backwards.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has XYCurve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java
index 2f989609..053033e9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/ScoreEvaluation.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Compute ranking/scoring based evaluation measures.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has ScoreIter
* @apiviz.uses Predicate
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java
index f75844a0..70e6618c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/AbstractVectorIter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayIter;
* Class to iterate over a number vector in decreasing order.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java
index 3b246327..918a235c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDRefIter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
* A score iterator wrapping a DBIDRef object.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface DBIDRefIter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java
index 9e1b29e9..d1c65fbe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DBIDsTest.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.Predicate;
* @apiviz.composedOf DBIDs
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class DBIDsTest implements Predicate<DBIDRefIter> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java
index 953f656c..9da00a3e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DecreasingVectorIter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.IntegerComparator;
* Class to iterate over a number vector in decreasing order.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java
index cd1a5142..53a165ba 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/DistanceResultAdapter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.ScoreIter;
* ties.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf DoubleDBIDListIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java
index 28c23251..4309e138 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/FilteredDistanceResultAdapter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
* appropriately, the score is only used to detect ties.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class FilteredDistanceResultAdapter extends DistanceResultAdapter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java
index 091a6fa1..d94c2990 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/IncreasingVectorIter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.IntegerComparator;
* Class to iterate over a number vector in decreasing order.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf NumberVector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java
index 6dcf516a..3ff35876 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/OutlierScoreAdapter.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
* The ROC values would be incorrect then anyway!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf OutlierResult
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java
index e91f0f6d..681cdcdd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/SimpleAdapter.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.ScoreIter;
* The ROC values would be incorrect then anyway!
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf DBIDIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java
index 343fa662..52753243 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorNonZero.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* @apiviz.composedOf NumberVector
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class VectorNonZero extends VectorOverThreshold {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java
index e35db2ee..b77df57b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorOverThreshold.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.Predicate;
* @apiviz.composedOf NumberVector
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class VectorOverThreshold implements Predicate<AbstractVectorIter> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java
index 08e694f9..aeead25b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/scores/adapter/VectorZero.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.evaluation.scores.ScoreEvaluation.Predicate;
* @apiviz.composedOf NumberVector
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class VectorZero implements Predicate<IncreasingVectorIter> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java
index d7883620..a5cf462c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/evaluation/similaritymatrix/ComputeSimilarityMatrixImage.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.ScalingFunction;
* Compute a similarity matrix for a distance function.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has SimilarityMatrix oneway - - «create»
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/GUIUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/GUIUtil.java
index b7d4ee18..210f4e2e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/GUIUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/GUIUtil.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* GUI utilities.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public final class GUIUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractParameterConfigurator.java
index d1d89d69..9905ad59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractParameterConfigurator.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Abstract class to produce a configurator for a particular parameter.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has StockIcon
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractSingleParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractSingleParameterConfigurator.java
index de040cc7..bb298994 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractSingleParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/AbstractSingleParameterConfigurator.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Base class for MiniGUI input helpers
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Parameter type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassListParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassListParameterConfigurator.java
index ddc25f2e..0d76aa95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassListParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassListParameterConfigurator.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Additionally, the classes can in turn have additional parameters.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses ClassListParameter
* @apiviz.uses ClassTree
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassParameterConfigurator.java
index 7bc81fed..07f1e14f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ClassParameterConfigurator.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Additionally, the classes can in turn have additional parameters.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses ClassParameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ConfiguratorPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ConfiguratorPanel.java
index 873417a0..b07aed06 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ConfiguratorPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ConfiguratorPanel.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* A panel that contains configurators for parameters.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.has de.lmu.ifi.dbs.elki.gui.configurator.ParameterConfigurator
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/EnumParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/EnumParameterConfigurator.java
index 416b47bb..95ae3a04 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/EnumParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/EnumParameterConfigurator.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.EnumParameter;
* TODO: offer radio buttons when just a few choices are available?
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses EnumParameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FileParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FileParameterConfigurator.java
index f7218f35..9d3d53e5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FileParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FileParameterConfigurator.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* Provide a configuration panel to choose a file with a file selector button.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses FileParameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FlagParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FlagParameterConfigurator.java
index 052c6ac6..5b3d42c7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FlagParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/FlagParameterConfigurator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* Provide a configuration panel to modify a boolean via a checkbox.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses Flag
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ParameterConfigurator.java
index 217f3632..88b93d25 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/ParameterConfigurator.java
@@ -29,12 +29,40 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParamet
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.TrackParameters;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
+/**
+ * Interface for different configuration assistants for the multistep GUI.
+ *
+ * @author Erich Schubert
+ * @since 0.4.0
+ */
public interface ParameterConfigurator {
+ /**
+ * Add a parameter to the panel.
+ *
+ * @param owner Owning ("parent") object
+ * @param param Parameter
+ * @param track Parameter tracker
+ */
public void addParameter(Object owner, Parameter<?> param, TrackParameters track);
+ /**
+ * Add a change listener
+ *
+ * @param listener Change listener
+ */
public void addChangeListener(ChangeListener listener);
+ /**
+ * Remove a change listener
+ *
+ * @param listener Change listener
+ */
public void removeChangeListener(ChangeListener listener);
+ /**
+ * Append the parameters to a list.
+ *
+ * @param params Parameter list (output)
+ */
public void appendParameters(ListParameterization params);
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/TextParameterConfigurator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/TextParameterConfigurator.java
index 27c9d531..6c86f18a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/TextParameterConfigurator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/configurator/TextParameterConfigurator.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Provide a configuration panel to input an arbitrary text parameter.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses Parameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/icons/StockIcon.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/icons/StockIcon.java
index c0c7b91c..de450f4a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/icons/StockIcon.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/icons/StockIcon.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
* Stock icon library for use in the GUI.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/minigui/MiniGUI.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/minigui/MiniGUI.java
index 6edaa95d..7cba1e97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/minigui/MiniGUI.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/minigui/MiniGUI.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.minigui;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2015
+ Copyright (C) 2016
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -36,7 +36,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import java.util.logging.Level;
import javax.swing.AbstractAction;
import javax.swing.AbstractListModel;
@@ -46,8 +45,10 @@ import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
+import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
+import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.SwingWorker;
import javax.swing.event.TableModelEvent;
@@ -81,6 +82,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* Minimal GUI built around a table-based parameter editor.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf SettingsComboboxModel
* @apiviz.composedOf LoggingStep
@@ -140,6 +142,11 @@ public class MiniGUI extends AbstractApplication {
protected SavedSettingsFile store = new SavedSettingsFile(SAVED_SETTINGS_FILENAME);
/**
+ * Combo box for choosing the application to run.
+ */
+ protected JComboBox<String> appCombo;
+
+ /**
* Combo box for saved settings.
*/
protected JComboBox<String> savedCombo;
@@ -160,12 +167,22 @@ public class MiniGUI extends AbstractApplication {
private Class<? extends AbstractApplication> maincls = KDDCLIApplication.class;
/**
+ * Command line output field.
+ */
+ private JTextField commandLine;
+
+ /**
+ * Prefix for application package.
+ */
+ private String APP_PREFIX = AbstractApplication.class.getPackage().getName() + ".";
+
+ /**
* Constructor.
*/
public MiniGUI() {
super();
// Create and set up the window.
- frame = new JFrame("ELKI MiniGUI");
+ frame = new JFrame("ELKI MiniGUI Command Line Builder");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
try {
frame.setIconImage(new ImageIcon(KDDTask.class.getResource("elki-icon.png")).getImage());
@@ -178,138 +195,11 @@ public class MiniGUI extends AbstractApplication {
panel.setOpaque(true); // content panes must be opaque
panel.setLayout(new GridBagLayout());
- {
- // Button panel
- JPanel buttonPanel = new JPanel();
- buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
-
- // Combo box for saved settings
- savedSettingsModel = new SettingsComboboxModel(store);
- savedCombo = new JComboBox<>(savedSettingsModel);
- savedCombo.setEditable(true);
- savedCombo.setSelectedItem("[Saved Settings]");
- buttonPanel.add(savedCombo);
-
- // button to load settings
- JButton loadButton = new JButton("Load");
- loadButton.setMnemonic(KeyEvent.VK_L);
- loadButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- String key = savedSettingsModel.getSelectedItem();
- ArrayList<String> settings = store.get(key);
- if(settings != null) {
- outputArea.clear();
- outputArea.publish("Parameters: " + FormatUtil.format(settings, " ") + NEWLINE, Level.INFO);
- doSetParameters(settings);
- }
- }
- });
- buttonPanel.add(loadButton);
- // button to save settings
- JButton saveButton = new JButton("Save");
- saveButton.setMnemonic(KeyEvent.VK_S);
- saveButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- String key = savedSettingsModel.getSelectedItem();
- // Stop editing the table.
- parameterTable.editCellAt(-1, -1);
- store.put(key, parameters.serializeParameters());
- try {
- store.save();
- }
- catch(IOException e1) {
- LOG.exception(e1);
- }
- savedSettingsModel.update();
- }
- });
- buttonPanel.add(saveButton);
- // button to remove saved settings
- JButton removeButton = new JButton("Remove");
- removeButton.setMnemonic(KeyEvent.VK_E);
- removeButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- String key = savedSettingsModel.getSelectedItem();
- store.remove(key);
- try {
- store.save();
- }
- catch(IOException e1) {
- LOG.exception(e1);
- }
- savedCombo.setSelectedItem("[Saved Settings]");
- savedSettingsModel.update();
- }
- });
- buttonPanel.add(removeButton);
-
- // button to launch the task
- runButton = new JButton("Run Task");
- runButton.setMnemonic(KeyEvent.VK_R);
- runButton.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- startTask();
- }
- });
- buttonPanel.add(runButton);
-
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.fill = GridBagConstraints.HORIZONTAL;
- constraints.gridx = 0;
- constraints.gridy = 1;
- constraints.weightx = 1.0;
- constraints.weighty = 0.01;
- panel.add(buttonPanel, constraints);
- }
-
- {
- // Setup parameter storage and table model
- this.parameters = new DynamicParameters();
- ParametersModel parameterModel = new ParametersModel(parameters);
- parameterModel.addTableModelListener(new TableModelListener() {
- @Override
- public void tableChanged(TableModelEvent e) {
- // logger.debug("Change event.");
- updateParameterTable();
- }
- });
-
- // Create parameter table
- parameterTable = new ParameterTable(frame, parameterModel, parameters);
- // Create the scroll pane and add the table to it.
- JScrollPane scrollPane = new JScrollPane(parameterTable);
-
- // Add the scroll pane to this panel.
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.fill = GridBagConstraints.BOTH;
- constraints.gridx = 0;
- constraints.gridy = 0;
- constraints.weightx = 1;
- constraints.weighty = 1;
- panel.add(scrollPane, constraints);
- }
-
- {
- // setup text output area
- outputArea = new LogPanel();
-
- // Create the scroll pane and add the table to it.
- JScrollPane outputPane = new JScrollPane(outputArea);
- outputPane.setPreferredSize(new Dimension(800, 400));
-
- // Add the output pane to the bottom
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.fill = GridBagConstraints.BOTH;
- constraints.gridx = 0;
- constraints.gridy = 2;
- constraints.weightx = 1;
- constraints.weighty = 1;
- panel.add(outputPane, constraints);
- }
+ setupAppChooser();
+ setupParameterTable();
+ setupLoadSaveButtons();
+ setupCommandLine();
+ setupLoggingArea();
// load saved settings (we wanted to have the logger first!)
try {
@@ -349,14 +239,222 @@ public class MiniGUI extends AbstractApplication {
}
/**
+ * Setup the application chooser.
+ */
+ private void setupAppChooser() {
+ // Configurator to choose the main application
+ appCombo = new JComboBox<>();
+ for(Class<?> clz : ELKIServiceRegistry.findAllImplementations(AbstractApplication.class)) {
+ String nam = clz.getCanonicalName();
+ if(nam == null || clz.getCanonicalName().contains("GUI")) {
+ continue;
+ }
+ if(nam.startsWith(APP_PREFIX)) {
+ nam = nam.substring(APP_PREFIX.length());
+ }
+ appCombo.addItem(nam);
+ }
+ appCombo.setEditable(true);
+ String sel = maincls.getCanonicalName();
+ if(sel.startsWith(APP_PREFIX)) {
+ sel = sel.substring(APP_PREFIX.length());
+ }
+ appCombo.setSelectedItem(sel);
+ appCombo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if("comboBoxChanged".equals(e.getActionCommand())) {
+ Class<? extends AbstractApplication> clz = ELKIServiceRegistry.findImplementation(AbstractApplication.class, (String) appCombo.getSelectedItem());
+ if(clz != null) {
+ maincls = clz;
+ updateParameterTable();
+ }
+ else {
+ LOG.warning("Main class name not found.");
+ }
+ }
+ }
+ });
+
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridx = 0;
+ constraints.gridy = 0;
+ constraints.weightx = 1;
+ constraints.weighty = .01;
+ panel.add(appCombo, constraints);
+ }
+
+ /**
+ * Setup the parameter table
+ */
+ private void setupParameterTable() {
+ // Setup parameter storage and table model
+ this.parameters = new DynamicParameters();
+ ParametersModel parameterModel = new ParametersModel(parameters);
+ parameterModel.addTableModelListener(new TableModelListener() {
+ @Override
+ public void tableChanged(TableModelEvent e) {
+ // logger.debug("Change event.");
+ updateParameterTable();
+ }
+ });
+
+ // Create parameter table
+ parameterTable = new ParameterTable(frame, parameterModel, parameters);
+ // Create the scroll pane and add the table to it.
+ JScrollPane scrollPane = new JScrollPane(parameterTable);
+
+ // Add the scroll pane to this panel.
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridx = 0;
+ constraints.gridy = 1;
+ constraints.weightx = 1;
+ constraints.weighty = 1;
+ panel.add(scrollPane, constraints);
+ }
+
+ /**
+ * Create the load and save buttons.
+ */
+ private void setupLoadSaveButtons() {
+ // Button panel
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
+
+ // Combo box for saved settings
+ savedSettingsModel = new SettingsComboboxModel(store);
+ savedCombo = new JComboBox<>(savedSettingsModel);
+ savedCombo.setEditable(true);
+ savedCombo.setSelectedItem("[Saved Settings]");
+ buttonPanel.add(savedCombo);
+
+ // button to load settings
+ JButton loadButton = new JButton("Load");
+ loadButton.setMnemonic(KeyEvent.VK_L);
+ loadButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String key = savedSettingsModel.getSelectedItem();
+ ArrayList<String> settings = store.get(key);
+ if(settings != null) {
+ doSetParameters(settings);
+ }
+ }
+ });
+ buttonPanel.add(loadButton);
+ // button to save settings
+ JButton saveButton = new JButton("Save");
+ saveButton.setMnemonic(KeyEvent.VK_S);
+ saveButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String key = savedSettingsModel.getSelectedItem();
+ // Stop editing the table.
+ parameterTable.editCellAt(-1, -1);
+ ArrayList<String> list = new ArrayList<>(parameters.size() * 2 + 1);
+ list.add(maincls.getCanonicalName());
+ parameters.serializeParameters(list);
+ store.put(key, list);
+ try {
+ store.save();
+ }
+ catch(IOException e1) {
+ LOG.exception(e1);
+ }
+ savedSettingsModel.update();
+ }
+ });
+ buttonPanel.add(saveButton);
+ // button to remove saved settings
+ JButton removeButton = new JButton("Remove");
+ removeButton.setMnemonic(KeyEvent.VK_E);
+ removeButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ String key = savedSettingsModel.getSelectedItem();
+ store.remove(key);
+ try {
+ store.save();
+ }
+ catch(IOException e1) {
+ LOG.exception(e1);
+ }
+ savedCombo.setSelectedItem("[Saved Settings]");
+ savedSettingsModel.update();
+ }
+ });
+ buttonPanel.add(removeButton);
+
+ // button to launch the task
+ runButton = new JButton("Run Task");
+ runButton.setMnemonic(KeyEvent.VK_R);
+ runButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ startTask();
+ }
+ });
+ buttonPanel.add(runButton);
+
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.HORIZONTAL;
+ constraints.gridx = 0;
+ constraints.gridy = 2;
+ constraints.weightx = 1.0;
+ constraints.weighty = 0.01;
+ panel.add(buttonPanel, constraints);
+ }
+
+ /**
+ * Setup command line field
+ */
+ private void setupCommandLine() {
+ // setup text output area
+ commandLine = new JTextField();
+ commandLine.setEditable(false); // FIXME: Make editable!
+
+ // Add the output pane to the bottom
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridx = 0;
+ constraints.gridy = 3;
+ constraints.weightx = 1;
+ constraints.weighty = .01;
+ panel.add(commandLine, constraints);
+ }
+
+ /**
+ * Setup logging area
+ */
+ private void setupLoggingArea() {
+ // setup text output area
+ outputArea = new LogPanel();
+
+ // Create the scroll pane and add the table to it.
+ JScrollPane outputPane = new JScrollPane(outputArea);
+ outputPane.setPreferredSize(new Dimension(800, 400));
+
+ // Add the output pane to the bottom
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.gridx = 0;
+ constraints.gridy = 4;
+ constraints.weightx = 1;
+ constraints.weighty = 1;
+ panel.add(outputPane, constraints);
+ }
+
+ /**
* Serialize the parameter table and run setParameters().
*/
protected void updateParameterTable() {
parameterTable.setEnabled(false);
- ArrayList<String> params = parameters.serializeParameters();
- outputArea.clear();
- outputArea.publish("Parameters: " + FormatUtil.format(params, " ") + NEWLINE, Level.INFO);
- doSetParameters(params);
+ ArrayList<String> list = new ArrayList<String>(parameters.size() * 2 + 1);
+ list.add(maincls.getCanonicalName());
+ parameters.serializeParameters(list);
+ doSetParameters(list);
parameterTable.setEnabled(true);
}
@@ -366,6 +464,16 @@ public class MiniGUI extends AbstractApplication {
* @param params Parameters
*/
protected void doSetParameters(List<String> params) {
+ if(params.size() > 0) {
+ String first = params.get(0);
+ if(!first.startsWith("-")) {
+ Class<? extends AbstractApplication> c = ELKIServiceRegistry.findImplementation(AbstractApplication.class, first);
+ if(c != null) {
+ maincls = c;
+ params.remove(0);
+ }
+ }
+ }
SerializedParameterization config = new SerializedParameterization(params);
TrackParameters track = new TrackParameters(config);
track.tryInstantiate(LoggingStep.class);
@@ -380,6 +488,13 @@ public class MiniGUI extends AbstractApplication {
List<String> remainingParameters = config.getRemainingParameters();
+ outputArea.clear();
+ String mainnam = maincls.getCanonicalName();
+ if(mainnam.startsWith(APP_PREFIX)) {
+ mainnam = mainnam.substring(APP_PREFIX.length());
+ }
+ commandLine.setText(format(mainnam, params));
+
// update table:
parameterTable.removeEditor();
parameterTable.setEnabled(false);
@@ -403,6 +518,97 @@ public class MiniGUI extends AbstractApplication {
}
/**
+ * Format objects to a command line.
+ *
+ * @param params Parameters to format (Strings, or list of strings)
+ * @return Formatted string
+ */
+ private String format(Object... params) {
+ StringBuilder buf = new StringBuilder();
+ for(Object p : params) {
+ if(p instanceof String) {
+ formatTo(buf, (String) p);
+ }
+ else if(p instanceof List) {
+ formatTo(buf, (List<?>) p);
+ }
+ else {
+ LOG.warning("Incorrect object type: " + p.getClass());
+ }
+ }
+ return buf.toString();
+ }
+
+ /**
+ * Format a list of strings to a buffer.
+ *
+ * @param buf Output buffer
+ * @param params List of strings
+ */
+ private void formatTo(StringBuilder buf, List<?> params) {
+ for(Object p : params) {
+ if(p instanceof String) {
+ formatTo(buf, (String) p);
+ }
+ else {
+ LOG.warning("Incorrect object type: " + p.getClass());
+ }
+ }
+ }
+
+ /**
+ * Format a single string for the command line.
+ *
+ * @param buf Output buffer
+ * @param s String
+ */
+ private void formatTo(StringBuilder buf, String s) {
+ if(s == null || s.length() == 0) {
+ return;
+ }
+ if(buf.length() > 0) {
+ buf.append(' ');
+ }
+ // Test for escaping necessary
+ int escape = 0;
+ for(int i = 0, l = s.length(); i < l; i++) {
+ char c = s.charAt(i);
+ if(c == '\\') {
+ escape |= 8;
+ }
+ else if(c <= ' ' || c >= 128 || c == '<' || c == '>' || c == '|' || c == '$') {
+ escape |= 1;
+ }
+ else if(c == '"') {
+ escape |= 2;
+ }
+ else if(c == '\'') {
+ escape |= 4;
+ }
+ }
+ if(escape == 0) {
+ buf.append(s); // No escaping.
+ }
+ else if((escape & 10) == 0) {
+ buf.append('"').append(s).append('"');
+ }
+ else if((escape & 12) == 0) {
+ buf.append('\'').append(s).append('\'');
+ }
+ else { // Full escaping.
+ buf.append('"');
+ for(int i = 0, l = s.length(); i < l; i++) {
+ char c = s.charAt(i);
+ if(c == '"' || c == '\\' || c == '$') {
+ buf.append('\\');
+ }
+ buf.append(c);
+ }
+ buf.append('"');
+ }
+ }
+
+ /**
* Auto-load the last task from the history file.
*/
protected void loadLatest() {
@@ -420,14 +626,13 @@ public class MiniGUI extends AbstractApplication {
protected void startTask() {
parameterTable.editCellAt(-1, -1);
parameterTable.setEnabled(false);
- final ArrayList<String> params = parameters.serializeParameters();
+ final ArrayList<String> params = new ArrayList<>(parameters.size() * 2);
+ parameters.serializeParameters(params);
parameterTable.setEnabled(true);
runButton.setEnabled(false);
outputArea.clear();
- outputArea.publish("Running: " + FormatUtil.format(params, " ") + NEWLINE, Level.INFO);
-
SwingWorker<Void, Void> r = new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
@@ -493,6 +698,34 @@ public class MiniGUI extends AbstractApplication {
* @param args command line parameters
*/
public static void main(final String[] args) {
+ // Detect the common problem of an incomplete class path:
+ try {
+ Class<?> clz = ClassLoader.getSystemClassLoader().loadClass("de.lmu.ifi.dbs.elki.database.ids.DBIDUtil");
+ clz.getMethod("newHashSet").invoke(null);
+ }
+ catch(ReflectiveOperationException e) {
+ StringBuilder msg = new StringBuilder();
+ msg.append("Your Java class path is incomplete.\n");
+ if(e.getCause() != null) {
+ msg.append(e.getCause().toString()).append("\n");
+ }
+ else {
+ msg.append(e.toString()).append("\n");
+ }
+ msg.append("Make sure you have all the required jars on the classpath.\n");
+ msg.append("On the home page, you can find a 'elki-bundle' which should include everything.");
+ JOptionPane.showMessageDialog(null, msg, "ClassPath incomplete", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
+ // Detect the broken Ubuntu jAyatana hack;
+ String toolopt = System.getenv("JAVA_TOOL_OPTION");
+ if(toolopt != null && toolopt.indexOf("jayatana") >= 0) {
+ StringBuilder msg = new StringBuilder();
+ msg.append("The Ubuntu JAyatana 'global menu support' hack is known to cause problems with many Java applications.\n");
+ msg.append("Please unset JAVA_TOOL_OPTION.");
+ JOptionPane.showMessageDialog(null, msg, "Incompatible with JAyatana", JOptionPane.ERROR_MESSAGE);
+ return;
+ }
GUIUtil.logUncaughtExceptions(LOG);
GUIUtil.setLookAndFeel();
OutputStep.setDefaultHandlerVisualizer();
@@ -549,7 +782,7 @@ public class MiniGUI extends AbstractApplication {
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.gui.util.SavedSettingsFile
*/
- class SettingsComboboxModel extends AbstractListModel<String>implements ComboBoxModel<String> {
+ class SettingsComboboxModel extends AbstractListModel<String> implements ComboBoxModel<String> {
/**
* Serial version.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java
index dacbe361..36aa79fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java
@@ -61,6 +61,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* Experimenter-style multi step GUI.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.composedOf AlgorithmTabPanel
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java
index c0dda863..fb9bd116 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep;
* Panel to handle data processing
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class AlgorithmTabPanel extends ParameterTabPanel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java
index 65d53d20..8a8d10b5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.workflow.EvaluationStep;
* Panel to handle result evaluation
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class EvaluationTabPanel extends ParameterTabPanel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java
index 7a3ea1f5..cd83a860 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.workflow.InputStep;
* Panel to handle data input.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class InputTabPanel extends ParameterTabPanel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java
index 2dcc38d4..902995ce 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java
@@ -24,9 +24,8 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels;
*/
import de.lmu.ifi.dbs.elki.application.AbstractApplication;
-import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
-import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.logging.Logging.Level;
+import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
@@ -36,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
* Panel to handle logging
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class LoggingTabPanel extends ParameterTabPanel {
/**
@@ -62,7 +62,7 @@ public class LoggingTabPanel extends ParameterTabPanel {
// FIXME: add second level of verbosity!
if (config.grab(debugParam)) {
try {
- LoggingUtil.parseDebugParameter(debugParam);
+ AbstractApplication.Parameterizer.parseDebugParameter(debugParam);
} catch (WrongParameterValueException e) {
de.lmu.ifi.dbs.elki.logging.LoggingUtil.exception(e);
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java
index cedc5765..29fdf7ff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* Panel to handle result output / visualization
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class OutputTabPanel extends ParameterTabPanel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java
index caf9c066..f6985f4f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.TrackParame
* Abstract panel, showing particular options.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class ParameterTabPanel extends JPanel implements ChangeListener {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java
index 0ea2a34f..ec7b66e6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.SerializedP
* Tab panel to manage saved settings.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf SavedSettingsTabPanel.SettingsComboboxModel
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java
index 8c524cdd..3c2a6373 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ClassTree.java
@@ -31,15 +31,16 @@ import javax.swing.tree.TreeNode;
/**
* Build a tree of available classes for use in Swing UIs.
- *
+ *
* @author Erich Schubert
- *
+ * @since 0.7.0
+ *
* @apiviz.has TreeNode
*/
public class ClassTree {
/**
* Build the class tree for a given set of choices.
- *
+ *
* @param choices Class choices
* @param rootpkg Root package name (to strip / hide)
* @return Root node.
@@ -59,7 +60,8 @@ public class ClassTree {
for(Class<?> impl : choices) {
String name = impl.getName();
name = (prefix != null && name.startsWith(prefix)) ? name.substring(prefix.length()) : name;
- MutableTreeNode c = new ClassNode(impl.getName().substring(impl.getPackage().getName().length() + 1), name);
+ int plen = (impl.getPackage() != null) ? impl.getPackage().getName().length() + 1 : 0;
+ MutableTreeNode c = new ClassNode(impl.getName().substring(plen), name);
MutableTreeNode p = null;
int l = name.lastIndexOf('.');
@@ -96,7 +98,7 @@ public class ClassTree {
/**
* Simplify the tree.
- *
+ *
* @param cur Current node
* @param prefix Prefix to add
* @return Replacement node
@@ -133,9 +135,9 @@ public class ClassTree {
/**
* Tree node representing a single class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class PackageNode extends DefaultMutableTreeNode {
@@ -151,7 +153,7 @@ public class ClassTree {
/**
* Current class name.
- *
+ *
* @param display Displayed name
* @param pkgname Actual class name
*/
@@ -162,7 +164,7 @@ public class ClassTree {
/**
* Return the package name.
- *
+ *
* @return Package name
*/
public String getPackageName() {
@@ -172,9 +174,9 @@ public class ClassTree {
/**
* Tree node representing a single class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class ClassNode extends DefaultMutableTreeNode {
@@ -190,7 +192,7 @@ public class ClassTree {
/**
* Current class name.
- *
+ *
* @param display Displayed name
* @param clsname Actual class name
*/
@@ -201,7 +203,7 @@ public class ClassTree {
/**
* Return the class name.
- *
+ *
* @return Class name
*/
public String getClassName() {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/DynamicParameters.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/DynamicParameters.java
index 2aae45d4..10cc79a3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/DynamicParameters.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/DynamicParameters.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
* correct.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.owns de.lmu.ifi.dbs.elki.gui.util.DynamicParameters.RemainingOptions
*/
@@ -206,10 +207,9 @@ public class DynamicParameters {
/**
* Serialize parameters into an array list to pass to setParameters()
*
- * @return Array list of String parameters.
+ * @param p Output list (will not be emptied)
*/
- public synchronized ArrayList<String> serializeParameters() {
- ArrayList<String> p = new ArrayList<>(2 * parameters.size());
+ public synchronized void serializeParameters(ArrayList<String> p) {
for(Node t : parameters) {
if(t.param != null) {
if(t.param instanceof RemainingOptions) {
@@ -232,7 +232,6 @@ public class DynamicParameters {
}
}
}
- return p;
}
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPane.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPane.java
index 17c52cea..c42a2ed7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPane.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPane.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.ProgressLogRecord;
* {@link #becomeDefaultLogger()} to register as default logger in ELKI.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses LoggingConfiguration
* @apiviz.uses de.lmu.ifi.dbs.elki.logging.ELKILogRecord
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPanel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPanel.java
index dbe87b58..9507c8eb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPanel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/LogPanel.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.StepProgress;
* Panel that contains a text logging pane ({@link LogPane}) and progress bars.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.owns LogPane
* @apiviz.uses LoggingConfiguration
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParameterTable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParameterTable.java
index a08341db..a5782ca9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParameterTable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParameterTable.java
@@ -73,6 +73,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Class showing a table of ELKI parameters.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf ParametersModel
* @apiviz.owns de.lmu.ifi.dbs.elki.gui.util.ParameterTable.ColorfulRenderer
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParametersModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParametersModel.java
index d864cc9b..66593c20 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParametersModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/ParametersModel.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* A Swing TableModel that uses a {@link DynamicParameters} object as storage.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class ParametersModel extends AbstractTableModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/SavedSettingsFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/SavedSettingsFile.java
index f8f4c990..6f31a2c6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/SavedSettingsFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/SavedSettingsFile.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* Class to manage saved settings in a text file.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class SavedSettingsFile implements Iterable<Pair<String, ArrayList<String>>> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/TreePopup.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/TreePopup.java
index 19413c53..6bfb6a2a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/TreePopup.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/gui/util/TreePopup.java
@@ -62,6 +62,7 @@ import javax.swing.tree.TreeModel;
* Popup menu that contains a JTree.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class TreePopup extends JPopupMenu {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractIndex.java
index 63be2b06..8db3abe9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractIndex.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Abstract base class for indexes with some implementation defaults.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractRefiningIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractRefiningIndex.java
index c5a032c3..e0264cf7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractRefiningIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/AbstractRefiningIndex.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.logging.statistics.Counter;
* The number of refinements will be counted as individual page accesses.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.excludeSubtypes
* @apiviz.has AbstractRangeQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DistanceIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DistanceIndex.java
index f6fc929f..2fa6feff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DistanceIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DistanceIndex.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
* caches)
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DynamicIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DynamicIndex.java
index 8179b5df..306b0a1f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DynamicIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/DynamicIndex.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Index that supports dynamic insertions and removals.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/Index.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/Index.java
index b312eb37..d6f9ee16 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/Index.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/Index.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
* See also: {@link IndexFactory}, {@link DynamicIndex}
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/IndexFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/IndexFactory.java
index 154974f9..1a1d3fb2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/IndexFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/IndexFactory.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Factory interface for indexes.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory,interface
* @apiviz.has Index oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/KNNIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/KNNIndex.java
index aa99e8e4..e3a29bf5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/KNNIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/KNNIndex.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery;
* Index with support for kNN queries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/PagedIndexFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/PagedIndexFactory.java
index 75c11499..e421e252 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/PagedIndexFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/PagedIndexFactory.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for tree-based indexes.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory,interface
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RKNNIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RKNNIndex.java
index 71909004..770d1170 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RKNNIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RKNNIndex.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.query.rknn.RKNNQuery;
* Index with support for kNN queries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RangeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RangeIndex.java
index 464c3589..56845f37 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RangeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/RangeIndex.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery;
* Index with support for kNN queries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/distancematrix/PrecomputedDistanceMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/distancematrix/PrecomputedDistanceMatrix.java
index 44ed6c84..4dbb79ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/distancematrix/PrecomputedDistanceMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/distancematrix/PrecomputedDistanceMatrix.java
@@ -23,17 +23,31 @@ package de.lmu.ifi.dbs.elki.index.distancematrix;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+import java.util.ArrayList;
+import java.util.List;
+
import de.lmu.ifi.dbs.elki.data.type.TypeInformation;
+import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs;
import de.lmu.ifi.dbs.elki.database.ids.DBIDArrayIter;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRange;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
+import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDList;
+import de.lmu.ifi.dbs.elki.database.ids.KNNHeap;
+import de.lmu.ifi.dbs.elki.database.ids.KNNList;
+import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList;
import de.lmu.ifi.dbs.elki.database.query.distance.DistanceQuery;
+import de.lmu.ifi.dbs.elki.database.query.knn.KNNQuery;
+import de.lmu.ifi.dbs.elki.database.query.range.RangeQuery;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
import de.lmu.ifi.dbs.elki.distance.distancefunction.DistanceFunction;
import de.lmu.ifi.dbs.elki.index.AbstractIndex;
import de.lmu.ifi.dbs.elki.index.DistanceIndex;
import de.lmu.ifi.dbs.elki.index.IndexFactory;
+import de.lmu.ifi.dbs.elki.index.KNNIndex;
+import de.lmu.ifi.dbs.elki.index.RangeIndex;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
@@ -45,21 +59,24 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
/**
* Distance matrix, for precomputing similarity for a small data set.
- *
+ *
* This class uses a linear memory layout (not a ragged array), and assumes
* symmetry as well as strictness. This way, it only stores the upper triangle
* matrix with double precision. It has to store (n-1) * (n-2) distance values
* in memory, requiring 8 * (n-1) * (n-2) bytes. Since Java has a size limit of
* arrays of 31 bits (signed integer), we can store at most 2^16 objects
* (precisely, 65536 objects) in a single array, which needs about 16 GB of RAM.
- *
+ *
* @author Erich Schubert
- *
+ * @since 0.7.0
+ *
* @apiviz.has PrecomputedDistanceQuery
- *
+ * @apiviz.has PrecomputedKNNQuery
+ * @apiviz.has PrecomputedRangeQuery
+ *
* @param <O> Object type
*/
-public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements DistanceIndex<O> {
+public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O> implements DistanceIndex<O>, RangeIndex<O>, KNNIndex<O> {
/**
* Class logger.
*/
@@ -92,7 +109,7 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
/**
* Constructor.
- *
+ *
* @param relation Data relation
* @param distanceFunction Distance function
*/
@@ -119,7 +136,7 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
distanceQuery = distanceFunction.instantiate(relation);
- int msize = triangleSize(size);
+ final int msize = triangleSize(size);
matrix = new double[msize];
DBIDArrayIter ix = ids.iter(), iy = ids.iter();
@@ -140,7 +157,7 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
/**
* Compute the size of a complete x by x triangle (minus diagonal)
- *
+ *
* @param x Offset
* @return Size of complete triangle
*/
@@ -150,7 +167,7 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
/**
* Array offset computation.
- *
+ *
* @param x X parameter
* @param y Y parameter
* @return Array offset
@@ -184,9 +201,25 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
return null;
}
+ @Override
+ public KNNQuery<O> getKNNQuery(DistanceQuery<O> distanceQuery, Object... hints) {
+ if(this.distanceQuery.getDistanceFunction().equals(distanceQuery.getDistanceFunction())) {
+ return new PrecomputedKNNQuery();
+ }
+ return null;
+ }
+
+ @Override
+ public RangeQuery<O> getRangeQuery(DistanceQuery<O> distanceQuery, Object... hints) {
+ if(this.distanceQuery.getDistanceFunction().equals(distanceQuery.getDistanceFunction())) {
+ return new PrecomputedRangeQuery();
+ }
+ return null;
+ }
+
/**
* Distance query using the precomputed matrix.
- *
+ *
* @author Erich Schubert
*/
private class PrecomputedDistanceQuery implements DistanceQuery<O> {
@@ -223,12 +256,115 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
}
/**
+ * Range query using the distance matrix.
+ *
+ * @author Erich Schubert
+ */
+ private class PrecomputedRangeQuery implements RangeQuery<O> {
+ @Override
+ public DoubleDBIDList getRangeForDBID(DBIDRef id, double range) {
+ ModifiableDoubleDBIDList ret = DBIDUtil.newDistanceDBIDList();
+ getRangeForDBID(id, range, ret);
+ ret.sort();
+ return ret;
+ }
+
+ @Override
+ public void getRangeForDBID(DBIDRef id, double range, ModifiableDoubleDBIDList result) {
+ result.add(0., id);
+ DBIDArrayIter it = ids.iter();
+
+ final int x = ids.getOffset(id);
+ // Case y < x: triangleSize(x) + y
+ int pos = triangleSize(x);
+ for(int y = 0; y < x; y++) {
+ final double dist = matrix[pos];
+ if(dist <= range) {
+ result.add(dist, it.seek(y));
+ }
+ pos++;
+ }
+ assert (pos == triangleSize(x + 1));
+ // Case y > x: triangleSize(y) + x
+ pos = triangleSize(x + 1) + x;
+ for(int y = x + 1; y < size; y++) {
+ final double dist = matrix[pos];
+ if(dist <= range) {
+ result.add(dist, it.seek(y));
+ }
+ pos += y;
+ }
+ }
+
+ @Override
+ public DoubleDBIDList getRangeForObject(O obj, double range) {
+ throw new AbortException("Preprocessor KNN query only supports ID queries.");
+ }
+
+ @Override
+ public void getRangeForObject(O obj, double range, ModifiableDoubleDBIDList result) {
+ throw new AbortException("Preprocessor KNN query only supports ID queries.");
+ }
+ }
+
+ /**
+ * kNN query using the distance matrix.
+ *
+ * @author Erich Schubert
+ */
+ private class PrecomputedKNNQuery implements KNNQuery<O> {
+ @Override
+ public KNNList getKNNForDBID(DBIDRef id, int k) {
+ KNNHeap heap = DBIDUtil.newHeap(k);
+ heap.insert(0., id);
+ DBIDArrayIter it = ids.iter();
+ double max = Double.POSITIVE_INFINITY;
+ final int x = ids.getOffset(id);
+ // Case y < x: triangleSize(x) + y
+ int pos = triangleSize(x);
+ for(int y = 0; y < x; y++) {
+ final double dist = matrix[pos];
+ if(dist <= max) {
+ max = heap.insert(dist, it.seek(y));
+ }
+ pos++;
+ }
+ assert (pos == triangleSize(x + 1));
+ // Case y > x: triangleSize(y) + x
+ pos = triangleSize(x + 1) + x;
+ for(int y = x + 1; y < size; y++) {
+ final double dist = matrix[pos];
+ if(dist <= max) {
+ max = heap.insert(dist, it.seek(y));
+ }
+ pos += y;
+ }
+ return heap.toKNNList();
+ }
+
+ @Override
+ public List<? extends KNNList> getKNNForBulkDBIDs(ArrayDBIDs ids, int k) {
+ // TODO: optimize
+ List<KNNList> ret = new ArrayList<>(ids.size());
+ for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
+ ret.add(getKNNForDBID(iter, k));
+ }
+ return ret;
+ }
+
+ @Override
+ public KNNList getKNNForObject(O obj, int k) {
+ throw new AbortException("Preprocessor KNN query only supports ID queries.");
+ }
+ }
+
+ /**
* Factory for the index.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.has PrecomputedDistanceMatrix
- *
+ *
* @param <O> Object type
*/
public static class Factory<O> implements IndexFactory<O, PrecomputedDistanceMatrix<O>> {
@@ -239,7 +375,7 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
/**
* Constructor.
- *
+ *
* @param distanceFunction Distance function
*/
public Factory(DistanceFunction<? super O> distanceFunction) {
@@ -259,11 +395,11 @@ public class PrecomputedDistanceMatrix<O> extends AbstractIndex<O>implements Dis
/**
* Parameterizer.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
- *
+ *
* @param <O> Object type
*/
public static class Parameterizer<O> extends AbstractParameterizer {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/idistance/InMemoryIDistanceIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/idistance/InMemoryIDistanceIndex.java
index 2fca801c..6ced1fbd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/idistance/InMemoryIDistanceIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/idistance/InMemoryIDistanceIndex.java
@@ -87,6 +87,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/invertedlist/InMemoryInvertedIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/invertedlist/InMemoryInvertedIndex.java
index 7a3087ba..101b7ed1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/invertedlist/InMemoryInvertedIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/invertedlist/InMemoryInvertedIndex.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Simple index using inverted lists.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/InMemoryLSHIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/InMemoryLSHIndex.java
index b55799af..a1940da7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/InMemoryLSHIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/InMemoryLSHIndex.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Locality Sensitive Hashing.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LocalitySensitiveHashFunctionFamily
* @apiviz.has Instance
@@ -169,7 +170,7 @@ public class InMemoryLSHIndex<V> implements IndexFactory<V, InMemoryLSHIndex<V>.
// TODO: We assume all hash functions have the same dimensionality.
double[] buf = new double[hashfunctions.get(0).getNumberOfProjections()];
- FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Building LSH index.", relation.size(), LOG) : null;
+ FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Building LSH index", relation.size(), LOG) : null;
int expect = Math.max(2, (int) Math.ceil(relation.size() / (double) numberOfBuckets));
for(DBIDIter iter = relation.getDBIDs().iter(); iter.valid(); iter.advance()) {
V obj = relation.get(iter);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/AbstractProjectedHashFunctionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/AbstractProjectedHashFunctionFamily.java
index 7d9b09e6..521b16c4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/AbstractProjectedHashFunctionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/AbstractProjectedHashFunctionFamily.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Abstract base class for projection based hash functions.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses RandomProjectionFamily
* @apiviz.has MultipleProjectionsLocalitySensitiveHashFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/CosineHashFunctionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/CosineHashFunctionFamily.java
index b46e30ae..78cf7eb4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/CosineHashFunctionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/CosineHashFunctionFamily.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Evgeniy Faerman
+ * @since 0.6.0
*/
@Reference(authors = "M.S. Charikar", //
title = "Similarity estimation techniques from rounding algorithms", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/EuclideanHashFunctionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/EuclideanHashFunctionFamily.java
index e50766b0..620d2ef1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/EuclideanHashFunctionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/EuclideanHashFunctionFamily.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses GaussianRandomProjectionFamily
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/LocalitySensitiveHashFunctionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/LocalitySensitiveHashFunctionFamily.java
index 4c232df4..94a9e181 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/LocalitySensitiveHashFunctionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/LocalitySensitiveHashFunctionFamily.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.index.lsh.hashfunctions.LocalitySensitiveHashFunction
* LSH family of hash functions.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/ManhattanHashFunctionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/ManhattanHashFunctionFamily.java
index fbc122af..95577790 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/ManhattanHashFunctionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfamilies/ManhattanHashFunctionFamily.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses CauchyRandomProjectionFamily
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/CosineLocalitySensitiveHashFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/CosineLocalitySensitiveHashFunction.java
index ae0af49e..9a68c7d6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/CosineLocalitySensitiveHashFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/CosineLocalitySensitiveHashFunction.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Evgeniy Faerman
+ * @since 0.3
*/
@Reference(authors = "M.S. Charikar", //
title = "Similarity estimation techniques from rounding algorithms", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/LocalitySensitiveHashFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/LocalitySensitiveHashFunction.java
index 51dcd216..cb1c1584 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/LocalitySensitiveHashFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/LocalitySensitiveHashFunction.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.index.lsh.hashfunctions;
* Hash functions as used by locality sensitive hashing.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <V> Data type to hash.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/MultipleProjectionsLocalitySensitiveHashFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/MultipleProjectionsLocalitySensitiveHashFunction.java
index a4976e59..ad266f19 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/MultipleProjectionsLocalitySensitiveHashFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/lsh/hashfunctions/MultipleProjectionsLocalitySensitiveHashFunction.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "M. Datar and N. Immorlica and P. Indyk and V. S. Mirrokni", //
title = "Locality-sensitive hashing scheme based on p-stable distributions", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/AbstractPreprocessorIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/AbstractPreprocessorIndex.java
index 7377955b..3892c896 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/AbstractPreprocessorIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/AbstractPreprocessorIndex.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* object storage for preprocessing results.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf WritableDataStore
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java
index af5fbcc9..66b30c9d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/LocalProjectionIndex.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.ProjectionResult;
* Abstract index interface for local projections
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has ProjectionResult
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/fastoptics/RandomProjectedNeighborsAndDensities.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/fastoptics/RandomProjectedNeighborsAndDensities.java
index e24852a9..f5615331 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/fastoptics/RandomProjectedNeighborsAndDensities.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/fastoptics/RandomProjectedNeighborsAndDensities.java
@@ -85,6 +85,7 @@ import gnu.trove.list.array.TIntArrayList;
*
* @author Johannes Schneider
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "J. Schneider and M. Vlachos", //
title = "Fast parameterless density-based clustering via random projections", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java
index 343f17b7..6d156c63 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/AbstractMaterializeKNNPreprocessor.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for KNN Preprocessors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/CachedDoubleDistanceKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/CachedDoubleDistanceKNNPreprocessor.java
index ae7ce384..7d9f6b19 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/CachedDoubleDistanceKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/CachedDoubleDistanceKNNPreprocessor.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* Preprocessor that loads an existing cached kNN result.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNChangeEvent.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNChangeEvent.java
index 953a3baa..0963229a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNChangeEvent.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNChangeEvent.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* subscribed {@link KNNListener} of the change.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.has DBIDs
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNJoinMaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNJoinMaterializeKNNPreprocessor.java
index 8a6af2fd..895d80c8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNJoinMaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNJoinMaterializeKNNPreprocessor.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Class to materialize the kNN using a spatial join on an R-tree.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <V> vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNListener.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNListener.java
index 40e772b1..166c4286 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNListener.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/KNNListener.java
@@ -30,6 +30,7 @@ import java.util.EventListener;
* objects have been changed due to insertion or removals of objects.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.uses KNNChangeEvent oneway - -
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java
index c2577bf8..71098362 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNAndRKNNPreprocessor.java
@@ -67,6 +67,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* of the nearest neighbors!
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @param <O> the type of database objects the preprocessor can be applied to
* @param the type of distance the used distance function will return
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
index 5f21a165..24d4e677 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MaterializeKNNPreprocessor.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDIter;
import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
+import de.lmu.ifi.dbs.elki.database.ids.DoubleDBIDListIter;
import de.lmu.ifi.dbs.elki.database.ids.KNNHeap;
import de.lmu.ifi.dbs.elki.database.ids.KNNList;
import de.lmu.ifi.dbs.elki.database.ids.SetDBIDs;
@@ -46,6 +47,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.logging.progress.StepProgress;
import de.lmu.ifi.dbs.elki.logging.statistics.Duration;
import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
@@ -56,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* Used for example by {@link de.lmu.ifi.dbs.elki.algorithm.outlier.lof.LOF}.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has DistanceFunction
* @apiviz.has KNNQuery
@@ -65,6 +68,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
*/
@Title("Materialize kNN Neighborhood preprocessor")
@Description("Materializes the k nearest neighbors of objects of a database.")
+@Alias("de.lmu.ifi.dbs.elki.preprocessing.MaterializeKNNPreprocessor")
public class MaterializeKNNPreprocessor<O> extends AbstractMaterializeKNNPreprocessor<O> implements DynamicIndex {
/**
* Logger to use.
@@ -105,14 +109,15 @@ public class MaterializeKNNPreprocessor<O> extends AbstractMaterializeKNNPreproc
*/
@Override
protected void preprocess() {
+ final Logging log = getLogger(); // Could be subclass
createStorage();
ArrayDBIDs ids = DBIDUtil.ensureArray(relation.getDBIDs());
- if(LOG.isStatistics()) {
- LOG.statistics(new LongStatistic(this.getClass().getName() + ".k", k));
+ if(log.isStatistics()) {
+ log.statistics(new LongStatistic(this.getClass().getName() + ".k", k));
}
- Duration duration = LOG.isStatistics() ? LOG.newDuration(this.getClass().getName() + ".precomputation-time").begin() : null;
+ Duration duration = log.isStatistics() ? log.newDuration(this.getClass().getName() + ".precomputation-time").begin() : null;
FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Materializing k nearest neighbors (k=" + k + ")", ids.size(), getLogger()) : null;
// Try bulk
List<? extends KNNList> kNNList = null;
@@ -122,20 +127,30 @@ public class MaterializeKNNPreprocessor<O> extends AbstractMaterializeKNNPreproc
int i = 0;
for(DBIDIter id = ids.iter(); id.valid(); id.advance(), i++) {
storage.put(id, kNNList.get(i));
- getLogger().incrementProcessed(progress);
+ log.incrementProcessed(progress);
}
}
}
else {
+ final boolean ismetric = getDistanceQuery().getDistanceFunction().isMetric();
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
+ if(ismetric && storage.get(iter) != null) {
+ log.incrementProcessed(progress);
+ continue; // Previously computed (duplicate point?)
+ }
KNNList knn = knnQuery.getKNNForDBID(iter, k);
storage.put(iter, knn);
- getLogger().incrementProcessed(progress);
+ if(ismetric) {
+ for(DoubleDBIDListIter it = knn.iter(); it.valid() && it.doubleValue() == 0.; it.advance()) {
+ storage.put(it, knn); // Reuse
+ }
+ }
+ log.incrementProcessed(progress);
}
}
- getLogger().ensureCompleted(progress);
+ log.ensureCompleted(progress);
if(duration != null) {
- LOG.statistics(duration.end());
+ log.statistics(duration.end());
}
}
@@ -172,11 +187,12 @@ public class MaterializeKNNPreprocessor<O> extends AbstractMaterializeKNNPreproc
* @param ids the ids of the newly inserted objects
*/
protected void objectsInserted(DBIDs ids) {
- StepProgress stepprog = getLogger().isVerbose() ? new StepProgress(3) : null;
+ final Logging log = getLogger(); // Could be subclass
+ StepProgress stepprog = log.isVerbose() ? new StepProgress(3) : null;
ArrayDBIDs aids = DBIDUtil.ensureArray(ids);
// materialize the new kNNs
- getLogger().beginStep(stepprog, 1, "New insertions ocurred, materialize their new kNNs.");
+ log.beginStep(stepprog, 1, "New insertions ocurred, materialize their new kNNs.");
// Bulk-query kNNs
List<? extends KNNList> kNNList = knnQuery.getKNNForBulkDBIDs(aids, k);
// Store in storage
@@ -186,14 +202,14 @@ public class MaterializeKNNPreprocessor<O> extends AbstractMaterializeKNNPreproc
}
// update the affected kNNs
- getLogger().beginStep(stepprog, 2, "New insertions ocurred, update the affected kNNs.");
+ log.beginStep(stepprog, 2, "New insertions ocurred, update the affected kNNs.");
ArrayDBIDs rkNN_ids = updateKNNsAfterInsertion(ids);
// inform listener
- getLogger().beginStep(stepprog, 3, "New insertions ocurred, inform listeners.");
+ log.beginStep(stepprog, 3, "New insertions ocurred, inform listeners.");
fireKNNsInserted(ids, rkNN_ids);
- getLogger().setCompleted(stepprog);
+ log.setCompleted(stepprog);
}
/**
@@ -267,23 +283,24 @@ public class MaterializeKNNPreprocessor<O> extends AbstractMaterializeKNNPreproc
* @param ids the ids of the removed objects
*/
protected void objectsRemoved(DBIDs ids) {
- StepProgress stepprog = getLogger().isVerbose() ? new StepProgress(3) : null;
+ final Logging log = getLogger();
+ StepProgress stepprog = log.isVerbose() ? new StepProgress(3) : null;
// delete the materialized (old) kNNs
- getLogger().beginStep(stepprog, 1, "New deletions ocurred, remove their materialized kNNs.");
+ log.beginStep(stepprog, 1, "New deletions ocurred, remove their materialized kNNs.");
for(DBIDIter iter = ids.iter(); iter.valid(); iter.advance()) {
storage.delete(iter);
}
// update the affected kNNs
- getLogger().beginStep(stepprog, 2, "New deletions ocurred, update the affected kNNs.");
+ log.beginStep(stepprog, 2, "New deletions ocurred, update the affected kNNs.");
ArrayDBIDs rkNN_ids = updateKNNsAfterDeletion(ids);
// inform listener
- getLogger().beginStep(stepprog, 3, "New deletions ocurred, inform listeners.");
+ log.beginStep(stepprog, 3, "New deletions ocurred, inform listeners.");
fireKNNsRemoved(ids, rkNN_ids);
- getLogger().ensureCompleted(stepprog);
+ log.ensureCompleted(stepprog);
}
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java
index a78b06e0..7823d872 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/MetricalIndexApproximationMaterializeKNNPreprocessor.java
@@ -59,6 +59,7 @@ import gnu.trove.map.hash.TObjectDoubleHashMap;
* TODO correct handling of datastore events
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses MetricalIndexTree
*
@@ -99,7 +100,7 @@ public class MetricalIndexApproximationMaterializeKNNPreprocessor<O extends Numb
}
List<E> leaves = index.getLeaves();
- FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Processing leaf nodes.", leaves.size(), getLogger()) : null;
+ FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Processing leaf nodes", leaves.size(), getLogger()) : null;
for(E leaf : leaves) {
N node = index.getNode(leaf);
int size = node.getNumEntries();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/NaiveProjectedKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/NaiveProjectedKNNPreprocessor.java
index 6b946474..f4911aef 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/NaiveProjectedKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/NaiveProjectedKNNPreprocessor.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
* @apiviz.has NaiveProjectedKNNQuery
*/
@Reference(authors = "E. Schubert, A. Zimek, H.-P. Kriegel", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java
index cdb314dc..b8a9f6fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/PartitionApproximationMaterializeKNNPreprocessor.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Used for example by {@link de.lmu.ifi.dbs.elki.algorithm.outlier.lof.LOF}.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <O> the type of database objects the preprocessor can be applied to
*/
@@ -103,7 +104,7 @@ public class PartitionApproximationMaterializeKNNPreprocessor<O> extends Abstrac
// Produce a random shuffling of the IDs:
ArrayDBIDs[] parts = DBIDUtil.randomSplit(relation.getDBIDs(), partitions, rnd);
- FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Processing partitions.", partitions, LOG) : null;
+ FiniteProgress progress = LOG.isVerbose() ? new FiniteProgress("Processing partitions", partitions, LOG) : null;
for(int part = 0; part < partitions; part++) {
final ArrayDBIDs ids = parts[part];
final int size = ids.size();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java
index 39eb23f3..33a0c070 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/RandomSampleKNNPreprocessor.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingKNNPreprocessor.java
index 8aa1368c..22b378ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingKNNPreprocessor.java
@@ -88,6 +88,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SpaceFillingKNNQuery
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingMaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingMaterializeKNNPreprocessor.java
index 4b3864eb..257bda32 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingMaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpacefillingMaterializeKNNPreprocessor.java
@@ -77,6 +77,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "E. Schubert, A. Zimek, H.-P. Kriegel", //
title = "Fast and Scalable Outlier Detection with Approximate Nearest Neighbor Ensembles", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java
index 3706035c..49cdf239 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/knn/SpatialApproximationMaterializeKNNPreprocessor.java
@@ -23,8 +23,6 @@ package de.lmu.ifi.dbs.elki.index.preprocessed.knn;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import gnu.trove.impl.Constants;
-import gnu.trove.map.hash.TObjectDoubleHashMap;
import java.util.Collection;
import java.util.List;
@@ -49,9 +47,12 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.logging.progress.FiniteProgress;
import de.lmu.ifi.dbs.elki.math.MeanVariance;
import de.lmu.ifi.dbs.elki.result.ResultUtil;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
+import gnu.trove.impl.Constants;
+import gnu.trove.map.hash.TObjectDoubleHashMap;
/**
* A preprocessor for annotation of the k nearest neighbors (and their
@@ -62,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* TODO correct handling of datastore events
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses SpatialIndexTree
*
@@ -70,6 +72,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
*/
@Title("Spatial Approximation Materialize kNN Preprocessor")
@Description("Caterializes the (approximate) k nearest neighbors of objects of a database using a spatial approximation.")
+@Alias("de.lmu.ifi.dbs.elki.preprocessing.SpatialApproximationMaterializeKNNPreprocessor")
public class SpatialApproximationMaterializeKNNPreprocessor<O extends NumberVector, N extends SpatialNode<N, E>, E extends SpatialEntry> extends AbstractMaterializeKNNPreprocessor<O> {
/**
* Logger to use
@@ -105,7 +108,7 @@ public class SpatialApproximationMaterializeKNNPreprocessor<O extends NumberVect
}
List<E> leaves = index.getLeaves();
- FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Processing leaf nodes.", leaves.size(), getLogger()) : null;
+ FiniteProgress progress = getLogger().isVerbose() ? new FiniteProgress("Processing leaf nodes", leaves.size(), getLogger()) : null;
for(E leaf : leaves) {
N node = index.getNode(leaf);
int size = node.getNumEntries();
@@ -217,4 +220,4 @@ public class SpatialApproximationMaterializeKNNPreprocessor<O extends NumberVect
}
}
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java
index f1da979e..3f7f6d93 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/AbstractFilteredPCAIndex.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has PCAFilteredRunner
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java
index c6504f54..9adef2e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/FilteredLocalPCAIndex.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.pca.PCAFilteredResult;
* Interface for an index providing local PCA results.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <NV> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
index 8e81d368..8dc06940 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/localpca/KNNQueryFilteredPCAIndex.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
* @apiviz.uses KNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java
index af1359d5..401a872f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/AbstractPreferenceVectorIndex.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.index.preprocessed.AbstractPreprocessorIndex;
* Abstract base class for preference vector based algorithms.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <NV> Number vector
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java
index 0653e1bb..5e0a954e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/DiSHPreferenceVectorIndex.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* database.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @param <V> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java
index a196e5d4..54b01a0b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/HiSCPreferenceVectorIndex.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* database.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @see HiSC
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java
index 3a4ed850..896783c3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/preference/PreferenceVectorIndex.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.index.IndexFactory;
* Interface for an index providing preference vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <NV> Vector type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java
index 2b689d8d..22ebacc1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborIndex.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.index.IndexFactory;
* Interface for an index providing nearest neighbor sets.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface SharedNearestNeighborIndex<O> extends Index {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java
index 81ce777d..7e65ff80 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/preprocessed/snn/SharedNearestNeighborPreprocessor.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has DistanceFunction
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LatLngAsECEFIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LatLngAsECEFIndex.java
index e3bf3d88..3c38ea2d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LatLngAsECEFIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LatLngAsECEFIndex.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* {@link DatabaseQuery#HINT_EXACT} is set, it will not be used.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf LatLngToECEFProjection
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LngLatAsECEFIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LngLatAsECEFIndex.java
index 794ecdd6..d247b4bf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LngLatAsECEFIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/LngLatAsECEFIndex.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* {@link DatabaseQuery#HINT_EXACT} is set, it will not be used.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf LngLatToECEFProjection
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/PINN.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/PINN.java
index 61ab9e56..7c3dbb28 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/PINN.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/PINN.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf AchlioptasRandomProjectionFamily
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/ProjectedIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/ProjectedIndex.java
index 090d00ac..daab827d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/ProjectedIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/projected/ProjectedIndex.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* FIXME: add refinement to bulk queries!
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf Projection
* @apiviz.has ProjectedKNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractDirectoryEntry.java
index 7918ed7d..9732469a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractDirectoryEntry.java
@@ -31,6 +31,7 @@ import java.io.ObjectOutput;
* Abstract superclass for entries in an tree based index structure.
*
* @author Elke Achtert
+ * @since 0.2
*/
public abstract class AbstractDirectoryEntry implements DirectoryEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractLeafEntry.java
index 0ef87f34..b99adc16 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractLeafEntry.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil;
* Abstract superclass for entries in an tree based index structure.
*
* @author Elke Achtert
+ * @since 0.2
*/
public abstract class AbstractLeafEntry implements LeafEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractNode.java
index e1bbdb29..b2922e55 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/AbstractNode.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Abstract superclass for nodes in an tree based index structure.
*
* @author Elke Achtert
+ * @since 0.2
* @param <E> the type of Entry used in the index
*/
public abstract class AbstractNode<E extends Entry> extends AbstractExternalizablePage implements Node<E> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/BreadthFirstEnumeration.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/BreadthFirstEnumeration.java
index ee86c3fa..14c3e434 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/BreadthFirstEnumeration.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/BreadthFirstEnumeration.java
@@ -32,6 +32,7 @@ import java.util.Queue;
* Breadth first enumeration over the nodes of an index structure.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses IndexTree
* @apiviz.has IndexTreePath
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/DirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/DirectoryEntry.java
index cc335e90..2edf3fa5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/DirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/DirectoryEntry.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.index.tree;
* Directory Entry
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Entry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Entry.java
index 47369bac..8558842e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Entry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Entry.java
@@ -30,6 +30,7 @@ import java.io.Externalizable;
* represent a node or a data object.
*
* @author Elke Achtert
+ * @since 0.2
* @apiviz.excludeSubtypes
*/
public interface Entry extends Externalizable {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTree.java
index dd38bb6f..2024fa4c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTree.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Abstract super class for all tree based index classes.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf PageFile
* @apiviz.has Node oneway - - contains
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTreePath.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTreePath.java
index 02aa2c68..91737ac8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTreePath.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/IndexTreePath.java
@@ -29,6 +29,7 @@ import java.util.ArrayList;
* Represents a path to a node in an index structure.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has Entry oneway - - «contains»
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/LeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/LeafEntry.java
index 8be982bd..b8e10035 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/LeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/LeafEntry.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
* Leaf entry
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Node.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Node.java
index 34ddfbeb..aaacfc2a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Node.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/Node.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.persistent.Page;
* has to provide an enumeration over its children.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf Entry
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/TreeIndexHeader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/TreeIndexHeader.java
index 0e40d2c1..44c520ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/TreeIndexHeader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/TreeIndexHeader.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.persistent.DefaultPageHeader;
* information is needed for persistent storage.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class TreeIndexHeader extends DefaultPageHeader {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/MetricalIndexTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/MetricalIndexTree.java
index cd0be5e0..fffd7020 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/MetricalIndexTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/MetricalIndexTree.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* Abstract super class for all metrical index classes.
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <O> the type of objects stored in the index
* @param <N> the type of nodes used in the metrical index
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/AbstractCoverTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/AbstractCoverTree.java
index 84878486..891b353d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/AbstractCoverTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/AbstractCoverTree.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract base class for cover tree variants.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/CoverTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/CoverTree.java
index ca20af1e..ca07889b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/CoverTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/CoverTree.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* TODO: allow insertions and removals, as in the original publication.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has CoverTreeRangeQuery
* @apiviz.has CoverTreeKNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/SimplifiedCoverTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/SimplifiedCoverTree.java
index a3daba34..2b85283f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/SimplifiedCoverTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/covertree/SimplifiedCoverTree.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.DoubleObjectMinHeap;
* TODO: allow insertions and removals, as in the original publication.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has CoverTreeRangeQuery
* @apiviz.has CoverTreeKNNQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTree.java
index 7282a39a..073596ad 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTree.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* Abstract super class for all M-Tree variants.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf MTreeSettings
* @apiviz.composedOf Statistics
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeFactory.java
index 0a7eb7cf..b3207656 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeFactory.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract factory for various MTrees
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses AbstractMTree oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeNode.java
index d065891b..32ee5980 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/AbstractMTreeNode.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
* Abstract super class for nodes in M-Tree variants.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MTreeEntry oneway - - contains
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeDirectoryEntry.java
index 46b556e5..604c9356 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeDirectoryEntry.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.index.tree.AbstractDirectoryEntry;
* the routing object of the entry to its parent's routing object in the M-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class MTreeDirectoryEntry extends AbstractDirectoryEntry implements MTreeEntry {
private static final long serialVersionUID = 2;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeEntry.java
index 8578ad54..d53dcf28 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeEntry.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.index.tree.Entry;
* Defines the requirements for an entry in an M-Tree node.
*
* @author Elke Achtert
+ * @since 0.2
*/
public interface MTreeEntry extends Entry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeLeafEntry.java
index c52216be..dfa43a13 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeLeafEntry.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.index.tree.AbstractLeafEntry;
* M-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class MTreeLeafEntry extends AbstractLeafEntry implements MTreeEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeSettings.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeSettings.java
index e139ad43..8f66f079 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeSettings.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/MTreeSettings.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.strategies.split.MT
* Class to store the MTree settings.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
* @param <N> Node type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTree.java
index dd55b525..0646ba3b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTree.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* k is less than or equal to the given parameter.
*
* @author Elke Achtert
+ * @since 0.2
* @param <O> the type of DatabaseObject to be stored in the metrical index
* @param <N> the type of MetricalNode used in the metrical index
* @param <E> the type of MetricalEntry used in the metrical index
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnified.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnified.java
index b3fc0f5f..462a4ed1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnified.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnified.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* k is less than or equal to the given parameter.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkTreeHeader oneway
* @apiviz.composedOf MkTreeSettings
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnifiedFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnifiedFactory.java
index 577ca31f..5e98fc10 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnifiedFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/AbstractMkTreeUnifiedFactory.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Abstract factory for various Mk-Trees
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses AbstractMkTreeUnified oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeHeader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeHeader.java
index 74b34471..f7a08db2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeHeader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeHeader.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.index.tree.TreeIndexHeader;
* This information is needed for persistent storage.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class MkTreeHeader extends TreeIndexHeader {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeSettings.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeSettings.java
index a3410291..1f94da0a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeSettings.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/MkTreeSettings.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeSettings;
* Class with settings for MkTrees.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
* @param <N> Node type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppDirectoryEntry.java
index a8cf62e0..3dc8786e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppDirectoryEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeDirectoryEntry
* of its knn-distances.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkAppDirectoryEntry extends MTreeDirectoryEntry implements MkAppEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppEntry.java
index 53f769e1..88a4bc07 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppEntry.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* provided.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf PolynomialApproximation
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppLeafEntry.java
index 098e82ac..e5d92d00 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppLeafEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeLeafEntry;
* knn-distances.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkAppLeafEntry extends MTreeLeafEntry implements MkAppEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTree.java
index ac9a00bb..14755f4b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTree.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* parameter k < kmax.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf MkAppTreeSettings
* @apiviz.has MkAppTreeNode oneway - - contains
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeFactory.java
index b6a5792d..0c960da8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeFactory.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Factory for a MkApp-Tree
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses MkAppTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeIndex.java
index 7e9f2332..0ecf04e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeIndex.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* MkAppTree used as database index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeNode.java
index cb798e46..4d37e326 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeNode.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* Represents a node in an MkApp-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkAppEntry oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeSettings.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeSettings.java
index 993b198f..a373d472 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeSettings.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/MkAppTreeSettings.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.mktrees.MkTreeSetti
* Settings class for the MkApp Tree.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/PolynomialApproximation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/PolynomialApproximation.java
index fa795da7..b89e643d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/PolynomialApproximation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkapp/PolynomialApproximation.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* for knn-distances consisting of parameters b0, ..., bp.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class PolynomialApproximation implements Externalizable {
private static final long serialVersionUID = 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ApproximationLine.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ApproximationLine.java
index d11415d2..f4567186 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ApproximationLine.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ApproximationLine.java
@@ -33,6 +33,7 @@ import java.io.ObjectOutput;
* axes intercept t and a start value for k.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class ApproximationLine implements Externalizable {
private static final long serialVersionUID = 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ConvexHull.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ConvexHull.java
index f0e202e1..36490bc0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ConvexHull.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/ConvexHull.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.mktrees.mkcop;
* Holds the lower and upper hull for some values.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class ConvexHull {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPDirectoryEntry.java
index 012728a3..92f514bc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPDirectoryEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeDirectoryEntry
* its knn-distances.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkCoPDirectoryEntry extends MTreeDirectoryEntry implements MkCoPEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPEntry.java
index 05f93438..0a112325 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPEntry.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* provided.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf ApproximationLine
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPLeafEntry.java
index dbb463c8..fc7a10b5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPLeafEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeLeafEntry;
* approximation of its knn-distances.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkCoPLeafEntry extends MTreeLeafEntry implements MkCoPEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTree.java
index 322b832e..1165b9d5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTree.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* parameter k < kmax.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkCoPTreeNode oneway - - contains
* @apiviz.has ConvexHull
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeIndex.java
index c0de7232..b17490a1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeIndex.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* MkCoPTree used as database index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeNode.java
index 890887b7..0a23e15b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCoPTreeNode.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTreeNode;
* Represents a node in an MkCop-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkCoPEntry oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCopTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCopTreeFactory.java
index d16dfa50..e8ac44f6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCopTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkcop/MkCopTreeFactory.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Factory for a MkCoPTree-Tree
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses MkCoPTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxDirectoryEntry.java
index 0fb9e0c6..c1aaa975 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxDirectoryEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeDirectoryEntry
* the underlying MkMax-Tree node.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkMaxDirectoryEntry extends MTreeDirectoryEntry implements MkMaxEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxEntry.java
index 867343f4..b5dc4232 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxEntry.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* neighbor distance of the underlying data object or MkMax-Tree node.
*
* @author Elke Achtert
+ * @since 0.2
*/
interface MkMaxEntry extends MTreeEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxLeafEntry.java
index 699a6a2a..e5883f0c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxLeafEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeLeafEntry;
* the underlying data object.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkMaxLeafEntry extends MTreeLeafEntry implements MkMaxEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTree.java
index 3f2c807e..d2c64e43 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTree.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* in each entry of a node.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkMaxTreeNode oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeFactory.java
index c8d0dc72..ee15dff6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeFactory.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
* Factory for MkMaxTrees
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses MkMaxTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeIndex.java
index 21e2d9df..6182ae26 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeIndex.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.NotImplementedException;
* MkMax tree
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeNode.java
index 1e044098..3781bbd4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mkmax/MkMaxTreeNode.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTreeNode;
* Represents a node in an {@link MkMaxTree}.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkMaxEntry oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabDirectoryEntry.java
index 54345ca6..c16095e9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabDirectoryEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeDirectoryEntry
* parameters k <= k_max.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkTabDirectoryEntry extends MTreeDirectoryEntry implements MkTabEntry {
private static final long serialVersionUID = 2;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabEntry.java
index 09dbb94c..2b2a247d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabEntry.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* parameters k <= k_max of the underlying data object or MkTab-Tree node.
*
* @author Elke Achtert
+ * @since 0.2
*/
interface MkTabEntry extends MTreeEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabLeafEntry.java
index 39627445..e3881745 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabLeafEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeLeafEntry;
* parameters k <= k_max.
*
* @author Elke Achtert
+ * @since 0.2
*/
class MkTabLeafEntry extends MTreeLeafEntry implements MkTabEntry {
private static final long serialVersionUID = 2;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTree.java
index 5f99fc95..e45fea67 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTree.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* of a node.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkTabTreeNode oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeFactory.java
index ce4a1513..ad182b78 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeFactory.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
* Factory for MkTabTrees
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses MkTabTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeIndex.java
index 7fcc05fc..bef30432 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeIndex.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* MkTabTree used as database index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeNode.java
index be7f0790..9c62f487 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mktrees/mktab/MkTabTreeNode.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTreeNode;
* Represents a node in a MkMax-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MkTabEntry oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTree.java
index e7a1bdfa..631388b0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTree.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has MTreeNode oneway - - contains
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeFactory.java
index a65d96c7..faa1cd95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeFactory.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
* Factory for a M-Tree
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses MTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeIndex.java
index 8d73bd58..d8b2bddd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeIndex.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* Class for using an m-tree as database index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeNode.java
index db8f4a19..b8dd882d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/mtree/MTreeNode.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* Represents a node in an M-Tree.
*
* @author Elke Achtert
+ * @since 0.2
* @param <O> Object type
*/
public class MTreeNode<O> extends AbstractMTreeNode<O, MTreeNode<O>, MTreeEntry> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MTreeQueryUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MTreeQueryUtil.java
index 44446fe3..35f2b40a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MTreeQueryUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MTreeQueryUtil.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTree;
* Query utility classes for MTrees.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public final class MTreeQueryUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexKNNQuery.java
index cd574b0e..73a21b69 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexKNNQuery.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.heap.ComparableMinHeap;
* Instance of a KNN query for a particular spatial index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses AbstractMTree
* @apiviz.uses DoubleMTreeDistanceSearchCandidate
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexRangeQuery.java
index 392b3e38..5b57ea4b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MetricalIndexRangeQuery.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* Instance of a range query for a particular spatial index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses AbstractMTree
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MkTreeRKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MkTreeRKNNQuery.java
index 9a2527f7..b69e4701 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MkTreeRKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/query/MkTreeRKNNQuery.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.NotImplementedException;
* Instance of a rKNN query for a particular spatial index.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses AbstractMkTree
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MTreeInsert.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MTreeInsert.java
index cf460fd8..c51979e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MTreeInsert.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MTreeInsert.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* FIXME: move this to the actual insert.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface MTreeInsert<O, N extends AbstractMTreeNode<O, N, E>, E extends MTreeEntry> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MinimumEnlargementInsert.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MinimumEnlargementInsert.java
index 22bd611f..58ab4f4f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MinimumEnlargementInsert.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/insert/MinimumEnlargementInsert.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "P. Ciaccia, M. Patella, P. Zezula", //
title = "M-tree: An Efficient Access Method for Similarity Search in Metric Spaces", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/Assignments.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/Assignments.java
index 7095bd0a..d2fd6570 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/Assignments.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/Assignments.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
* Encapsulates the attributes of an assignment during a split.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf DistanceEntry
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/DistanceEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/DistanceEntry.java
index 79d4668a..ac55a1d3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/DistanceEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/DistanceEntry.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.index.tree.Entry;
* belonging to this entry.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses Entry
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MLBDistSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MLBDistSplit.java
index f07ed672..648c97ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MLBDistSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MLBDistSplit.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.strategies.split;
import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTree;
import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTreeNode;
import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
@@ -41,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <O> the type of DatabaseObject to be stored in the M-Tree
* @param <N> the type of AbstractMTreeNode used in the M-Tree
@@ -50,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
title = "M-tree: An Efficient Access Method for Similarity Search in Metric Spaces", //
booktitle = "VLDB'97, Proceedings of 23rd International Conference on Very Large Data Bases, August 25-29, 1997, Athens, Greece", //
url = "http://www.vldb.org/conf/1997/P426.PDF")
+@Alias("de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.split.MLBDistSplit")
public class MLBDistSplit<O, N extends AbstractMTreeNode<O, N, E>, E extends MTreeEntry> extends MTreeSplit<O, N, E> {
/**
* Creates a new split object.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MMRadSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MMRadSplit.java
index 16687a20..6ef4e97a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MMRadSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MMRadSplit.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <O> the type of objects to be stored in the M-Tree
* @param <N> the type of AbstractMTreeNode used in the M-Tree
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MRadSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MRadSplit.java
index e364c61f..a53e02de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MRadSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MRadSplit.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.strategies.split;
import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTree;
import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.AbstractMTreeNode;
import de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.MTreeEntry;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
@@ -41,12 +42,14 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <O> the type of DatabaseObject to be stored in the M-Tree
* @param <N> the type of AbstractMTreeNode used in the M-Tree
* @param <E> the type of MetricalEntry used in the M-Tree
*/
@Reference(authors = "P. Ciaccia, M. Patella, P. Zezula", title = "M-tree: An Efficient Access Method for Similarity Search in Metric Spaces", booktitle = "VLDB'97, Proceedings of 23rd International Conference on Very Large Data Bases, August 25-29, 1997, Athens, Greece", url = "http://www.vldb.org/conf/1997/P426.PDF")
+@Alias("de.lmu.ifi.dbs.elki.index.tree.metrical.mtreevariants.split.MRadSplit")
public class MRadSplit<O, N extends AbstractMTreeNode<O, N, E>, E extends MTreeEntry> extends MTreeSplit<O, N, E> {
/**
* Creates a new split object.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MTreeSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MTreeSplit.java
index 01c612c0..30487846 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MTreeSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/MTreeSplit.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arrays.DoubleIntegerArrayQui
* Abstract super class for splitting a node in an M-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf Assignments
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/RandomSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/RandomSplit.java
index e7c6dbca..27970b25 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/RandomSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/metrical/mtreevariants/strategies/split/RandomSplit.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <O> the type of DatabaseObject to be stored in the M-Tree
* @param <N> the type of AbstractMTreeNode used in the M-Tree
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleDistanceSearchCandidate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleDistanceSearchCandidate.java
index 46dbe003..a5d422f7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleDistanceSearchCandidate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleDistanceSearchCandidate.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.index.tree.query;
* implementation).
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class DoubleDistanceSearchCandidate implements Comparable<DoubleDistanceSearchCandidate> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleMTreeDistanceSearchCandidate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleMTreeDistanceSearchCandidate.java
index bdd1e0f5..08562d4d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleMTreeDistanceSearchCandidate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/DoubleMTreeDistanceSearchCandidate.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
* covering radius.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
public class DoubleMTreeDistanceSearchCandidate extends DoubleDistanceSearchCandidate {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/GenericMTreeDistanceSearchCandidate.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/GenericMTreeDistanceSearchCandidate.java
index 575436db..2cdad822 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/GenericMTreeDistanceSearchCandidate.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/query/GenericMTreeDistanceSearchCandidate.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
* FIXME: Class naming in this package is inconsistent.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
public class GenericMTreeDistanceSearchCandidate implements Comparable<GenericMTreeDistanceSearchCandidate> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialDirectoryEntry.java
index 56fd0e0c..71bfef66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialDirectoryEntry.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.index.tree.AbstractDirectoryEntry;
* spatial node.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class SpatialDirectoryEntry extends AbstractDirectoryEntry implements SpatialEntry {
private static final long serialVersionUID = 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialEntry.java
index 4122b90c..07d6bc17 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialEntry.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.index.tree.Entry;
* Defines the requirements for an entry in a node of a Spatial Index.
*
* @author Elke Achtert
+ * @since 0.2
*/
public interface SpatialEntry extends Entry, SpatialComparable {
// Emtpy - just combining the two interfaces above.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialIndexTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialIndexTree.java
index 52a92916..13acb8e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialIndexTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialIndexTree.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* Abstract super class for all spatial index tree classes.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has SpatialNode oneway - - contains
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialNode.java
index af88b35f..f2a584d1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialNode.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.Node;
* leaf node.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf SpatialEntry
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPair.java
index 0d4884ad..4f008337 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPair.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* which are spatial nodes or data objects.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
public class SpatialPair<K, V extends SpatialComparable> extends Pair<K, V> implements SpatialComparable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPointLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPointLeafEntry.java
index 705c54d6..bc25c0cd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPointLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/SpatialPointLeafEntry.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* and the values of the underlying data object.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class SpatialPointLeafEntry extends AbstractLeafEntry implements SpatialEntry, NumberVector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/MinimalisticMemoryKDTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/MinimalisticMemoryKDTree.java
index 11bcb17a..90b07c9e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/MinimalisticMemoryKDTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/MinimalisticMemoryKDTree.java
@@ -83,6 +83,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* TODO: add support for weighted Minkowski distances.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has KDTreeKNNQuery
* @apiviz.has KDTreeRangeQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/SmallMemoryKDTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/SmallMemoryKDTree.java
index d44731f0..ca7c5821 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/SmallMemoryKDTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/kd/SmallMemoryKDTree.java
@@ -79,6 +79,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* TODO: add support for weighted Minkowski distances.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has KDTreeKNNQuery
* @apiviz.has KDTreeRangeQuery
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTree.java
index 5c3530ec..fd7fd8b5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTree.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* FeatureVector) is intentional, because we have spatial requirements.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has AbstractRStarTreeNode oneway - - contains
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeFactory.java
index ae0e3389..44175e99 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeFactory.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Abstract factory for R*-Tree based trees.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses AbstractRStarTree oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeNode.java
index 77de9df4..56f85ae3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRStarTreeNode.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration;
* Abstract superclass for nodes in a R*-Tree.
*
* @author Elke Achtert
+ * @since 0.2
* @param <N> Node type
* @param <E> Entry type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRTreeSettings.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRTreeSettings.java
index f8c6e732..87bad4ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRTreeSettings.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/AbstractRTreeSettings.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.strategies.split.Top
* Class to wrap common Rtree settings.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.composedOf BulkSplit
* @apiviz.composedOf SplitStrategy
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/NonFlatRStarTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/NonFlatRStarTree.java
index 5d65d605..bdb68439 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/NonFlatRStarTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/NonFlatRStarTree.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* Abstract superclass for all non-flat R*-Tree variants.
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <N> Node type
* @param <E> Entry type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluDirectoryEntry.java
index b8792abd..c4e941bf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluDirectoryEntry.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialDirectoryEntry;
* objects.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class DeLiCluDirectoryEntry extends SpatialDirectoryEntry implements DeLiCluEntry {
private static final long serialVersionUID = 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluEntry.java
index f6fc3fb6..feb4501d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluEntry.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialEntry;
* contains handled or unhandled data objects.
*
* @author Elke Achtert
+ * @since 0.2
*/
public interface DeLiCluEntry extends SpatialEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluLeafEntry.java
index 4a02c4fd..d973a226 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluLeafEntry.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialPointLeafEntry;
* whether this entry's node contains handled or unhandled data objects.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class DeLiCluLeafEntry extends SpatialPointLeafEntry implements DeLiCluEntry {
private static final long serialVersionUID = 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluNode.java
index 72fdd154..994b5777 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluNode.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTreeNod
* Represents a node in a DeLiClu-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has DeLiCluEntry oneway - - contains
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTree.java
index dafa4992..a977be40 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTree.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* algorithm.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has DeLiCluNode oneway - - contains
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeFactory.java
index 66a59352..3e706658 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeFactory.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFileFactory;
* Factory for DeLiClu R*-Trees.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses DeLiCluTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeIndex.java
index 436e38fd..7f078906 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/deliclu/DeLiCluTreeIndex.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* The common use of the DeLiClu tree: indexing number vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTree.java
index 7f0e77ab..01b4a594 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTree.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* to search for certain object in the structure and ensures persistence.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has FlatRStarTreeNode oneway - - contains
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeFactory.java
index 88505f0c..ad4406ad 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeFactory.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFileFactory;
* Factory for flat R*-Trees.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses FlatRStarTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeIndex.java
index 21f4baea..7bfa77f4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeIndex.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* The common use of the flat rstar tree: indexing number vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeNode.java
index 0ad3af21..2ae002d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/flat/FlatRStarTreeNode.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
* Represents a node in a flat R*-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class FlatRStarTreeNode extends AbstractRStarTreeNode<FlatRStarTreeNode, SpatialEntry> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeKNNQuery.java
index 25884cdf..30e41ff3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeKNNQuery.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.uses EuclideanDistanceFunction
* @apiviz.uses SquaredEuclideanDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeRangeQuery.java
index 70112d7e..9c04d2a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/EuclideanRStarTreeRangeQuery.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses EuclideanDistanceFunction
* @apiviz.uses SquaredEuclideanDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeKNNQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeKNNQuery.java
index bb1a57a4..763841ef 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeKNNQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeKNNQuery.java
@@ -65,6 +65,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses AbstractRStarTree
* @apiviz.uses SpatialPrimitiveDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeRangeQuery.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeRangeQuery.java
index b8929011..0319e809 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeRangeQuery.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeRangeQuery.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses AbstractRStarTree
* @apiviz.uses SpatialPrimitiveDistanceFunction
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeUtil.java
index ee8cd6f0..9808bf30 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/query/RStarTreeUtil.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTree;
* Utility class for RStar trees
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNDirectoryEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNDirectoryEntry.java
index 9b422334..93b32af8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNDirectoryEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNDirectoryEntry.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialDirectoryEntry;
* underlying RdKNN-Tree node.
*
* @author Elke Achtert
+ * @since 0.2
* @param Distance type
*/
public class RdKNNDirectoryEntry extends SpatialDirectoryEntry implements RdKNNEntry {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNEntry.java
index 9d98dcd0..b85a1c92 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNEntry.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialEntry;
* data object or RdKNN-Tree node.
*
* @author Elke Achtert
+ * @since 0.2
*/
interface RdKNNEntry extends SpatialEntry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNLeafEntry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNLeafEntry.java
index 44c65c5f..491d6cfe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNLeafEntry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNLeafEntry.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.SpatialPointLeafEntry;
* data object.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class RdKNNLeafEntry extends SpatialPointLeafEntry implements RdKNNEntry {
private static final long serialVersionUID = 2;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNNode.java
index ce4ac0dd..6a887047 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNNode.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTreeNod
* Represents a node in a RDkNN-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has RdKNNEntry oneway - - contains
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTree.java
index b9485503..04e45424 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTree.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleObjPair;
* TODO: noch nicht fertig!!!
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has RdKNNNode
* @apiviz.has RdKNNTreeHeader
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeFactory.java
index fbe03399..9ccdea59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeFactory.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Factory for RdKNN R*-Trees.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.stereotype factory
* @apiviz.uses RdKNNTree oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeHeader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeHeader.java
index 4b2b8c5f..94af7721 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeHeader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdKNNTreeHeader.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.index.tree.TreeIndexHeader;
* needed for persistent storage.
*
* @author Elke Achtert
+ * @since 0.2
*/
class RdKNNTreeHeader extends TreeIndexHeader {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdkNNSettings.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdkNNSettings.java
index 0cee0c4a..931428b7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdkNNSettings.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rdknn/RdkNNSettings.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRTreeSetting
* Settings for the RdKNN Tree.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java
index b4e19638..986ade9d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTree.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* for certain object in the structure and ensures persistence.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has RStarTreeNode oneway - - contains
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeFactory.java
index aacb94c5..efdbdcc9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeFactory.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.Alias;
* Factory for regular R*-Trees.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark factory
* @apiviz.uses RStarTreeIndex oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeIndex.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeIndex.java
index 17c7b942..dfa39915 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeIndex.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeIndex.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.persistent.PageFile;
* The common use of the rstar tree: indexing number vectors.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeNode.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeNode.java
index d5d01542..14361c87 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeNode.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/rstar/RStarTreeNode.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTreeNod
* Represents a node in an R*-Tree.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class RStarTreeNode extends AbstractRStarTreeNode<RStarTreeNode, SpatialEntry> {
private static final long serialVersionUID = 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AbstractBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AbstractBulkSplit.java
index 0c218c7e..75b55eba 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AbstractBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AbstractBulkSplit.java
@@ -30,6 +30,7 @@ import java.util.List;
* Encapsulates the required parameters for a bulk split of a spatial index.
*
* @author Elke Achtert
+ * @since 0.4.0
*/
public abstract class AbstractBulkSplit implements BulkSplit {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AdaptiveSortTileRecursiveBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AdaptiveSortTileRecursiveBulkSplit.java
index 55b8d5ec..0eda00fd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AdaptiveSortTileRecursiveBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/AdaptiveSortTileRecursiveBulkSplit.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* See {@link SortTileRecursiveBulkSplit} for the original STR bulk load.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class AdaptiveSortTileRecursiveBulkSplit extends AbstractBulkSplit {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/BulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/BulkSplit.java
index 84432746..0688fb1c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/BulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/BulkSplit.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
* Interface for a bulk split strategy.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface BulkSplit {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/FileOrderBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/FileOrderBulkSplit.java
index ad77ceab..0c937b06 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/FileOrderBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/FileOrderBulkSplit.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* before.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class FileOrderBulkSplit extends AbstractBulkSplit {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionBulkSplit.java
index 3ad7a333..2bd67601 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionBulkSplit.java
@@ -31,6 +31,7 @@ import java.util.List;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialSingleMinComparator;
import de.lmu.ifi.dbs.elki.logging.Logging;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
/**
@@ -38,9 +39,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* dimensions with maximum extension.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.composedOf SpatialSingleMinComparator
*/
+@Alias("de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.bulk.MaxExtensionBulkSplit")
public class MaxExtensionBulkSplit extends AbstractBulkSplit {
/**
* Logger.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionSortTileRecursiveBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionSortTileRecursiveBulkSplit.java
index eeb3c050..e98ff4c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionSortTileRecursiveBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/MaxExtensionSortTileRecursiveBulkSplit.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* further, by also varying the fan-out degree.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class MaxExtensionSortTileRecursiveBulkSplit extends AbstractBulkSplit {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/OneDimSortBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/OneDimSortBulkSplit.java
index 439bd9c7..111cb71c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/OneDimSortBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/OneDimSortBulkSplit.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Roussopoulos, N. and Leifker, D.", title = "Direct spatial search on pictorial databases using packed R-trees", booktitle = "ACM SIGMOD Record 14-4", url = "http://dx.doi.org/10.1145/971699.318900")
public class OneDimSortBulkSplit extends AbstractBulkSplit {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SortTileRecursiveBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SortTileRecursiveBulkSplit.java
index ed9e919e..7f074023 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SortTileRecursiveBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SortTileRecursiveBulkSplit.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Leutenegger, S.T. and Lopez, M.A. and Edgington, J.", title = "STR: A simple and efficient algorithm for R-tree packing", booktitle = "Proc. 13th International Conference on Data Engineering, 1997", url = "http://dx.doi.org/10.1109/ICDE.1997.582015")
@Alias({"str", "STR"})
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SpatialSortBulkSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SpatialSortBulkSplit.java
index f2b39179..f0a85de7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SpatialSortBulkSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/bulk/SpatialSortBulkSplit.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* @apiviz.composedOf SpatialSorter
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(title = "On packing R-trees", authors = "Kamel, I. and Faloutsos, C.", booktitle = "Proc. of the second international conference on Information and knowledge management", url = "http://dx.doi.org/10.1145/170088.170403")
public class SpatialSortBulkSplit extends AbstractBulkSplit {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/ApproximativeLeastOverlapInsertionStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/ApproximativeLeastOverlapInsertionStrategy.java
index 2897c5a4..9eab98d4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/ApproximativeLeastOverlapInsertionStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/ApproximativeLeastOverlapInsertionStrategy.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* @author Erich Schubert
* @author Franz Graf
* @author Marisa Thoma
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741")
public class ApproximativeLeastOverlapInsertionStrategy extends LeastOverlapInsertionStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/CombinedInsertionStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/CombinedInsertionStrategy.java
index 04221d8b..f53092b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/CombinedInsertionStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/CombinedInsertionStrategy.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ClassParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741")
public class CombinedInsertionStrategy implements InsertionStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/InsertionStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/InsertionStrategy.java
index 552206bf..b564ad1d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/InsertionStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/InsertionStrategy.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayAdapter;
* RTree insertion strategy interface.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public interface InsertionStrategy {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementInsertionStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementInsertionStrategy.java
index ef17e816..fdad1bda 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementInsertionStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementInsertionStrategy.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Antonin Guttman", title = "R-Trees: A Dynamic Index Structure For Spatial Searching", booktitle = "Proceedings of the 1984 ACM SIGMOD international conference on Management of data", url = "http://dx.doi.org/10.1145/971697.602266")
public class LeastEnlargementInsertionStrategy implements InsertionStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementWithAreaInsertionStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementWithAreaInsertionStrategy.java
index 9c90169d..70543731 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementWithAreaInsertionStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastEnlargementWithAreaInsertionStrategy.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741")
public class LeastEnlargementWithAreaInsertionStrategy implements InsertionStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastOverlapInsertionStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastOverlapInsertionStrategy.java
index 794f32a1..69e68446 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastOverlapInsertionStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/insert/LeastOverlapInsertionStrategy.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741")
public class LeastOverlapInsertionStrategy implements InsertionStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/LimitedReinsertOverflowTreatment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/LimitedReinsertOverflowTreatment.java
index 23db999c..2023fb44 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/LimitedReinsertOverflowTreatment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/LimitedReinsertOverflowTreatment.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* reinsertions to happen only once per level.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741")
public class LimitedReinsertOverflowTreatment implements OverflowTreatment {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/OverflowTreatment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/OverflowTreatment.java
index 8c9fc962..4c275503 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/OverflowTreatment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/OverflowTreatment.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.AbstractRStarTreeNod
* Reinsertion strategy to resolve overflows in the RStarTree.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public interface OverflowTreatment {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/SplitOnlyOverflowTreatment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/SplitOnlyOverflowTreatment.java
index 9670daa1..d6470884 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/SplitOnlyOverflowTreatment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/overflow/SplitOnlyOverflowTreatment.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Always split, as in the original R-Tree
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class SplitOnlyOverflowTreatment implements OverflowTreatment {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/AbstractPartialReinsert.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/AbstractPartialReinsert.java
index 9f65bdd8..13cf20e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/AbstractPartialReinsert.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/AbstractPartialReinsert.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* parameter to partially reinsert entries.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public abstract class AbstractPartialReinsert implements ReinsertStrategy {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/CloseReinsert.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/CloseReinsert.java
index 2021b117..ae043992 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/CloseReinsert.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/CloseReinsert.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* The strategy preferred by the R*-Tree
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", //
title = "The R*-tree: an efficient and robust access method for points and rectangles", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/FarReinsert.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/FarReinsert.java
index 52241deb..40b7b894 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/FarReinsert.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/FarReinsert.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* Alternative strategy mentioned in the R*-tree
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", //
title = "The R*-tree: an efficient and robust access method for points and rectangles", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/ReinsertStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/ReinsertStrategy.java
index c4650b89..cb63a3d9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/ReinsertStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/reinsert/ReinsertStrategy.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayAdapter;
* Reinsertion strategy to resolve overflows in the RStarTree.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public interface ReinsertStrategy {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/AngTanLinearSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/AngTanLinearSplit.java
index 73e3a8e5..08b40acc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/AngTanLinearSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/AngTanLinearSplit.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "C. H. Ang and T. C. Tan", title = "New linear node splitting algorithm for R-trees", booktitle = "Proceedings of the 5th International Symposium on Advances in Spatial Databases", url = "http://dx.doi.org/10.1007/3-540-63238-7_38")
public class AngTanLinearSplit implements SplitStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/GreeneSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/GreeneSplit.java
index f6d15f18..e415bb35 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/GreeneSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/GreeneSplit.java
@@ -50,6 +50,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Diane Greene", title = "An implementation and performance analysis of spatial data access methods", booktitle = "Proceedings of the Fifth International Conference on Data Engineering", url = "http://dx.doi.org/10.1109/ICDE.1989.47268")
public class GreeneSplit implements SplitStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeLinearSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeLinearSplit.java
index c7ec5412..6849207f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeLinearSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeLinearSplit.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Antonin Guttman", title = "R-Trees: A Dynamic Index Structure For Spatial Searching", booktitle = "Proceedings of the 1984 ACM SIGMOD international conference on Management of data", url = "http://dx.doi.org/10.1145/971697.602266")
public class RTreeLinearSplit implements SplitStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeQuadraticSplit.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeQuadraticSplit.java
index 351c97f5..16037a4a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeQuadraticSplit.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/RTreeQuadraticSplit.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Antonin Guttman", title = "R-Trees: A Dynamic Index Structure For Spatial Searching", booktitle = "Proceedings of the 1984 ACM SIGMOD international conference on Management of data", url = "http://dx.doi.org/10.1145/971697.602266")
public class RTreeQuadraticSplit implements SplitStrategy {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/SplitStrategy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/SplitStrategy.java
index 080da97a..f63f89dd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/SplitStrategy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/SplitStrategy.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayAdapter;
* Generic interface for split strategies.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface SplitStrategy {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/TopologicalSplitter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/TopologicalSplitter.java
index d1808962..5ab9b73b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/TopologicalSplitter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/strategies/split/TopologicalSplitter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.HyperBoundingBox;
import de.lmu.ifi.dbs.elki.data.ModifiableHyperBoundingBox;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
import de.lmu.ifi.dbs.elki.data.spatial.SpatialUtil;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayAdapter;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
@@ -39,10 +40,12 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleIntPair;
* Encapsulates the required parameters for a topological split of a R*-Tree.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @apiviz.has Split
*/
@Reference(authors = "N. Beckmann, H.-P. Kriegel, R. Schneider, B. Seeger", title = "The R*-tree: an efficient and robust access method for points and rectangles", booktitle = "Proceedings of the 1990 ACM SIGMOD International Conference on Management of Data, Atlantic City, NJ, May 23-25, 1990", url = "http://dx.doi.org/10.1145/93597.98741")
+@Alias("de.lmu.ifi.dbs.elki.index.tree.spatial.rstarvariants.util.TopologicalSplitter")
public class TopologicalSplitter implements SplitStrategy {
/**
* Static instance.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/util/NodeArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/util/NodeArrayAdapter.java
index f0f887a4..973edf86 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/util/NodeArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/tree/spatial/rstarvariants/util/NodeArrayAdapter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.ArrayAdapter;
* Access the entries of a node as array-like.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class NodeArrayAdapter implements ArrayAdapter<SpatialEntry, AbstractNode<? extends SpatialEntry>> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/DAFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/DAFile.java
index 17101dec..9c3e4b1b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/DAFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/DAFile.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
*
* @author Thomas Bernecker
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Hans-Peter Kriegel, Peer Kröger, Matthias Schubert, Ziyue Zhu", title = "Efficient Query Processing in Arbitrary Subspaces Using Vector Approximations", booktitle = "Proc. 18th Int. Conf. on Scientific and Statistical Database Management (SSDBM 06), Wien, Austria, 2006", url = "http://dx.doi.org/10.1109/SSDBM.2006.23")
public class DAFile {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/PartialVAFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/PartialVAFile.java
index fdc262d0..c0d1945d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/PartialVAFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/PartialVAFile.java
@@ -82,6 +82,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleObjPair;
*
* @author Thomas Bernecker
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VAFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VAFile.java
index 91516e97..2933a077 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VAFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VAFile.java
@@ -71,6 +71,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
*
* @author Thomas Bernecker
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VALPNormDistance.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VALPNormDistance.java
index ae341e4b..76f2448c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VALPNormDistance.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VALPNormDistance.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* Lp-Norm distance function for partially computed objects.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class VALPNormDistance {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VectorApproximation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VectorApproximation.java
index 9913cade..5025d415 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VectorApproximation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/index/vafile/VectorApproximation.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
*
* @author Thomas Bernecker
* @author Erich Schubert
+ * @since 0.5.0
*/
public class VectorApproximation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/CLISmartHandler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/CLISmartHandler.java
index f434cee4..de496674 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/CLISmartHandler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/CLISmartHandler.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.ProgressTracker;
* Handler that handles output to the console with clever formatting.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf ProgressTracker
* @apiviz.uses LogRecord oneway - - processes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ELKILogRecord.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ELKILogRecord.java
index c181e449..87de3faa 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ELKILogRecord.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ELKILogRecord.java
@@ -27,9 +27,6 @@ import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
-import de.lmu.ifi.dbs.elki.application.AbstractApplication;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.AbstractParameterization;
-
/**
* Base {@link LogRecord} class used in ELKI.
*
@@ -37,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.AbstractPar
* additional classes when determining the 'origin' of a log message.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class ELKILogRecord extends LogRecord {
/**
@@ -52,7 +50,15 @@ public class ELKILogRecord extends LogRecord {
/**
* Classes to ignore when finding the relevant caller.
*/
- public static final String[] IGNORE_CLASSES = { Logger.class.getCanonicalName(), Logging.class.getCanonicalName(), LoggingUtil.class.getCanonicalName(), ELKILogRecord.class.getCanonicalName(), AbstractParameterization.class.getCanonicalName(), AbstractApplication.class.getCanonicalName() };
+ public static final String[] IGNORE_CLASSES = { //
+ Logger.class.getCanonicalName(), //
+ Logging.class.getCanonicalName(), //
+ LoggingUtil.class.getCanonicalName(), //
+ ELKILogRecord.class.getCanonicalName(), //
+ // Avoid dependencies on these packages:
+ "de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.AbstractParameterization", //
+ "de.lmu.ifi.dbs.elki.application.AbstractApplication", //
+ };
/**
* Name of this class.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ErrorFormatter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ErrorFormatter.java
index 2344669e..376b3b95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ErrorFormatter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/ErrorFormatter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.ProgressLogRecord;
* Format a log record for error output, including a stack trace if available.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
// TODO: make more configurable and handle suppressed exceptions
public class ErrorFormatter extends Formatter {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/Logging.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/Logging.java
index ca59ad18..a57dd4cc 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/Logging.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/Logging.java
@@ -53,6 +53,7 @@ import de.lmu.ifi.dbs.elki.logging.statistics.UnsynchronizedLongCounter;
* {@link ELKILogRecord}!
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses LoggingConfiguration
* @apiviz.uses ELKILogRecord oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingConfiguration.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingConfiguration.java
index 86f7c528..c2d200ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingConfiguration.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingConfiguration.java
@@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.logging;
*/
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Properties;
@@ -32,12 +33,12 @@ import java.util.logging.LogManager;
import java.util.logging.Logger;
import de.lmu.ifi.dbs.elki.logging.Logging.Level;
-import de.lmu.ifi.dbs.elki.utilities.FileUtil;
/**
* Facility for configuration of logging.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class LoggingConfiguration {
/**
@@ -107,36 +108,62 @@ public final class LoggingConfiguration {
LogManager logManager = LogManager.getLogManager();
Logger logger = Logger.getLogger(LoggingConfiguration.class.getName());
// allow null as package name.
- if (pkg == null) {
+ if(pkg == null) {
pkg = "";
}
// Load logging configuration from current directory
String cfgfile = name;
- if (new File(name).exists()) {
+ if(new File(name).exists()) {
cfgfile = name;
- } else {
+ }
+ else {
// Fall back to full path / resources.
cfgfile = pkg.replace('.', File.separatorChar) + File.separatorChar + name;
}
try {
- InputStream cfgdata = FileUtil.openSystemFile(cfgfile);
+ InputStream cfgdata = openSystemFile(cfgfile);
logManager.readConfiguration(cfgdata);
// also load as properties for us, to get debug flag.
- InputStream cfgdata2 = FileUtil.openSystemFile(cfgfile);
+ InputStream cfgdata2 = openSystemFile(cfgfile);
Properties cfgprop = new Properties();
cfgprop.load(cfgdata2);
DEBUG = Boolean.parseBoolean(cfgprop.getProperty("debug"));
logger.info("Logging configuration read.");
- } catch (FileNotFoundException e) {
+ }
+ catch(FileNotFoundException e) {
logger.log(Level.SEVERE, "Could not find logging configuration file: " + cfgfile, e);
- } catch (Exception e) {
+ }
+ catch(Exception e) {
logger.log(Level.SEVERE, "Failed to configure logging from file: " + cfgfile, e);
}
}
/**
+ * Private copy from FileUtil, to avoid cross-dependencies. Try to open a
+ * file, first trying the file system, then falling back to the classpath.
+ *
+ * @param filename File name in system notation
+ * @return Input stream
+ * @throws FileNotFoundException When no file was found.
+ */
+ private static InputStream openSystemFile(String filename) throws FileNotFoundException {
+ try {
+ return new FileInputStream(filename);
+ }
+ catch(FileNotFoundException e) {
+ // try with classloader
+ String resname = filename.replace(File.separatorChar, '/');
+ InputStream result = ClassLoader.getSystemResourceAsStream(resname);
+ if(result == null) {
+ throw e;
+ }
+ return result;
+ }
+ }
+
+ /**
* Assert that logging was configured.
*/
public static void assertConfigured() {
@@ -149,23 +176,24 @@ public final class LoggingConfiguration {
* @param verbose verbosity level.
*/
public static void setVerbose(java.util.logging.Level verbose) {
- if (verbose.intValue() <= Level.VERBOSE.intValue()) {
+ if(verbose.intValue() <= Level.VERBOSE.intValue()) {
// decrease to VERBOSE if it was higher, otherwise further to VERYVERBOSE
- if (LOGGER_GLOBAL_TOP.getLevel() == null || LOGGER_GLOBAL_TOP.getLevel().intValue() > verbose.intValue()) {
+ if(LOGGER_GLOBAL_TOP.getLevel() == null || LOGGER_GLOBAL_TOP.getLevel().intValue() > verbose.intValue()) {
LOGGER_GLOBAL_TOP.setLevel(verbose);
}
- if (LOGGER_ELKI_TOP.getLevel() == null || LOGGER_ELKI_TOP.getLevel().intValue() > verbose.intValue()) {
+ if(LOGGER_ELKI_TOP.getLevel() == null || LOGGER_ELKI_TOP.getLevel().intValue() > verbose.intValue()) {
LOGGER_ELKI_TOP.setLevel(verbose);
}
- } else {
+ }
+ else {
// re-increase to given level if it was verbose or "very verbose".
- if (LOGGER_GLOBAL_TOP.getLevel() != null && (//
+ if(LOGGER_GLOBAL_TOP.getLevel() != null && (//
Level.VERBOSE.equals(LOGGER_GLOBAL_TOP.getLevel()) || //
Level.VERYVERBOSE.equals(LOGGER_GLOBAL_TOP.getLevel()) //
)) {
LOGGER_GLOBAL_TOP.setLevel(verbose);
}
- if (LOGGER_ELKI_TOP.getLevel() != null && (//
+ if(LOGGER_ELKI_TOP.getLevel() != null && (//
Level.VERBOSE.equals(LOGGER_ELKI_TOP.getLevel()) || //
Level.VERYVERBOSE.equals(LOGGER_ELKI_TOP.getLevel()) //
)) {
@@ -179,13 +207,13 @@ public final class LoggingConfiguration {
*/
public static void setStatistics() {
// decrease to INFO if it was higher
- if (LOGGER_GLOBAL_TOP.getLevel() == null || LOGGER_GLOBAL_TOP.getLevel().intValue() > Level.STATISTICS.intValue()) {
+ if(LOGGER_GLOBAL_TOP.getLevel() == null || LOGGER_GLOBAL_TOP.getLevel().intValue() > Level.STATISTICS.intValue()) {
LOGGER_GLOBAL_TOP.setLevel(Level.STATISTICS);
}
- if (LOGGER_ELKI_TOP.getLevel() == null || LOGGER_ELKI_TOP.getLevel().intValue() > Level.STATISTICS.intValue()) {
+ if(LOGGER_ELKI_TOP.getLevel() == null || LOGGER_ELKI_TOP.getLevel().intValue() > Level.STATISTICS.intValue()) {
LOGGER_ELKI_TOP.setLevel(Level.STATISTICS);
}
- if (LOGGER_TIME_TOP.getLevel() == null || LOGGER_TIME_TOP.getLevel().intValue() > Level.STATISTICS.intValue()) {
+ if(LOGGER_TIME_TOP.getLevel() == null || LOGGER_TIME_TOP.getLevel().intValue() > Level.STATISTICS.intValue()) {
LOGGER_TIME_TOP.setLevel(Level.STATISTICS);
}
}
@@ -209,8 +237,8 @@ public final class LoggingConfiguration {
*/
public static void replaceDefaultHandler(Handler handler) {
Logger rootlogger = LogManager.getLogManager().getLogger("");
- for (Handler h : rootlogger.getHandlers()) {
- if (h instanceof CLISmartHandler) {
+ for(Handler h : rootlogger.getHandlers()) {
+ if(h instanceof CLISmartHandler) {
rootlogger.removeHandler(h);
}
}
@@ -226,7 +254,7 @@ public final class LoggingConfiguration {
*/
public static void setLevelFor(String pkg, String level) throws IllegalArgumentException {
Logger logr = Logger.getLogger(pkg);
- if (logr == null) {
+ if(logr == null) {
throw new IllegalArgumentException("Logger not found.");
}
// Can also throw an IllegalArgumentException
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingUtil.java
index 5f9cb39b..576fa817 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/LoggingUtil.java
@@ -27,9 +27,6 @@ import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
-
/**
* This final class contains some static convenience methods for logging.
*
@@ -38,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
* loop constructs.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses ELKILogRecord oneway - - «create»
*/
@@ -177,38 +175,4 @@ public final class LoggingUtil {
return null;
}
-
- /**
- * Parse the option string to configure logging.
- *
- * @param param Parameter to process.
- *
- * @throws WrongParameterValueException On parsing errors
- */
- public static final void parseDebugParameter(StringParameter param) throws WrongParameterValueException {
- String[] opts = param.getValue().split(",");
- for(String opt : opts) {
- try {
- String[] chunks = opt.split("=");
- if(chunks.length == 1) {
- try {
- Level level = Level.parse(chunks[0]);
- LoggingConfiguration.setDefaultLevel(level);
- }
- catch(IllegalArgumentException e) {
- LoggingConfiguration.setLevelFor(chunks[0], Level.FINEST.getName());
- }
- }
- else if(chunks.length == 2) {
- LoggingConfiguration.setLevelFor(chunks[0], chunks[1]);
- }
- else {
- throw new WrongParameterValueException(param, param.getValue(), "More than one '=' in debug parameter.");
- }
- }
- catch(IllegalArgumentException e) {
- throw (new WrongParameterValueException(param, param.getValue(), "Could not process value.", e));
- }
- }
- }
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/MessageFormatter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/MessageFormatter.java
index e0074f4f..5dc87173 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/MessageFormatter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/MessageFormatter.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.logging.progress.ProgressLogRecord;
* origin information. Usually, the formatter will try to ensure a newline at the end.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class MessageFormatter extends Formatter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/OutputStreamLogger.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/OutputStreamLogger.java
index adee9b1e..0b48093c 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/OutputStreamLogger.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/OutputStreamLogger.java
@@ -37,6 +37,7 @@ import java.nio.charset.CharsetEncoder;
* This is meant to wrap logging output to the console.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class OutputStreamLogger extends OutputStreamWriter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/AbstractProgress.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/AbstractProgress.java
index 526dac3f..7171c668 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/AbstractProgress.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/AbstractProgress.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Abstract base class for FiniteProgress objects.
*
* @author Erich Schubert
+ * @since 0.2
*/
public abstract class AbstractProgress implements Progress {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/FiniteProgress.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/FiniteProgress.java
index 2b1f1018..014535ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/FiniteProgress.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/FiniteProgress.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* progress suitable as a message for printing to the command line interface.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class FiniteProgress extends AbstractProgress {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/IndefiniteProgress.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/IndefiniteProgress.java
index eeebf4bb..34969e31 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/IndefiniteProgress.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/IndefiniteProgress.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Progress class without a fixed destination value.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class IndefiniteProgress extends AbstractProgress {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/MutableProgress.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/MutableProgress.java
index 74f5d4f0..47c426f7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/MutableProgress.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/MutableProgress.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Progress class with a moving target.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class MutableProgress extends AbstractProgress {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/Progress.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/Progress.java
index 25e5129a..8d41a59d 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/Progress.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/Progress.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.progress;
* Generic Progress logging interface.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface Progress {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressLogRecord.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressLogRecord.java
index cea0ecf1..773b4175 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressLogRecord.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressLogRecord.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.logging.ELKILogRecord;
* Log record for progress messages.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.has Progress
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressTracker.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressTracker.java
index 04f0c430..64e47019 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressTracker.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/ProgressTracker.java
@@ -33,6 +33,7 @@ import java.util.List;
* Class to keep track of "alive" progresses.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses Progress oneway - - tracks
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/StepProgress.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/StepProgress.java
index ff01d027..1532bba6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/StepProgress.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/progress/StepProgress.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* This progress class is used for multi-step processing.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class StepProgress extends FiniteProgress {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AbstractStatistic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AbstractStatistic.java
index 72b477ed..bcd7d101 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AbstractStatistic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AbstractStatistic.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Abstract base class for statistics tracking.
*
* @author Erich Schubert
+ * @since 0.3
*/
public abstract class AbstractStatistic implements Statistic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AtomicLongCounter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AtomicLongCounter.java
index dfdc9e7f..3e9e88da 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AtomicLongCounter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/AtomicLongCounter.java
@@ -29,6 +29,7 @@ import java.util.concurrent.atomic.AtomicLong;
* Class to count events in a thread-safe counter.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class AtomicLongCounter extends AbstractStatistic implements Counter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Counter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Counter.java
index 21692d54..91b4fc1d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Counter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Counter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Simple statistic by counting. For example: invocations of a method.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface Counter extends Statistic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/DoubleStatistic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/DoubleStatistic.java
index d3257edd..89b8229e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/DoubleStatistic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/DoubleStatistic.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Trivial double-valued statistic.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class DoubleStatistic extends AbstractStatistic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Duration.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Duration.java
index 1b8769e6..30162d70 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Duration.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Duration.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* TODO: add support for different time units?
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface Duration extends Statistic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/LongStatistic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/LongStatistic.java
index 409b17f6..ffb70f3c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/LongStatistic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/LongStatistic.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2015
+ Copyright (C) 2016
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Trivial long-valued statistic.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class LongStatistic extends AbstractStatistic {
/**
@@ -63,6 +64,15 @@ public class LongStatistic extends AbstractStatistic {
this.value = value;
}
+ /**
+ * Increment counter.
+ *
+ * @param inc Increment
+ */
+ public void increment(long inc) {
+ this.value += inc;
+ }
+
@Override
public String formatValue() {
return Long.toString(value);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/MillisTimeDuration.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/MillisTimeDuration.java
index d6637d52..2a268fd8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/MillisTimeDuration.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/MillisTimeDuration.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Class that tracks the runtime of a task with {@code System.nanoTime()}
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class MillisTimeDuration extends AbstractStatistic implements Duration {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/NanoDuration.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/NanoDuration.java
index ca09324b..03a9f9eb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/NanoDuration.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/NanoDuration.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Class that tracks the runtime of a task with {@code System.nanoTime()}
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class NanoDuration extends AbstractStatistic implements Duration {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Statistic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Statistic.java
index 3a826ccf..5a256e24 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Statistic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/Statistic.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Abstract base interface for statistics tracking.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface Statistic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/StringStatistic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/StringStatistic.java
index af7b12d8..81ec6ff1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/StringStatistic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/StringStatistic.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Trivial string based statistic.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class StringStatistic extends AbstractStatistic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/UnsynchronizedLongCounter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/UnsynchronizedLongCounter.java
index 69164053..3cd7ee54 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/UnsynchronizedLongCounter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/logging/statistics/UnsynchronizedLongCounter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.logging.statistics;
* Class to count events in a thread-safe counter.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class UnsynchronizedLongCounter extends AbstractStatistic implements Counter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/DoubleMinMax.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/DoubleMinMax.java
index 7fc67833..e65957d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/DoubleMinMax.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/DoubleMinMax.java
@@ -29,6 +29,7 @@ import java.util.Collection;
* Class to find the minimum and maximum double values in data.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class DoubleMinMax {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/IntegerMinMax.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/IntegerMinMax.java
index c80b0516..12b83945 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/IntegerMinMax.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/IntegerMinMax.java
@@ -30,6 +30,7 @@ import java.util.Collection;
*
* @author Erich Schubert
* @author Arthur Zimek
+ * @since 0.2
*/
public class IntegerMinMax {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MathUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MathUtil.java
index deb3ed2c..2c9f0301 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MathUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MathUtil.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
*
* @author Arthur Zimek
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*/
@@ -1046,16 +1047,15 @@ public final class MathUtil {
return Math.pow(x, p);
}
double tmp = x, ret = (p & 1) == 1 ? x : 1.;
- p >>= 1;
while(true) {
+ tmp *= tmp;
+ p >>= 1;
if(p == 1) {
return ret * tmp;
}
if((p & 1) != 0) {
ret *= tmp;
}
- tmp *= tmp;
- p >>= 1;
}
}
@@ -1072,16 +1072,15 @@ public final class MathUtil {
return (int) Math.pow(x, p);
}
int tmp = x, ret = (p & 1) == 1 ? x : 1;
- p >>= 1;
while(true) {
+ tmp *= tmp;
+ p >>= 1;
if(p == 1) {
return ret * tmp;
}
if((p & 1) != 0) {
ret *= tmp;
}
- tmp *= tmp;
- p >>= 1;
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Mean.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Mean.java
index da8bde38..0eb7f3f0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Mean.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Mean.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "B. P. Welford", //
title = "Note on a method for calculating corrected sums of squares and products", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVariance.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVariance.java
index 5a1cd7e6..6b5f893d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVariance.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVariance.java
@@ -56,6 +56,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* </p>
*
* @author Erich Schubert
+ * @since 0.2
*/
@Reference(authors = "B. P. Welford", //
title = "Note on a method for calculating corrected sums of squares and products", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVarianceMinMax.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVarianceMinMax.java
index fcd96f02..46ad82e0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVarianceMinMax.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/MeanVarianceMinMax.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Class collecting mean, variance, minimum and maximum statistics.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class MeanVarianceMinMax extends MeanVariance {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/PearsonCorrelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/PearsonCorrelation.java
index b2821bdd..9bfe38ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/PearsonCorrelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/PearsonCorrelation.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math;
* slightly more memory (by using arrays) but essentially does the same.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class PearsonCorrelation {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Primes.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Primes.java
index 2a717634..adebf820 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Primes.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/Primes.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math;
* classes.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public final class Primes {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/SinCosTable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/SinCosTable.java
index 842f7152..f224a8b3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/SinCosTable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/SinCosTable.java
@@ -33,6 +33,7 @@ package de.lmu.ifi.dbs.elki.math;
* TODO: add caching
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public abstract class SinCosTable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/StatisticalMoments.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/StatisticalMoments.java
index df188a7f..f9146314 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/StatisticalMoments.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/StatisticalMoments.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "T. B. Terriberry", title = "Computing Higher-Order Moments Online", booktitle = "Online - Technical Note", url = "http://people.xiph.org/~tterribe/notes/homs.html")
public class StatisticalMoments extends MeanVarianceMinMax {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/CovarianceDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/CovarianceDimensionSimilarity.java
index 08f4ad86..10c0713e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/CovarianceDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/CovarianceDimensionSimilarity.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Class to compute the dimension similarity based on covariances.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class CovarianceDimensionSimilarity implements DimensionSimilarity<NumberVector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarity.java
index 7e772838..1bc08dbe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarity.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* dimensions in parallel coordinate plots.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses DimensionSimilarityMatrix - - «writes»
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarityMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarityMatrix.java
index 89d0d4eb..6e57ad00 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarityMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/DimensionSimilarityMatrix.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
* Class representing a similarity matrix between dimensions.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses PrimsMinimumSpanningTree
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HSMDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HSMDimensionSimilarity.java
index 4627c785..e4e55b9b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HSMDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HSMDimensionSimilarity.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.5.5
*/
@Reference(authors = "A. Tatu, G. Albuquerque, M. Eisemann, P. Bak, H. Theisel, M. A. Magnor, and D. A. Keim", //
title = "Automated Analytical Methods to Support Visual Exploration of High-Dimensional Data", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HiCSDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HiCSDimensionSimilarity.java
index 1c024fc8..0e0ddcaa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HiCSDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/HiCSDimensionSimilarity.java
@@ -70,6 +70,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.5.5
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/MCEDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/MCEDimensionSimilarity.java
index 048f960d..88adbf9d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/MCEDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/MCEDimensionSimilarity.java
@@ -52,6 +52,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*/
@Reference(authors = "D. Guo", //
title = "Coordinating computational and visual approaches for interactive feature selection and multivariate clustering", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SURFINGDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SURFINGDimensionSimilarity.java
index d7aa8ca6..4474239c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SURFINGDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SURFINGDimensionSimilarity.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Robert Rödler
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses SubspaceEuclideanDistanceFunction
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
index eeb7906d..55205fcc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeDimensionSimilarity.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.5.5
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeInversionDimensionSimilarity.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeInversionDimensionSimilarity.java
index 52b73350..aee0a9db 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeInversionDimensionSimilarity.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/dimensionsimilarity/SlopeInversionDimensionSimilarity.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.5.5
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/AbstractEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/AbstractEarthModel.java
index 34652bd4..9122755b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/AbstractEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/AbstractEarthModel.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Abstract base class for earth models with shared glue code.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public abstract class AbstractEarthModel implements EarthModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1858SpheroidEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1858SpheroidEarthModel.java
index 4bc5560e..186c3c3a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1858SpheroidEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1858SpheroidEarthModel.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Flattening: 1 / 294.26068
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "Clarke1858" })
public class Clarke1858SpheroidEarthModel extends AbstractEarthModel {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1880SpheroidEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1880SpheroidEarthModel.java
index b204c8c4..ef1a0d2d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1880SpheroidEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/Clarke1880SpheroidEarthModel.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Flattening: 1 / 293.465
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "Clarke1880" })
public class Clarke1880SpheroidEarthModel extends AbstractEarthModel {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/EarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/EarthModel.java
index 332ddf64..8eb697b0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/EarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/EarthModel.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
* API for handling different earth models.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses SphereUtil
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS67SpheroidEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS67SpheroidEarthModel.java
index d8468a6b..7770933f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS67SpheroidEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS67SpheroidEarthModel.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Flattening: 1 / 298.25
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "GRS67", "GRS-67" })
public class GRS67SpheroidEarthModel extends AbstractEarthModel {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS80SpheroidEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS80SpheroidEarthModel.java
index 591dd923..8d9b59a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS80SpheroidEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/GRS80SpheroidEarthModel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Flattening: 1 / 298.257222101
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "GRS-80", "GRS80" })
public class GRS80SpheroidEarthModel extends AbstractEarthModel {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphereUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphereUtil.java
index 8fcd4d97..98a674f0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphereUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphereUtil.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Erich Schubert
* @author Niels Dörre
+ * @since 0.5.5
*/
@Reference(authors = "Ed Williams", title = "Aviation Formulary", booktitle = "", url = "http://williams.best.vwh.net/avform.htm")
public final class SphereUtil {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalCosineEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalCosineEarthModel.java
index c8cc694a..f4b51dca 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalCosineEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalCosineEarthModel.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* faster but less accurate than the Haversince or Vincenty's formula.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class SphericalCosineEarthModel extends AbstractEarthModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalHaversineEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalHaversineEarthModel.java
index db0c39c9..56e581a9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalHaversineEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalHaversineEarthModel.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* faster but less accurate than Vincenty's formula.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class SphericalHaversineEarthModel extends AbstractEarthModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalVincentyEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalVincentyEarthModel.java
index 7f627425..439b8e77 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalVincentyEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/SphericalVincentyEarthModel.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* A simple spherical earth model using radius 6371009 m.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class SphericalVincentyEarthModel extends AbstractEarthModel {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS72SpheroidEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS72SpheroidEarthModel.java
index 43763328..3a23cf47 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS72SpheroidEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS72SpheroidEarthModel.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Flattening: 1 / 298.26
*
* @author Erich Schubert
+ * @since 0.3
*/
@Alias({ "WGS72", "WGS-72" })
public class WGS72SpheroidEarthModel extends AbstractEarthModel {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS84SpheroidEarthModel.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS84SpheroidEarthModel.java
index 522e769a..2265353a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS84SpheroidEarthModel.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geodesy/WGS84SpheroidEarthModel.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Flattening: 1 / 298.257223563
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/AlphaShape.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/AlphaShape.java
index aefb9149..c02efca1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/AlphaShape.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/AlphaShape.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* Compute the alpha-Shape of a point set, using Delaunay triangulation.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses SweepHullDelaunay2D
* @apiviz.has Polygon
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/GrahamScanConvexHull2D.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/GrahamScanConvexHull2D.java
index c3f69807..529ae2fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/GrahamScanConvexHull2D.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/GrahamScanConvexHull2D.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* classic Grahams scan. Also computes a bounding box.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Polygon
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/PrimsMinimumSpanningTree.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/PrimsMinimumSpanningTree.java
index 578f7d12..06596cde 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/PrimsMinimumSpanningTree.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/PrimsMinimumSpanningTree.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.composedOf Adapter
* @apiviz.composedOf Collector
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/SweepHullDelaunay2D.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/SweepHullDelaunay2D.java
index b404ebfb..cb2d498a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/SweepHullDelaunay2D.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/SweepHullDelaunay2D.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.IntIntPair;
* Note: This implementation does not check or handle duplicate points!
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.has Polygon
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYCurve.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYCurve.java
index f3af2c8e..8c05e62e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYCurve.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYCurve.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
* the curve while adding points.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class XYCurve implements Result, TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYPlot.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYPlot.java
index 412f19ee..76c367ff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYPlot.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/geometry/XYPlot.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
* generation.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Curve
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java
index 74b19d2c..e00e3802 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/AffineTransformation.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* transformation.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf Matrix
* @apiviz.uses Matrix
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java
index 2e7ba977..dfc0f2a2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Centroid.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
* easier to use APIs.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class Centroid extends Vector {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java
index ef0d5ef7..ce0f8ab0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CholeskyDecomposition.java
@@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
/**
* Cholesky Decomposition.
* <P>
@@ -34,6 +33,9 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra;
* a partial decomposition and sets an internal flag that may be queried by the
* isSPD() method.
*
+ * @author Arthur Zimek
+ * @since 0.2
+ *
* @apiviz.uses Matrix - - transforms
*/
@SuppressWarnings("serial")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java
index 1e40430f..566e0e11 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/CovarianceMatrix.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
* stabilized covariance matrix builder!
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses Vector oneway
* @apiviz.uses NumberVector oneway
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java
index f2d6cec3..df4da275 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenPair.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* eigenvalue. This class is used to sort eigenpairs.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf Matrix
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java
index fde453c6..88ab0688 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/EigenvalueDecomposition.java
@@ -39,7 +39,10 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* the eigenvectors in the sense that A*V = V*D, i.e. A.times(V) equals
* V.times(D). The matrix V may be badly conditioned, or even singular, so the
* validity of the equation A = V*D*inverse(V) depends upon V.cond().
- *
+ *
+ * @author Arthur Zimek
+ * @since 0.2
+ *
* @apiviz.uses Matrix - - transforms
*/
public class EigenvalueDecomposition implements java.io.Serializable {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java
index be33769e..361e315e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LUDecomposition.java
@@ -36,6 +36,9 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra;
* decomposition is in the solution of square systems of simultaneous linear
* equations. This will fail if isNonsingular() returns false.
*
+ * @author Arthur Zimek
+ * @since 0.2
+ *
* @apiviz.uses Matrix - - transforms
*/
public class LUDecomposition implements java.io.Serializable {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java
index da723177..3d273520 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/LinearEquationSystem.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.IntIntPair;
* Class for systems of linear equations.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class LinearEquationSystem {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java
index cb828e50..9f6ecde9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Matrix.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Vector
* @apiviz.landmark
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java
index cc850ce4..b519ca9e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectedCentroid.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* easier to use APIs.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ProjectedCentroid extends Centroid {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java
index ca1c05c2..67958078 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/ProjectionResult.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra;
* This can either come from a full PCA, or just from an axis-parallel subspace selection
*
* @author Erich Schubert
+ * @since 0.4.0
*/
// TODO: cleanup
public interface ProjectionResult {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java
index 541987e7..be07df37 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/QRDecomposition.java
@@ -36,6 +36,9 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* decomposition is in the least squares solution of nonsquare systems of
* simultaneous linear equations. This will fail if isFullRank() returns false.
*
+ * @author Arthur Zimek
+ * @since 0.2
+ *
* @apiviz.uses Matrix - - transforms
*/
public class QRDecomposition implements java.io.Serializable {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java
index 6b311ed1..2514acc6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SingularValueDecomposition.java
@@ -39,6 +39,9 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* fail. The matrix condition number and the effective numerical rank can be
* computed from this decomposition.
*
+ * @author Arthur Zimek
+ * @since 0.2
+ *
* @apiviz.uses Matrix - - transforms
*/
public class SingularValueDecomposition {
@@ -326,7 +329,7 @@ public class SingularValueDecomposition {
// Perform the task indicated by kase.
switch(kase){
-
+
// Deflate negligible s(p).
case 1: {
double f = e[p - 2];
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java
index a4cca9de..e028793c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/SortedEigenPairs.java
@@ -33,6 +33,7 @@ import java.util.List;
* eigenvectors (and -values).
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf de.lmu.ifi.dbs.elki.math.linearalgebra.EigenPair
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java
index a6d4ea77..31456eff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/VMath.java
@@ -31,6 +31,7 @@ import java.util.Arrays;
* usage and VM overhead.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java
index 06198e4a..80e7e219 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/Vector.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferSerializer;
* A mathematical vector object, along with mathematical operations.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java
index a0da0c7b..13aa185a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunction.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.fitting;
* Interface for a function used in Levenberg-Marquard-Fitting
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface FittingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java
index bf17e4c3..52f340a8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/FittingFunctionResult.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.fitting;
* Result returned by a fitting function.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class FittingFunctionResult {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java
index 6cdcff18..7d12cdff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/GaussianFittingFunction.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* number of parameters (which obviously needs to be a multiple of 3)
*
* @author Erich Schubert
+ * @since 0.2
*/
public class GaussianFittingFunction implements FittingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java
index b77f3b79..0ca9a643 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/fitting/LevenbergMarquardtMethod.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.LinearEquationSystem;
* Which supposedly offers increased robustness.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has FittingFunction
* @apiviz.uses FittingFunctionResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java
index 8190eea5..3874b91b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/AbstractCovarianceMatrixBuilder.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
* Mostly the specification of an interface.
*
* @author Erich Schubert
+ * @since 0.2
*/
public abstract class AbstractCovarianceMatrixBuilder implements CovarianceMatrixBuilder {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java
index c56217f8..bd88dcb8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CompositeEigenPairFilter.java
@@ -36,15 +36,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* eigenpair filters.
*
* @author Elke Achtert
+ * @since 0.2
*/
// todo parameter comments
public class CompositeEigenPairFilter implements EigenPairFilter {
/**
- * The list of filters to use.
- */
- public static final OptionID EIGENPAIR_FILTER_COMPOSITE_LIST = new OptionID("pca.filter.composite.list", "A comma separated list of the class names of the filters to be used. " + "The specified filters will be applied sequentially in the given order.");
-
- /**
* The filters to be applied.
*/
private List<EigenPairFilter> filters;
@@ -86,6 +82,10 @@ public class CompositeEigenPairFilter implements EigenPairFilter {
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * The list of filters to use.
+ */
+ public static final OptionID EIGENPAIR_FILTER_COMPOSITE_LIST = new OptionID("pca.filter.composite.list", "A comma separated list of the class names of the filters to be used. " + "The specified filters will be applied sequentially in the given order.");
+ /**
* The filters to be applied.
*/
private List<EigenPairFilter> filters = null;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java
index e3d10297..c2b40a85 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/CovarianceMatrixBuilder.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
* Interface for computing covariance matrixes on a data set.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface CovarianceMatrixBuilder {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java
index 7d642b86..40a171df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/DropEigenPairFilter.java
@@ -37,16 +37,17 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
/**
* The "drop" filter looks for the largest drop in normalized relative
* eigenvalues.
- *
+ *
* Let s_1 .. s_n be the eigenvalues.
- *
+ *
* Let a_k := 1/(n-k) sum_{i=k..n} s_i
- *
+ *
* Then r_k := s_k / a_k is the relative eigenvalue.
- *
+ *
* The drop filter searches for argmax_k r_k / r_{k+1}
- *
+ *
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Drop EigenPair Filter")
public class DropEigenPairFilter implements EigenPairFilter {
@@ -63,7 +64,7 @@ public class DropEigenPairFilter implements EigenPairFilter {
/**
* Constructor.
- *
+ *
* @param walpha
*/
public DropEigenPairFilter(double walpha) {
@@ -121,9 +122,9 @@ public class DropEigenPairFilter implements EigenPairFilter {
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
@@ -132,7 +133,7 @@ public class DropEigenPairFilter implements EigenPairFilter {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA);
+ DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA);
walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE);
if (config.grab(walphaP)) {
walpha = walphaP.getValue();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java
index b0a244f6..7b3886e5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/EigenPairFilter.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs;
* and weak eigenpairs having small variances.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses SortedEigenPairs oneway - - reads
* @apiviz.uses FilteredEigenPairs oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java
index b8343a24..fcc09c7c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FilteredEigenPairs.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.EigenPair;
* by an eigenpair filter.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.has EigenPair
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java
index d2251f28..ca7d288e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/FirstNEigenPairFilter.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* eigenpairs, where n is a user specified number.
*
* @author Elke Achtert
+ * @since 0.2
*/
// todo parameter comments
@Title("First n Eigenpair filter")
@@ -53,11 +54,6 @@ public class FirstNEigenPairFilter implements EigenPairFilter {
private static final Logging LOG = Logging.getLogger(FirstNEigenPairFilter.class);
/**
- * Paremeter n
- */
- public static final OptionID EIGENPAIR_FILTER_N = new OptionID("pca.filter.n", "The number of strong eigenvectors: n eigenvectors with the n highest" + "eigenvalues are marked as strong eigenvectors.");
-
- /**
* The threshold for strong eigenvectors: n eigenvectors with the n highest
* eigenvalues are marked as strong eigenvectors.
*/
@@ -114,6 +110,10 @@ public class FirstNEigenPairFilter implements EigenPairFilter {
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * Paremeter n
+ */
+ public static final OptionID EIGENPAIR_FILTER_N = new OptionID("pca.filter.n", "The number of strong eigenvectors: n eigenvectors with the n highest" + "eigenvalues are marked as strong eigenvectors.");
+ /**
* The number of eigenpairs to keep.
*/
protected int n = 0;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java
index 779ceb2e..a4047473 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/LimitEigenPairFilter.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* others are marked as strong eigenpairs.
*
* @author Elke Achtert
+ * @since 0.2
*/
@Title("Limit-based Eigenpair Filter")
@Description("Filters all eigenpairs, which are lower than a given value.")
@@ -58,16 +59,6 @@ public class LimitEigenPairFilter implements EigenPairFilter {
private static final Logging LOG = Logging.getLogger(LimitEigenPairFilter.class);
/**
- * "absolute" Flag
- */
- public static final OptionID EIGENPAIR_FILTER_ABSOLUTE = new OptionID("pca.filter.absolute", "Flag to mark delta as an absolute value.");
-
- /**
- * Parameter delta
- */
- public static final OptionID EIGENPAIR_FILTER_DELTA = new OptionID("pca.filter.delta", "The threshold for strong Eigenvalues. If not otherwise specified, delta " + "is a relative value w.r.t. the (absolute) highest Eigenvalues and has to be " + "a double between 0 and 1. To mark delta as an absolute value, use " + "the option -" + EIGENPAIR_FILTER_ABSOLUTE.getName() + ".");
-
- /**
* The default value for delta.
*/
public static final double DEFAULT_DELTA = 0.01;
@@ -154,6 +145,16 @@ public class LimitEigenPairFilter implements EigenPairFilter {
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * "absolute" Flag
+ */
+ public static final OptionID EIGENPAIR_FILTER_ABSOLUTE = new OptionID("pca.filter.absolute", "Flag to mark delta as an absolute value.");
+
+ /**
+ * Parameter delta
+ */
+ public static final OptionID EIGENPAIR_FILTER_DELTA = new OptionID("pca.filter.delta", "The threshold for strong Eigenvalues. If not otherwise specified, delta " + "is a relative value w.r.t. the (absolute) highest Eigenvalues and has to be " + "a double between 0 and 1. To mark delta as an absolute value, use " + "the option -" + EIGENPAIR_FILTER_ABSOLUTE.getName() + ".");
+
+ /**
* Threshold for strong eigenpairs, can be absolute or relative.
*/
private double delta;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java
index fb95a68c..9f77f747 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/NormalizingEigenPairFilter.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
* eigenvector> * eigenvalue = 1, where <,> is the standard dot product
*
* @author Simon Paradies
+ * @since 0.2
*/
@Title("Perecentage based Eigenpair filter")
@Description("Normalizes all eigenpairs, consisting of eigenvalue e and eigenvector v such that <v,v> * e = 1, where <,> is the standard dot product.")
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java
index 600fcf95..4abd1c6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredAutotuningRunner.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* exhibit the clearest correlation.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "Hans-Peter Kriegel, Peer Kröger, Erich Schubert, Arthur Zimek", //
title = "A General Framework for Increasing the Robustness of PCA-based Correlation Clustering Algorithms",//
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java
index f7ec9e79..1b7d6910 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredResult.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs;
* subspace and an "error" subspace.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java
index e7c31cf6..d61c7830 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAFilteredRunner.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* regular runner, but afterwards, an {@link EigenPairFilter} is applied.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has PCAFilteredResult oneway - - «create»
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java
index 4c0de355..72268972 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCAResult.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.SortedEigenPairs;
* Result class for Principal Component Analysis with some convenience methods
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.has SortedEigenPairs
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java
index bdd4f32f..c4195506 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PCARunner.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* to a weighted covariance matrix builder)
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.uses PCAResult oneway - - «create»
@@ -53,18 +54,6 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
*/
public class PCARunner {
/**
- * Parameter to specify the class to compute the covariance matrix, must be a
- * subclass of {@link CovarianceMatrixBuilder}.
- * <p>
- * Default value: {@link CovarianceMatrixBuilder}
- * </p>
- * <p>
- * Key: {@code -pca.covariance}
- * </p>
- */
- public static final OptionID PCA_COVARIANCE_MATRIX = new OptionID("pca.covariance", "Class used to compute the covariance matrix.");
-
- /**
* The covariance computation class.
*/
protected CovarianceMatrixBuilder covarianceMatrixBuilder;
@@ -161,6 +150,17 @@ public class PCARunner {
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * Parameter to specify the class to compute the covariance matrix, must be a
+ * subclass of {@link CovarianceMatrixBuilder}.
+ * <p>
+ * Default value: {@link CovarianceMatrixBuilder}
+ * </p>
+ * <p>
+ * Key: {@code -pca.covariance}
+ * </p>
+ */
+ public static final OptionID PCA_COVARIANCE_MATRIX = new OptionID("pca.covariance", "Class used to compute the covariance matrix.");
+ /**
* The covariance computation class.
*/
protected CovarianceMatrixBuilder covarianceMatrixBuilder;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java
index c32ad6fc..8b445b97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/PercentageEigenPairFilter.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* eigenpairs.
*
* @author Elke Achtert
+ * @since 0.2
*/
@Title("Percentage based Eigenpair filter")
@Description("Sorts the eigenpairs in decending order of their eigenvalues and returns the first eigenpairs, whose sum of eigenvalues is higher than the given percentage of the sum of all eigenvalues.")
@@ -54,18 +55,6 @@ public class PercentageEigenPairFilter implements EigenPairFilter {
private static final Logging LOG = Logging.getLogger(PercentageEigenPairFilter.class);
/**
- * The threshold for 'strong' eigenvectors: the 'strong' eigenvectors explain
- * a portion of at least alpha of the total variance.
- * <p>
- * Default value: {@link #DEFAULT_ALPHA}
- * </p>
- * <p>
- * Key: {@code -pca.filter.alpha}
- * </p>
- */
- public static final OptionID ALPHA_ID = new OptionID("pca.filter.alpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share.");
-
- /**
* The default value for alpha.
*/
public static final double DEFAULT_ALPHA = 0.85;
@@ -145,6 +134,17 @@ public class PercentageEigenPairFilter implements EigenPairFilter {
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * The threshold for 'strong' eigenvectors: the 'strong' eigenvectors explain
+ * a portion of at least alpha of the total variance.
+ * <p>
+ * Default value: {@link #DEFAULT_ALPHA}
+ * </p>
+ * <p>
+ * Key: {@code -pca.filter.alpha}
+ * </p>
+ */
+ public static final OptionID ALPHA_ID = new OptionID("pca.filter.alpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share.");
+ /**
* The threshold for strong eigenvectors: the strong eigenvectors explain a
* portion of at least alpha of the total variance.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java
index 16b6d72e..242c00f4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/ProgressiveEigenPairFilter.java
@@ -46,48 +46,44 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* gives better results when clusters of different dimensionality exist, since
* different percentage alpha levels might be appropriate for different
* dimensionalities.
- *
+ *
* Example calculations of alpha levels:
- *
+ *
* In a 3D space, a progressive alpha value of 0.5 equals:
- *
+ *
* - 1D subspace: 50 % + 1/3 of remainder = 0.667
- *
+ *
* - 2D subspace: 50 % + 2/3 of remainder = 0.833
- *
+ *
* In a 4D space, a progressive alpha value of 0.5 equals:
- *
+ *
* - 1D subspace: 50% + 1/4 of remainder = 0.625
- *
+ *
* - 2D subspace: 50% + 2/4 of remainder = 0.750
- *
+ *
* - 3D subspace: 50% + 3/4 of remainder = 0.875
- *
+ *
* Reasoning why this improves over PercentageEigenPairFilter:
- *
+ *
* In a 100 dimensional space, a single Eigenvector representing over 85% of the
* total variance is highly significant, whereas the strongest 85 Eigenvectors
* together will by definition always represent at least 85% of the variance.
* PercentageEigenPairFilter can thus not be used with these parameters and
* detect both dimensionalities correctly.
- *
+ *
* The second parameter introduced here, walpha, serves a different function: It
* prevents the eigenpair filter to use a statistically weak Eigenvalue just to
* reach the intended level, e.g. 84% + 1% >= 85% when 1% is statistically very
* weak.
- *
+ *
* @author Erich Schubert
- *
+ * @since 0.2
+ *
*/
@Title("Progressive Eigenpair Filter")
@Description("Sorts the eigenpairs in decending order of their eigenvalues and returns the first eigenpairs, whose sum of eigenvalues explains more than the a certain percentage of the unexpected variance, where the percentage increases with subspace dimensionality.")
public class ProgressiveEigenPairFilter implements EigenPairFilter {
/**
- * Parameter progressive alpha.
- */
- public static final OptionID EIGENPAIR_FILTER_PALPHA = new OptionID("pca.filter.progressivealpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share.");
-
- /**
* The default value for alpha.
*/
public static final double DEFAULT_PALPHA = 0.5;
@@ -110,7 +106,7 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter {
/**
* Constructor.
- *
+ *
* @param palpha palpha
* @param walpha walpha
*/
@@ -177,13 +173,18 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter {
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * Parameter progressive alpha.
+ */
+ public static final OptionID EIGENPAIR_FILTER_PALPHA = new OptionID("pca.filter.progressivealpha", "The share (0.0 to 1.0) of variance that needs to be explained by the 'strong' eigenvectors." + "The filter class will choose the number of strong eigenvectors by this share.");
+
+ /**
* The threshold for strong eigenvectors: the strong eigenvectors explain a
* portion of at least alpha of the total variance.
*/
@@ -204,7 +205,7 @@ public class ProgressiveEigenPairFilter implements EigenPairFilter {
palpha = palphaP.getValue();
}
- DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA);
+ DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA);
walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE);
if(config.grab(walphaP)) {
walpha = walphaP.getValue();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java
index 291f91b6..5553936b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RANSACCovarianceMatrixBuilder.java
@@ -74,6 +74,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.5
*/
@Reference(authors = "Hans-Peter Kriegel, Peer Kröger, Erich Schubert, Arthur Zimek", //
title = "Outlier Detection in Arbitrarily Oriented Subspaces", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java
index 54361c4f..3011a7d8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/RelativeEigenPairFilter.java
@@ -50,16 +50,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* dimensionalities.
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Relative EigenPair Filter")
@Description("Sorts the eigenpairs in decending order of their eigenvalues and returns those eigenpairs, whose eigenvalue is " + "above the average ('expected') eigenvalue of the remaining eigenvectors.")
public class RelativeEigenPairFilter implements EigenPairFilter {
/**
- * Parameter relative alpha.
- */
- public static final OptionID EIGENPAIR_FILTER_RALPHA = new OptionID("pca.filter.relativealpha", "The sensitivity niveau for weak eigenvectors: An eigenvector which is at less than " + "the given share of the statistical average variance is considered weak.");
-
- /**
* The default value for ralpha.
*/
public static final double DEFAULT_RALPHA = 1.1;
@@ -123,6 +119,10 @@ public class RelativeEigenPairFilter implements EigenPairFilter {
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
+ /**
+ * Parameter relative alpha.
+ */
+ public static final OptionID EIGENPAIR_FILTER_RALPHA = new OptionID("pca.filter.relativealpha", "The sensitivity niveau for weak eigenvectors: An eigenvector which is at less than " + "the given share of the statistical average variance is considered weak.");
protected double ralpha;
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java
index dfc5347d..64dac360 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/SignificantEigenPairFilter.java
@@ -39,18 +39,19 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* The SignificantEigenPairFilter sorts the eigenpairs in descending order of
* their eigenvalues and chooses the contrast of an Eigenvalue to the remaining
* Eigenvalues is maximal.
- *
+ *
* It is closely related to the WeakEigenPairFilter and RelativeEigenPairFilter.
* But while the RelativeEigenPairFilter chooses the highest dimensionality that
* satisfies the relative alpha levels, the SignificantEigenPairFilter will
* chose the local dimensionality such that the 'contrast' is maximal.
- *
+ *
* There are some situations where one or the other is superior, especially when
* it comes to handling nested clusters and strong global correlations that are
* not too interesting. These benefits usually only make a difference at higher
* dimensionalities.
- *
+ *
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Significant EigenPair Filter")
@Description("Sorts the eigenpairs in decending order of their eigenvalues and looks for the maxmimum contrast of current Eigenvalue / average of remaining Eigenvalues.")
@@ -68,7 +69,7 @@ public class SignificantEigenPairFilter implements EigenPairFilter {
/**
* Constructor.
- *
+ *
* @param walpha
*/
public SignificantEigenPairFilter(double walpha) {
@@ -122,9 +123,9 @@ public class SignificantEigenPairFilter implements EigenPairFilter {
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
@@ -133,7 +134,7 @@ public class SignificantEigenPairFilter implements EigenPairFilter {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA);
+ DoubleParameter walphaP = new DoubleParameter(WeakEigenPairFilter.Parameterizer.EIGENPAIR_FILTER_WALPHA, DEFAULT_WALPHA);
walphaP.addConstraint(CommonConstraints.GREATER_EQUAL_ZERO_DOUBLE);
if(config.grab(walphaP)) {
walpha = walphaP.getValue();
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java
index 677a88eb..ea1a6787 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/StandardCovarianceMatrixBuilder.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
* Reasonable default choice for a {@link CovarianceMatrixBuilder}
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses CovarianceMatrix
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java
index 51d89450..8f76531e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeakEigenPairFilter.java
@@ -42,19 +42,12 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* as "strong", the others as "weak".
*
* @author Erich Schubert
+ * @since 0.2
*/
@Title("Weak Eigenpair Filter")
@Description("Sorts the eigenpairs in decending order of their eigenvalues and returns those eigenpairs, whose eigenvalue is above the average ('expected') eigenvalue.")
public class WeakEigenPairFilter implements EigenPairFilter {
/**
- * OptionID for the weak alpha value of {@link WeakEigenPairFilter},
- * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.ProgressiveEigenPairFilter}
- * and
- * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.SignificantEigenPairFilter}
- */
- public static final OptionID EIGENPAIR_FILTER_WALPHA = new OptionID("pca.filter.weakalpha", "The minimum strength of the statistically expected variance (1/n) share an eigenvector " + "needs to have to be considered 'strong'.");
-
- /**
* The default value for walpha.
*/
public static final double DEFAULT_WALPHA = 0.95;
@@ -119,6 +112,13 @@ public class WeakEigenPairFilter implements EigenPairFilter {
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * OptionID for the weak alpha value of {@link WeakEigenPairFilter},
+ * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.ProgressiveEigenPairFilter}
+ * and
+ * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.SignificantEigenPairFilter}
+ */
+ public static final OptionID EIGENPAIR_FILTER_WALPHA = new OptionID("pca.filter.weakalpha", "The minimum strength of the statistically expected variance (1/n) share an eigenvector " + "needs to have to be considered 'strong'.");
+ /**
* The threshold for strong eigenvectors: the strong eigenvectors explain a
* portion of at least alpha of the total variance.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java
index a5b7d545..eba61671 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/WeightedCovarianceMatrixBuilder.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Computer Science 5069, Springer
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has WeightFunction
* @apiviz.has PrimitiveDistanceFunction
@@ -73,17 +74,6 @@ booktitle = "Proceedings of the 20th International Conference on Scientific and
url = "http://dx.doi.org/10.1007/978-3-540-69497-7_27")
public class WeightedCovarianceMatrixBuilder extends AbstractCovarianceMatrixBuilder {
/**
- * Parameter to specify the weight function to use in weighted PCA, must
- * implement
- * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions.WeightFunction}
- * .
- * <p>
- * Key: {@code -pca.weight}
- * </p>
- */
- public static final OptionID WEIGHT_ID = new OptionID("pca.weight", "Weight function to use in weighted PCA.");
-
- /**
* Holds the weight function.
*/
protected WeightFunction weightfunction;
@@ -205,6 +195,16 @@ public class WeightedCovarianceMatrixBuilder extends AbstractCovarianceMatrixBui
*/
public static class Parameterizer extends AbstractParameterizer {
/**
+ * Parameter to specify the weight function to use in weighted PCA, must
+ * implement
+ * {@link de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions.WeightFunction}
+ * .
+ * <p>
+ * Key: {@code -pca.weight}
+ * </p>
+ */
+ public static final OptionID WEIGHT_ID = new OptionID("pca.weight", "Weight function to use in weighted PCA.");
+ /**
* Weight function.
*/
protected WeightFunction weightfunction = null;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java
index 693cdb2e..71ae52ed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ConstantWeight.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* The result is always 1.0
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class ConstantWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java
index 03423603..76e24d18 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcStddevWeight.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution;
* erfc(1 / sqrt(2) * distance / stddev)
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class ErfcStddevWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java
index b7bc1c67..11acb0af 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ErfcWeight.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution;
* scaling.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class ErfcWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java
index 3b265d47..fce17896 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialStddevWeight.java
@@ -34,6 +34,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* not squared.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class ExponentialStddevWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java
index c67e35d7..c45d5cac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/ExponentialWeight.java
@@ -36,6 +36,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* -2.3025850929940455 is log(-.1) to achieve the intended range of 1.0 - 0.1
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class ExponentialWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java
index bf78b576..d8f67639 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussStddevWeight.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* with factor being 1 / sqrt(2 * PI)
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class GaussStddevWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java
index fcad89a3..70826d0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/GaussWeight.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* exp(-2.3025850929940455 * (distance/max)^2)
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class GaussWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java
index 3fb8e9e0..f2c27d5a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseLinearWeight.java
@@ -33,6 +33,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* This function has increasing weight, from 0.1 to 1.0 at distance == max.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class InverseLinearWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java
index a4d4a28e..952e7a56 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalStddevWeight.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* 1 / (1 + distance/stddev)
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class InverseProportionalStddevWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java
index fb1d71ba..810d17a9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/InverseProportionalWeight.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* 1 / (1 + distance/max)
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class InverseProportionalWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java
index a37617b5..bc92660e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/LinearWeight.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* 1 - 0.9 * (distance/max)
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class LinearWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java
index e35e9a67..c02d78f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticStddevWeight.java
@@ -33,6 +33,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* max(0.0, 1.0 - (distance/(3*stddev))^2
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class QuadraticStddevWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java
index 87bd552b..d764ef08 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/QuadraticWeight.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* 1.0 - 0.9 * (distance/max)^2
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class QuadraticWeight implements WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java
index 49bced02..afc04fb9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/pca/weightfunctions/WeightFunction.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.math.linearalgebra.pca.weightfunctions;
* normalized according to the maximum or standard deviation.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface WeightFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java
index 00597ac2..7ce235de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AbstractRandomProjectionFamily.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Abstract base class for random projection families.
*
* @author Erich Schubert
+ * @since 0.3
*/
public abstract class AbstractRandomProjectionFamily implements RandomProjectionFamily {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java
index e3504419..4c74bbfb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/AchlioptasRandomProjectionFamily.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* TODO: faster implementation exploiting sparsity.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(title = "Database-friendly random projections: Johnson-Lindenstrauss with binary coins", //
authors = "D. Achlioptas", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java
index 699478ac..47fddeab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/CauchyRandomProjectionFamily.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "M. Datar and N. Immorlica and P. Indyk and V. S. Mirrokni", //
title = "Locality-sensitive hashing scheme based on p-stable distributions", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java
index facfe427..e5277d5e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/GaussianRandomProjectionFamily.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "M. Datar and N. Immorlica and P. Indyk and V. S. Mirrokni", //
title = "Locality-sensitive hashing scheme based on p-stable distributions", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java
index 95a59276..e97e32f6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomProjectionFamily.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* Interface for random projection families.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Projection
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java
index dae7e0cb..15ecfec4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/RandomSubsetProjectionFamily.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "L. Breiman", //
title = "Bagging predictors", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java
index 5a505f66..3916659a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/linearalgebra/randomprojections/SimplifiedRandomHyperplaneProjectionFamily.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Evgeniy Faerman
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "M. Henzinger", //
title = "Finding near-duplicate web pages: a large-scale evaluation of algorithms", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/FastNonThreadsafeRandom.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/FastNonThreadsafeRandom.java
index 72f6be0b..a3632102 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/FastNonThreadsafeRandom.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/FastNonThreadsafeRandom.java
@@ -29,6 +29,7 @@ import java.util.Random;
* seeds. This implementation is <em>no longer thread-safe</em> (but faster)!
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class FastNonThreadsafeRandom extends Random {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/RandomFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/RandomFactory.java
index ca8f5a36..c75ac19b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/RandomFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/RandomFactory.java
@@ -36,6 +36,7 @@ import java.util.Random;
* scientific experiments are not likely to be adversarial.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Random
* @apiviz.has FastNonThreadsafeRandom
@@ -44,7 +45,12 @@ public class RandomFactory {
/**
* Global default factory
*/
- public static RandomFactory DEFAULT = new RandomFactory(getGlobalSeed());
+ public static RandomFactory DEFAULT = new RandomFactory(getGlobalSeed()) {
+ @Override
+ public String toString() {
+ return "GlobalRandom[" + Long.toString(this.seed) + "]";
+ }
+ };
/**
* Initialize the default random.
@@ -59,7 +65,7 @@ public class RandomFactory {
/**
* Seed.
*/
- private long seed;
+ protected long seed;
/**
* Factory method: Get a random factory for the given seed.
@@ -101,4 +107,9 @@ public class RandomFactory {
public Random getSingleThreadedRandom() {
return new FastNonThreadsafeRandom(seed++);
}
+
+ @Override
+ public String toString() {
+ return "Random[" + Long.toString(seed) + "]";
+ }
} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift1024NonThreadsafeRandom.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift1024NonThreadsafeRandom.java
index 4cafbfba..e6d28167 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift1024NonThreadsafeRandom.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift1024NonThreadsafeRandom.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "S. Vigna", //
title = "An experimental exploration of Marsaglia's xorshift generators, scrambled", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift64NonThreadsafeRandom.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift64NonThreadsafeRandom.java
index 4063fe03..7716d178 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift64NonThreadsafeRandom.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/random/XorShift64NonThreadsafeRandom.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "S. Vigna", //
title = "An experimental exploration of Marsaglia's xorshift generators, scrambled", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/LinearScale.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/LinearScale.java
index 94aead3b..629ac96a 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/LinearScale.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/LinearScale.java
@@ -35,6 +35,7 @@ import java.util.Locale;
* values.
*
* @author Erich Schubert
+ * @since 0.2
*
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/Scales.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/Scales.java
index deb2a85c..7ed49882 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/Scales.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/scales/Scales.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* able to automatically choose log scales when appropriate.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has LinearScale oneway - - computes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/AbstractSpatialSorter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/AbstractSpatialSorter.java
index 8c5a580f..7a9e4d31 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/AbstractSpatialSorter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/AbstractSpatialSorter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
* Abstract base class for spatial sorters, offering shared functionality.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public abstract class AbstractSpatialSorter implements SpatialSorter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/BinarySplitSpatialSorter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/BinarySplitSpatialSorter.java
index a1b8ea9b..e549c072 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/BinarySplitSpatialSorter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/BinarySplitSpatialSorter.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Reference(authors = "J. L. Bentley", title = "Multidimensional binary search trees used for associative searching", booktitle = "Communications of the ACM, Vol. 18 Issue 9, Sept. 1975", url = "http://dx.doi.org/10.1145/361002.361007")
public class BinarySplitSpatialSorter extends AbstractSpatialSorter {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
index f3207233..b8eebf17 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/HilbertSpatialSorter.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf HilbertRef
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/PeanoSpatialSorter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/PeanoSpatialSorter.java
index 490c9470..2b9f6982 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/PeanoSpatialSorter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/PeanoSpatialSorter.java
@@ -31,9 +31,9 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
/**
* Bulk-load an R-tree index by presorting the objects with their position on
* the Peano curve.
- *
+ *
* The basic shape of this space-filling curve looks like this:
- *
+ *
* <pre>
* 3---4 9
* | | |
@@ -41,14 +41,14 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* | | |
* 1 6---7
* </pre>
- *
+ *
* Which then expands to the next level as:
- *
+ *
* <pre>
* +-+ +-+ +-+ +-+ E
* | | | | | | | | |
* | +-+ +-+ | | +-+
- * | | |
+ * | | |
* | +-+ +-+ | | +-+
* | | | | | | | | |
* +-+ | | +-+ +-+ |
@@ -57,19 +57,22 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* | | | | | | | | |
* S +-+ +-+ +-+ +-+
* </pre>
- *
+ *
* and so on.
- *
+ *
* Reference:
* <p>
* G. Peano<br />
* Sur une courbe, qui remplit toute une aire plane<br />
* Mathematische Annalen, 36(1)
* </p>
- *
+ *
* @author Erich Schubert
+ * @since 0.5.0
*/
-@Reference(authors = "G. Peano", title = "Sur une courbe, qui remplit toute une aire plane", booktitle = "Mathematische Annalen, 36(1)")
+@Reference(authors = "G. Peano", //
+title = "Sur une courbe, qui remplit toute une aire plane", //
+booktitle = "Mathematische Annalen, 36(1)")
public class PeanoSpatialSorter extends AbstractSpatialSorter {
/**
* Constructor.
@@ -80,12 +83,12 @@ public class PeanoSpatialSorter extends AbstractSpatialSorter {
@Override
public <T extends SpatialComparable> void sort(List<T> objs, int start, int end, double[] minmax, int[] dims) {
- peanoSort(objs, start, end, minmax, dims, 0, BitsUtil.zero(dims.length), false);
+ peanoSort(objs, start, end, minmax, dims, 0, BitsUtil.zero(minmax.length >> 1), false);
}
/**
* Sort by Peano curve.
- *
+ *
* @param objs Objects
* @param start Start index
* @param end End
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/SpatialSorter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/SpatialSorter.java
index 0745729c..14139f97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/SpatialSorter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/SpatialSorter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
* Interface for spatial sorting - ZCurves, Peano curves, Hilbert curves, ...
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public interface SpatialSorter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveSpatialSorter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveSpatialSorter.java
index d5fd10cf..08b68c5f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveSpatialSorter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveSpatialSorter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.data.spatial.SpatialComparable;
* materialization of the Z indexes.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class ZCurveSpatialSorter extends AbstractSpatialSorter {
private static final double STOPVAL = 1E-10;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveTransformer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveTransformer.java
index 29c8ae72..94a6b12c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveTransformer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/spacefillingcurves/ZCurveTransformer.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
* Class to transform a relation to its Z coordinates.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class ZCurveTransformer {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/KernelDensityEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/KernelDensityEstimator.java
index 52087f8e..20f3bee0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/KernelDensityEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/KernelDensityEstimator.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.kernelfunctions.KernelDensityFunction
* Estimates a density using a variable width kernel density estimation.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses KernelDensityFunction
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/LinearRegression.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/LinearRegression.java
index d6818129..faee3050 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/LinearRegression.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/LinearRegression.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleDoublePair;
/**
*
* @author Arthur Zimek
+ * @since 0.2
*/
// TODO: arthur comment
// TODO: use covariance matrix, add incremental API?
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/MultipleLinearRegression.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/MultipleLinearRegression.java
index 45aad7a2..42bbc712 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/MultipleLinearRegression.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/MultipleLinearRegression.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
* is defined to be y = b0 + b1*x1 + b2*x2 + ... + bp*xp + e.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class MultipleLinearRegression {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/PolynomialRegression.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/PolynomialRegression.java
index 53f02d19..3ccc5453 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/PolynomialRegression.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/PolynomialRegression.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* + b1*x1 + b2*x2 + ... + bp*xp + e
*
* @author Elke Achtert
+ * @since 0.2
*/
public class PolynomialRegression extends MultipleLinearRegression {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/ProbabilityWeightedMoments.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/ProbabilityWeightedMoments.java
index 30357c9c..382600d7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/ProbabilityWeightedMoments.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/ProbabilityWeightedMoments.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "J.R.M. Hosking, J. R. Wallis, and E. F. Wood", title = "Estimation of the generalized extreme-value distribution by the method of probability-weighted moments.", booktitle = "Technometrics 27.3", url = "http://dx.doi.org/10.1080/00401706.1985.10488049")
public class ProbabilityWeightedMoments {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/AbstractDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/AbstractDependenceMeasure.java
index 2b76b7fe..2c177328 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/AbstractDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/AbstractDependenceMeasure.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* Abstract base class for dependence measures.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractDependenceMeasure implements DependenceMeasure {
// In your subclass, you will need to implement at least this method:
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/CorrelationDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/CorrelationDependenceMeasure.java
index e2d434b5..b67757ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/CorrelationDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/CorrelationDependenceMeasure.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Pearson product-moment correlation coefficient.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class CorrelationDependenceMeasure extends AbstractDependenceMeasure {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DependenceMeasure.java
index 10bd7565..be2741fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DependenceMeasure.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Measure the dependence of two variables.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public interface DependenceMeasure {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DistanceCorrelationDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DistanceCorrelationDependenceMeasure.java
index 289c0045..c1fdac6a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DistanceCorrelationDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/DistanceCorrelationDependenceMeasure.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Marie Kiermeier
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "Székely, G. J., Rizzo, M. L., & Bakirov, N. K.", //
title = "Measuring and testing dependence by correlation of distances", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HSMDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HSMDependenceMeasure.java
index b90dbc22..6adf498c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HSMDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HSMDependenceMeasure.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.5.5
*/
@Reference(authors = "A. Tatu, G. Albuquerque, M. Eisemann, P. Bak, H. Theisel, M. A. Magnor, and D. A. Keim", //
title = "Automated Analytical Methods to Support Visual Exploration of High-Dimensional Data", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HiCSDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HiCSDependenceMeasure.java
index ea06698f..335c0182 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HiCSDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HiCSDependenceMeasure.java
@@ -63,6 +63,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.7.0
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HoeffdingsDDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HoeffdingsDDependenceMeasure.java
index 63f618cc..6fc96223 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HoeffdingsDDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/HoeffdingsDDependenceMeasure.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Yinchong Yang
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "W. Hoeffding", //
title = "A non-parametric test of independence", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/JensenShannonEquiwidthDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/JensenShannonEquiwidthDependenceMeasure.java
index e988100d..3d0d779a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/JensenShannonEquiwidthDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/JensenShannonEquiwidthDependenceMeasure.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: Offer normalized and non-normalized variants?
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class JensenShannonEquiwidthDependenceMeasure extends AbstractDependenceMeasure {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MCEDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MCEDependenceMeasure.java
index 471c1135..6058adec 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MCEDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MCEDependenceMeasure.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "D. Guo", //
title = "Coordinating computational and visual approaches for interactive feature selection and multivariate clustering", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MutualInformationEquiwidthDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MutualInformationEquiwidthDependenceMeasure.java
index c1aa786d..e4145704 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MutualInformationEquiwidthDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/MutualInformationEquiwidthDependenceMeasure.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* For a median-based discretization, see {@link MCEDependenceMeasure}.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class MutualInformationEquiwidthDependenceMeasure extends AbstractDependenceMeasure {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SURFINGDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SURFINGDependenceMeasure.java
index c37ad125..9019e087 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SURFINGDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SURFINGDependenceMeasure.java
@@ -59,6 +59,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Robert Rödler
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeDependenceMeasure.java
index a5f7e60e..b3cc9e39 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeDependenceMeasure.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.7.0
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeInversionDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeInversionDependenceMeasure.java
index f99984c8..0aa62ad7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeInversionDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SlopeInversionDependenceMeasure.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Erich Schubert
* @author Robert Rödler
+ * @since 0.7.0
*/
@Reference(authors = "Elke Achtert, Hans-Peter Kriegel, Erich Schubert, Arthur Zimek", //
title = "Interactive Data Mining with 3D-Parallel-Coordinate-Trees", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SpearmanCorrelationDependenceMeasure.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SpearmanCorrelationDependenceMeasure.java
index 3a6a162f..3942e7e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SpearmanCorrelationDependenceMeasure.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/dependence/SpearmanCorrelationDependenceMeasure.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Spearman rank-correlation coefficient, also known as Spearmans Rho.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class SpearmanCorrelationDependenceMeasure extends AbstractDependenceMeasure {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/AbstractDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/AbstractDistribution.java
index ef3e1dff..e7ed8a6f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/AbstractDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/AbstractDistribution.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Abstract base class for distributions.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public abstract class AbstractDistribution implements Distribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/BetaDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/BetaDistribution.java
index 374ca717..d8242c0d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/BetaDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/BetaDistribution.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
*
* @author Jan Brusis
* @author Erich Schubert
+ * @since 0.5.0
*/
public class BetaDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/CauchyDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/CauchyDistribution.java
index 808c3b00..c5edbfb6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/CauchyDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/CauchyDistribution.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Cauchy distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class CauchyDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiDistribution.java
index 5bbcbe2b..2cc397bf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiDistribution.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Chi distribution.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.composedOf ChiSquaredDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiSquaredDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiSquaredDistribution.java
index 28ccdc4b..ae6ad53b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiSquaredDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ChiSquaredDistribution.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Chi-Squared distribution (a specialization of the Gamma distribution).
*
* @author Erich Schubert
+ * @since 0.2
*/
public class ChiSquaredDistribution extends GammaDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ConstantDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ConstantDistribution.java
index c0bb98e8..10f5f377 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ConstantDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ConstantDistribution.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Pseudo distribution, that has a unique constant value.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class ConstantDistribution implements Distribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/Distribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/Distribution.java
index 9edf4b68..84cd64e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/Distribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/Distribution.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.math.statistics.distribution;
* Statistical distributions, with their common functions.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface Distribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentialDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentialDistribution.java
index 828416d7..055d4e1f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentialDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentialDistribution.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Exponential distribution.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class ExponentialDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentiallyModifiedGaussianDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentiallyModifiedGaussianDistribution.java
index a764e304..f373d219 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentiallyModifiedGaussianDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/ExponentiallyModifiedGaussianDistribution.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* is a combination of a normal distribution and an exponential distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "exgaussian" })
public class ExponentiallyModifiedGaussianDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GammaDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GammaDistribution.java
index 92af5a88..c6573016 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GammaDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GammaDistribution.java
@@ -28,6 +28,7 @@ import java.util.Random;
import de.lmu.ifi.dbs.elki.logging.LoggingUtil;
import de.lmu.ifi.dbs.elki.math.MathUtil;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
@@ -37,7 +38,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Gamma Distribution, with random generation and density functions.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
+@Alias("de.lmu.ifi.dbs.elki.data.synthetic.bymodel.distribution.GammaDistribution")
public class GammaDistribution extends AbstractDistribution {
/**
* Euler–Mascheroni constant
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedExtremeValueDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedExtremeValueDistribution.java
index dea33d54..ff2d8b2d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedExtremeValueDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedExtremeValueDistribution.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* from the scipy definition by having the negative shape.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class GeneralizedExtremeValueDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticAlternateDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticAlternateDistribution.java
index 3c4eb761..6000a1b2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticAlternateDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticAlternateDistribution.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Where {@code shape=0} yields the regular logistic distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class GeneralizedLogisticAlternateDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticDistribution.java
index 6cb53dc9..162b47ea 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedLogisticDistribution.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Where {@code shape=1} yields the regular logistic distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class GeneralizedLogisticDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedParetoDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedParetoDistribution.java
index 1765ffb3..2e4a7505 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedParetoDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GeneralizedParetoDistribution.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* distributions.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class GeneralizedParetoDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GumbelDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GumbelDistribution.java
index d5712582..81c0f45f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GumbelDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/GumbelDistribution.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Gumbel distribution, also known as Log-Weibull distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class GumbelDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/HaltonUniformDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/HaltonUniformDistribution.java
index 242815b0..e021a6f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/HaltonUniformDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/HaltonUniformDistribution.java
@@ -64,6 +64,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* for example by adding scrambling.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
@Reference(title = "Randomized halton sequences", authors = "Wang, X. and Hickernell, F.J.", booktitle = "Mathematical and Computer Modelling Vol. 32 (7)", url = "http://dx.doi.org/10.1016/S0895-7177(00)00178-3")
public class HaltonUniformDistribution implements Distribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/KappaDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/KappaDistribution.java
index f9d723d8..81cc8191 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/KappaDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/KappaDistribution.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* TODO: add references.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class KappaDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LaplaceDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LaplaceDistribution.java
index c3826cb3..92db5dd7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LaplaceDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LaplaceDistribution.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Laplace distribution also known as double exponential distribution
*
* @author Erich Schubert
+ * @since 0.5.5
*/
@Alias("DoubleExponentialDistribution")
public class LaplaceDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaAlternateDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaAlternateDistribution.java
index b7c38566..63f67adc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaAlternateDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaAlternateDistribution.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Note: this matches the loggamma of SciPy.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class LogGammaAlternateDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaDistribution.java
index 60fa5292..f8796fe2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogGammaDistribution.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Note: this is a different loggamma than scipy uses.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class LogGammaDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogLogisticDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogLogisticDistribution.java
index c2dfcc64..c7cba5ac 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogLogisticDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogLogisticDistribution.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Log-Logistic distribution also known as Fisk distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "fisk", "loglog" })
public class LogLogisticDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogNormalDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogNormalDistribution.java
index 86f2ea43..d5a2d099 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogNormalDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogNormalDistribution.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* <tt>scipy.stats.lognorm(logstddev, shift, math.exp(logmean))</tt>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "lognormal" })
public class LogNormalDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogisticDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogisticDistribution.java
index 6dcafddb..b8e4f5bc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogisticDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/LogisticDistribution.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Logistic distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "log" })
public class LogisticDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/NormalDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/NormalDistribution.java
index 56c14eca..126db305 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/NormalDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/NormalDistribution.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Gaussian distribution aka normal distribution
*
* @author Erich Schubert
+ * @since 0.5.0
*/
@Alias({ "GaussianDistribution", "normal", "gauss" })
public class NormalDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/PoissonDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/PoissonDistribution.java
index 59bb5ba7..a67fdde1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/PoissonDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/PoissonDistribution.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class PoissonDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/RayleighDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/RayleighDistribution.java
index 0ef431e0..832952e7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/RayleighDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/RayleighDistribution.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Rayleigh distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class RayleighDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/SkewGeneralizedNormalDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/SkewGeneralizedNormalDistribution.java
index 8cfb3e38..0cb5bcd8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/SkewGeneralizedNormalDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/SkewGeneralizedNormalDistribution.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* multiple that go by the name of a "Generalized Normal Distribution".
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class SkewGeneralizedNormalDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/StudentsTDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/StudentsTDistribution.java
index ced66f37..0bde3300 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/StudentsTDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/StudentsTDistribution.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* FIXME: add quantile and random function!
*
* @author Jan Brusis
+ * @since 0.5.0
*/
public class StudentsTDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/UniformDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/UniformDistribution.java
index 875ee737..301dc8dd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/UniformDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/UniformDistribution.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.math.statistics.distribution;
import java.util.Random;
import de.lmu.ifi.dbs.elki.math.random.RandomFactory;
+import de.lmu.ifi.dbs.elki.utilities.Alias;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
@@ -34,7 +35,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Uniform distribution.
*
* @author Erich Schubert
+ * @since 0.2
*/
+@Alias("de.lmu.ifi.dbs.elki.data.synthetic.bymodel.distribution.UniformDistribution")
public class UniformDistribution extends AbstractDistribution {
/**
* Minimum
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WaldDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WaldDistribution.java
index b96f133e..11135fed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WaldDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WaldDistribution.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Inverse Gaussian distribution aka Wald distribution
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "InverseGaussianDistribution", "invgauss" })
public class WaldDistribution extends AbstractDistribution {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WeibullDistribution.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WeibullDistribution.java
index 86ac24d9..34791481 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WeibullDistribution.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/WeibullDistribution.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Weibull distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class WeibullDistribution extends AbstractDistribution {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractExpMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractExpMADEstimator.java
index 5ec6aaf3..6c08abd8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractExpMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractExpMADEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for estimators based on the median and MAD.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <D> Distribution to generate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLMMEstimator.java
index 03e21b13..86455d52 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLMMEstimator.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for L-Moments based estimators (LMM).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution class.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMADEstimator.java
index 8e6ca26d..170b4fab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMADEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for estimators based on the median and MAD.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <D> Distribution to generate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMOMEstimator.java
index ad260a6f..9d6e5983 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMOMEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for estimators based on the statistical moments.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution to generate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMeanVarianceEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMeanVarianceEstimator.java
index b76176e4..464d7072 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMeanVarianceEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractLogMeanVarianceEstimator.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* only).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution to estimate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMADEstimator.java
index 9c630990..746408bb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMADEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for estimators based on the median and MAD.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <D> Distribution to generate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMOMEstimator.java
index 8caf4cda..d9ca2dff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMOMEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for estimators based on the statistical moments.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution to generate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMeanVarianceEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMeanVarianceEstimator.java
index e9058df4..20abf67d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMeanVarianceEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/AbstractMeanVarianceEstimator.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* only).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution to estimate.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/CauchyMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/CauchyMADEstimator.java
index 9ced6b54..f4db08ff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/CauchyMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/CauchyMADEstimator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has CauchyDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/DistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/DistributionEstimator.java
index b31acf66..91d29c0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/DistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/DistributionEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Estimate distribution parameters from a sample.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/EMGOlivierNorbergEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/EMGOlivierNorbergEstimator.java
index 38aa5380..f1fa5d95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/EMGOlivierNorbergEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/EMGOlivierNorbergEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Naive distribution estimation using mean and sample variance.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has ExponentiallyModifiedGaussianDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExpMADDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExpMADDistributionEstimator.java
index b2a935c2..51f5e46c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExpMADDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExpMADDistributionEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.Distribution;
* exponentiated data.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution estimated.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialLMMEstimator.java
index c33bbdfd..88ba769a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialLMMEstimator.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has ExponentialDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMADEstimator.java
index e639dd63..6c2d21e0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMADEstimator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has ExponentialDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMOMEstimator.java
index cce8c503..726c85b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMOMEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* maximum-likelihood estimate (MLE), but not very robust.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has ExponentialDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMedianEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMedianEstimator.java
index 0bda6711..17db5724 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMedianEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/ExponentialMedianEstimator.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has ExponentialDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaChoiWetteEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaChoiWetteEstimator.java
index 3714b89c..cc746ece 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaChoiWetteEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaChoiWetteEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GammaDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaLMMEstimator.java
index 8024a326..29f2af63 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaLMMEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GammaDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMADEstimator.java
index 7032ede8..90076359 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMADEstimator.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GammaDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMOMEstimator.java
index 11aeb527..346a0fd4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GammaMOMEstimator.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GammaDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedExtremeValueLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedExtremeValueLMMEstimator.java
index 1e60f8be..79020a59 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedExtremeValueLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedExtremeValueLMMEstimator.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GeneralizedExtremeValueDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedLogisticAlternateLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedLogisticAlternateLMMEstimator.java
index 1b9c3879..276f538a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedLogisticAlternateLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedLogisticAlternateLMMEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GeneralizedLogisticAlternateDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedParetoLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedParetoLMMEstimator.java
index c32f1de0..aa999b1f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedParetoLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GeneralizedParetoLMMEstimator.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GeneralizedParetoDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelLMMEstimator.java
index d721d083..2b29b079 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelLMMEstimator.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GumbelDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelMADEstimator.java
index 2e1b4f99..7e7cd8a9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/GumbelMADEstimator.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has GumbelDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LMMDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LMMDistributionEstimator.java
index 1480d96f..0118b403 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LMMDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LMMDistributionEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.Distribution;
* (LMM).
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution class.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceLMMEstimator.java
index c9c6d0bb..dc63ed27 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceLMMEstimator.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Estimate Laplace distribution parameters using the method of L-Moments (LMM).
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LaplaceDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMADEstimator.java
index 63355fb5..c09ad3ca 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMADEstimator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LaplaceDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMLEEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMLEEstimator.java
index 42316b32..42f27d83 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMLEEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LaplaceMLEEstimator.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LaplaceDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaAlternateExpMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaAlternateExpMADEstimator.java
index 2b742ed2..43a2b83e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaAlternateExpMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaAlternateExpMADEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* A modified algorithm for LogGamma distributions.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogGammaAlternateDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaChoiWetteEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaChoiWetteEstimator.java
index 80d02555..2f1577df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaChoiWetteEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaChoiWetteEstimator.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogGammaDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMADEstimator.java
index db228b37..7458b485 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMADEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* A modified algorithm for LogGamma distributions.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogGammaDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMOMEstimator.java
index 193cc5ab..1e8c3b87 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogGammaLogMOMEstimator.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* transformed values.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogGammaDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogLogisticMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogLogisticMADEstimator.java
index 942cb6af..a10ad4e4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogLogisticMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogLogisticMADEstimator.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogLogisticDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMADDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMADDistributionEstimator.java
index 596315b3..d66d02a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMADDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMADDistributionEstimator.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.Distribution;
* Distribuition estimators that use the method of moments (MOM) in logspace.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution estimated.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMOMDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMOMDistributionEstimator.java
index bd9ec4b2..3e6d9896 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMOMDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogMOMDistributionEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.Distribution;
* i.e. that only need the statistical moments of a data set after logarithms.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution estimated.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalBilkovaLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalBilkovaLMMEstimator.java
index 4b6d62d5..658655dc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalBilkovaLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalBilkovaLMMEstimator.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* generalized normal distribution, as used by Hosking.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogNormalDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLMMEstimator.java
index 57c5c745..854053c0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLMMEstimator.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogNormalDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLevenbergMarquardtKDEEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLevenbergMarquardtKDEEstimator.java
index a8b84c1a..2c571e39 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLevenbergMarquardtKDEEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLevenbergMarquardtKDEEstimator.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* observed.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogNormalDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMADEstimator.java
index 11c3c7ed..2f7e3850 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMADEstimator.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogNormalDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMOMEstimator.java
index 6888e4ad..93ebdca3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogNormalLogMOMEstimator.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* This is a maximum-likelihood-estimator (MLE).
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogNormalDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticLMMEstimator.java
index 7c4f20be..30c85bb4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticLMMEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogisticDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticMADEstimator.java
index 1524e698..7d56fc5d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/LogisticMADEstimator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LogisticDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MADDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MADDistributionEstimator.java
index 80112d22..9ffb26fc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MADDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MADDistributionEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.Distribution;
* need the statistical moments of a data set.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution estimated.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MOMDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MOMDistributionEstimator.java
index a85dfbd2..1968ee63 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MOMDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MOMDistributionEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.statistics.distribution.Distribution;
* need the statistical moments of a data set.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution estimated.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MeanVarianceDistributionEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MeanVarianceDistributionEstimator.java
index 128f2ece..10c638d7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MeanVarianceDistributionEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/MeanVarianceDistributionEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MeanVariance;
* These can implicitely (obviously) also handle full statistical moments.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <D> Distribution type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLMMEstimator.java
index 0a569de5..96dcf336 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLMMEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has NormalDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLevenbergMarquardtKDEEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLevenbergMarquardtKDEEstimator.java
index 5f6e5672..54a83355 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLevenbergMarquardtKDEEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalLevenbergMarquardtKDEEstimator.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* observed.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has NormalDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMADEstimator.java
index 6bb5a9ea..cdbebc5b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMADEstimator.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has NormalDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMOMEstimator.java
index 7f5f179b..12aeaecf 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/NormalMOMEstimator.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* extreme values.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has NormalDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighLMMEstimator.java
index a7afad4c..cd96506f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighLMMEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* the method of L-Moments (LMM).
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has RayleighDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMADEstimator.java
index 39babfe4..bcd67e0d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMADEstimator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has RayleighDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMLEEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMLEEstimator.java
index 4891f9bd..c0f54916 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMLEEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/RayleighMLEEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* maximum likelihood estimate.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has RayleighDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/SkewGNormalLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/SkewGNormalLMMEstimator.java
index 15e51d40..2000e841 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/SkewGNormalLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/SkewGNormalLMMEstimator.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has SkewGeneralizedNormalDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformEnhancedMinMaxEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformEnhancedMinMaxEstimator.java
index 8b12ace1..b33b70da 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformEnhancedMinMaxEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformEnhancedMinMaxEstimator.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* enhances the interval appropriately.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UniformDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformLMMEstimator.java
index 5008eb85..c7134ee1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformLMMEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* L-Moments (LMM).
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UniformDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMADEstimator.java
index 781f72ec..29004489 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMADEstimator.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UniformDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMinMaxEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMinMaxEstimator.java
index a40c4686..e140ec2c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMinMaxEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/UniformMinMaxEstimator.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Estimate the uniform distribution by computing min and max.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UniformDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMLEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMLEstimator.java
index d8147006..1088dd37 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMLEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMLEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Estimate parameter of the Wald distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has WaldDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMOMEstimator.java
index 1ccfdf08..da56827f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WaldMOMEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Estimate parameter of the Wald distribution.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has WaldDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLMMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLMMEstimator.java
index 4ea8faa7..0756c113 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLMMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLMMEstimator.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* (LMM).
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has WeibullDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMADEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMADEstimator.java
index 8dd068e0..22f6effc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMADEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMADEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has WeibullDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMOMEstimator.java
index dd02dea4..3a96dcfd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/WeibullLogMOMEstimator.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* doesn't use "the" statistical moments.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has WeibullDistribution - - estimates
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/BestFitEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/BestFitEstimator.java
index 81e2abfd..c3409d9b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/BestFitEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/BestFitEstimator.java
@@ -87,6 +87,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* choose whichever works best.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses MOMDistributionEstimator
* @apiviz.uses MADDistributionEstimator
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/TrimmedEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/TrimmedEstimator.java
index ed1ffab8..54fda81c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/TrimmedEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/TrimmedEstimator.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* analyzes it using another estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses DistributionEstimator
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/WinsorisingEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/WinsorisingEstimator.java
index ad8e532d..56a7ee94 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/WinsorisingEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/distribution/estimator/meta/WinsorisingEstimator.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.uses DistributionEstimator
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AbstractIntrinsicDimensionalityEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AbstractIntrinsicDimensionalityEstimator.java
index 4bea246b..c3dde05f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AbstractIntrinsicDimensionalityEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AbstractIntrinsicDimensionalityEstimator.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Abstract base class for ID estimators.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public abstract class AbstractIntrinsicDimensionalityEstimator implements IntrinsicDimensionalityEstimator {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AggregatedHillEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AggregatedHillEstimator.java
index 732d74ab..2cd35e60 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AggregatedHillEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/AggregatedHillEstimator.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Jonathan von Brünken
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "R. Huisman and K. G. Koedijk and C. J. M. Kool and F. Palm", //
title = "Tail-Index Estimates in Small Samples", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/EnsembleEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/EnsembleEstimator.java
index 019580fa..83dbb8bc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/EnsembleEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/EnsembleEstimator.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* This is an experimental estimator. Please cite ELKI when using.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class EnsembleEstimator extends AbstractIntrinsicDimensionalityEstimator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/GEDEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/GEDEstimator.java
index 2514006c..82e5486b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/GEDEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/GEDEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Jonathan von Brünken
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "M. E. Houle, H. Kashima, M. Nett", //
title = "Generalized expansion dimension", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/HillEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/HillEstimator.java
index 228aa5c0..0d761b8e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/HillEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/HillEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Jonathan von Brünken
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "B. M. Hill", //
title = "A simple general approach to inference about the tail of a distribution", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/IntrinsicDimensionalityEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/IntrinsicDimensionalityEstimator.java
index 978869b0..159b5c98 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/IntrinsicDimensionalityEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/IntrinsicDimensionalityEstimator.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.NumberArrayAdapter
* Estimate the intrinsic dimensionality from a distance list.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public interface IntrinsicDimensionalityEstimator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/LMomentsEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/LMomentsEstimator.java
index 671b3e36..1435945d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/LMomentsEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/LMomentsEstimator.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Jonathan von Brünken
* @author Erich Schubert
+ * @since 0.7.0
*/
public class LMomentsEstimator extends AbstractIntrinsicDimensionalityEstimator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/MOMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/MOMEstimator.java
index 174d4bf7..8379f56b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/MOMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/MOMEstimator.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "L. Amsaleg and O. Chelly and T. Furon and S. Girard and M. E. Houle and K. Kawarabayashi and M. Nett", //
title = "Estimating Local Intrinsic Dimensionality", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWM2Estimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWM2Estimator.java
index 5d16fa48..f8176ec8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWM2Estimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWM2Estimator.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* this. This hack causes this estimator to have a bias to underestimate the ID.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class PWM2Estimator extends AbstractIntrinsicDimensionalityEstimator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWMEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWMEstimator.java
index 9c9db16b..bcc6a21e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWMEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/PWMEstimator.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Jonathan von Brünken
* @author Erich Schubert
+ * @since 0.7.0
*/
public class PWMEstimator extends AbstractIntrinsicDimensionalityEstimator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/RVEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/RVEstimator.java
index 52976bf4..dcff6031 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/RVEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/RVEstimator.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Oussama Chelly
+ * @since 0.7.0
*/
@Reference(authors = "L. Amsaleg and O. Chelly and T. Furon and S. Girard and M. E. Houle and K. Kawarabayashi and M. Nett", //
title = "Estimating Local Intrinsic Dimensionality", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/ZipfEstimator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/ZipfEstimator.java
index c5bd60a2..21cdb93f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/ZipfEstimator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/intrinsicdimensionality/ZipfEstimator.java
@@ -55,6 +55,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* TODO: possible to improve numerical precision via log1p?
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "M. Kratz and S. I. Resnick", //
title = "On Least Squares Estimates of an Exponential Tail Coefficient", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/BiweightKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/BiweightKernelDensityFunction.java
index d9252e86..7dd76cc0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/BiweightKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/BiweightKernelDensityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Biweight (Quartic) kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "biweight", "quartic" })
public final class BiweightKernelDensityFunction implements KernelDensityFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/CosineKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/CosineKernelDensityFunction.java
index b51b308e..eaabde55 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/CosineKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/CosineKernelDensityFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Cosine kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public final class CosineKernelDensityFunction implements KernelDensityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/EpanechnikovKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/EpanechnikovKernelDensityFunction.java
index b83ce76c..cde35380 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/EpanechnikovKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/EpanechnikovKernelDensityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Epanechnikov kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "epanechnikov" })
public final class EpanechnikovKernelDensityFunction implements KernelDensityFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/GaussianKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/GaussianKernelDensityFunction.java
index adf9189e..5ec0fe94 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/GaussianKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/GaussianKernelDensityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Gaussian kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public final class GaussianKernelDensityFunction implements KernelDensityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/KernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/KernelDensityFunction.java
index c53d5da1..ecc8567d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/KernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/KernelDensityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* Note: as of now, this API does not support asymmetric kernels.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public interface KernelDensityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriangularKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriangularKernelDensityFunction.java
index 0175f163..923f45e1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriangularKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriangularKernelDensityFunction.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Triangular kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public final class TriangularKernelDensityFunction implements KernelDensityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TricubeKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TricubeKernelDensityFunction.java
index c2cf5152..472646a0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TricubeKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TricubeKernelDensityFunction.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Tricube kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public final class TricubeKernelDensityFunction implements KernelDensityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriweightKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriweightKernelDensityFunction.java
index fd3b38e3..2573723f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriweightKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/TriweightKernelDensityFunction.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Triweight kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Alias({ "triweight" })
public final class TriweightKernelDensityFunction implements KernelDensityFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/UniformKernelDensityFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/UniformKernelDensityFunction.java
index a27d0ba4..bf07911d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/UniformKernelDensityFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/kernelfunctions/UniformKernelDensityFunction.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* Uniform / Rectangular kernel density estimator.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public final class UniformKernelDensityFunction implements KernelDensityFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/AndersonDarlingTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/AndersonDarlingTest.java
index de418391..174563b7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/AndersonDarlingTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/AndersonDarlingTest.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "T. W. Anderson, and D. A. Darling", //
title = "Asymptotic theory of certain 'goodness of fit' criteria based on stochastic processes", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/GoodnessOfFitTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/GoodnessOfFitTest.java
index 2882390a..a1c9aa7a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/GoodnessOfFitTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/GoodnessOfFitTest.java
@@ -33,6 +33,7 @@ package de.lmu.ifi.dbs.elki.math.statistics.tests;
*
* @author Jan Brusis
* @author Erich Schubert
+ * @since 0.5.0
*/
public interface GoodnessOfFitTest {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/KolmogorovSmirnovTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/KolmogorovSmirnovTest.java
index 3e2d98e4..f0b2ea95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/KolmogorovSmirnovTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/KolmogorovSmirnovTest.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* difference of the empirical CDFs.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class KolmogorovSmirnovTest implements GoodnessOfFitTest {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/StandardizedTwoSampleAndersonDarlingTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/StandardizedTwoSampleAndersonDarlingTest.java
index d2f9777c..a2b83496 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/StandardizedTwoSampleAndersonDarlingTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/StandardizedTwoSampleAndersonDarlingTest.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "F. W. Scholz, and M. A. Stephens", //
title = "K-sample Anderson–Darling tests", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/WelchTTest.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/WelchTTest.java
index 91049bad..50e55f58 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/WelchTTest.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/math/statistics/tests/WelchTTest.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
*
* @author Jan Brusis
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses StudentsTDistribution
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/Executor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/Executor.java
index c6659aad..93461872 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/Executor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/Executor.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedVariable;
* Processor executor.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.uses de.lmu.ifi.dbs.elki.parallel.processor.Processor
* @apiviz.uses SharedVariable
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelCore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelCore.java
index 074a3562..9e84da8a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelCore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelCore.java
@@ -36,6 +36,7 @@ import java.util.concurrent.atomic.AtomicInteger;
* TODO: make configurable how many threads are used.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ParallelCore {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelExecutor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelExecutor.java
index f3da8bc0..dc7c8b1c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelExecutor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/ParallelExecutor.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedVariable.Instance;
* TODO: add progress
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has BlockArrayRunner
* @apiviz.uses ParallelCore
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/SingleThreadedExecutor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/SingleThreadedExecutor.java
index 21c695f1..82acc4e7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/SingleThreadedExecutor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/SingleThreadedExecutor.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedVariable.Instance;
* Currently not used.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SingleThreadedRunner
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/AbstractDoubleProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/AbstractDoubleProcessor.java
index 8d640af2..c7d56f65 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/AbstractDoubleProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/AbstractDoubleProcessor.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedDouble;
* Abstract base class for processors that output double values.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
* @apiviz.uses SharedDouble
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/DoubleMinMaxProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/DoubleMinMaxProcessor.java
index b751b9e3..35fb6517 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/DoubleMinMaxProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/DoubleMinMaxProcessor.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedDouble;
* Sink collecting minimum and maximum values.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
* @apiviz.uses SharedDouble
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KDistanceProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KDistanceProcessor.java
index 0b68a88a..4166a225 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KDistanceProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KDistanceProcessor.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedObject;
* Needs the k nearest neighbors as input, for example from {@link KNNProcessor}.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
* @apiviz.uses KNNList
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KNNProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KNNProcessor.java
index d8d25bdc..86ab87e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KNNProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/KNNProcessor.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedObject;
* Processor to compute the kNN of each object.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <O> Object type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/Processor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/Processor.java
index a2bd7c3e..024bab94 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/Processor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/Processor.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.parallel.Executor;
* Class to represent a processor factory.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDataStoreProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDataStoreProcessor.java
index 06bac212..710b83a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDataStoreProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDataStoreProcessor.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedObject;
* Output channel to store data in a {@link WritableDataStore}.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <T> data type
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDoubleDataStoreProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDoubleDataStoreProcessor.java
index ff9f25c9..2967de33 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDoubleDataStoreProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteDoubleDataStoreProcessor.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedDouble;
* Write double values into a {@link WritableDoubleDataStore}.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
* @apiviz.uses SharedDouble
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteIntegerDataStoreProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteIntegerDataStoreProcessor.java
index e71d6736..b6403ba7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteIntegerDataStoreProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/processor/WriteIntegerDataStoreProcessor.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.parallel.variables.SharedInteger;
* Write int values into a {@link WritableIntegerDataStore}.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has Instance
* @apiviz.uses SharedInteger
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedDouble.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedDouble.java
index ea76297a..b0f75c66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedDouble.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedDouble.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.parallel.variables;
* Direct channel connecting two processors.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SharedDouble.Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedInteger.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedInteger.java
index 43471144..bb10e600 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedInteger.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedInteger.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.parallel.variables;
* Direct channel connecting two processors.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SharedInteger.Instance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedObject.java
index 83404cce..dd047f95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedObject.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.parallel.variables;
* Variable to share between different processors (within one thread only!)
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SharedObject.Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedVariable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedVariable.java
index fd5808fb..6499c82b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedVariable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/parallel/variables/SharedVariable.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.parallel.variables;
* Shared variables storing a particular type.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.has SharedVariable.Instance
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java
index ee4b5972..c7be2809 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java
@@ -31,6 +31,7 @@ import java.io.ObjectOutput;
* Abstract superclass for pages.
*
* @author Elke Achtert
+ * @since 0.2
*/
// todo elke revise comments
public abstract class AbstractExternalizablePage implements ExternalizablePage {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java
index 6a47ac38..78978763 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.logging.statistics.Counter;
* (in-memory and on-disk).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <P> page type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFileFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFileFactory.java
index a52b21bc..26bb95d2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFileFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractPageFileFactory.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Abstract page file factory.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <P> Page type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java
index a26d9a4f..3b0b4f8f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.logging.statistics.LongStatistic;
* objects that implement the <code>Page</code> interface.
*
* @author Elke Achtert
+ * @since 0.4.0
*
* @param <P> Page type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java
index 0d6b8950..5e056f05 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* Default implementation of a page header.
*
* @author Elke Achtert
+ * @since 0.2
*/
public class DefaultPageHeader implements PageHeader {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java
index 8c9c124d..3ffc4a35 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java
@@ -29,6 +29,7 @@ import java.io.Externalizable;
* Base interface for externalizable pages.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
// TODO: replace with the newer ByteSerializers
public interface ExternalizablePage extends Page, Externalizable {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCache.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCache.java
index e9fd7db4..5c78e3ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCache.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCache.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* object is dropped.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses PageFile
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCachePageFileFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCachePageFileFactory.java
index fa248a52..396166c8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCachePageFileFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/LRUCachePageFileFactory.java
@@ -1,12 +1,5 @@
package de.lmu.ifi.dbs.elki.persistent;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
-
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -30,10 +23,18 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
+
/**
* Page file factory for memory page files.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has LRUCache
* @apiviz.composedOf PageFileFactory
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java
index f0b37914..e6ed70c5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Implemented as a Map with keys representing the ids of the saved pages.
*
* @author Elke Achtert
+ * @since 0.2
*
* @param <P> Page type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFileFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFileFactory.java
index 3323fd38..1f55cfab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFileFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/MemoryPageFileFactory.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.persistent;
* Page file factory for memory page files.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has MemoryPageFile
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java
index d379dc9a..448561d1 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteArrayUtil;
* by the actual data.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.composedOf RandomAccessFile
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java
index 5c2a56c2..111b6490 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.ByteBufferInputStream;
* single file. All pages are stored in a specified directory.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf OnDiskArray
* @apiviz.composedOf PageHeader
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFileFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFileFactory.java
index d5351d3e..3b60c51d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFileFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFileFactory.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* Page file factory for disk-based page files.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has OnDiskArrayPageFile
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java
index 4faa1e67..9cd7acdf 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java
@@ -34,6 +34,7 @@ import java.nio.ByteBuffer;
* @apiviz.composedOf OnDiskArray
*
* @author Erich Schubert
+ * @since 0.2
*/
public class OnDiskUpperTriangleMatrix {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/Page.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/Page.java
index 042fa893..a0c7e596 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/Page.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/Page.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.persistent;
* persistently saved.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFile.java
index af791951..366ac6c4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFile.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.persistent;
* Page file interface.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Page
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFileFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFileFactory.java
index df84defc..49400571 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFileFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageFileFactory.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.persistent;
* Factory interface for generating page files.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <P> Page type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageHeader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageHeader.java
index 582ccfc6..1171b41e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageHeader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PageHeader.java
@@ -31,6 +31,7 @@ import java.io.RandomAccessFile;
* must at least store the size of a page in Bytes.
*
* @author Elke Achtert
+ * @since 0.2
*/
public interface PageHeader {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java
index c6068edc..3103693f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* single file. All pages are stored in a specified directory.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.composedOf PageHeader
* @apiviz.composedOf RandomAccessFile
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFileFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFileFactory.java
index 4d44381a..405db531 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFileFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/persistent/PersistentPageFileFactory.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.FileParameter;
* Page file factory for disk-based page files.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has PersistentPageFile
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/AbstractHierarchicalResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/AbstractHierarchicalResult.java
index e45c8106..80fee1a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/AbstractHierarchicalResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/AbstractHierarchicalResult.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.result;
* Abstract class for a result object with hierarchy
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public abstract class AbstractHierarchicalResult implements HierarchicalResult {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/BasicResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/BasicResult.java
index 527b086c..c0db5ae2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/BasicResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/BasicResult.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.result;
* stores the required short and long result names.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ClusteringVectorDumper.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ClusteringVectorDumper.java
index b2f27abb..f4988e72 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ClusteringVectorDumper.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ClusteringVectorDumper.java
@@ -62,6 +62,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
* {@link de.lmu.ifi.dbs.elki.algorithm.clustering.meta.ExternalClustering}.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ClusteringVectorDumper implements ResultHandler {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/CollectionResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/CollectionResult.java
index 0128e533..d1a86481 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/CollectionResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/CollectionResult.java
@@ -32,6 +32,7 @@ import java.util.Iterator;
* For example, a list of NumberVectors.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DBIDSelection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DBIDSelection.java
index c2cb809a..47bb25eb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DBIDSelection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DBIDSelection.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
*
* @author Heidi Kolb
* @author Erich Schubert
+ * @since 0.4.0
*/
public class DBIDSelection {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DiscardResultHandler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DiscardResultHandler.java
index 5b395de8..2fdbb009 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DiscardResultHandler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/DiscardResultHandler.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.result;
* benchmarks.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class DiscardResultHandler implements ResultHandler {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/EvaluationResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/EvaluationResult.java
index 8790a3f5..7cf49e1b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/EvaluationResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/EvaluationResult.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Abstract evaluation result.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf EvaluationResult.MeasurementGroup
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/FrequentItemsetsResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/FrequentItemsetsResult.java
index ae34e4c6..e0f8a314 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/FrequentItemsetsResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/FrequentItemsetsResult.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
* Result class for Apriori Algorithm.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class FrequentItemsetsResult extends BasicResult implements TextWriteable {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HierarchicalResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HierarchicalResult.java
index 383c3ad1..b7611d94 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HierarchicalResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HierarchicalResult.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.result;
* delegate is to keep the APIs simpler, and thus make ELKI development easier.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf ResultHierarchy
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HistogramResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HistogramResult.java
index fde386e5..5065e2e0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HistogramResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/HistogramResult.java
@@ -29,6 +29,7 @@ import java.util.Collection;
* Histogram result.
*
* @author Erich Schubert
+ * @since 0.3
*
* @param <O> Object class (e.g. {@link de.lmu.ifi.dbs.elki.data.DoubleVector})
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/IterableResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/IterableResult.java
index 8d5d6c61..3126569e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/IterableResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/IterableResult.java
@@ -30,6 +30,7 @@ import java.util.Iterator;
* (At least when the class O is TextWriteable)
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/KMLOutputHandler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/KMLOutputHandler.java
index de5fc586..121cff56 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/KMLOutputHandler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/KMLOutputHandler.java
@@ -96,6 +96,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* different result types.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
// TODO: make configurable color scheme
@Reference(authors = "E. Achtert, A. Hettab, H.-P. Kriegel, E. Schubert, A. Zimek", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/LogResultStructureResultHandler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/LogResultStructureResultHandler.java
index 0660672b..d10fa0f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/LogResultStructureResultHandler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/LogResultStructureResultHandler.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Description;
* TODO: transform this into an evaluator, then visualize, too?
*
* @author Erich Schubert
+ * @since 0.5.5
*/
@Description("Development result handler that merely logs the structure of the result tree.")
public class LogResultStructureResultHandler implements ResultHandler {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingFromDataStore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingFromDataStore.java
index 004b2e8f..000956ba 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingFromDataStore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingFromDataStore.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Result class providing an ordering backed by a hashmap.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <T> Data type in hash map
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingResult.java
index ae5a84b9..cb153b7d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/OrderingResult.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
* Interface for a result providing an object ordering.
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface OrderingResult extends Result {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/PixmapResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/PixmapResult.java
index ce9800dc..04a100e7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/PixmapResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/PixmapResult.java
@@ -30,6 +30,7 @@ import java.io.File;
* Result encapsulating a single image.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface PixmapResult extends Result {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/RangeSelection.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/RangeSelection.java
index 301df6c1..164317d7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/RangeSelection.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/RangeSelection.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
*
* @author Heidi Kolb
* @author Erich Schubert
+ * @since 0.4.0
*/
public class RangeSelection extends DBIDSelection {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ReferencePointsResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ReferencePointsResult.java
index 082456cf..c6d7a7d3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ReferencePointsResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ReferencePointsResult.java
@@ -29,6 +29,7 @@ import java.util.Collection;
* Result used in passing the reference points to the visualizers.
*
* @author Erich Schubert
+ * @since 0.3
*
* @param <O> data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/Result.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/Result.java
index 6a1bd402..ab6a9c82 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/Result.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/Result.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.result;
* Interface for arbitrary result objects.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHandler.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHandler.java
index 3455056f..f228bd74 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHandler.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHandler.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.result;
* Interface for any class that can handle results
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.uses Result oneway - - processes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHierarchy.java
index 5c8b1ab4..97108674 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHierarchy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultHierarchy.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.ModifiableHierarch
* Class to store a hierarchy of result objects.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
// TODO: add listener merging!
public class ResultHierarchy extends HashMapHierarchy<Result> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultListener.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultListener.java
index 8dc3d637..2bdaf23b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultListener.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultListener.java
@@ -29,6 +29,7 @@ import java.util.EventListener;
* Listener interface invoked when new results are added to the result tree.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Result
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultProcessor.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultProcessor.java
index 9e7b255a..7ffd520a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultProcessor.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultProcessor.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.result;
* Interface for any class that can handle results
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Result oneway - - processes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultUtil.java
index f59e9977..3a394d86 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultUtil.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.Hierarchy;
* Utilities for handling result objects
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Result oneway - - filters
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultWriter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultWriter.java
index bbbec518..39b081c4 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultWriter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ResultWriter.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep;
* Note: these classes need to be rewritten. Contributions welcome!
*
* @author Erich Schubert
+ * @since 0.2
*/
public class ResultWriter implements ResultHandler {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SamplingResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SamplingResult.java
index 973714fe..10ecaf5c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SamplingResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SamplingResult.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Wrapper for storing the current database sample.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf DBIDs
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ScalesResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ScalesResult.java
index 3617eb9d..b89a3dc1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ScalesResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/ScalesResult.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.scales.Scales;
* Class to keep shared scales across visualizers.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf LinearScale
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SelectionResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SelectionResult.java
index 783cd41d..43bbe201 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SelectionResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SelectionResult.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.result;
* DBIDSelection object should be seen as static contents of this result.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf DBIDSelection
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SettingsResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SettingsResult.java
index 6a1f5f91..3b6bb147 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SettingsResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/SettingsResult.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.TrackedPara
* particular result.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class SettingsResult extends BasicResult {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/BasicOutlierScoreMeta.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/BasicOutlierScoreMeta.java
index bb44a657..a150b462 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/BasicOutlierScoreMeta.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/BasicOutlierScoreMeta.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* {@link OutlierScoreMeta} interface.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class BasicOutlierScoreMeta implements OutlierScoreMeta {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/InvertedOutlierScoreMeta.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/InvertedOutlierScoreMeta.java
index 0a55e07d..d8d7f2a3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/InvertedOutlierScoreMeta.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/InvertedOutlierScoreMeta.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.result.outlier;
* Class to signal a value-inverted outlier score, i.e. low values are outliers.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class InvertedOutlierScoreMeta extends BasicOutlierScoreMeta {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OrderingFromRelation.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OrderingFromRelation.java
index 99c0a48e..86911e6b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OrderingFromRelation.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OrderingFromRelation.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.result.OrderingResult;
* Ordering obtained from an outlier score.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses DoubleRelation
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierResult.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierResult.java
index 3aa2337d..daa62fe3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierResult.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierResult.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.result.OrderingResult;
* parts.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.landmark
* @apiviz.composedOf OutlierScoreMeta
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierScoreMeta.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierScoreMeta.java
index 4ce606bf..8f7a0e5c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierScoreMeta.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/OutlierScoreMeta.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.result.Result;
* return {@link Double#NEGATIVE_INFINITY} or {@link Double#POSITIVE_INFINITY}.
*
* @author Erich Schubert
+ * @since 0.3
*/
public interface OutlierScoreMeta extends Result {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/ProbabilisticOutlierScore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/ProbabilisticOutlierScore.java
index bc71379f..2d15dee4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/ProbabilisticOutlierScore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/ProbabilisticOutlierScore.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.result.outlier;
* But the baseline may be different from 0.0!
*
* @author Erich Schubert
+ * @since 0.3
*/
public class ProbabilisticOutlierScore implements OutlierScoreMeta {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/QuotientOutlierScoreMeta.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/QuotientOutlierScoreMeta.java
index 7a5ba0ff..53e9c98f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/QuotientOutlierScoreMeta.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/outlier/QuotientOutlierScoreMeta.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.result.outlier;
* Score for outlier values generated by a quotient.
*
* @author Erich Schubert
+ * @since 0.3
*
*/
public class QuotientOutlierScoreMeta extends BasicOutlierScoreMeta {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/MultipleFilesOutput.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/MultipleFilesOutput.java
index 833e95a2..57bb3454 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/MultipleFilesOutput.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/MultipleFilesOutput.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Manage output to multiple files.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class MultipleFilesOutput implements StreamFactory {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/SingleStreamOutput.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/SingleStreamOutput.java
index 299a665d..764d0e04 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/SingleStreamOutput.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/SingleStreamOutput.java
@@ -35,6 +35,7 @@ import java.util.zip.GZIPOutputStream;
* Class to output all result data to a single stream (e.g. Stdout, single file)
*
* @author Erich Schubert
+ * @since 0.2
*/
public class SingleStreamOutput implements StreamFactory {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/StreamFactory.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/StreamFactory.java
index 2f0b51a4..91800a93 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/StreamFactory.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/StreamFactory.java
@@ -32,6 +32,7 @@ import java.io.PrintStream;
* Note: these classes need to be rewritten. Contributions welcome!
*
* @author Erich Schubert
+ * @since 0.2
*/
public interface StreamFactory {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriteable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriteable.java
index 90e54841..1559971a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriteable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriteable.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.result.textwriter;
* human reading and storage in CSV files.
*
* @author Erich Schubert
+ * @since 0.2
*/
//TODO: split TextWriteable interface into data writing and metadata writing?
public interface TextWriteable {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriter.java
index cca91f75..49aeb2fa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriter.java
@@ -59,8 +59,10 @@ import de.lmu.ifi.dbs.elki.result.ResultUtil;
import de.lmu.ifi.dbs.elki.result.SettingsResult;
import de.lmu.ifi.dbs.elki.result.textwriter.naming.NamingScheme;
import de.lmu.ifi.dbs.elki.result.textwriter.naming.SimpleEnumeratingScheme;
+import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterDoubleArray;
import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterDoubleDoublePair;
import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterIgnore;
+import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterIntArray;
import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterObjectArray;
import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterObjectInline;
import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterPair;
@@ -69,8 +71,8 @@ import de.lmu.ifi.dbs.elki.result.textwriter.writers.TextWriterVector;
import de.lmu.ifi.dbs.elki.utilities.HandlerList;
import de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy.Hierarchy;
import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.TrackedParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.SerializedParameterization;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.TrackedParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ClassParameter;
import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleDoublePair;
import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
@@ -81,6 +83,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* Note: these classes need to be rewritten. Contributions welcome!
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.landmark
* @apiviz.uses TextWriterStream oneway - - writesTo
@@ -107,6 +110,8 @@ public class TextWriter {
writers.insertHandler(Pair.class, new TextWriterPair());
writers.insertHandler(DoubleDoublePair.class, new TextWriterDoubleDoublePair());
writers.insertHandler(FeatureVector.class, trivialwriter);
+ writers.insertHandler(double[].class, new TextWriterDoubleArray());
+ writers.insertHandler(int[].class, new TextWriterIntArray());
// these object can be serialized inline with toString()
writers.insertHandler(String.class, trivialwriter);
writers.insertHandler(Double.class, trivialwriter);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterStream.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterStream.java
index f6476e52..98237e3e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterStream.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterStream.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.HandlerList;
* Representation of an output stream to a text file.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses de.lmu.ifi.dbs.elki.result.textwriter.StreamFactory oneway - -
* wraps
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterWriterInterface.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterWriterInterface.java
index 4d9109eb..ffb36758 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterWriterInterface.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/TextWriterWriterInterface.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException;
* Base class for object writers.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <O> Object type (usually the class itself)
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/NamingScheme.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/NamingScheme.java
index 1524d32a..e8c6285c 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/NamingScheme.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/NamingScheme.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.data.Cluster;
* Naming scheme implementation for clusterings.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Cluster
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/SimpleEnumeratingScheme.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/SimpleEnumeratingScheme.java
index 7aa62404..794c40a2 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/SimpleEnumeratingScheme.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/naming/SimpleEnumeratingScheme.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.data.Clustering;
* as name, and add an enumeration postfix
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses Clustering
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleArray.java
new file mode 100644
index 00000000..cfadd3ef
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleArray.java
@@ -0,0 +1,51 @@
+package de.lmu.ifi.dbs.elki.result.textwriter.writers;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2015
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
+import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
+import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
+
+/**
+ * Write a double array.
+ *
+ * @author Erich Schubert
+ * @since 0.2
+ */
+public class TextWriterDoubleArray extends TextWriterWriterInterface<double[]> {
+ /**
+ * Serialize an object into the inline section.
+ */
+ @Override
+ public void write(TextWriterStream out, String label, double[] v) {
+ StringBuilder buf = new StringBuilder();
+ if(label != null) {
+ buf.append(label).append('=');
+ }
+ if(v != null) {
+ FormatUtil.formatTo(buf, v, " ");
+ }
+ out.inlinePrintNoQuotes(buf.toString());
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleDoublePair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleDoublePair.java
index c827cf7e..75f9394f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleDoublePair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterDoubleDoublePair.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.DoubleDoublePair;
* Write a pair
*
* @author Erich Schubert
+ * @since 0.2
*
*/
public class TextWriterDoubleDoublePair extends TextWriterWriterInterface<DoubleDoublePair> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIgnore.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIgnore.java
index 6f3a67ce..a632d43a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIgnore.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIgnore.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
* Ignore the given object when serializing to text.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class TextWriterIgnore extends TextWriterWriterInterface<Object> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIntArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIntArray.java
new file mode 100644
index 00000000..2e275f46
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterIntArray.java
@@ -0,0 +1,51 @@
+package de.lmu.ifi.dbs.elki.result.textwriter.writers;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2015
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterStream;
+import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
+import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
+
+/**
+ * Write a double array.
+ *
+ * @author Erich Schubert
+ * @since 0.2
+ */
+public class TextWriterIntArray extends TextWriterWriterInterface<int[]> {
+ /**
+ * Serialize an object into the inline section.
+ */
+ @Override
+ public void write(TextWriterStream out, String label, int[] v) {
+ StringBuilder buf = new StringBuilder();
+ if(label != null) {
+ buf.append(label).append('=');
+ }
+ if(v != null) {
+ FormatUtil.formatTo(buf, v, " ");
+ }
+ out.inlinePrintNoQuotes(buf.toString());
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectArray.java
index bfac06c3..67a4635f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectArray.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectArray.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
* Write an object into the inline section, using the objects toString method.
*
* @author Erich Schubert
+ * @since 0.2
*
*/
public class TextWriterObjectArray<T> extends TextWriterWriterInterface<T[]> {
@@ -40,7 +41,7 @@ public class TextWriterObjectArray<T> extends TextWriterWriterInterface<T[]> {
public void write(TextWriterStream out, String label, T[] v) {
StringBuilder buf = new StringBuilder();
if(label != null) {
- buf.append(label).append("=");
+ buf.append(label).append('=');
}
if(v != null) {
for (T o : v) {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectComment.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectComment.java
index 519fd41d..338dfd98 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectComment.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectComment.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
* method.
*
* @author Erich Schubert
+ * @since 0.2
*
*/
public class TextWriterObjectComment extends TextWriterWriterInterface<Object> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectInline.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectInline.java
index 8782e49f..1e5f5268 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectInline.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterObjectInline.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
* Write an object into the inline section, using the objects toString method.
*
* @author Erich Schubert
+ * @since 0.2
*
*/
public class TextWriterObjectInline extends TextWriterWriterInterface<Object> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterPair.java
index 3870dcf6..ff428381 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterPair.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* Write a pair
*
* @author Erich Schubert
+ * @since 0.2
*
*/
public class TextWriterPair extends TextWriterWriterInterface<Pair<?,?>> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterTextWriteable.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterTextWriteable.java
index fe99f668..29c653df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterTextWriteable.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterTextWriteable.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
* Write an object, using the objects own {@link TextWriteable} interface.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses TextWriteable
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterVector.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterVector.java
index 568f4e30..a4b2d0ef 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterVector.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/result/textwriter/writers/TextWriterVector.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.result.textwriter.TextWriterWriterInterface;
* Write an object into the inline section, using the objects toString method.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class TextWriterVector extends TextWriterWriterInterface<Vector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java
index ea5d864d..ba4e385a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Alias.java
@@ -33,6 +33,7 @@ import java.lang.annotation.Target;
* This interface defines alias names for classes.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java
index 205336df..5869ab4c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/BitsUtil.java
@@ -37,6 +37,7 @@ import java.util.Arrays;
* <code>I</code> modify in-place.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public final class BitsUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java
index 8c938e02..e746114d 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ClassGenericsUtil.java
@@ -61,6 +61,8 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* developer should use {@link #instantiate} instead.
* </p>
*
+ * @author Erich Schubert
+ * @since 0.2
*/
public final class ClassGenericsUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java
index a4976b5d..e4f708d9 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/DatabaseUtil.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.index.preprocessed.knn.MaterializeKNNPreprocessor;
* covariances etc.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class DatabaseUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java
index dd3a9ba6..bdddac1d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceLoader.java
@@ -29,7 +29,6 @@ import java.net.URL;
import java.util.Enumeration;
import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
-import de.lmu.ifi.dbs.elki.utilities.io.BufferedLineReader;
/**
* Class that emulates the behavior of an java ServiceLoader, except that the
@@ -37,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.io.BufferedLineReader;
* also we need to do the instantiations our way with the parameterizable API.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class ELKIServiceLoader {
/**
@@ -79,11 +79,35 @@ public class ELKIServiceLoader {
Enumeration<URL> configfiles = cl.getResources(fullName);
while(configfiles.hasMoreElements()) {
URL nextElement = configfiles.nextElement();
+ char[] buf = new char[0x4000];
try (
- InputStreamReader is = new InputStreamReader(nextElement.openStream(), "utf-8");
- BufferedLineReader r = new BufferedLineReader(is)) {
- while(r.nextLine()) {
- parseLine(parent, r.getBuffer(), nextElement);
+ InputStreamReader is = new InputStreamReader(nextElement.openStream(), "UTF-8");) {
+ int start = 0, cur = 0, valid = is.read(buf, 0, buf.length);
+ char c;
+ while(cur < valid) {
+ // Find newline or end
+ while(cur < valid && (c = buf[cur]) != '\n' && c != '\r') {
+ cur++;
+ }
+ if(cur == valid && is.ready()) {
+ // Move consumed buffer contents:
+ if(start > 0) {
+ System.arraycopy(buf, start, buf, 0, valid - start);
+ valid -= start;
+ cur -= start;
+ start = 0;
+ }
+ else if(valid == buf.length) {
+ throw new IOException("Buffer size exceeded. Maximum line length in service files is: " + buf.length + " in file: " + fullName);
+ }
+ valid = is.read(buf, valid, buf.length - valid);
+ continue;
+ }
+ parseLine(parent, buf, start, cur, nextElement);
+ while(cur < valid && ((c = buf[cur]) == '\n' || c == '\r')) {
+ cur++;
+ }
+ start = cur;
}
}
catch(IOException x) {
@@ -103,38 +127,33 @@ public class ELKIServiceLoader {
* @param line Line to read
* @param nam File name for error reporting
*/
- private static void parseLine(Class<?> parent, CharSequence line, URL nam) {
- if(line == null) {
- return;
- }
- int begin = 0, end = line.length();
- while(begin < end && line.charAt(begin) == ' ') {
+ private static void parseLine(Class<?> parent, char[] line, int begin, int end, URL nam) {
+ while(begin < end && line[begin] == ' ') {
begin++;
}
- if(begin >= end || line.charAt(begin) == '#') {
+ if(begin >= end || line[begin] == '#') {
return; // Empty/comment lines are okay, continue
}
- assert(begin == 0 || line.charAt(begin - 1) == ' ');
// Find end of class name:
int cend = begin + 1;
- while(cend < end && line.charAt(cend) != ' ') {
+ while(cend < end && line[cend] != ' ') {
cend++;
}
// Class name:
- String cname = line.subSequence(begin, cend).toString();
+ String cname = new String(line, begin, cend - begin);
ELKIServiceRegistry.register(parent, cname);
for(int abegin = cend + 1, aend = -1; abegin < end; abegin = aend + 1) {
// Skip whitespace:
- while(abegin < end && line.charAt(abegin) == ' ') {
+ while(abegin < end && line[abegin] == ' ') {
abegin++;
}
// Find next whitespace:
aend = abegin + 1;
- while(aend < end && line.charAt(aend) != ' ') {
+ while(aend < end && line[aend] != ' ') {
aend++;
}
if(abegin < aend) {
- ELKIServiceRegistry.registerAlias(parent, line.subSequence(abegin, aend).toString(), cname);
+ ELKIServiceRegistry.registerAlias(parent, new String(line, abegin, aend - abegin), cname);
}
}
return;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java
index 512de9d1..841dd41a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceRegistry.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* Registry of available implementations in ELKI.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ELKIServiceRegistry {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java
index 1bd139c4..05083a60 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ELKIServiceScanner.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.logging.Logging;
* A collection of inspection-related utility functions.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class ELKIServiceScanner {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java
index 5ad6d392..17a0e2c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FileUtil.java
@@ -35,6 +35,7 @@ import java.util.zip.GZIPInputStream;
* Various static helper methods to deal with files and file names.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class FileUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java
index ad385bcb..dc634eb2 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/FormatUtil.java
@@ -38,6 +38,10 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
/**
* Utility methods for output formatting of various number objects
+ *
+ * @author Arthur Zimek
+ * @author Erich Schubert
+ * @since 0.2
*/
public final class FormatUtil {
/**
@@ -321,22 +325,33 @@ public final class FormatUtil {
/**
* Formats the int array a for printing purposes.
*
+ * @param buf The buffer to serialize to
* @param a the int array to be formatted
- * @param sep the separator between the single values of the float array, e.g.
- * ','
- * @return a String representing the int array a
+ * @param sep the separator between the single values of the array, e.g. ','
+ * @return The output buffer {@code buf}
*/
- public static String format(int[] a, String sep) {
+ public static StringBuilder formatTo(StringBuilder buf, int[] a, String sep) {
if(a.length == 0) {
- return "";
+ return buf;
}
- StringBuilder buffer = new StringBuilder();
- buffer.append(a[0]);
+ buf.append(a[0]);
for(int i = 1; i < a.length; i++) {
- buffer.append(sep);
- buffer.append(a[i]);
+ buf.append(sep);
+ buf.append(a[i]);
}
- return buffer.toString();
+ return buf;
+ }
+
+ /**
+ * Formats the int array a for printing purposes.
+ *
+ * @param a the int array to be formatted
+ * @param sep the separator between the single values of the array, e.g. ','
+ * @return a String representing the int array a
+ */
+ public static String format(int[] a, String sep) {
+ return (a == null) ? "null" : (a.length == 0) ? "" : //
+ formatTo(new StringBuilder(), a, sep).toString();
}
/**
@@ -1302,8 +1317,8 @@ public final class FormatUtil {
* Infinity pattern, with any capitalization
*/
private static final char[] INFINITY_PATTERN = { //
- 'I', 'n', 'f', 'i', 'n', 'i', 't', 'y', //
- 'i', 'N', 'F', 'I', 'N', 'I', 'T', 'Y' };
+ 'I', 'n', 'f', 'i', 'n', 'i', 't', 'y', //
+ 'i', 'N', 'F', 'I', 'N', 'I', 'T', 'Y' };
/** Length of pattern */
private static final int INFINITY_LENGTH = INFINITY_PATTERN.length >> 1;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java
index e85d9bbd..f82ba9f3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/HandlerList.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* query object can be cast to the handlers restriction class.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <H> Parent class/interface for all handlers
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java
index 5ed07ec3..24a94ec3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/Util.java
@@ -33,6 +33,10 @@ import java.util.Random;
* classes.
*
* @see de.lmu.ifi.dbs.elki.utilities
+ *
+ * @author Arthur Zimek
+ * @author Erich Schubert
+ * @since 0.2
*/
public final class Util {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java
index 070876ca..1d852688 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/QuickSelect.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.database.ids.ModifiableDoubleDBIDList;
* Charles Antony Richard Hoare
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.uses ArrayModifiableDBIDs
* @apiviz.uses List
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java
index 5a2a1056..fd8624de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayAdapter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Adapter for array-like things. For example, arrays and lists.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Item type
* @param <A> Array object type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java
index a6881e43..640d5c70 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayDBIDsAdapter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
* Use a DBID array in a generic array-like context.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses ArrayDBIDs
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java
index dc4f3b1c..386243f6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ArrayLikeUtil.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* reorganizing the objects into a real array.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
* @apiviz.composedOf ArrayAdapter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java
index 2f827bb3..ca225b41 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArray.java
@@ -27,12 +27,28 @@ import java.util.Arrays;
/**
* Array of double values.
*
- * TODO: add remove, sort etc.
- *
* @author Erich Schubert
+ * @since 0.7.0
*/
public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> {
/**
+ * Maximum array size permitted by Java.
+ *
+ * This is JVM dependent, but 2^31 - 5 is the usual OpenJDK8 value.
+ */
+ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 5;
+
+ /**
+ * Last value where we can grow by 50%.
+ */
+ private static final int LAST_GROW_SIZE = 0x5555_5551;
+
+ // Assert that these values match.
+ static {
+ assert (LAST_GROW_SIZE + (LAST_GROW_SIZE >>> 1) + 1 <= MAX_ARRAY_SIZE);
+ }
+
+ /**
* (Reused) store for numerical attributes.
*/
public double[] data;
@@ -55,6 +71,12 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> {
* @param initialsize Initial size.
*/
public DoubleArray(int initialsize) {
+ if(initialsize < 0) {
+ initialsize = 11;
+ }
+ else if(initialsize > MAX_ARRAY_SIZE) {
+ initialsize = MAX_ARRAY_SIZE;
+ }
this.data = new double[initialsize];
this.size = 0;
}
@@ -80,18 +102,31 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> {
}
/**
- * Add a numeric attribute value.
+ * Append a value.
*
* @param attribute Attribute value.
*/
public void add(double attribute) {
if(data.length == size) {
- data = Arrays.copyOf(data, size << 1);
+ grow();
}
data[size++] = attribute;
}
/**
+ * Grow the current array.
+ *
+ * @throws OutOfMemoryError
+ */
+ private void grow() throws OutOfMemoryError {
+ if(data.length == MAX_ARRAY_SIZE) {
+ throw new OutOfMemoryError("Array size has reached the Java maximum.");
+ }
+ final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1);
+ data = Arrays.copyOf(data, newsize);
+ }
+
+ /**
* Get the value at this position.
*
* @param pos Position
@@ -144,8 +179,12 @@ public class DoubleArray implements NumberArrayAdapter<Double, DoubleArray> {
*/
public void insert(int pos, double val) {
if(size == data.length) {
- double[] oldd = data;
- data = new double[size << 1];
+ if(data.length == MAX_ARRAY_SIZE) {
+ throw new OutOfMemoryError("Array size has reached the Java maximum.");
+ }
+ final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1);
+ final double[] oldd = data;
+ data = new double[newsize];
System.arraycopy(oldd, 0, data, 0, pos);
System.arraycopy(oldd, pos, data, pos + 1, size - pos);
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java
index 719aea8a..221335e9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/DoubleArrayAdapter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Use a double array as, well, double array in the ArrayAdapter API.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.exclude
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java
index 4dfd1ecb..047e5f06 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ExtendedArray.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Class to extend an array with a single element virtually.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <T> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java
index 59df30ad..338358f1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FeatureVectorAdapter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.FeatureVector;
* Use the static instance from {@link ArrayLikeUtil}!
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <F> Feature type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java
index 487f2d84..1c33872d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FlatMatrixAdapter.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Matrix;
* Use a matrix as array, by flattening it into a sequence.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.exclude
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java
index fd82178a..6f4bfa78 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/FloatArrayAdapter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Use a double array as, well, double array in the ArrayAdapter API.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.exclude
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java
index 3766492d..d81d68f3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IdentityArrayAdapter.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Use the static instance from {@link ArrayLikeUtil}!
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Item type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java
new file mode 100644
index 00000000..15393114
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/IntegerArray.java
@@ -0,0 +1,264 @@
+package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2015
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import java.util.Arrays;
+
+/**
+ * Array of int values.
+ *
+ * @author Erich Schubert
+ * @since 0.7.0
+ */
+public class IntegerArray implements NumberArrayAdapter<Integer, IntegerArray> {
+ /**
+ * Maximum array size permitted by Java.
+ *
+ * This is JVM dependent, but 2^31 - 5 is the usual OpenJDK8 value.
+ */
+ private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 5;
+
+ /**
+ * Last value where we can grow by 50%.
+ */
+ private static final int LAST_GROW_SIZE = 0x5555_5551;
+
+ // Assert that these values match.
+ static {
+ assert (LAST_GROW_SIZE + (LAST_GROW_SIZE >>> 1) + 1 <= MAX_ARRAY_SIZE);
+ }
+
+ /**
+ * (Reused) store for numerical attributes.
+ */
+ public int[] data;
+
+ /**
+ * Number of numerical attributes.
+ */
+ public int size;
+
+ /**
+ * Constructor.
+ */
+ public IntegerArray() {
+ this(11);
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param initialsize Initial size.
+ */
+ public IntegerArray(int initialsize) {
+ if(initialsize < 0) {
+ initialsize = 11;
+ }
+ else if(initialsize > MAX_ARRAY_SIZE) {
+ initialsize = MAX_ARRAY_SIZE;
+ }
+ this.data = new int[initialsize];
+ this.size = 0;
+ }
+
+ /**
+ * Constructor from an existing array.
+ *
+ * The new array will be allocated as small as possible, so modifications will
+ * cause a resize!
+ *
+ * @param existing Existing array
+ */
+ public IntegerArray(IntegerArray existing) {
+ this.data = Arrays.copyOf(existing.data, existing.size);
+ this.size = existing.size;
+ }
+
+ /**
+ * Reset the numeric attribute counter.
+ */
+ public void clear() {
+ size = 0;
+ }
+
+ /**
+ * Append a value.
+ *
+ * @param attribute Attribute value.
+ */
+ public void add(int attribute) {
+ if(data.length == size) {
+ grow();
+ }
+ data[size++] = attribute;
+ }
+
+ /**
+ * Grow the current array.
+ *
+ * @throws OutOfMemoryError
+ */
+ private void grow() throws OutOfMemoryError {
+ if(data.length == MAX_ARRAY_SIZE) {
+ throw new OutOfMemoryError("Array size has reached the Java maximum.");
+ }
+ final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1);
+ data = Arrays.copyOf(data, newsize);
+ }
+
+ /**
+ * Get the value at this position.
+ *
+ * @param pos Position
+ * @return Value
+ */
+ public int get(int pos) {
+ if(pos < 0 || pos >= size) {
+ throw new ArrayIndexOutOfBoundsException(pos);
+ }
+ return data[pos];
+ }
+
+ /**
+ * Set the value at this position.
+ *
+ * @param pos Position
+ * @param value Value
+ */
+ public void set(int pos, int value) {
+ if(pos < 0 || pos > size) {
+ throw new ArrayIndexOutOfBoundsException(pos);
+ }
+ if(pos == size) {
+ add(value);
+ return;
+ }
+ data[pos] = value;
+ }
+
+ /**
+ * Remove a range from the array.
+ *
+ * @param start Start
+ * @param len Length
+ */
+ public void remove(int start, int len) {
+ final int end = start + len;
+ if(end > size) {
+ throw new ArrayIndexOutOfBoundsException(size);
+ }
+ System.arraycopy(data, end, data, start, size - end);
+ size -= len;
+ }
+
+ /**
+ * Insert a value at the given position.
+ *
+ * @param pos Insert position
+ * @param val Value to insert
+ */
+ public void insert(int pos, int val) {
+ if(size == data.length) {
+ if(data.length == MAX_ARRAY_SIZE) {
+ throw new OutOfMemoryError("Array size has reached the Java maximum.");
+ }
+ final int newsize = (size >= LAST_GROW_SIZE) ? MAX_ARRAY_SIZE : (size + (size >> 1) + 1);
+ final int[] oldd = data;
+ data = new int[newsize];
+ System.arraycopy(oldd, 0, data, 0, pos);
+ System.arraycopy(oldd, pos, data, pos + 1, size - pos);
+ }
+ else {
+ System.arraycopy(data, pos, data, pos + 1, size - pos);
+ }
+ data[pos] = val;
+ size++;
+ }
+
+ /**
+ * Get the size of the array.
+ *
+ * @return Size
+ */
+ public int size() {
+ return size;
+ }
+
+ /**
+ * Sort the contents.
+ */
+ public void sort() {
+ Arrays.sort(data, 0, size);
+ }
+
+ // NumberArrayAdapter:
+
+ @Override
+ public int size(IntegerArray array) {
+ return array.size;
+ }
+
+ @Override
+ public Integer get(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return array.data[off];
+ }
+
+ @Override
+ public double getDouble(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return (double) array.data[off];
+ }
+
+ @Override
+ public float getFloat(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return (float) array.data[off];
+ }
+
+ @Override
+ public int getInteger(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return array.data[off];
+ }
+
+ @Override
+ public short getShort(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return (short) array.data[off];
+ }
+
+ @Override
+ public long getLong(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return (long) array.data[off];
+ }
+
+ @Override
+ public byte getByte(IntegerArray array, int off) throws IndexOutOfBoundsException {
+ return (byte) array.data[off];
+ }
+
+ /**
+ * Return a copy of the contents as array.
+ *
+ * @return Copy of the contents.
+ */
+ public int[] toArray() {
+ return Arrays.copyOf(data, size);
+ }
+} \ No newline at end of file
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java
index 242caa48..7e92978a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/ListArrayAdapter.java
@@ -30,6 +30,7 @@ import java.util.List;
* Use the static instance from {@link ArrayLikeUtil}!
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Data object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java
index 532862cc..c0777fbd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberArrayAdapter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Adapter for arrays of numbers, to avoid boxing.
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <N> Number type
* @param <A> Array type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java
index e712ac9a..4c0fec71 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberListArrayAdapter.java
@@ -32,6 +32,7 @@ import java.util.List;
* Use the static instance from {@link ArrayLikeUtil}!
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @param <T> Data object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java
index 8192f3b8..bb66c33e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/NumberVectorAdapter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.data.NumberVector;
* Use the static instance from {@link ArrayLikeUtil}!
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class NumberVectorAdapter implements NumberArrayAdapter<Number, NumberVector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java
index 3d8e8c3e..cd905948 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SingleSubsetArrayAdapter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Single-item subset adapter
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Entry type
* @param <A> Array type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java
index 077a0e8d..1299d178 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetArrayAdapter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Subset array adapter (allows reordering and projection).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Entry type
* @param <A> Array type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java
index 8a1a064b..7d1d1890 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/SubsetNumberArrayAdapter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike;
* Subset array adapter (allows reordering and projection)
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <T> Entry type
* @param <A> Array type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java
index 26da061a..48705ece 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arraylike/VectorAdapter.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
* Use the static instance from {@link ArrayLikeUtil}!
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class VectorAdapter implements NumberArrayAdapter<Double, Vector> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java
index a48a175b..47bc1281 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/DoubleIntegerArrayQuickSort.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays;
* best of 5 heuristic.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class DoubleIntegerArrayQuickSort {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java
index ece63ea6..c1b64097 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerArrayQuickSort.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* objects.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.uses IntegerComparator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java
index 11f79e45..2cb8e755 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/arrays/IntegerComparator.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.arrays;
* Interface for comparing two Integer.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface IntegerComparator {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java
index 5e991156..294d7220 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hash/Unique.java
@@ -33,6 +33,7 @@ import java.util.Arrays;
* allows retrieving existing values.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @param <E>
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java
index 968251d6..54f6821b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has UnsortedIter
* @param <K> Key type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java
index 8cd4ef0a..4a1cc8a9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparableMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has UnsortedIter
* @param <K> Key type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java
index f3cc6d56..78c00bc5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has UnsortedIter
* @param <K> Key type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java
index 12a15d46..466c3e7b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ComparatorMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has UnsortedIter
* @param <K> Key type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java
index ba853032..76927fc3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap for double values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java
index 2adc17fd..96ca70c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap interface, for double keys and int values.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java
index b0e62c30..ae40da63 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java
index d94b63c1..bfc21240 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleIntegerMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java
index 551c4131..f4011bcd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap interface, for double keys and long values.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java
index b0f0af50..88a7ee7c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java
index fcc3526d..7fc2a5dd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleLongMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java
index d1a6ed0f..92a1ba9c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java
index f4c53260..3c8eda0b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java
index 77a380bf..a822cb64 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap interface, for double keys and V values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
* @param <V> Value type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java
index 96b03a67..6e8e5c02 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UnsortedIter
* @param <V> Value type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java
index c04fb7cb..b87e6281 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoubleObjectMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UnsortedIter
* @param <V> Value type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java
index 342c064d..cd8ef1cb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/DoublePriorityObject.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap;
* the priority.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Stored object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java
index 5f6b27c2..fe8aaa53 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/Heap.java
@@ -36,6 +36,7 @@ import java.util.Comparator;
* O(n log n). This is implemented via a simple validTo counter.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <E> Element type. Should be {@link java.lang.Comparable} or a
* {@link java.util.Comparator} needs to be given.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java
index c7e897d8..4a1a7ca7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap for int values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java
index a4e54147..54af796b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java
index 0e56e2e1..17ece116 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has UnsortedIter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java
index defacf83..08eecf02 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap interface, for int keys and V values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
* @param <V> Value type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java
index ce3d7809..7f62c277 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMaxHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UnsortedIter
* @param <V> Value type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java
index c087d7d2..b46dadaa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerObjectMinHeap.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.math.MathUtil;
* Binary heap for primitive types.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.has UnsortedIter
* @param <V> Value type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java
index c809e113..4e7c21c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/IntegerPriorityObject.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.heap;
* the priority.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Stored object type.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java
index 8b00dbbe..20ee0547 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/ObjectHeap.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* Basic in-memory heap for K values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has UnsortedIter
* @param <K> Key type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java
index f9628f1a..ea1a356a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedHeap.java
@@ -33,6 +33,7 @@ import java.util.List;
* elements.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <E> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java
index 88036e00..83261ef5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TiedTopBoundedUpdatableHeap.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* elements.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <E> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java
index 9fd95a1b..b884c58a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedHeap.java
@@ -30,6 +30,7 @@ import java.util.Comparator;
* {@code k} Elements only.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <E> Element type. Should be {@link Comparable} or a {@link Comparator}
* needs to be given.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java
index 80b5768a..ff0dd369 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/TopBoundedUpdatableHeap.java
@@ -30,6 +30,7 @@ import java.util.Comparator;
* {@code k} Elements only.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <E> Element type. Should be {@link Comparable} or a {@link Comparator}
* needs to be given.
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java
index be089725..4af70021 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/heap/UpdatableHeap.java
@@ -32,6 +32,7 @@ import java.util.Comparator;
* A heap as used in OPTICS that allows updating entries.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java
index 67876387..aac710e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/FilteredIter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy;
* Filtered iterator.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Hierarchy.Iter
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java
index 59ec00f0..2f478866 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/HashMapHierarchy.java
@@ -29,6 +29,7 @@ import java.util.HashMap;
* Centralized hierarchy implementation, using a HashMap of Lists.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @param <O> Object type (arbitrary!)
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java
index 6c932451..04d1cd5b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/Hierarchy.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy;
* object, i.e. {@code hierarchy.iterChildren(object);}.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Iter
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java
index 3496e41c..4b3af7c2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/ModifiableHierarchy.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy;
* Modifiable Hierarchy.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java
index 52ecc0e3..93aa71b7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/hierarchy/StackedIter.java
@@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.hierarchy;
* Filtered iterator.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Hierarchy
* @apiviz.composedOf Hierarchy.Iter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java
index 9c2f3a60..d07e078b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjDynamicHistogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* into the histogram.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <T> Data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java
index 709f7ceb..743bb179 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractObjStaticHistogram.java
@@ -30,6 +30,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* left and right.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @param <T> Data type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java
index b0728ddb..a1a81174 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/AbstractStaticHistogram.java
@@ -31,6 +31,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* adapted for multiple use cases.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public abstract class AbstractStaticHistogram implements Histogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java
index 7ea5b623..4e0081d5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleArrayStaticHistogram.java
@@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* primitive in Java.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public final class DoubleArrayStaticHistogram extends AbstractObjStaticHistogram<double[]> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java
index 2f2e6a02..88a70ad9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleDynamicHistogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* bins to the data fed into the histogram.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class DoubleDynamicHistogram extends DoubleStaticHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java
index 9a26c264..84f06713 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleHistogram.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* Histogram storing double values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java
index 63ba3e21..6d4dc22b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/DoubleStaticHistogram.java
@@ -32,6 +32,7 @@ import java.util.Arrays;
* left and right.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class DoubleStaticHistogram extends AbstractStaticHistogram implements DoubleHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java
index 261c7a7f..007ef6e6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatDynamicHistogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* bins to the data fed into the histogram.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class FloatDynamicHistogram extends FloatStaticHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java
index 81edb88c..18e992b8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatHistogram.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* Histogram storing float values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java
index 6e4d78f5..079e8e0e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/FloatStaticHistogram.java
@@ -32,6 +32,7 @@ import java.util.Arrays;
* left and right.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class FloatStaticHistogram extends AbstractStaticHistogram implements FloatHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java
index a8fd60c0..1632fc45 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/Histogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.ArrayIter;
* to be shared for primitive types, too!
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java
index d3d278ee..8e838b4e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntArrayStaticHistogram.java
@@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* primitive in Java.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public final class IntArrayStaticHistogram extends AbstractObjStaticHistogram<int[]> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java
index 4d3a5045..13ab7b35 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntDynamicHistogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* bins to the data fed into the histogram.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class IntDynamicHistogram extends IntStaticHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java
index d448c852..ce2b39aa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntHistogram.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* Histogram storing int values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java
index bd367837..3cbe83bc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/IntStaticHistogram.java
@@ -32,6 +32,7 @@ import java.util.Arrays;
* left and right.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class IntStaticHistogram extends AbstractStaticHistogram implements IntHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java
index 907fa7ca..a922935a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongArrayStaticHistogram.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* primitive in Java.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public final class LongArrayStaticHistogram extends AbstractObjStaticHistogram<long[]> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java
index 78385a30..cc5b5dc6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongDynamicHistogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* bins to the data fed into the histogram.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class LongDynamicHistogram extends LongStaticHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java
index ec1ba994..893e0f47 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongHistogram.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* Histogram storing long values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java
index ae37dbcc..9cc201ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/LongStaticHistogram.java
@@ -32,6 +32,7 @@ import java.util.Arrays;
* left and right.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class LongStaticHistogram extends AbstractStaticHistogram implements LongHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java
index f3d054cd..5adcc9bd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/MeanVarianceStaticHistogram.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.math.MeanVariance;
* left and right.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.composedOf MeanVariance
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java
index e1d75b76..2ce2926f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ObjHistogram.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* Basic interface for object based histograms (static and flexible).
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java
index 8fd1ffbd..d0a932a1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortDynamicHistogram.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
* bins to the data fed into the histogram.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class ShortDynamicHistogram extends ShortStaticHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java
index 706d43e8..14e1ec55 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortHistogram.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.histogram;
* Histogram storing short values.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.has Iter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java
index 4c49f595..ebfc6365 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/histogram/ShortStaticHistogram.java
@@ -32,6 +32,7 @@ import java.util.Arrays;
* left and right.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class ShortStaticHistogram extends AbstractStaticHistogram implements ShortHistogram {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java
index d3deb054..3f26f417 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayIter.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator;
* Array iterators can also go backwards and seek.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java
index 175ccfb2..441eaee4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/ArrayListIter.java
@@ -32,6 +32,7 @@ import java.util.List;
* access and seeking (i.e. ArrayLists, but not Linked Lists!)
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java
index d362ff37..23cf34fe 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/Iter.java
@@ -52,6 +52,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator;
* </pre>
*
* @author Erich Schubert
+ * @since 0.5.0
*
* @apiviz.landmark
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java
index b7b69cc7..557870de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/iterator/MIter.java
@@ -40,6 +40,7 @@ package de.lmu.ifi.dbs.elki.utilities.datastructures.iterator;
* </pre>
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.excludeSubtypes
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java
index bbba1c8e..55b0b561 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFind.java
@@ -27,9 +27,10 @@ import de.lmu.ifi.dbs.elki.database.ids.DBIDRef;
import de.lmu.ifi.dbs.elki.database.ids.DBIDs;
/**
- * Union-find implementations in ELKI
+ * Union-find implementations in ELKI, for DBID objects.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public interface UnionFind {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java
index ee403a66..38ec2559 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/UnionFindUtil.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.StaticDBIDs;
* Union-find algorithm factory, to choose the best implementation.
*
* @author Erich Schubert
+ * @since 0.7.0
*/
public class UnionFindUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java
new file mode 100644
index 00000000..b7fc8478
--- /dev/null
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionInteger.java
@@ -0,0 +1,174 @@
+package de.lmu.ifi.dbs.elki.utilities.datastructures.unionfind;
+
+/*
+ This file is part of ELKI:
+ Environment for Developing KDD-Applications Supported by Index-Structures
+
+ Copyright (C) 2016
+ Ludwig-Maximilians-Universität München
+ Lehr- und Forschungseinheit für Datenbanksysteme
+ ELKI Development Team
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program 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 Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import java.util.Arrays;
+
+import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
+import gnu.trove.list.TIntList;
+import gnu.trove.list.array.TIntArrayList;
+
+/**
+ * Union-find algorithm for primitive integers, with optimizations.
+ *
+ * This is the weighted quick union approach, weighted by count and using
+ * path-halving for optimization.
+ *
+ * Reference:
+ * <p>
+ * R. Sedgewick<br />
+ * 1.3 Union-Find Algorithms<br />
+ * Algorithms in C, Parts 1-4
+ * </p>
+ *
+ * @author Erich Schubert
+ * @since 0.7.0
+ */
+@Reference(authors = "R. Sedgewick", //
+title = "1.3 Union-Find Algorithms", //
+booktitle = "Algorithms in C, Parts 1-4")
+public class WeightedQuickUnionInteger {
+ /**
+ * Number of used indexes.
+ */
+ private int used;
+
+ /**
+ * Parent element
+ */
+ private int[] parent;
+
+ /**
+ * Weight, for optimization.
+ */
+ private int[] weight;
+
+ /**
+ * Initial size.
+ */
+ private static final int INITIAL_SIZE = 51;
+
+ /**
+ * Constructor.
+ */
+ public WeightedQuickUnionInteger() {
+ weight = new int[INITIAL_SIZE];
+ parent = new int[INITIAL_SIZE];
+ }
+
+ /**
+ * Occupy the next unused index.
+ *
+ * @param weight Initial weight.
+ * @return Next unused index.
+ */
+ public int nextIndex(int weight) {
+ if(used == parent.length) {
+ int nsize = used + (used >> 1);
+ this.weight = Arrays.copyOf(this.weight, nsize);
+ this.parent = Arrays.copyOf(this.parent, nsize);
+ }
+ this.weight[used] = weight;
+ this.parent[used] = used;
+ return used++;
+ }
+
+ /**
+ * Find the parent of an object.
+ *
+ * @param cur Current entry
+ * @return Parent entry
+ */
+ public int find(int cur) {
+ assert (cur >= 0 && cur < parent.length);
+ int p = parent[cur], tmp;
+ while(cur != p) {
+ tmp = p;
+ p = parent[cur] = parent[p]; // Perform simple path compression.
+ cur = tmp;
+ }
+ return cur;
+ }
+
+ /**
+ * Join the components of elements p and q.
+ *
+ * @param first First element
+ * @param second Second element
+ * @return Component id.
+ */
+ public int union(int first, int second) {
+ int firstComponent = find(first), secondComponent = find(second);
+ if(firstComponent == secondComponent) {
+ return firstComponent;
+ }
+ final int w1 = weight[firstComponent], w2 = weight[secondComponent];
+ if(w1 > w2) {
+ parent[secondComponent] = firstComponent;
+ weight[firstComponent] += w2;
+ return firstComponent;
+ }
+ else {
+ parent[firstComponent] = secondComponent;
+ weight[secondComponent] += w1;
+ return secondComponent;
+ }
+ }
+
+ /**
+ * Test if two components are connected.
+ *
+ * @param first First element
+ * @param second Second element
+ * @return {@code true} if they are in the same component.
+ */
+ public boolean isConnected(int first, int second) {
+ return find(first) == find(second);
+ }
+
+ /**
+ * Collect all component root elements.
+ *
+ * @return Root elements
+ */
+ public TIntList getRoots() {
+ TIntList roots = new TIntArrayList();
+ for(int i = 0; i < used; i++) {
+ // roots or one element in component
+ if(parent[i] == i) {
+ roots.add(i);
+ }
+ }
+ return roots;
+ }
+
+ /**
+ * Number of allocated indexes.
+ *
+ * @return Index number.
+ */
+ public int size() {
+ return used;
+ }
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java
index 60c719e2..5440e2b5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionRangeDBIDs.java
@@ -51,6 +51,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Evgeniy Faerman
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "R. Sedgewick", //
title = "1.3 Union-Find Algorithms", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java
index 0e4dd24b..9ed8d618 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/datastructures/unionfind/WeightedQuickUnionStaticDBIDs.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
*
* @author Evgeniy Faerman
* @author Erich Schubert
+ * @since 0.7.0
*/
@Reference(authors = "R. Sedgewick", //
title = "1.3 Union-Find Algorithms", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java
index 163af834..1b4963bd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Description.java
@@ -33,6 +33,7 @@ import java.lang.annotation.Target;
* Class/algorithm description
*
* @author Erich Schubert
+ * @since 0.3
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java
index 0fbc3b96..6caa488b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/DocumentationUtil.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.documentation;
* Utilities for extracting documentation from class annotations.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses de.lmu.ifi.dbs.elki.utilities.documentation.Title
* @apiviz.uses de.lmu.ifi.dbs.elki.utilities.documentation.Description
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java
index 9c84661e..9e8a37ff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Reference.java
@@ -33,6 +33,7 @@ import java.lang.annotation.Target;
* Annotation to specify a reference.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java
index 29955acf..a1725b64 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Restricted.java
@@ -34,6 +34,7 @@ import java.lang.annotation.Target;
* associated patents, and therefore must not be included in the release.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java
index 77889f03..5e7af068 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/documentation/Title.java
@@ -33,6 +33,7 @@ import java.lang.annotation.Target;
* Simple interface to provide a nicer title for the class.
*
* @author Erich Schubert
+ * @since 0.3
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java
index 994b8a1b..12e15692 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVoting.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble;
* Interface for ensemble voting rules
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java
index 0b4c245f..f0238cc1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingInverseMultiplicative.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* {@code 1-product(1-s_i)}
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class EnsembleVotingInverseMultiplicative implements EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java
index 67e86277..ba59c1c1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMax.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble;
* Simple combination rule, by taking the maximum.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class EnsembleVotingMax implements EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java
index 8eec61e4..bf26f9ed 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMean.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble;
* Simple combination rule, by taking the mean
*
* @author Erich Schubert
+ * @since 0.2
*/
public class EnsembleVotingMean implements EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java
index ddd81d40..d48bd474 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMedian.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* Note: median is very similar to a <em>majority voting</em>!
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class EnsembleVotingMedian implements EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java
index 99f193c1..2916be9b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMin.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.ensemble;
* Simple combination rule, by taking the minimum.
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class EnsembleVotingMin implements EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java
index 5e4f34cd..adfa5b71 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/ensemble/EnsembleVotingMultiplicative.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* {@code product(s_i)}
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class EnsembleVotingMultiplicative implements EnsembleVoting {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java
index b6a56a48..82632083 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/APIViolationException.java
@@ -36,6 +36,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions;
* the Java compiler).
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class APIViolationException extends AbortException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java
index 678abdd9..764c68e8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/AbortException.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions;
* Exception for aborting some process and transporting a message.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public class AbortException extends RuntimeException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java
index 68560813..c0302f97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ExceptionMessages.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions;
* Interface to collect exception messages that are used in several cases.
*
* @author Arthur Zimek
+ * @since 0.2
*/
public interface ExceptionMessages {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java
index 89f33361..ac116a38 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/NotImplementedException.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions;
* See {@link ExceptionMessages} for common explanations.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class NotImplementedException extends AbortException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java
index f44c11b9..1275c6ae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/ObjectNotFoundException.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.database.ids.DBID;
* Exception thrown when the requested object was not found in the database.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class ObjectNotFoundException extends RuntimeException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java
index ee00ff06..c004e401 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/exceptions/UnableToComplyException.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.exceptions;
* General Exception to state inability to execute an operation.
*
* @author Arthur Zimek
+ * @since 0.2
*/
@SuppressWarnings("serial")
public class UnableToComplyException extends Exception {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java
index b93c28bf..d387093e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/BufferedLineReader.java
@@ -28,12 +28,13 @@ import java.io.InputStreamReader;
/**
* Class for buffered IO, avoiding some of the overheads of the Java API.
- *
+ *
* The main difference to the standard Java API is that this implementation will
* reuse the buffer. <b>After a call to {@code nextLine()}, the buffer will be
* overwitten!</b>
- *
+ *
* @author Erich Schubert
+ * @since 0.7.0
*/
public class BufferedLineReader implements AutoCloseable {
/**
@@ -44,7 +45,7 @@ public class BufferedLineReader implements AutoCloseable {
/**
* The buffer we read the data into.
*/
- protected StringBuilder buf = new StringBuilder();
+ protected StringBuilder buf = new StringBuilder(1024);
/**
* Current line number.
@@ -98,9 +99,9 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Reset to a new line reader.
- *
+ *
* <b>A previous reader will not be closed automatically!</b>
- *
+ *
* @param r New reader
*/
public void reset(LineReader r) {
@@ -110,9 +111,9 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Reset to a new line reader.
- *
+ *
* <b>A previous stream will not be closed automatically!</b>
- *
+ *
* @param in New input stream reader
*/
public void reset(InputStream in) {
@@ -122,9 +123,9 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Reset to a new line reader.
- *
+ *
* <b>A previous stream will not be closed automatically!</b>
- *
+ *
* @param in New input stream reader
*/
public void reset(InputStreamReader in) {
@@ -134,9 +135,9 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Get the reader buffer.
- *
+ *
* <b>After a call to {@code nextLine()}, the buffer will be overwitten!</b>
- *
+ *
* @return Buffer.
*/
public CharSequence getBuffer() {
@@ -145,7 +146,7 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Get the current line number.
- *
+ *
* @return Current line number
*/
public int getLineNumber() {
@@ -154,7 +155,7 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Read the next line.
- *
+ *
* @return {@code true} if another line was read successfully.
* @throws IOException on IO errors.
*/
@@ -179,7 +180,7 @@ public class BufferedLineReader implements AutoCloseable {
/**
* Get the length of the string, not taking trailing linefeeds into account.
- *
+ *
* @param line Input line
* @return Length
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java
index 49493e33..8cb7570a 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteArrayUtil.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* {@link java.io.ByteArrayOutputStream}
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.landmark
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java
index 138957bd..1fcb1f3c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferInputStream.java
@@ -30,6 +30,7 @@ import java.nio.ByteBuffer;
* Wrap an existing ByteBuffer as InputStream.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has ByteBuffer
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java
index 3e2b397c..8e07f075 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferOutputStream.java
@@ -30,6 +30,7 @@ import java.nio.ByteBuffer;
* Wrap an existing ByteBuffer as OutputStream.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has ByteBuffer
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java
index 94f882ab..c58d6063 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/ByteBufferSerializer.java
@@ -30,6 +30,7 @@ import java.nio.ByteBuffer;
* Class to convert from and to byte arrays (in index structures).
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has ByteBuffer - - oneway «serializes to/from»
* @apiviz.excludeSubtypes
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java
index ac966c7e..e360fc43 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/FixedSizeByteBufferSerializer.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.io;
* Serializers with a fixed length serialization.
*
* @author Erich Schubert
+ * @since 0.4.0
* @apiviz.excludeSubtypes
*
* @param <T> Type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java
index 3bec4ad4..01b1336d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/LineReader.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.utilities.io;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2015
+ Copyright (C) 2016
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -30,43 +30,52 @@ import java.io.Reader;
/**
* Fast class to read a file, line per line.
- *
+ *
* Lines must be split using Unix newlines <code>\n</code>, linefeeds
* <code>\r</code> are ignored.
- *
+ *
* This is a rather minimal implementation, which supposedly pays off in
* performance. In particular, this class allows recycling the buffer, which
* will yield less object allocations and thus less garbage collection.
- *
+ *
* Usage example:
- *
+ *
* <pre>
* StringBuilder buf = new StringBuilder();
* LineReader reader = new LineReader(inputStream);
* // Clear buffer, and append next line.
- * while(reader.readLine(buf.delete(0, buf.length()))) {
+ * while(reader.readLine(buf.setLength(0))) {
* // process string in buffer.
* }
* </pre>
- *
+ *
* @author Erich Schubert
+ * @since 0.7.0
*/
public class LineReader implements AutoCloseable {
- /** Buffer size to use */
+ /**
+ * Default buffer size to use
+ */
final static int BUFFER_SIZE = 4096;
- /** Input stream to read from */
+ /**
+ * Input stream to read from
+ */
Reader in;
- /** Character buffer */
- char[] buffer = new char[BUFFER_SIZE];
+ /**
+ * Character buffer
+ */
+ char[] buffer;
- /** Current position, and length of buffer */
+ /**
+ * Current position, and length of buffer
+ */
int pos = 0, end = 0;
/**
* Constructor
- *
+ *
* @param in Stream
*/
public LineReader(InputStream in) {
@@ -75,16 +84,37 @@ public class LineReader implements AutoCloseable {
/**
* Constructor
- *
+ *
* @param in Reader
*/
public LineReader(Reader in) {
+ this(in, BUFFER_SIZE);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param in Reader
+ * @param buffersize Buffer size
+ */
+ public LineReader(InputStream in, int buffersize) {
+ this(new InputStreamReader(in), buffersize);
+ }
+
+ /**
+ * Constructor
+ *
+ * @param in Reader
+ * @param buffersize Buffer size
+ */
+ public LineReader(Reader in, int buffersize) {
this.in = in;
+ this.buffer = new char[buffersize];
}
/**
* Read a line into the given buffer.
- *
+ *
* @param buf Buffer.
* @return {@code true} if some characters have been read.
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java
index f9363d57..0afcb9ab 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/TokenizedReader.java
@@ -31,6 +31,7 @@ import java.util.regex.Pattern;
* Reader that will tokenize the input data as desired.
*
* @author Erich Schubert
+ * @since 0.7.0
*
* @apiviz.composedOf Tokenizer
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java
index 67339cd2..b86923d7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/io/Tokenizer.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.datastructures.iterator.Iter;
* String tokenizer.
*
* @author Erich Schubert
+ * @since 0.6.0
*/
public class Tokenizer implements Iter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java
index f8a7b390..a3559e86 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/AbstractParameterizer.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Abstract base class that handles the parameterization of a class.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses Parameterization
* @apiviz.has de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java
index 3301c31c..9173cc24 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/InternalParameterizationErrors.java
@@ -32,6 +32,7 @@ import java.util.Collection;
* This is meant for reporting re-parameterization errors.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class InternalParameterizationErrors extends ParameterException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java
index 50ad6215..36c23718 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/NoParameterValueException.java
@@ -25,6 +25,9 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling;
/**
* Thrown by OptionHandler in case of incorrect parameter-array.
+ *
+ * @author Arthur Zimek
+ * @since 0.2
*/
public class NoParameterValueException extends ParameterException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java
index 20cdc6c7..67c6326e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionID.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling;
* within this class.
*
* @author Elke Achtert
+ * @since 0.2
*/
public final class OptionID {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java
index a72035f9..2f0def2b 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/OptionUtil.java
@@ -39,6 +39,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
/**
* Utility functions related to Option handling.
*
+ * @author Erich Schubert
+ * @since 0.2
+ *
* @apiviz.uses Parameter
*/
public final class OptionUtil {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java
index 2a456fed..9527b946 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/ParameterException.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling;
* Abstract super class for all exceptions thrown during parameterization.
*
* @author Elke Achtert
+ * @since 0.2
*/
@SuppressWarnings("serial")
public abstract class ParameterException extends Exception {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java
index 2931309f..c0134b40 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/Parameterizer.java
@@ -31,6 +31,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* To instantiate a class, use {@link Parameterization#tryInstantiate(Class)}!
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface Parameterizer {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java
index c7a9909c..5569a648 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnspecifiedParameterException.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Exception when a required parameter was not given.
*
* @author Erich Schubert
+ * @since 0.2
*/
public class UnspecifiedParameterException extends WrongParameterValueException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java
index 016cdf76..7cd86f8c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/UnusedParameterException.java
@@ -23,9 +23,11 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
/**
* Thrown by OptionHandler in case of request of an unused parameter.
+ *
+ * @author Arthur Zimek
+ * @since 0.2
*/
@SuppressWarnings("serial")
public class UnusedParameterException extends ParameterException {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java
index c0bd4b40..cd24cf66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/WrongParameterValueException.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Thrown by a Parameterizable object in case of wrong parameter format.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class WrongParameterValueException extends ParameterException {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java
index b08da639..815ccdef 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AbstractNumberConstraint.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints;
* Abstract super class for constraints dealing with a certain number value.
*
* @author Elke Achtert
+ * @since 0.2
*
* @apiviz.uses
* de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java
index f468af92..3430fd81 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/AllOrNoneMustBeSetGlobalConstraint.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* parameters ({@link Parameter}) must be set, or none of them.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class AllOrNoneMustBeSetGlobalConstraint implements GlobalParameterConstraint {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java
index 3507e946..09df14df 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/CommonConstraints.java
@@ -27,6 +27,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints;
* Class storing a number of very common constraints.
*
* @author Erich Schubert
+ * @since 0.6.0
*
* @apiviz.landmark
* @apiviz.composedOf ParameterConstraint
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java
index ae817a7a..e6257e47 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualSizeGlobalConstraint.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter;
* ) must have equal list sizes.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class EqualSizeGlobalConstraint implements GlobalParameterConstraint {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java
index 52ac3ff6..e7379b6a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/EqualStringConstraint.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
* ) to be tested is equal to the specified constraint-strings.
*
* @author Steffi Wanka
+ * @since 0.2
*
* @apiviz.uses de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java
index 05d391b3..21669a38 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalListSizeConstraint.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter;
* specified by the integer parameter ({@link IntParameter}) given.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class GlobalListSizeConstraint implements GlobalParameterConstraint {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java
index c01802bc..ae1ea824 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalParameterConstraint.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
* The proper constraint test should be implemented in the method {@link #test()}.
* </p>
* @author Steffi Wanka
+ * @since 0.2
*
*/
public interface GlobalParameterConstraint {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java
index 79d67a2c..b162fc4a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GlobalVectorListElementSizeConstraint.java
@@ -23,24 +23,24 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.VectorListParameter;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleArrayListParameter;
/**
* Global parameter constraint for testing if the dimensions of each vector
- * specified by a given vector list parameter ({@link VectorListParameter})
+ * specified by a given vector list parameter ({@link DoubleArrayListParameter})
* correspond to the value of a integer parameter ({@link IntParameter}) given.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class GlobalVectorListElementSizeConstraint implements GlobalParameterConstraint {
/**
* Vector list parameter.
*/
- private VectorListParameter vector;
+ private DoubleArrayListParameter vector;
/**
* Integer parameter providing the size constraint.
@@ -56,7 +56,7 @@ public class GlobalVectorListElementSizeConstraint implements GlobalParameterCon
* @param vector the vector list parameter
* @param sizeConstraint the integer parameter providing the size constraint
*/
- public GlobalVectorListElementSizeConstraint(VectorListParameter vector, IntParameter sizeConstraint) {
+ public GlobalVectorListElementSizeConstraint(DoubleArrayListParameter vector, IntParameter sizeConstraint) {
this.vector = vector;
this.size = sizeConstraint;
}
@@ -73,9 +73,12 @@ public class GlobalVectorListElementSizeConstraint implements GlobalParameterCon
return;
}
- for(Vector vec : vector.getValue()) {
- if(vec.getDimensionality() != size.intValue()) {
- throw new WrongParameterValueException("Global Parameter Constraint Error.\n" + "The vectors of vector list parameter " + vector.getName() + " have not the required dimension of " + size.getValue() + " given by integer parameter " + size.getName() + ".");
+ for(double[] vec : vector.getValue()) {
+ if(vec.length != size.intValue()) {
+ throw new WrongParameterValueException("Global Parameter Constraint Error.\n" //
+ + "The vectors of vector list parameter " + vector.getName() //
+ + " have not the required dimension of " + size.getValue() //
+ + " given by integer parameter " + size.getName() + ".");
}
}
}
@@ -84,4 +87,4 @@ public class GlobalVectorListElementSizeConstraint implements GlobalParameterCon
public String getDescription() {
return "The dimensionality of the vectors of vector list parameter " + vector.getName() + " must have the value of integer parameter " + size.getName();
}
-} \ No newline at end of file
+}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java
index 002ff4f3..b9e445d1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterConstraint.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter;
* constraint value.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class GreaterConstraint extends AbstractNumberConstraint<Number> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java
index fab416d4..a8791f97 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/GreaterEqualConstraint.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter;
* than the specified constraint value.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class GreaterEqualConstraint extends AbstractNumberConstraint<Number> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java
index c63fa1ea..c2b73d1d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessConstraint.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter;
* constraint value.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class LessConstraint extends AbstractNumberConstraint<Number> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java
index 8aef29b4..a8c210d4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualConstraint.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter;
* the specified constraint value.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class LessEqualConstraint extends AbstractNumberConstraint<Number> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java
index c3f4ef09..10f12988 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessEqualGlobalConstraint.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter;
* the value of the second number parameter ({@link NumberParameter}).
*
* @author Steffi Wanka
+ * @since 0.2
* @param <T> Number type
*/
public class LessEqualGlobalConstraint<T extends Number> implements GlobalParameterConstraint {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java
index 0ab9fbae..57b9d473 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/LessGlobalConstraint.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.NumberParameter;
* value of the second number parameter ({@link NumberParameter}) given.
*
* @author Steffi Wanka
+ * @since 0.2
* @param <T> Number type
*/
public class LessGlobalConstraint<T extends Number> implements GlobalParameterConstraint {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java
index 764b1773..ff1aba69 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListEachConstraint.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
* Applies constraints to all elements of a list.
*
* @author Erich Schubert
+ * @since 0.5.5
*
* @apiviz.composedOf ParameterConstraint oneway 1 n
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java
index e0dfe3e1..f5c052b6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListParameterNoDuplicateValueConstraint.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
* is not allowed to have duplicate values.
*
* @author Arthur Zimek
+ * @since 0.5.5
*/
public class ListParameterNoDuplicateValueConstraint<T extends Object> implements ParameterConstraint<List<T>> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java
index 0969ac06..c9f273de 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ListSizeConstraint.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter;
* FIXME: Unfortunately, we cannot have good type safety anymore right now.
*
* @author Steffi Wanka
+ * @since 0.2
*
* @apiviz.uses
* de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ListParameter
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java
index 4efd6118..55ea5363 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/NoDuplicateValueGlobalConstraint.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* parameters ({@link NumberParameter}) are not allowed to have the same value.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class NoDuplicateValueGlobalConstraint implements GlobalParameterConstraint {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java
index af35e3e9..9ed325f4 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OneMustBeSetGlobalConstraint.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* set.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class OneMustBeSetGlobalConstraint implements GlobalParameterConstraint {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java
index c37a05f2..58c69dd9 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/OnlyOneIsAllowedToBeSetGlobalConstraint.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* parameters ({@link Parameter}) is allowed to be set.
*
* @author Steffi Wanka
+ * @since 0.2
*/
public class OnlyOneIsAllowedToBeSetGlobalConstraint implements GlobalParameterConstraint {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java
index 99009941..9061533b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterConstraint.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
* </p>
*
* @author Steffi Wanka
+ * @since 0.2
* @param <T> the type of the parameter the constraint applies to
*/
public interface ParameterConstraint<T> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java
index 03e4b9e1..3de8ecb2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/ParameterFlagGlobalConstraint.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* not.
*
* @author Steffi Wanka
+ * @since 0.2
*
* @apiviz.uses de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag
* @apiviz.uses
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java
index 50417b21..7a6acd32 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/constraints/StringLengthConstraint.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
* .
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java
index 4980af5f..67180790 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Abstract class with shared code for parameterization handling.
*
* @author Erich Schubert
+ * @since 0.3
*/
public abstract class AbstractParameterization implements Parameterization {
// TODO: refactor "tryInstantiate" even in a higher class?
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java
index 98cfa5a9..f4f8ca3c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* for examples.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class ChainedParameterization extends AbstractParameterization {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java
index fe1de0be..c89a1420 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Parameterization handler that only allows the use of default values.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class EmptyParameterization extends AbstractParameterization {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java
index c67533a6..542c98ef 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java
@@ -33,24 +33,25 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
-import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
/**
* Parameterization handler using a List and OptionIDs, for programmatic use.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class ListParameterization extends AbstractParameterization {
/**
* The actual parameters, for storage
*/
- LinkedList<Pair<OptionID, Object>> parameters = new LinkedList<>();
+ List<ParameterPair> parameters;
/**
* Default constructor.
*/
public ListParameterization() {
super();
+ this.parameters = new LinkedList<>();
}
/**
@@ -58,10 +59,11 @@ public class ListParameterization extends AbstractParameterization {
*
* @param dbParameters existing parameter collection
*/
- public ListParameterization(Collection<Pair<OptionID, Object>> dbParameters) {
+ public ListParameterization(Collection<ParameterPair> dbParameters) {
this();
- for (Pair<OptionID, Object> pair : dbParameters) {
- addParameter(pair.first, pair.second);
+ this.parameters = new LinkedList<>();
+ for(ParameterPair pair : dbParameters) {
+ addParameter(pair.option, pair.value);
}
}
@@ -71,7 +73,7 @@ public class ListParameterization extends AbstractParameterization {
* @param optionid Option ID
*/
public void addFlag(OptionID optionid) {
- parameters.add(new Pair<OptionID, Object>(optionid, Flag.SET));
+ parameters.add(new ParameterPair(optionid, Flag.SET));
}
/**
@@ -81,7 +83,7 @@ public class ListParameterization extends AbstractParameterization {
* @param value Value
*/
public void addParameter(OptionID optionid, Object value) {
- parameters.add(new Pair<>(optionid, value));
+ parameters.add(new ParameterPair(optionid, value));
}
/**
@@ -90,7 +92,7 @@ public class ListParameterization extends AbstractParameterization {
* @param flag Flag to add, if set
*/
public void forwardOption(Flag flag) {
- if (flag.isDefined() && flag.getValue().booleanValue()) {
+ if(flag.isDefined() && flag.getValue().booleanValue()) {
addFlag(flag.getOptionID());
}
}
@@ -101,19 +103,19 @@ public class ListParameterization extends AbstractParameterization {
* @param param Parameter to add
*/
public void forwardOption(Parameter<?> param) {
- if (param.isDefined()) {
+ if(param.isDefined()) {
addParameter(param.getOptionID(), param.getValue());
}
}
@Override
public boolean setValueForOption(Parameter<?> opt) throws ParameterException {
- Iterator<Pair<OptionID, Object>> iter = parameters.iterator();
- while (iter.hasNext()) {
- Pair<OptionID, Object> pair = iter.next();
- if (pair.first == opt.getOptionID()) {
+ Iterator<ParameterPair> iter = parameters.iterator();
+ while(iter.hasNext()) {
+ ParameterPair pair = iter.next();
+ if(pair.option == opt.getOptionID()) {
iter.remove();
- opt.setValue(pair.second);
+ opt.setValue(pair.value);
return true;
}
}
@@ -125,7 +127,7 @@ public class ListParameterization extends AbstractParameterization {
*
* @return Unused parameters.
*/
- public List<Pair<OptionID, Object>> getRemainingParameters() {
+ public List<ParameterPair> getRemainingParameters() {
return parameters;
}
@@ -145,9 +147,9 @@ public class ListParameterization extends AbstractParameterization {
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
- for (Pair<OptionID, Object> pair : parameters) {
- buf.append('-').append(pair.getFirst().toString()).append(' ');
- buf.append(pair.getSecond().toString()).append(' ');
+ for(ParameterPair pair : parameters) {
+ buf.append('-').append(pair.option.toString()).append(' ');
+ buf.append(pair.value.toString()).append(' ');
}
return buf.toString();
}
@@ -159,16 +161,53 @@ public class ListParameterization extends AbstractParameterization {
*/
public ArrayList<String> serialize() {
ArrayList<String> params = new ArrayList<>();
- for (Pair<OptionID, Object> pair : parameters) {
- params.add("-" + pair.getFirst().toString());
- if (pair.getSecond() instanceof String) {
- params.add((String) pair.getSecond());
- } else if (pair.getSecond() instanceof Class) {
- params.add(((Class<?>) pair.getSecond()).getCanonicalName());
- } else { // Fallback:
- params.add(pair.getSecond().toString());
+ for(ParameterPair pair : parameters) {
+ params.add("-" + pair.option.toString());
+ if(pair.value instanceof String) {
+ params.add((String) pair.value);
+ }
+ else if(pair.value instanceof Class) {
+ params.add(((Class<?>) pair.value).getCanonicalName());
+ }
+ else { // Fallback:
+ params.add(pair.value.toString());
}
}
return params;
}
+
+ /**
+ * Parameter pair, package-private.
+ *
+ * @author Erich Schubert
+ *
+ * @apiviz.exclude
+ */
+ static final class ParameterPair {
+ /**
+ * Option key.
+ */
+ public OptionID option;
+
+ /**
+ * Option value.
+ */
+ public Object value;
+
+ /**
+ * Constructor.
+ *
+ * @param key Option key
+ * @param value Option value
+ */
+ public ParameterPair(OptionID key, Object value) {
+ this.option = key;
+ this.value = value;
+ }
+
+ @Override
+ public String toString() {
+ return "-" + option.getName() + " " + value;
+ }
+ }
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java
index 4faa3c60..926e660f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java
@@ -23,17 +23,16 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import java.util.Collection;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.InternalParameterizationErrors;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GlobalParameterConstraint;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization.ParameterPair;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
-import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
/**
* This configuration can be "rewound" to allow the same values to be consumed
@@ -42,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair;
* e.g. in visualization classes.
*
* @author Erich Schubert
+ * @since 0.3
*/
// TODO: Can we merge MergedParameterization and TrackParameters into one?
public class MergedParameterization implements Parameterization {
@@ -58,7 +58,7 @@ public class MergedParameterization implements Parameterization {
/**
* Parameters to rewind.
*/
- final private List<Pair<OptionID, Object>> used;
+ final private List<ParameterPair> used;
/**
* Constructor.
@@ -79,7 +79,7 @@ public class MergedParameterization implements Parameterization {
* @param current Current parameterization to re-used
* @param used Used parameters list.
*/
- private MergedParameterization(Parameterization inner, ListParameterization current, List<Pair<OptionID, Object>> used) {
+ private MergedParameterization(Parameterization inner, ListParameterization current, List<ParameterPair> used) {
super();
this.inner = inner;
this.current = current;
@@ -91,8 +91,8 @@ public class MergedParameterization implements Parameterization {
*/
public void rewind() {
synchronized(used) {
- for(Pair<OptionID, Object> pair : used) {
- current.addParameter(pair.first, pair.second);
+ for(ParameterPair pair : used) {
+ current.addParameter(pair.option, pair.value);
}
used.clear();
}
@@ -102,7 +102,7 @@ public class MergedParameterization implements Parameterization {
public boolean setValueForOption(Parameter<?> opt) throws ParameterException {
try {
if(current.setValueForOption(opt)) {
- used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getValue()));
+ used.add(new ParameterPair(opt.getOptionID(), opt.getValue()));
return true;
}
}
@@ -110,10 +110,10 @@ public class MergedParameterization implements Parameterization {
current.reportError(e);
}
if(inner.setValueForOption(opt)) {
- used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getValue()));
+ used.add(new ParameterPair(opt.getOptionID(), opt.getValue()));
return true;
}
- used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getDefaultValue()));
+ used.add(new ParameterPair(opt.getOptionID(), opt.getDefaultValue()));
return false;
}
@@ -128,7 +128,7 @@ public class MergedParameterization implements Parameterization {
public Collection<ParameterException> getErrors() {
return current.getErrors();
}
-
+
@Override
public boolean hasErrors() {
return current.hasErrors();
@@ -142,11 +142,11 @@ public class MergedParameterization implements Parameterization {
@Override
public boolean grab(Parameter<?> opt) {
try {
- if (setValueForOption(opt)) {
+ if(setValueForOption(opt)) {
return true;
}
// Try default value instead.
- if (opt.tryDefaultValue()) {
+ if(opt.tryDefaultValue()) {
return true;
}
// No value available.
@@ -175,7 +175,7 @@ public class MergedParameterization implements Parameterization {
return ClassGenericsUtil.tryInstantiate(r, c, this);
}
catch(Exception e) {
- reportError(new InternalParameterizationErrors("Error instantiating internal class: "+c.getName(), e));
+ reportError(new InternalParameterizationErrors("Error instantiating internal class: " + c.getName(), e));
return null;
}
}
@@ -186,7 +186,7 @@ public class MergedParameterization implements Parameterization {
return ClassGenericsUtil.tryInstantiate(c, c, this);
}
catch(Exception e) {
- reportError(new InternalParameterizationErrors("Error instantiating internal class: "+c.getName(), e));
+ reportError(new InternalParameterizationErrors("Error instantiating internal class: " + c.getName(), e));
return null;
}
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java
index f165942e..29c22e27 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* @apiviz.uses ParameterException
*
* @author Erich Schubert
+ * @since 0.3
*/
public interface Parameterization {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java
index b5ba3e58..2837983d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* When building parameter lists, use {@link ListParameterization} where possible.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class SerializedParameterization extends AbstractParameterization {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java
index 5429ea8b..4b8ea073 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* All actual Parameterization operations are forwarded to the inner class.
*
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf TrackedParameter
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java
index caa87440..e039f492 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java
@@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* Class containing an object, and the associated value.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class TrackedParameter {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java
index a1d58676..ea48655c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* in a non-recursive way.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class UnParameterization implements Parameterization {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java
index d78d0dcc..17d17c6d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/AbstractParameter.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf OptionID
* @apiviz.uses ParameterConstraint
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java
index d9d1a3a2..b0ce1bc7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassListParameter.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.uses ELKIServiceRegistry
*
@@ -96,6 +97,23 @@ public class ClassListParameter<C> extends ListParameter<ClassListParameter<C>,
return buf.toString();
}
+ @Override
+ public String getDefaultValueAsString() {
+ StringBuilder buf = new StringBuilder();
+ final String defPackage = restrictionClass.getPackage().getName() + ".";
+ for(Class<? extends C> c : getDefaultValue()) {
+ if(buf.length() > 0) {
+ buf.append(LIST_SEP);
+ }
+ String name = c.getName();
+ if(name.startsWith(defPackage)) {
+ name = name.substring(defPackage.length());
+ }
+ buf.append(name);
+ }
+ return buf.toString();
+ }
+
@SuppressWarnings("unchecked")
@Override
protected List<Class<? extends C>> parseValue(Object obj) throws ParameterException {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java
index 6f562838..39e0daae 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ClassParameter.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.uses ELKIServiceRegistry
*
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/VectorListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleArrayListParameter.java
index b6d999fb..696adbff 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/VectorListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleArrayListParameter.java
@@ -3,7 +3,7 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2015
+ Copyright (C) 2016
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -23,12 +23,11 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters;
*/
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-import de.lmu.ifi.dbs.elki.math.linearalgebra.Vector;
import de.lmu.ifi.dbs.elki.utilities.FormatUtil;
-import de.lmu.ifi.dbs.elki.utilities.datastructures.arraylike.DoubleArray;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException;
@@ -39,8 +38,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
-public class VectorListParameter extends ListParameter<VectorListParameter, List<Vector>> {
+public class DoubleArrayListParameter extends ListParameter<DoubleArrayListParameter, List<double[]>> {
/**
* Constructs a vector list parameter with the given name and description.
*
@@ -48,7 +48,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
* @param constraint Constraint
* @param defaultValue Default value
*/
- public VectorListParameter(OptionID optionID, ParameterConstraint<List<Vector>> constraint, List<Vector> defaultValue) {
+ public DoubleArrayListParameter(OptionID optionID, ParameterConstraint<List<double[]>> constraint, List<double[]> defaultValue) {
super(optionID, defaultValue);
addConstraint(constraint);
}
@@ -60,7 +60,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
* @param constraint Constraint
* @param optional Optional flag
*/
- public VectorListParameter(OptionID optionID, ParameterConstraint<List<Vector>> constraint, boolean optional) {
+ public DoubleArrayListParameter(OptionID optionID, ParameterConstraint<List<double[]>> constraint, boolean optional) {
super(optionID, optional);
addConstraint(constraint);
}
@@ -71,7 +71,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
* @param optionID Option ID
* @param constraint Constraint
*/
- public VectorListParameter(OptionID optionID, ParameterConstraint<List<Vector>> constraint) {
+ public DoubleArrayListParameter(OptionID optionID, ParameterConstraint<List<double[]>> constraint) {
super(optionID);
addConstraint(constraint);
}
@@ -82,11 +82,9 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
* @param optionID Option ID
* @param defaultValue Default value
*/
- // Indiscernible from optionID, constraints
- /*
- * public VectorListParameter(OptionID optionID, List<Vector> defaultValue) {
- * super(optionID, defaultValue); }
- */
+ public DoubleArrayListParameter(OptionID optionID, List<double[]> defaultValue) {
+ super(optionID, defaultValue);
+ }
/**
* Constructs a vector list parameter with the given name and description.
@@ -94,7 +92,7 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
* @param optionID Option ID
* @param optional Optional flag
*/
- public VectorListParameter(OptionID optionID, boolean optional) {
+ public DoubleArrayListParameter(OptionID optionID, boolean optional) {
super(optionID, optional);
}
@@ -103,17 +101,17 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
*
* @param optionID Option ID
*/
- public VectorListParameter(OptionID optionID) {
+ public DoubleArrayListParameter(OptionID optionID) {
super(optionID);
}
@Override
public String getValueAsString() {
StringBuilder buf = new StringBuilder();
- List<Vector> val = getValue();
- Iterator<Vector> valiter = val.iterator();
+ List<double[]> val = getValue();
+ Iterator<double[]> valiter = val.iterator();
while(valiter.hasNext()) {
- buf.append(FormatUtil.format(valiter.next().getArrayRef(), LIST_SEP));
+ buf.append(FormatUtil.format(valiter.next(), LIST_SEP));
// Append separation character
if(valiter.hasNext()) {
buf.append(VECTOR_SEP);
@@ -122,47 +120,47 @@ public class VectorListParameter extends ListParameter<VectorListParameter, List
return buf.toString();
}
- @SuppressWarnings("unchecked")
@Override
- protected List<Vector> parseValue(Object obj) throws ParameterException {
- try {
- List<?> l = List.class.cast(obj);
- // do extra validation:
- for(Object o : l) {
- List<?> v = List.class.cast(o);
- for(Object c : v) {
- if(!(c instanceof Double)) {
- throw new WrongParameterValueException("Wrong parameter format for parameter \"" + getName() + "\". Given list contains objects of different type!");
- }
- }
+ public String getDefaultValueAsString() {
+ StringBuilder buf = new StringBuilder();
+ List<double[]> val = getDefaultValue();
+ Iterator<double[]> valiter = val.iterator();
+ while(valiter.hasNext()) {
+ buf.append(FormatUtil.format(valiter.next(), LIST_SEP));
+ // Append separation character
+ if(valiter.hasNext()) {
+ buf.append(VECTOR_SEP);
}
- // TODO: can we use reflection to get extra checks?
- // TODO: Should we copy the list and vectors?
- return (List<Vector>) l;
- }
- catch(ClassCastException e) {
- // continue with other attempts.
}
+ return buf.toString();
+ }
+
+ @Override
+ protected List<double[]> parseValue(Object obj) throws ParameterException {
if(obj instanceof String) {
String[] vectors = VECTOR_SPLIT.split((String) obj);
if(vectors.length == 0) {
throw new WrongParameterValueException("Wrong parameter format! Given list of vectors for parameter \"" + getName() + "\" is empty!");
}
- ArrayList<Vector> vecs = new ArrayList<>();
+ ArrayList<double[]> vecs = new ArrayList<>();
- DoubleArray vectorCoord = new DoubleArray();
+ double[] buf = new double[11];
+ int used = 0;
for(String vector : vectors) {
- vectorCoord.clear();
+ used = 0;
String[] coordinates = SPLIT.split(vector);
for(String coordinate : coordinates) {
try {
- vectorCoord.add(FormatUtil.parseDouble(coordinate));
+ if(used == buf.length) {
+ buf = Arrays.copyOf(buf, buf.length << 1);
+ }
+ buf[used++] = FormatUtil.parseDouble(coordinate);
}
catch(NumberFormatException e) {
throw new WrongParameterValueException("Wrong parameter format! Coordinates of vector \"" + vector + "\" are not valid!");
}
}
- vecs.add(new Vector(vectorCoord.toArray()));
+ vecs.add(Arrays.copyOf(buf, used));
}
return vecs;
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java
index 074bb0ed..a9fe5471 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleListParameter.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
public class DoubleListParameter extends ListParameter<DoubleListParameter, double[]> {
/**
@@ -60,6 +61,11 @@ public class DoubleListParameter extends ListParameter<DoubleListParameter, doub
}
@Override
+ public String getDefaultValueAsString() {
+ return FormatUtil.format(getDefaultValue(), LIST_SEP);
+ }
+
+ @Override
protected double[] parseValue(Object obj) throws ParameterException {
if(obj instanceof double[]) {
return double[].class.cast(obj);
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java
index a28f8d38..ef7d4a88 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/DoubleParameter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.2
*/
public class DoubleParameter extends NumberParameter<DoubleParameter, Double> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java
index 0cad6e11..d1fafa79 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/EnumParameter.java
@@ -60,6 +60,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
* </p>
*
* @author Florian Nuecke
+ * @since 0.4.0
*
* @param <E> Enum type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java
index e5f1b021..cc6d885f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileListParameter.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
public class FileListParameter extends ListParameter<FileListParameter, List<File>> {
/**
@@ -89,6 +90,20 @@ public class FileListParameter extends ListParameter<FileListParameter, List<Fil
return buf.toString();
}
+ @Override
+ public String getDefaultValueAsString() {
+ StringBuilder buf = new StringBuilder();
+ List<File> val = getDefaultValue();
+ Iterator<File> veciter = val.iterator();
+ while(veciter.hasNext()) {
+ buf.append(veciter.next());
+ if (veciter.hasNext()) {
+ buf.append(LIST_SEP);
+ }
+ }
+ return buf.toString();
+ }
+
@SuppressWarnings("unchecked")
@Override
protected List<File> parseValue(Object obj) throws ParameterException {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java
index 0e865f2d..9571a018 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/FileParameter.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
// TODO: turn FileType into a Constraint?
public class FileParameter extends AbstractParameter<FileParameter, File> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java
index 8d83ed2c..d1e29eb7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Flag.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
public class Flag extends AbstractParameter<Flag, Boolean> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java
index 756dbb90..59bfb3a5 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntListParameter.java
@@ -23,7 +23,6 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters;
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-import de.lmu.ifi.dbs.elki.utilities.BitsUtil;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException;
@@ -33,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Elke Achtert
* @author Erich Schubert
+ * @since 0.2
*/
public class IntListParameter extends ListParameter<IntListParameter, int[]> {
/**
@@ -70,6 +70,21 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> {
}
@Override
+ public String getDefaultValueAsString() {
+ int[] val = getDefaultValue();
+ if(val.length == 0) {
+ return "";
+ }
+ StringBuilder buf = new StringBuilder();
+ buf.append(val[0]);
+ for(int i = 1; i < val.length; i++) {
+ buf.append(LIST_SEP);
+ buf.append(val[i]);
+ }
+ return buf.toString();
+ }
+
+ @Override
protected int[] parseValue(Object obj) throws ParameterException {
if(obj instanceof int[]) {
return (int[]) obj;
@@ -95,7 +110,7 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> {
/**
* Returns a string representation of the parameter's type.
- *
+ *
* @return &quot;&lt;int_1,...,int_n&gt;&quot;
*/
@Override
@@ -105,7 +120,9 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> {
/**
* Get the values as a bitmask.
- *
+ *
+ * See also: {@link de.lmu.ifi.dbs.elki.utilities.BitsUtil}
+ *
* @return Bitmask
*/
public long[] getValueAsBitSet() {
@@ -114,9 +131,9 @@ public class IntListParameter extends ListParameter<IntListParameter, int[]> {
for(int d : value) {
maxd = (d > maxd) ? d : maxd;
}
- long[] dimensions = BitsUtil.zero(maxd);
+ long[] dimensions = new long[(maxd >>> 6) + 1];
for(int d : value) {
- BitsUtil.setI(dimensions, d);
+ dimensions[d >>> 6] |= 1L << (d & 0x3F);
}
return dimensions;
}
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java
index d6adf273..9ed15e95 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/IntParameter.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
public class IntParameter extends NumberParameter<IntParameter, Integer> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java
index 097475fb..82c4a46d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ListParameter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.2
*
* @param <THIS> Type self-reference
* @param <T> List type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java
index 11aff3cb..f44f759d 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/LongParameter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.2
*/
public class LongParameter extends NumberParameter<LongParameter, Long> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java
index c71db779..bb5c6864 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/NumberParameter.java
@@ -30,6 +30,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.2
*
* @param <THIS> type self-reference
* @param <T> the type of a possible value (i.e., the type of the option)
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java
index baaa2765..d31c4117 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectListParameter.java
@@ -37,6 +37,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
* Parameter that represents a list of objects (in contrast to a class list parameter, they will be instanced at most once.)
*
* @author Erich Schubert
+ * @since 0.3
*
* @param <C> Class type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java
index 40d5b49a..aa0e4a17 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/ObjectParameter.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameteriz
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
* @param <C> Class type
*/
public class ObjectParameter<C> extends ClassParameter<C> {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java
index 9c2d7ea8..99751076 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/Parameter.java
@@ -1,10 +1,5 @@
package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.UnspecifiedParameterException;
-import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstraint;
-
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
@@ -28,6 +23,11 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.UnspecifiedParameterException;
+import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstraint;
+
/**
* Interface for the parameter of a class.
*
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.ParameterConstra
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*
* @apiviz.composedOf OptionID
* @apiviz.uses ParameterConstraint
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java
index 3c010db6..f2160d53 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/PatternParameter.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
public class PatternParameter extends AbstractParameter<PatternParameter, Pattern> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java
index 0d5f3741..5e7d6c66 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/RandomParameter.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
* Parameter for random generators and/or random seeds.
*
* @author Erich Schubert
+ * @since 0.5.5
*/
public class RandomParameter extends AbstractParameter<RandomParameter, RandomFactory> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java
index 0f06beef..7882c9ee 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameters/StringParameter.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException
*
* @author Steffi Wanka
* @author Erich Schubert
+ * @since 0.3
*/
public class StringParameter extends AbstractParameter<StringParameter, String> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java
index af10137b..bdfd2b1c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleDoublePair.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* Pair storing two doubles.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Comparator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java
index 08d0fadd..8f8481b0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleIntPair.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* Pair storing an integer and a double.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Comparator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java
index 5fdd005e..ccbc38d0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/DoubleObjPair.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.pairs;
* Pair storing a native double value and an arbitrary object.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @param <O> Object type
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java
index 2b8fd6cf..61993a15 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntDoublePair.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* Pair storing an integer and a double.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Comparator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java
index e7fd6db8..10a458d0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/IntIntPair.java
@@ -29,6 +29,7 @@ import java.util.Comparator;
* Pair storing two integers.
*
* @author Erich Schubert
+ * @since 0.2
*
* @apiviz.has Comparator
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java
index 28f7fdaa..40b049f2 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/pairs/Pair.java
@@ -36,6 +36,7 @@ import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil;
* meaningful field names and comparators.
*
* @author Erich Schubert
+ * @since 0.2
*
* @param <FIRST> first type
* @param <SECOND> second type
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java
index 026cf048..337197a3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/AxisBasedReferencePoints.java
@@ -43,6 +43,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* surrounding cube.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class AxisBasedReferencePoints implements ReferencePointsHeuristic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java
index aed7845f..9e4b9c8f 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/FullDatabaseReferencePoints.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.database.relation.RelationUtil;
* Strategy to use the complete database as reference points.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class FullDatabaseReferencePoints implements ReferencePointsHeuristic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java
index 1d614bff..45e3c66b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/GridBasedReferencePoints.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Grid-based strategy to pick reference points.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class GridBasedReferencePoints implements ReferencePointsHeuristic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java
index 9de4e5e8..9b287443 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomGeneratedReferencePoints.java
@@ -25,6 +25,7 @@ package de.lmu.ifi.dbs.elki.utilities.referencepoints;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Random;
import de.lmu.ifi.dbs.elki.data.NumberVector;
import de.lmu.ifi.dbs.elki.database.relation.Relation;
@@ -41,8 +42,9 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
/**
* Reference points generated randomly within the used data space.
- *
+ *
* @author Erich Schubert
+ * @since 0.3
*/
public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic {
/**
@@ -62,7 +64,7 @@ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic
/**
* Constructor.
- *
+ *
* @param samplesize Size of desired sample set
* @param scale Scaling factor
* @param rnd Random generator
@@ -86,14 +88,14 @@ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic
mean[d] -= delta[d] * .5;
}
+ Random rand = rnd.getSingleThreadedRandom();
ArrayList<Vector> result = new ArrayList<>(samplesize);
double[] vec = new double[dim];
for(int i = 0; i < samplesize; i++) {
for(int d = 0; d < dim; d++) {
- vec[d] = mean[d] + (Math.random() - 0.5) * scale * delta[d];
+ vec[d] = mean[d] + (rand.nextDouble() - 0.5) * scale * delta[d];
}
Vector newp = new Vector(vec);
- // logger.debug("New reference point: " + FormatUtil.format(vec));
result.add(newp);
}
@@ -102,9 +104,9 @@ public class RandomGeneratedReferencePoints implements ReferencePointsHeuristic
/**
* Parameterization class.
- *
+ *
* @author Erich Schubert
- *
+ *
* @apiviz.exclude
*/
public static class Parameterizer extends AbstractParameterizer {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java
index a8b17234..14d91a55 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/RandomSampleReferencePoints.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.RandomParameter;
* Random-Sampling strategy for picking reference points.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class RandomSampleReferencePoints implements ReferencePointsHeuristic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java
index 2b417d84..00cef7dc 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/ReferencePointsHeuristic.java
@@ -32,6 +32,7 @@ import de.lmu.ifi.dbs.elki.database.relation.Relation;
* Simple Interface for an heuristic to pick reference points.
*
* @author Erich Schubert
+ * @since 0.3
*/
public interface ReferencePointsHeuristic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java
index f1e1c1fb..2b35108b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/referencepoints/StarBasedReferencePoints.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* Star-based strategy to pick reference points.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class StarBasedReferencePoints implements ReferencePointsHeuristic {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java
index 3917c550..74558293 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ClipScaling.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* maximum.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class ClipScaling implements StaticScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java
index 36fc8eed..7efc5318 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/GammaScaling.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
*
* @author Erich Schubert
* @author Remigius Wojdanowski
+ * @since 0.3
*/
public class GammaScaling implements StaticScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java
index c66a2c7d..46832321 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/IdentityScaling.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling;
* The trivial "identity" scaling function.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class IdentityScaling implements StaticScalingFunction {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java
index de0b5c02..4a65a49a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/LinearScaling.java
@@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
* Simple linear scaling function.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class LinearScaling implements StaticScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java
index 2c79d8bf..0c8262b0 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/MinusLogScaling.java
@@ -28,6 +28,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling;
* Scaling function to invert values by computing -1 * Math.log(x)
*
* @author Erich Schubert
+ * @since 0.3
*/
public class MinusLogScaling implements StaticScalingFunction {
@Override
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java
index fce71ffc..9928dcc1 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/ScalingFunction.java
@@ -36,6 +36,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling;
* {@code prepare} statement.
*
* @author Erich Schubert
+ * @since 0.3
*/
public interface ScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java
index 72f8c6a7..34c44b88 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/StaticScalingFunction.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling;
* But will always map x to the same f(x) (given the same parameters).
*
* @author Erich Schubert
+ * @since 0.3
*
*/
public interface StaticScalingFunction extends ScalingFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java
index 122e93b2..ea4dc752 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/COPOutlierScaling.java
@@ -58,6 +58,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.6.0
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", title = "Interpreting and Unifying Outlier Scores", booktitle = "Proc. 11th SIAM International Conference on Data Mining (SDM), Mesa, AZ, 2011", url = "http://siam.omnibooksonline.com/2011datamining/data/papers/018.pdf")
public class COPOutlierScaling implements OutlierScalingFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java
index 2e778500..be9012a8 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java
@@ -35,6 +35,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* Normalization used by HeDES
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "H. V. Nguyen, H. H. Ang, V. Gopalkrishnan", title = "Mining Outliers with Ensemble of Heterogeneous Detectors on Random Subspaces", booktitle = "Proc. 15th International Conference on Database Systems for Advanced Applications (DASFAA 2010)", url = "http://dx.doi.org/10.1007/978-3-642-12026-8_29")
public class HeDESNormalizationOutlierScaling implements OutlierScalingFunction {
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java
index a2533119..ab63eabd 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/LogRankingPseudoOutlierScaling.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* a normal distribution.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class LogRankingPseudoOutlierScaling implements OutlierScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java
index 00c2a9f0..002ff917 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java
@@ -44,6 +44,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java
index 2c01b2a1..b6645231 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java
index 0271f3f3..dd915b7a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java
@@ -49,6 +49,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "J. Gao, P.-N. Tan", //
title = "Converting Output Scores from Outlier Detection Algorithms into Probability Estimates", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java
index adaf0659..c566d373 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java
index 0ac8f6fe..732a54f3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java
index d7feb2b4..34480521 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java
@@ -47,6 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
* maximum values.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class OutlierLinearScaling implements OutlierScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java
index 4ccbe77d..c3f7697e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java
@@ -46,6 +46,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java
index 6e05d7c6..e6ae2491 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierScalingFunction.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.scaling.ScalingFunction;
* scaling function.
*
* @author Erich Schubert
+ * @since 0.3
*/
public interface OutlierScalingFunction extends ScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java
index 8da3bd35..4339e2aa 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java
@@ -41,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* mapping onto 0:1 using the minimum values seen.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class OutlierSqrtScaling implements OutlierScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java
index 75a532f7..0b12b0c7 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException;
* a normal distribution.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public class RankingPseudoOutlierScaling implements OutlierScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java
index 748fddd4..6855d879 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java
@@ -48,6 +48,7 @@ import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
* </p>
*
* @author Erich Schubert
+ * @since 0.4.0
*/
@Reference(authors = "J. Gao, P.-N. Tan", //
title = "Converting Output Scores from Outlier Detection Algorithms into Probability Estimates", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java
index 1387d69f..0fe9e86a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java
@@ -57,6 +57,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java
index b6ef5e3a..524c93f6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java
@@ -54,6 +54,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.DoubleParameter;
* </p>
*
* @author Erich Schubert
+ * @since 0.3
*/
@Reference(authors = "H.-P. Kriegel, P. Kröger, E. Schubert, A. Zimek", //
title = "Interpreting and Unifying Outlier Scores", //
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java
index 7ac19a1b..1f867e4a 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java
@@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
* Outlier scaling function that only keeps the top k outliers.
*
* @author Erich Schubert
+ * @since 0.3
*/
public class TopKOutlierScaling implements OutlierScalingFunction {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java
index 85f81561..6fecd67c 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/DOMCloner.java
@@ -33,6 +33,7 @@ import org.w3c.dom.Node;
* Class for cloning XML document, with filter capabilites
*
* @author Erich Schubert
+ * @since 0.5.0
*/
public class DOMCloner {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java
index 4522df6f..376f00cb 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/HTMLUtil.java
@@ -40,6 +40,7 @@ import org.w3c.dom.Element;
* Class with HTML related utility functions, in particular HTML generation.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class HTMLUtil {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java
index 10b14c8b..af272678 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeIterator.java
@@ -33,6 +33,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ExceptionMessages;
* Simple adapter class to iterate over a DOM tree nodes children.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class XMLNodeIterator implements Iterator<Node> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java
index 7566ccb4..f1ada456 100755
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/xml/XMLNodeListIterator.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.ExceptionMessages;
* Simple adapter class to iterate over a DOM tree nodes children.
*
* @author Erich Schubert
+ * @since 0.2
*/
public final class XMLNodeListIterator implements Iterator<Node> {
/**
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/AlgorithmStep.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/AlgorithmStep.java
index d3b8cc48..223ee5b3 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/AlgorithmStep.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/AlgorithmStep.java
@@ -45,6 +45,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* The "algorithms" step, where data is analyzed.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Algorithm
* @apiviz.has Result
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/EvaluationStep.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/EvaluationStep.java
index 99f57fd1..fab93f05 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/EvaluationStep.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/EvaluationStep.java
@@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* The "evaluation" step, where data is analyzed.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Evaluator
* @apiviz.uses Result
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/InputStep.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/InputStep.java
index b7de345b..6680e2a6 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/InputStep.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/InputStep.java
@@ -34,6 +34,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectParameter;
* Data input step of the workflow.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.has Database
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/LoggingStep.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/LoggingStep.java
index 167f8c8b..8641b69b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/LoggingStep.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/LoggingStep.java
@@ -38,6 +38,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.StringParameter;
* Pseudo-step to configure logging / verbose mode.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses LoggingConfiguration
*/
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/OutputStep.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/OutputStep.java
index 9d58129a..3448bf1b 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/OutputStep.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/OutputStep.java
@@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.ObjectListParamet
* The "output" step, where data is analyzed.
*
* @author Erich Schubert
+ * @since 0.4.0
*
* @apiviz.uses ResultHierarchy
* @apiviz.has ResultHandler
@@ -90,7 +91,7 @@ public class OutputStep implements WorkflowStep {
Class<? extends ResultHandler> clz;
try {
clz = (Class<? extends ResultHandler>) ClassLoader.getSystemClassLoader().loadClass(//
- "de.lmu.ifi.dbs.elki.visualization.gui.ResultVisualizer");
+ "de.lmu.ifi.dbs.elki.result.AutomaticVisualization");
}
catch(ClassNotFoundException e) {
clz = ResultWriter.class;
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/WorkflowStep.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/WorkflowStep.java
index b001d8e3..9e305c4e 100644
--- a/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/WorkflowStep.java
+++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/workflow/WorkflowStep.java
@@ -29,6 +29,7 @@ package de.lmu.ifi.dbs.elki.workflow;
* A logical grouping of classes with no real functionality.
*
* @author Erich Schubert
+ * @since 0.4.0
*/
public interface WorkflowStep {
// Empty