IGNITE-12659 [ML] Remove broken sub-modules in ML, fix examples (#7430)
* IGNITE-12659 [ML] Remove broken sub-modules in ML, fix examples
* IGNITE-12659: [ML] Fix examples like in IGN-12673
diff --git a/bin/ignite-tf.sh b/bin/ignite-tf.sh
deleted file mode 100755
index af2b5d4..0000000
--- a/bin/ignite-tf.sh
+++ /dev/null
@@ -1,189 +0,0 @@
-#!/usr/bin/env bash
-if [ ! -z "${IGNITE_SCRIPT_STRICT_MODE:-}" ]
-then
- set -o nounset
- set -o errexit
- set -o pipefail
- set -o errtrace
- set -o functrace
-fi
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-#
-# Command line tool for Tensorflow cluster management.
-#
-
-#
-# Import common functions.
-#
-if [ "${IGNITE_HOME:-}" = "" ];
- then IGNITE_HOME_TMP="$(dirname "$(cd "$(dirname "$0")"; "pwd")")";
- else IGNITE_HOME_TMP=${IGNITE_HOME};
-fi
-
-#
-# Set SCRIPTS_HOME - base path to scripts.
-#
-SCRIPTS_HOME="${IGNITE_HOME_TMP}/bin"
-
-source "${SCRIPTS_HOME}"/include/functions.sh
-
-#
-# Discover path to Java executable and check it's version.
-#
-checkJava
-
-#
-# Discover IGNITE_HOME environment variable.
-#
-setIgniteHome
-
-if [ "${DEFAULT_CONFIG:-}" == "" ]; then
- DEFAULT_CONFIG=config/default-config.xml
-fi
-
-#
-# Set IGNITE_LIBS.
-#
-. "${SCRIPTS_HOME}"/include/setenv.sh
-. "${SCRIPTS_HOME}"/include/build-classpath.sh # Will be removed in the binary release.
-IGNITE_OPT_LIBS=${IGNITE_HOME}/libs/optional/
-CP="${IGNITE_LIBS}:${IGNITE_OPT_LIBS}/ignite-tensorflow/*:${IGNITE_OPT_LIBS}/ignite-slf4j/*"
-
-RANDOM_NUMBER=$("$JAVA" -cp "${CP}" org.apache.ignite.startup.cmdline.CommandLineRandomNumberGenerator)
-
-RESTART_SUCCESS_FILE="${IGNITE_HOME}/work/ignite_success_${RANDOM_NUMBER}"
-RESTART_SUCCESS_OPT="-DIGNITE_SUCCESS_FILE=${RESTART_SUCCESS_FILE}"
-
-# Mac OS specific support to display correct name in the dock.
-osname=`uname`
-
-if [ "${DOCK_OPTS:-}" == "" ]; then
- DOCK_OPTS="-Xdock:name=Ignite Node"
-fi
-
-#
-# JVM options. See http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp for more details.
-#
-# ADD YOUR/CHANGE ADDITIONAL OPTIONS HERE
-#
-if [ -z "${JVM_OPTS:-}" ] ; then
- JVM_OPTS="-Xms1g -Xmx1g -server -XX:MaxMetaspaceSize=256m"
-fi
-
-#
-# Uncomment the following GC settings if you see spikes in your throughput due to Garbage Collection.
-#
-# JVM_OPTS="$JVM_OPTS -XX:+UseG1GC"
-
-#
-# Uncomment if you get StackOverflowError.
-# On 64 bit systems this value can be larger, e.g. -Xss16m
-#
-# JVM_OPTS="${JVM_OPTS} -Xss4m"
-
-#
-# Uncomment to set preference for IPv4 stack.
-#
-# JVM_OPTS="${JVM_OPTS} -Djava.net.preferIPv4Stack=true"
-
-#
-# Assertions are disabled by default since version 3.5.
-# If you want to enable them - set 'ENABLE_ASSERTIONS' flag to '1'.
-#
-ENABLE_ASSERTIONS="1"
-
-#
-# Set '-ea' options if assertions are enabled.
-#
-if [ "${ENABLE_ASSERTIONS:-}" = "1" ]; then
- JVM_OPTS="${JVM_OPTS} -ea"
-fi
-
-MAIN_CLASS=org.apache.ignite.tensorflow.submitter.JobSubmitter
-
-#
-# Remote debugging (JPDA).
-# Uncomment and change if remote debugging is required.
-#
-# JVM_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787 ${JVM_OPTS}"
-
-#
-# Final JVM_OPTS for Java 9+ compatibility
-#
-if [ $version -eq 8 ] ; then
- JVM_OPTS="\
- -XX:+AggressiveOpts \
- ${JVM_OPTS}"
-
-elif [ $version -gt 8 ] && [ $version -lt 11 ]; then
- JVM_OPTS="\
- -XX:+AggressiveOpts \
- --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
- --add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
- --add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED \
- --add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED \
- --add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
- --illegal-access=permit \
- --add-modules=java.xml.bind \
- ${JVM_OPTS}"
-
-elif [ $version -ge 11 ] ; then
- JVM_OPTS="\
- --add-exports=java.base/jdk.internal.misc=ALL-UNNAMED \
- --add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
- --add-exports=java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED \
- --add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED \
- --add-exports=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED \
- --illegal-access=permit \
- ${JVM_OPTS}"
-fi
-
-
-ERRORCODE="-1"
-
-QUIET="-DIGNITE_QUIET=false"
-
-while [ "${ERRORCODE}" -ne "130" ]
-do
- case $osname in
- Darwin*)
- "$JAVA" ${JVM_OPTS:-} ${QUIET:-} "${DOCK_OPTS}" "${RESTART_SUCCESS_OPT}" \
- -DIGNITE_UPDATE_NOTIFIER=false -DIGNITE_HOME="${IGNITE_HOME}" \
- -DIGNITE_PROG_NAME="$0" -cp "${CP}" ${MAIN_CLASS} "${CONFIG:-}" "$@"
- ;;
- *)
- "$JAVA" ${JVM_OPTS:-} ${QUIET:-} "${RESTART_SUCCESS_OPT}" \
- -DIGNITE_UPDATE_NOTIFIER=false -DIGNITE_HOME="${IGNITE_HOME}" \
- -DIGNITE_PROG_NAME="$0" -cp "${CP}" ${MAIN_CLASS} "$@"
- ;;
- esac
-
- ERRORCODE="$?"
-
- if [ ! -f "${RESTART_SUCCESS_FILE}" ] ; then
- break
- else
- rm -f "${RESTART_SUCCESS_FILE}"
- fi
-done
-
-if [ -f "${RESTART_SUCCESS_FILE}" ] ; then
- rm -f "${RESTART_SUCCESS_FILE}"
-fi
diff --git a/examples/pom-standalone-lgpl.xml b/examples/pom-standalone-lgpl.xml
index a52cf48..a2f56d6 100644
--- a/examples/pom-standalone-lgpl.xml
+++ b/examples/pom-standalone-lgpl.xml
@@ -111,12 +111,6 @@
</dependency>
<dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-tensorflow-model-parser</artifactId>
- <version>to_be_replaced_by_ignite_version</version>
- </dependency>
-
- <dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
@@ -155,12 +149,6 @@
<artifactId>ignite-spark</artifactId>
<version>to_be_replaced_by_ignite_version</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>to_be_replaced_by_ignite_version</version>
- </dependency>
</dependencies>
<build>
@@ -248,12 +236,6 @@
<artifactId>ignite-spark-2.4</artifactId>
<version>to_be_replaced_by_ignite_version</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>to_be_replaced_by_ignite_version</version>
- </dependency>
</dependencies>
<build>
diff --git a/examples/pom-standalone.xml b/examples/pom-standalone.xml
index 33e7817..5c1a08d 100644
--- a/examples/pom-standalone.xml
+++ b/examples/pom-standalone.xml
@@ -111,12 +111,6 @@
</dependency>
<dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-tensorflow-model-parser</artifactId>
- <version>to_be_replaced_by_ignite_version</version>
- </dependency>
-
- <dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
@@ -155,12 +149,6 @@
<artifactId>ignite-spark</artifactId>
<version>to_be_replaced_by_ignite_version</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>to_be_replaced_by_ignite_version</version>
- </dependency>
</dependencies>
<build>
@@ -249,12 +237,6 @@
<artifactId>ignite-spark-2.4</artifactId>
<version>to_be_replaced_by_ignite_version</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>to_be_replaced_by_ignite_version</version>
- </dependency>
</dependencies>
<build>
diff --git a/examples/pom.xml b/examples/pom.xml
index 55f2d4b..3e32690 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -102,12 +102,6 @@
</dependency>
<dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-tensorflow-model-parser</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
@@ -208,12 +202,6 @@
<artifactId>ignite-spark</artifactId>
<version>${project.version}</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>${project.version}</version>
- </dependency>
</dependencies>
<build>
@@ -287,12 +275,6 @@
<artifactId>ignite-spark-2.4</artifactId>
<version>${project.version}</version>
</dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>${project.version}</version>
- </dependency>
</dependencies>
<build>
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/CustomersClusterizationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/CustomersClusterizationExample.java
index ec2f3cc..5c0b8b1 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/CustomersClusterizationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/CustomersClusterizationExample.java
@@ -27,6 +27,8 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.ml.clustering.kmeans.KMeansModel;
import org.apache.ignite.ml.clustering.kmeans.KMeansTrainer;
@@ -38,8 +40,6 @@
import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
import org.apache.ignite.ml.selection.split.TrainTestSplit;
import org.apache.ignite.ml.structures.LabeledVector;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example of using KMeans clusterization to determine the optimal count of clusters in data.
@@ -88,7 +88,8 @@
}
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/GmmClusterizationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/GmmClusterizationExample.java
index fa71eea..549f294 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/GmmClusterizationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/GmmClusterizationExample.java
@@ -108,7 +108,8 @@
System.out.println(">>>");
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
index 24b1b5c..beee4f6 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/clustering/KMeansClusterizationExample.java
@@ -24,14 +24,14 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.clustering.kmeans.KMeansModel;
import org.apache.ignite.ml.clustering.kmeans.KMeansTrainer;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.Tracer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run KMeans clustering algorithm ({@link KMeansTrainer}) over distributed dataset.
@@ -97,7 +97,8 @@
}
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/environment/TrainingWithCustomPreprocessorsExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/environment/TrainingWithCustomPreprocessorsExample.java
index 6cd0851..878fe3c 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/environment/TrainingWithCustomPreprocessorsExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/environment/TrainingWithCustomPreprocessorsExample.java
@@ -20,6 +20,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.DatasetBuilder;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
@@ -37,8 +39,6 @@
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
import org.apache.ignite.ml.structures.LabeledVector;
import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* This example demonstrates an ability of using custom client classes in cluster in case of absence of these classes on
@@ -58,40 +58,49 @@
*/
public static void main(String[] args) throws Exception {
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
- IgniteCache<Integer, Vector> trainingSet = new SandboxMLCache(ignite)
- .fillCacheWith(MLSandboxDatasets.BOSTON_HOUSE_PRICES);
+ IgniteCache<Integer, Vector> trainingSet = null;
+ try {
+ trainingSet = new SandboxMLCache(ignite).fillCacheWith(MLSandboxDatasets.BOSTON_HOUSE_PRICES);
- Vectorizer<Integer, Vector, Integer, Double> basicVectorizer = new DummyVectorizer<Integer>()
- .labeled(Vectorizer.LabelCoordinate.FIRST);
+ Vectorizer<Integer, Vector, Integer, Double> basicVectorizer = new DummyVectorizer<Integer>()
+ .labeled(Vectorizer.LabelCoordinate.FIRST);
- Preprocessor<Integer, Vector> imputingPreprocessor = new ImputerTrainer<Integer, Vector>()
- .fit(ignite, trainingSet, basicVectorizer);
+ Preprocessor<Integer, Vector> imputingPreprocessor = new ImputerTrainer<Integer, Vector>()
+ .fit(ignite, trainingSet, basicVectorizer);
- // In-place definition of custom preprocessor by lambda expression.
- Preprocessor<Integer, Vector> customPreprocessor = (k, v) -> {
- LabeledVector res = imputingPreprocessor.apply(k, v);
- double fifthFeature = res.features().get(5);
+ // In-place definition of custom preprocessor by lambda expression.
+ Preprocessor<Integer, Vector> customPreprocessor = (k, v) -> {
+ LabeledVector res = imputingPreprocessor.apply(k, v);
+ double fifthFeature = res.features().get(5);
- Vector updatedVector = res.features().set(5, fifthFeature > 0 ? Math.log(fifthFeature) : -1);
- return updatedVector.labeled(res.label());
- };
+ Vector updatedVector = res.features().set(5, fifthFeature > 0 ? Math.log(fifthFeature) : -1);
+ return updatedVector.labeled(res.label());
+ };
- Vectorizer9000 customVectorizer = new Vectorizer9000(customPreprocessor);
+ Vectorizer9000 customVectorizer = new Vectorizer9000(customPreprocessor);
- PipelineMdl<Integer, Vector> mdl = new Pipeline<Integer, Vector, Integer, Double>()
- .addVectorizer(customVectorizer)
- .addPreprocessingTrainer(new MinMaxScalerTrainer<Integer, Vector>())
- .addPreprocessingTrainer(new NormalizationTrainer<Integer, Vector>().withP(1))
- .addPreprocessingTrainer(getCustomTrainer())
- .addTrainer(new DecisionTreeClassificationTrainer(5, 0))
- .fit(ignite, trainingSet);
+ PipelineMdl<Integer, Vector> mdl = new Pipeline<Integer, Vector, Integer, Double>()
+ .addVectorizer(customVectorizer)
+ .addPreprocessingTrainer(new MinMaxScalerTrainer<Integer, Vector>())
+ .addPreprocessingTrainer(new NormalizationTrainer<Integer, Vector>().withP(1))
+ .addPreprocessingTrainer(getCustomTrainer())
+ .addTrainer(new DecisionTreeClassificationTrainer(5, 0))
+ .fit(ignite, trainingSet);
- System.out.println(">>> Perform scoring.");
- double score = Evaluator.evaluate(trainingSet,
- mdl, mdl.getPreprocessor(), MetricName.R2
- );
+ System.out.println(">>> Perform scoring.");
+ double score = Evaluator.evaluate(trainingSet,
+ mdl, mdl.getPreprocessor(), MetricName.R2
+ );
- System.out.println(">>> R^2 score: " + score);
+ System.out.println(">>> R^2 score: " + score);
+ }
+ finally {
+ if (trainingSet != null)
+ trainingSet.destroy();
+ }
+ }
+ finally {
+ System.out.flush();
}
}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/Coin.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/Coin.java
deleted file mode 100644
index 2ce5dbb..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/Coin.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.change;
-
-import java.io.Serializable;
-
-/**
- * POJO to model a coin.
- */
-public class Coin implements Serializable {
- /**
- * Define Coin Type.
- */
- public enum CoinType {
- /**
- *
- */
- PENNY,
- /**
- *
- */
- QUARTER,
- /**
- *
- */
- NICKEL,
- /**
- *
- */
- DIME
- }
-
- /**
- * Number of coins.
- */
- private int numOfCoins;
-
- /**
- * Coin type.
- */
- private CoinType coinType;
-
- /**
- * Create instance.
- *
- * @param coinType Type of coin.
- * @param numOfCoins Number of coins.
- */
- Coin(CoinType coinType, int numOfCoins) {
- this.coinType = coinType;
- this.numOfCoins = numOfCoins;
- }
-
- /**
- * Retrieve the number of coins.
- *
- * @return Number of coins.
- */
- public int getNumOfCoins() {
- return numOfCoins;
- }
-
- /**
- * Set the number of coins.
- *
- * @param numOfCoins Number of coins.
- */
- public void setNumOfCoins(int numOfCoins) {
- this.numOfCoins = numOfCoins;
- }
-
- /**
- * Retrieve Coin type.
- *
- * @return Coin type.
- */
- public CoinType getCoinType() {
- return coinType;
- }
-
- /**
- * Set Coin type.
- *
- * @param coinType Coin type.
- */
- public void setCoinType(CoinType coinType) {
- this.coinType = coinType;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public String toString() {
- return "Coin [numOfCoins=" + numOfCoins + ", coinType=" + coinType + "]";
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java
deleted file mode 100644
index 9bcc289..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeFitnessFunction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.change;
-
-import java.util.List;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.IFitnessFunction;
-
-/**
- * This example demonstrates how to create a {@link IFitnessFunction}.
- * <p>
- * Your fitness function will vary depending on your particular use case. For this fitness function, we simply want to
- * calculate the value of an individual solution relative to other solutions.</p>
- */
-public class OptimizeMakeChangeFitnessFunction implements IFitnessFunction {
- /**
- * Target amount.
- */
- private int targetAmount;
-
- /**
- * @param targetAmount Amount of change.
- */
- public OptimizeMakeChangeFitnessFunction(int targetAmount) {
- this.targetAmount = targetAmount;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public double evaluate(List<Gene> genes) {
- int changeAmount = getAmountOfChange(genes);
- int totalCoins = getTotalNumberOfCoins(genes);
- int changeDifference = Math.abs(targetAmount - changeAmount);
-
- double fitness = (99 - changeDifference);
-
- if (changeAmount == targetAmount)
- fitness += 100 - (10 * totalCoins);
-
- return fitness;
- }
-
- /**
- * Calculate amount of change.
- *
- * @param genes List of genes.
- * @return Amount of change.
- */
- private int getAmountOfChange(List<Gene> genes) {
- Gene quarterGene = genes.get(0);
- Gene dimeGene = genes.get(1);
- Gene nickelGene = genes.get(2);
- Gene pennyGene = genes.get(3);
-
- int numQuarters = ((Coin)quarterGene.getVal()).getNumOfCoins();
- int numDimes = ((Coin)dimeGene.getVal()).getNumOfCoins();
- int numNickels = ((Coin)nickelGene.getVal()).getNumOfCoins();
- int numPennies = ((Coin)pennyGene.getVal()).getNumOfCoins();
-
- return (numQuarters * 25) + (numDimes * 10) + (numNickels * 5) + numPennies;
- }
-
- /**
- * Return the total number of coins.
- *
- * @param genes List of genes.
- * @return Number of coins.
- */
- private int getTotalNumberOfCoins(List<Gene> genes) {
- int totalNumOfCoins = 0;
-
- for (Gene gene : genes) {
- int numOfCoins = ((Coin)gene.getVal()).getNumOfCoins();
- totalNumOfCoins += numOfCoins;
- }
-
- return totalNumOfCoins;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java
deleted file mode 100644
index e9415e0..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeGAExample.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.change;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.GAGrid;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.ChromosomeCriteria;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * This example demonstrates how to use the {@link GAGrid} framework. It is inspired by
- * <a href="https://github.com/martin-steghoefer/jgap/blob/master/examples/src/examples/MinimizingMakeChange.java">
- * JGAP's "Minimize Make Change"</a> example.
- * <p>
- * In this example, the objective is to calculate the minimum number of coins that equal user specified amount of change
- * ie: {@code -DAMOUNTCHANGE}.</p>
- * <p>
- * {@code mvn exec:java -Dexec.mainClass="org.apache.ignite.examples.ml.genetic.change.OptimizeMakeChangeGAExample"
- * -DAMOUNTCHANGE=75}</p>
- * <p>
- * Code in this example launches Ignite grid, prepares simple test data (gene pool) and configures GA grid.</p>
- * <p>
- * After that it launches the process of evolution on GA grid and outputs the progress and results.</p>
- * <p>
- * You can change the test data and parameters of GA grid used in this example and re-run it to explore this
- * functionality further.</p>
- * <p>
- * Remote nodes should always be started with special configuration file which enables P2P class loading: {@code
- * 'ignite.{sh|bat} examples/config/example-ignite.xml'}.</p>
- * <p>
- * Alternatively you can run ExampleNodeStartup in another JVM which will start node with {@code
- * examples/config/example-ignite.xml} configuration.</p>
- */
-public class OptimizeMakeChangeGAExample {
- /**
- * Executes example.
- * <p>
- * Specify value for {@code -DAMOUNTCHANGE} JVM system variable.
- *
- * @param args Command line arguments, none required.
- */
- public static void main(String args[]) {
- System.out.println(">>> OptimizeMakeChange GA grid example started.");
-
- String sAmountChange = "75";
-
- StringBuilder sbErrorMsg = new StringBuilder();
- sbErrorMsg.append("AMOUNTCHANGE System property not set. Please provide a valid value between 1 and 99. ");
- sbErrorMsg.append(" ");
- sbErrorMsg.append("IE: -DAMOUNTCHANGE=75");
- sbErrorMsg.append("\n");
- sbErrorMsg.append("Using default value: 75");
-
- //Check if -DAMOUNTCHANGE JVM system variable is provided.
- if (System.getProperty("AMOUNTCHANGE") == null)
- System.out.println(sbErrorMsg);
- else
- sAmountChange = System.getProperty("AMOUNTCHANGE");
-
- try {
- // Create an Ignite instance as you would in any other use case.
- Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
-
- // Create GAConfiguration.
- GAConfiguration gaCfg = new GAConfiguration();
-
- // Set Gene Pool.
- List<Gene> genes = getGenePool();
-
- // Set selection method.
- gaCfg.setSelectionMtd(GAGridConstants.SELECTION_METHOD.SELECTION_METHOD_ELITISM);
- gaCfg.setElitismCnt(10);
-
- // Set the Chromosome Length to '4' since we have 4 coins.
- gaCfg.setChromosomeLen(4);
-
- // Set population size.
- gaCfg.setPopulationSize(500);
-
- // Initialize gene pool.
- gaCfg.setGenePool(genes);
-
- // Set Truncate Rate.
- gaCfg.setTruncateRate(.10);
-
- // Set Cross Over Rate.
- gaCfg.setCrossOverRate(.50);
-
- // Set Mutation Rate.
- gaCfg.setMutationRate(.50);
-
- // Create and set Fitness function.
- OptimizeMakeChangeFitnessFunction function = new OptimizeMakeChangeFitnessFunction(new Integer(sAmountChange));
- gaCfg.setFitnessFunction(function);
-
- // Create and set TerminateCriteria.
- OptimizeMakeChangeTerminateCriteria termCriteria = new OptimizeMakeChangeTerminateCriteria(ignite,
- System.out::println);
-
- ChromosomeCriteria chromosomeCriteria = new ChromosomeCriteria();
-
- List<String> values = new ArrayList<>();
-
- values.add("coinType=QUARTER");
- values.add("coinType=DIME");
- values.add("coinType=NICKEL");
- values.add("coinType=PENNY");
-
- chromosomeCriteria.setCriteria(values);
-
- gaCfg.setChromosomeCriteria(chromosomeCriteria);
- gaCfg.setTerminateCriteria(termCriteria);
-
- // Initialize GAGrid.
- GAGrid gaGrid = new GAGrid(gaCfg, ignite);
-
- System.out.println("##########################################################################################");
-
- System.out.println("Calculating optimal set of coins where amount of change is " + sAmountChange);
-
- System.out.println("##########################################################################################");
-
- Chromosome chromosome = gaGrid.evolve();
-
- System.out.println(">>> Evolution result: " + chromosome);
-
- Ignition.stop(true);
-
- System.out.println(">>> OptimizeMakeChange GA grid example completed.");
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- }
-
- /**
- * Helper routine to initialize Gene pool.
- * <p>
- * In typical use case genes may be stored in database.
- *
- * @return List of Genes.
- */
- private static List<Gene> getGenePool() {
- List<Gene> list = new ArrayList<>();
-
- Gene quarterGene1 = new Gene(new Coin(Coin.CoinType.QUARTER, 3));
- Gene quarterGene2 = new Gene(new Coin(Coin.CoinType.QUARTER, 2));
- Gene quarterGene3 = new Gene(new Coin(Coin.CoinType.QUARTER, 1));
- Gene quarterGene4 = new Gene(new Coin(Coin.CoinType.QUARTER, 0));
-
- Gene dimeGene1 = new Gene(new Coin(Coin.CoinType.DIME, 2));
- Gene dimeGene2 = new Gene(new Coin(Coin.CoinType.DIME, 1));
- Gene dimeGene3 = new Gene(new Coin(Coin.CoinType.DIME, 0));
-
- Gene nickelGene1 = new Gene(new Coin(Coin.CoinType.NICKEL, 1));
- Gene nickelGene2 = new Gene(new Coin(Coin.CoinType.NICKEL, 0));
-
- Gene pennyGene1 = new Gene(new Coin(Coin.CoinType.PENNY, 4));
- Gene pennyGene2 = new Gene(new Coin(Coin.CoinType.PENNY, 3));
- Gene pennyGene3 = new Gene(new Coin(Coin.CoinType.PENNY, 2));
- Gene pennyGene4 = new Gene(new Coin(Coin.CoinType.PENNY, 1));
- Gene pennyGene5 = new Gene(new Coin(Coin.CoinType.PENNY, 0));
-
- list.add(quarterGene1);
- list.add(quarterGene2);
- list.add(quarterGene3);
- list.add(quarterGene4);
- list.add(dimeGene1);
- list.add(dimeGene2);
- list.add(dimeGene3);
- list.add(nickelGene1);
- list.add(nickelGene2);
- list.add(pennyGene1);
- list.add(pennyGene2);
- list.add(pennyGene3);
- list.add(pennyGene4);
- list.add(pennyGene5);
-
- return list;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java
deleted file mode 100644
index 267d334..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/change/OptimizeMakeChangeTerminateCriteria.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.change;
-
-import java.util.List;
-import java.util.function.Consumer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria;
-import org.apache.ignite.ml.genetic.utils.GAGridUtils;
-
-/**
- * Terminate Condition implementation for {@link OptimizeMakeChangeGAExample}.
- */
-public class OptimizeMakeChangeTerminateCriteria implements ITerminateCriteria {
- /**
- *
- */
- private final Ignite ignite;
-
- /**
- *
- */
- private final Consumer<String> logConsumer;
-
- /**
- * Create class instance.
- *
- * @param ignite Ignite instance.
- * @param logConsumer Logging consumer.
- */
- OptimizeMakeChangeTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
- this.ignite = ignite;
- this.logConsumer = logConsumer;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public boolean isTerminationConditionMet(Chromosome fittestChromosome, double averageFitnessScore,
- int currGeneration) {
- boolean isTerminate = true;
-
- logConsumer.accept(
- "\n##########################################################################################"
- + "\n Generation: " + currGeneration
- + "\n Fittest is Chromosome Key: " + fittestChromosome
- + "\n Chromosome: " + fittestChromosome
- + "\n" + reportCoins(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
- + "\nAvg Chromosome Fitness: " + averageFitnessScore
- + "\n##########################################################################################");
-
- if (!(currGeneration > 5))
- isTerminate = false;
-
- return isTerminate;
- }
-
- /**
- * Helper to print change details.
- *
- * @param genes List if Genes.
- * @return Details to print.
- */
- private String reportCoins(List<Gene> genes) {
- StringBuilder sb = new StringBuilder();
-
- for (Gene gene : genes) {
- sb.append("\nCoin Type: ").append(((Coin)gene.getVal()).getCoinType().toString())
- .append("\nNumber of Coins: ").append(((Coin)gene.getVal()).getNumOfCoins());
- }
-
- return sb.toString();
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldFitnessFunction.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldFitnessFunction.java
deleted file mode 100644
index 9311b78..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldFitnessFunction.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.helloworld;
-
-import java.util.List;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.IFitnessFunction;
-
-/**
- * This example demonstrates how to create a {@link IFitnessFunction}.
- * <p>
- * Your fitness function will vary depending on your particular use case. For this fitness function, we simply want to
- * calculate the value of an individual solution relative to other solutions.
- * <p>
- * To do this, we increase fitness score by '1' for each character that is in correct position.</p>
- * <p>
- * For our solution, genetic algorithm will continue until we achieve a fitness score of '11', as 'HELLO WORLD' contains
- * 11 characters.</p>
- */
-public class HelloWorldFitnessFunction implements IFitnessFunction {
- /**
- * {@inheritDoc}
- */
- @Override public double evaluate(List<Gene> genes) {
- double matches = 0;
-
- for (int i = 0; i < genes.size(); i++) {
- String targetStr = "HELLO WORLD";
- if (genes.get(i).getVal().equals(targetStr.charAt(i)))
- matches += 1;
- }
- return matches;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java
deleted file mode 100644
index 5a9ac62..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldGAExample.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.helloworld;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.GAGrid;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * This example demonstrates how to use the {@link GAGrid} framework. In this example, we want to evolve a string of 11
- * characters such that the word 'HELLO WORLD' is found.
- * <p>
- * Code in this example launches Ignite grid, prepares simple test data (gene pool) and configures GA grid.</p>
- * <p>
- * After that it launches the process of evolution on GA grid and outputs the progress and results.</p>
- * <p>
- * You can change the test data and parameters of GA grid used in this example and re-run it to explore this
- * functionality further.</p>
- * <p>
- * For example, you may change the some basic genetic parameters on the GAConfiguration object:
- * <p>
- * Mutation Rate Crossover Rate Population Size Selection Method
- *
- * <p>
- * How to run from command line:</p>
- * <p>
- * {@code mvn exec:java -Dexec.mainClass="org.apache.ignite.examples.ml.genetic.helloworld.HelloWorldGAExample"}</p>
- * <p>
- * Remote nodes should always be started with special configuration file which enables P2P class loading: {@code
- * 'ignite.{sh|bat} examples/config/example-ignite.xml'}.</p>
- * <p>
- * Alternatively you can run ExampleNodeStartup in another JVM which will start node with {@code
- * examples/config/example-ignite.xml} configuration.</p>
- */
-public class HelloWorldGAExample {
- /**
- * Executes example.
- *
- * @param args Command line arguments, none required.
- */
- public static void main(String args[]) {
- System.out.println(">>> HelloWorld GA grid example started.");
-
- try {
- // Create an Ignite instance as you would in any other use case.
- Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
-
- // Create GAConfiguration.
- GAConfiguration gaCfg = new GAConfiguration();
-
- // Set Gene Pool.
- List<Gene> genes = getGenePool();
-
- // Set the Chromosome Length to '11' since 'HELLO WORLD' contains 11 characters.
- gaCfg.setChromosomeLen(11);
-
- // Initialize gene pool.
- gaCfg.setGenePool(genes);
-
- // Set CrossOver Rate.
- gaCfg.setCrossOverRate(.05);
-
- // Set Mutation Rate.
- gaCfg.setMutationRate(.05);
-
- // Set Selection Method.
- gaCfg.setSelectionMtd(GAGridConstants.SELECTION_METHOD.SELECTION_METHOD_ROULETTE_WHEEL);
-
- // Set Population Size.
- gaCfg.setPopulationSize(2000);
-
- // Create and set Fitness function.
- HelloWorldFitnessFunction function = new HelloWorldFitnessFunction();
- gaCfg.setFitnessFunction(function);
-
- // Create and set TerminateCriteria.
- AtomicInteger cnt = new AtomicInteger(0);
- HelloWorldTerminateCriteria termCriteria = new HelloWorldTerminateCriteria(ignite,
- msg -> {
- if (cnt.getAndIncrement() % 20 == 0)
- System.out.println(msg);
- });
-
- gaCfg.setTerminateCriteria(termCriteria);
-
- GAGrid gaGrid = new GAGrid(gaCfg, ignite);
-
- // Evolve the population.
- Chromosome chromosome = gaGrid.evolve();
-
- System.out.println(">>> Evolution result: " + chromosome);
-
- Ignition.stop(true);
-
- System.out.println(">>> HelloWorld GA grid example completed.");
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- }
-
- /**
- * Helper routine to initialize Gene pool.
- * <p>
- * In typical use case genes may be stored in database.
- *
- * @return List of Gene objects.
- */
- private static List<Gene> getGenePool() {
- List<Gene> list = new ArrayList<>();
-
- char[] chars = {
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' '};
-
- for (char aChar : chars) {
- Gene gene = new Gene(aChar);
- list.add(gene);
- }
-
- return list;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java
deleted file mode 100644
index 66a8374..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/helloworld/HelloWorldTerminateCriteria.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.helloworld;
-
-import java.util.List;
-import java.util.function.Consumer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria;
-import org.apache.ignite.ml.genetic.utils.GAGridUtils;
-
-/**
- * Represents the terminate condition for {@link HelloWorldGAExample}.
- * <p>
- * Class terminates Genetic algorithm when fitness score is more than 10.</p>
- */
-public class HelloWorldTerminateCriteria implements ITerminateCriteria {
- /**
- * Ignite instance.
- */
- private final Ignite ignite;
-
- /**
- *
- */
- private final Consumer<String> logConsumer;
-
- /**
- * Create class instance.
- *
- * @param ignite Ignite instance.
- * @param logConsumer Logging consumer.
- */
- HelloWorldTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
- this.ignite = ignite;
- this.logConsumer = logConsumer;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public boolean isTerminationConditionMet(Chromosome fittestChromosome, double averageFitnessScore,
- int currGeneration) {
- boolean isTerminate = true;
-
- logConsumer.accept(
- "\n##########################################################################################"
- + "\n Generation: " + currGeneration
- + "\n Fittest is Chromosome Key: " + fittestChromosome
- + "\n Chromosome: " + fittestChromosome
- + "\n" + printPhrase(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
- + "\nAvg Chromosome Fitness: " + averageFitnessScore
- + "\n##########################################################################################");
-
- if (!(fittestChromosome.getFitnessScore() > 10))
- isTerminate = false;
-
- return isTerminate;
- }
-
- /**
- * Helper to print phrase.
- *
- * @param genes List of Genes.
- * @return Phrase to print.
- */
- private String printPhrase(List<Gene> genes) {
- StringBuilder sbPhrase = new StringBuilder();
-
- for (Gene gene : genes)
- sbPhrase.append(((Character)gene.getVal()).toString());
-
- return sbPhrase.toString();
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/Item.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/Item.java
deleted file mode 100644
index 6bf7947..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/Item.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.knapsack;
-
-import java.io.Serializable;
-
-/**
- * POJO to model an Item.
- */
-public class Item implements Serializable {
- /**
- * Weight of item in lbs.
- */
- private double weight;
-
- /**
- * Value of item.
- */
- private double val;
-
- /**
- * Name of item.
- */
- private String name;
-
- /**
- * Get the weight.
- *
- * @return Weight.
- */
- public double getWeight() {
- return weight;
- }
-
- /**
- * Set the weight.
- *
- * @param weight Weight.
- */
- public void setWeight(double weight) {
- this.weight = weight;
- }
-
- /**
- * Get the value.
- *
- * @return Value.
- */
- public double getVal() {
- return val;
- }
-
- /**
- * Set the value.
- *
- * @param val Value.
- */
- public void setVal(double val) {
- this.val = val;
- }
-
- /**
- * Get the name.
- *
- * @return Name
- */
- public String getName() {
- return name;
- }
-
- /**
- * Set the name.
- *
- * @param name Name.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public String toString() {
- return "Item [weight=" + weight + ", value=" + val + ", name=" + name + "]";
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackFitnessFunction.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackFitnessFunction.java
deleted file mode 100644
index fe3e24d..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackFitnessFunction.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.knapsack;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.IFitnessFunction;
-
-/**
- * This example demonstrates how to create a {@link IFitnessFunction}.
- * <p>
- * Your fitness function will vary depending on your particular use case. For this fitness function, we simply want to
- * calculate the weight and value of an individual solution relative to other solutions.</p>
- * <p>
- * To do this, we total the weights and values of all the genes within a chromosome.</p>
- */
-public class KnapsackFitnessFunction implements IFitnessFunction {
- /**
- * {@inheritDoc}
- */
- @Override public double evaluate(List<Gene> genes) {
- double val = 0;
- double weight = 0;
-
- List<Long> duplicates = new ArrayList<>();
- int badSolution = 1;
-
- for (Gene gene : genes) {
- weight += ((Item)(gene.getVal())).getWeight();
- val += ((Item)(gene.getVal())).getVal();
-
- double maximumWeight = 20;
- if (duplicates.contains(gene.id()) || (weight > maximumWeight)) {
- badSolution = 0;
- break;
- }
- else
- duplicates.add(gene.id());
- }
-
- return (val * badSolution);
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java
deleted file mode 100644
index cd3cdfd4..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackGAExample.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.knapsack;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.GAGrid;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-
-/**
- * This example demonstrates how to use the {@link GAGrid} framework. It shows working with Knapsack Problem: Given a
- * set of 30 items, each with a weight and a value, pack 10 items in knapsack so that the total weight is less or equal
- * 20 lbs, and the total value is maximized.
- * <p>
- * Code in this example launches Ignite grid, prepares simple test data (gene pool) and configures GA grid.</p>
- * <p>
- * After that it launches the process of evolution on GA grid and outputs the progress and results.</p>
- * <p>
- * You can change the test data and parameters of GA grid used in this example and re-run it to explore this
- * functionality further.</p>
- * <p>
- * How to run from command line:</p>
- * <p>
- * {@code mvn exec:java -Dexec.mainClass="org.apache.ignite.examples.ml.genetic.knapsack.KnapsackGAExample"}</p>
- * <p>
- * Remote nodes should always be started with special configuration file which enables P2P class loading: {@code
- * 'ignite.{sh|bat} examples/config/example-ignite.xml'}.</p>
- * <p>
- * Alternatively you can run ExampleNodeStartup in another JVM which will start node with {@code
- * examples/config/example-ignite.xml} configuration.</p>
- */
-public class KnapsackGAExample {
- /**
- * @param args Command line arguments, none required.
- */
- public static void main(String args[]) {
- System.out.println(">>> Knapsack GA grid example started.");
-
- try {
- // Create an Ignite instance as you would in any other use case.
- Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
-
- // Create GAConfiguration.
- GAConfiguration gaCfg = new GAConfiguration();
-
- // Set Gene Pool.
- List<Gene> genes = getGenePool();
-
- // Set the Chromosome Length to '10' since our knapsack may contain a total of 10 items.
- gaCfg.setChromosomeLen(10);
-
- // Initialize gene pool.
- gaCfg.setGenePool(genes);
-
- // Create and set Fitness function.
- KnapsackFitnessFunction function = new KnapsackFitnessFunction();
- gaCfg.setFitnessFunction(function);
-
- // Create and set TerminateCriteria.
- AtomicInteger cnt = new AtomicInteger(0);
- KnapsackTerminateCriteria termCriteria = new KnapsackTerminateCriteria(ignite,
- msg -> {
- if (cnt.getAndIncrement() % 10 == 0)
- System.out.println(msg);
- });
- gaCfg.setTerminateCriteria(termCriteria);
-
- GAGrid gaGrid = new GAGrid(gaCfg, ignite);
-
- // Evolve the population.
- Chromosome chromosome = gaGrid.evolve();
-
- System.out.println(">>> Evolution result: " + chromosome);
-
- Ignition.stop(true);
-
- System.out.println(">>> Knapsack GA grid example completed.");
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- }
-
- /**
- * Helper routine to initialize Gene pool.
- * <p>
- * In typical use case genes may be stored in database.
- *
- * @return List of Gene objects.
- */
- private static List<Gene> getGenePool() {
- List<Gene> list = new ArrayList<>();
-
- Item item1 = new Item();
- item1.setName("Swiss Army Knife");
- item1.setWeight(0.08125);
- item1.setVal(15);
- Gene gene1 = new Gene(item1);
-
- Item item2 = new Item();
- item2.setName("Duct Tape");
- item2.setWeight(1.3);
- item2.setVal(3);
- Gene gene2 = new Gene(item2);
-
- Item item3 = new Item();
- item3.setName("Rope (50 feet)");
- item3.setWeight(7);
- item3.setVal(10);
- Gene gene3 = new Gene(item3);
-
- Item item4 = new Item();
- item4.setName("Satellite phone");
- item4.setWeight(2);
- item4.setVal(8);
- Gene gene4 = new Gene(item4);
-
- Item item5 = new Item();
- item5.setName("Elmer's Glue");
- item5.setWeight(0.25);
- item5.setVal(2);
- Gene gene5 = new Gene(item5);
-
- Item item6 = new Item();
- item6.setName("Toilet Paper Roll");
- item6.setWeight(.5);
- item6.setVal(4);
- Gene gene6 = new Gene(item6);
-
- Item item7 = new Item();
- item7.setName("Binoculars");
- item7.setWeight(3);
- item7.setVal(5);
- Gene gene7 = new Gene(item7);
-
- Item item8 = new Item();
- item8.setName("Compass");
- item8.setWeight(0.0573202);
- item8.setVal(15);
- Gene gene8 = new Gene(item8);
-
- Item item9 = new Item();
- item9.setName("Jug (pre-filled with water)");
- item9.setWeight(4);
- item9.setVal(6);
- Gene gene9 = new Gene(item9);
-
- Item item10 = new Item();
- item10.setName("Flashlight");
- item10.setWeight(2);
- item10.setVal(4);
- Gene gene10 = new Gene(item10);
-
- Item item11 = new Item();
- item11.setName("Box of paper clips");
- item11.setWeight(.9);
- item11.setVal(2);
- Gene gene11 = new Gene(item11);
-
- Item item12 = new Item();
- item12.setName("Gloves (1 pair)");
- item12.setWeight(.8125);
- item12.setVal(3);
- Gene gene12 = new Gene(item12);
-
- Item item13 = new Item();
- item13.setName("Scissors");
- item13.setWeight(0.2);
- item13.setVal(2);
- Gene gene13 = new Gene(item13);
-
- Item item14 = new Item();
- item14.setName("Signal Flair (4pk)");
- item14.setWeight(4);
- item14.setVal(5);
- Gene gene14 = new Gene(item14);
-
- Item item15 = new Item();
- item15.setName("Water Purifying System");
- item15.setWeight(0.5125);
- item15.setVal(4);
- Gene gene15 = new Gene(item15);
-
- Item item16 = new Item();
- item16.setName("Whistle");
- item16.setWeight(0.075);
- item16.setVal(2);
- Gene gene16 = new Gene(item16);
-
- Item item17 = new Item();
- item17.setName("Sleeping Bag");
- item17.setWeight(0.38125);
- item17.setVal(4);
- Gene gene17 = new Gene(item17);
-
- Item item18 = new Item();
- item18.setName("Insect Repellent");
- item18.setWeight(1.15);
- item18.setVal(3);
- Gene gene18 = new Gene(item18);
-
- Item item19 = new Item();
- item19.setName("Trowel");
- item19.setWeight(0.31875);
- item19.setVal(3);
- Gene gene19 = new Gene(item19);
-
- Item item20 = new Item();
- item20.setName("Lighter");
- item20.setWeight(.2);
- item20.setVal(4);
- Gene gene20 = new Gene(item20);
-
- Item item21 = new Item();
- item21.setName("Safety Horn");
- item21.setWeight(.21);
- item21.setVal(3);
- Gene gene21 = new Gene(item21);
-
- Item item22 = new Item();
- item22.setName("Headlamp");
- item22.setWeight(.8);
- item22.setVal(4);
- Gene gene22 = new Gene(item22);
-
- Item item23 = new Item();
- item23.setName("Freeze Dried Food Kit");
- item23.setWeight(2);
- item23.setVal(6);
- Gene gene23 = new Gene(item23);
-
- Item item24 = new Item();
- item24.setName("Sunscreen");
- item24.setWeight(.5);
- item24.setVal(4);
- Gene gene24 = new Gene(item24);
-
- Item item25 = new Item();
- item25.setName("Trekking Pole (Adjustable)");
- item25.setWeight(1.3);
- item25.setVal(4);
- Gene gene25 = new Gene(item25);
-
- Item item26 = new Item();
- item26.setName("Counter Assault Bear Spray");
- item26.setWeight(.5);
- item26.setVal(4);
- Gene gene26 = new Gene(item26);
-
- Item item27 = new Item();
- item27.setName("Insect Spray");
- item27.setWeight(.5);
- item27.setVal(3);
- Gene gene27 = new Gene(item27);
-
- Item item28 = new Item();
- item28.setName("Hand sanitizer");
- item28.setWeight(.625);
- item28.setVal(3);
- Gene gene28 = new Gene(item28);
-
- Item item29 = new Item();
- item29.setName("Mirror");
- item29.setWeight(.5);
- item29.setVal(3);
- Gene gene29 = new Gene(item29);
-
- Item item30 = new Item();
- item30.setName("First Aid Kit");
- item30.setWeight(3);
- item30.setVal(6);
- Gene gene30 = new Gene(item30);
-
- list.add(gene1);
- list.add(gene2);
- list.add(gene3);
- list.add(gene4);
- list.add(gene5);
- list.add(gene6);
- list.add(gene7);
- list.add(gene8);
- list.add(gene9);
- list.add(gene10);
- list.add(gene11);
- list.add(gene12);
- list.add(gene13);
- list.add(gene14);
- list.add(gene15);
- list.add(gene16);
- list.add(gene17);
- list.add(gene18);
- list.add(gene19);
- list.add(gene20);
- list.add(gene21);
- list.add(gene22);
- list.add(gene23);
- list.add(gene24);
- list.add(gene25);
- list.add(gene26);
- list.add(gene27);
- list.add(gene28);
- list.add(gene29);
- list.add(gene30);
-
- return list;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java
deleted file mode 100644
index 9bbeca5..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/knapsack/KnapsackTerminateCriteria.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.knapsack;
-
-import java.util.List;
-import java.util.function.Consumer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria;
-import org.apache.ignite.ml.genetic.utils.GAGridUtils;
-
-/**
- * Represents the terminate condition for {@link KnapsackGAExample}.
- * <p>
- * Class terminates Genetic algorithm when once GA Grid has performed 30 generations.</p>
- */
-public class KnapsackTerminateCriteria implements ITerminateCriteria {
- /**
- * Ignite instance.
- */
- private final Ignite ignite;
-
- /**
- *
- */
- private final Consumer<String> logConsumer;
-
- /**
- * Create class instance.
- *
- * @param ignite Ignite instance.
- * @param logConsumer Logging consumer.
- */
- KnapsackTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
- this.ignite = ignite;
- this.logConsumer = logConsumer;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public boolean isTerminationConditionMet(Chromosome fittestChromosome, double averageFitnessScore,
- int currGeneration) {
- boolean isTerminate = true;
-
- logConsumer.accept(
- "\n##########################################################################################"
- + "\n Generation: " + currGeneration
- + "\n Fittest is Chromosome Key: " + fittestChromosome
- + "\nTotal value is: " + fittestChromosome.getFitnessScore()
- + "\nTotal weight is: " + calculateTotalWeight(
- GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
- + "\nChromosome: " + fittestChromosome
- + "\n" + reportItems(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
- + "\n##########################################################################################");
-
- if (!(currGeneration > 29))
- isTerminate = false;
-
- return isTerminate;
- }
-
- /**
- * Calculate total weight.
- *
- * @param genes List of Genes.
- * @return Calculated value.
- */
- private double calculateTotalWeight(List<Gene> genes) {
- double totalWeight = 0;
- for (Gene gene : genes)
- totalWeight += ((Item)gene.getVal()).getWeight();
-
- return totalWeight;
- }
-
- /**
- * Helper to print items in knapsack.
- *
- * @param genes List of Genes.
- * @return Items to print.
- */
- private String reportItems(List<Gene> genes) {
- StringBuilder sb = new StringBuilder();
-
- for (Gene gene : genes) {
- sb.append("\n------------------------------------------------------------------------------------------")
- .append("\nName: ").append(((Item)gene.getVal()).getName())
- .append("\nWeight: ").append(((Item)gene.getVal()).getWeight())
- .append("\nValue: ").append(((Item)gene.getVal()).getVal());
- }
-
- return sb.toString();
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/Movie.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/Movie.java
deleted file mode 100644
index 2aa96d6..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/Movie.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.movie;
-
-import java.util.List;
-
-/**
- * POJO to model a movie.
- */
-public class Movie {
- /**
- * Name of movie.
- */
- private String name;
-
- /**
- * Genre of movie.
- */
- private List genre;
-
- /**
- * Rating of movie.
- */
- private String rating;
-
- /**
- * IMDB rating.
- */
- private double imdbRating;
-
- /**
- * Year of movie.
- */
- private String year;
-
- /**
- * Get the year.
- *
- * @return Year.
- */
- public String getYear() {
- return year;
- }
-
- /**
- * Set the year.
- *
- * @param year Year.
- */
- public void setYear(String year) {
- this.year = year;
- }
-
- /**
- * Get the <a href="https://en.wikipedia.org/wiki/IMDb">IMDB rating</a>.
- *
- * @return IMDB rating.
- */
- public double getImdbRating() {
- return imdbRating;
- }
-
- /**
- * Set the IMDB rating.
- *
- * @param imdbRating IMDB rating.
- */
- public void setImdbRating(double imdbRating) {
- this.imdbRating = imdbRating;
- }
-
- /**
- * Get the name of movie.
- *
- * @return Name of movie.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Set the name of movie.
- *
- * @param name Movie name.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Get movie genres.
- *
- * @return List of genres.
- */
- public List getGenre() {
- return genre;
- }
-
- /**
- * Set the genre.
- *
- * @param genre List of genres of movie.
- */
- public void setGenre(List genre) {
- this.genre = genre;
- }
-
- /**
- * Get the rating of the movie.
- *
- * @return Movie rating.
- */
- public String getRating() {
- return rating;
- }
-
- /**
- * Set the rating of the movie.
- *
- * @param rating Movie rating.
- */
- public void setRating(String rating) {
- this.rating = rating;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public String toString() {
- return "Movie [name=" + name + ", genre=" + genre + ", rating=" + rating + ", imdbRating=" + imdbRating
- + ", year=" + year + "]";
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java
deleted file mode 100644
index 197f3b6..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieFitnessFunction.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.movie;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.IFitnessFunction;
-
-/**
- * This example demonstrates how to create a {@link IFitnessFunction}.
- * <p>
- * Your fitness function will vary depending on your particular use case. For this fitness function, we want to
- * calculate the value of an individual solution relative to other solutions.</p>
- * <p>
- * To do this, we increase fitness score by number of times genre is found in list of movies. In addition, we increase
- * score by fictional IMDB rating.</p>
- * <p>
- * If there are duplicate movies in selection, we automatically apply a '0' fitness score.</p>
- */
-public class MovieFitnessFunction implements IFitnessFunction {
- /**
- * Genres.
- */
- private List<String> genres;
-
- /**
- * Create instance.
- *
- * @param genres List of genres.
- */
- public MovieFitnessFunction(List<String> genres) {
- this.genres = genres;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public double evaluate(List<Gene> genes) {
- double score = 0;
- List<String> duplicates = new ArrayList<>();
- int badSolution = 1;
-
- for (Gene gene : genes) {
- Movie movie = (Movie)gene.getVal();
- if (duplicates.contains(movie.getName()))
- badSolution = 0;
- else
- duplicates.add(movie.getName());
-
- double genreScore = getGenreScore(movie);
- if (genreScore == 0)
- badSolution = 0;
-
- score = (score + movie.getImdbRating()) + (genreScore);
- }
- return (score * badSolution);
- }
-
- /**
- * Helper to calculate genre score.
- *
- * @param movie Movie.
- * @return Genre score.
- */
- private double getGenreScore(Movie movie) {
- double genreScore = 0;
-
- for (String genre : genres) {
- if (movie.getGenre().contains(genre))
- genreScore += 1;
- }
- return genreScore;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java
deleted file mode 100644
index 6fb60c9..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieGAExample.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.movie;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.GAGrid;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * In this example, we utilize {@link GAGrid} framework to calculate an optimal set of movies based on our interests in
- * various genres (ie: Action, Comedy, and Romance).
- * <p>
- * Code in this example launches Ignite grid, prepares simple test data (gene pool) and configures GA grid.</p>
- * <p>
- * After that it launches the process of evolution on GA grid and outputs the progress and results.</p>
- * <p>
- * You can change the test data and parameters of GA grid used in this example and re-run it to explore this
- * functionality further.</p>
- * <p>
- * How to run from command line:</p>
- * <p>
- * {@code mvn exec:java -Dexec.mainClass="org.apache.ignite.examples.ml.genetic.movie.MovieGAExample"
- * -DGENRES=Action,Comedy}</p>
- * <p>
- * Remote nodes should always be started with special configuration file which enables P2P class loading: {@code
- * 'ignite.{sh|bat} examples/config/example-ignite.xml'}.</p>
- * <p>
- * Alternatively you can run ExampleNodeStartup in another JVM which will start node with {@code
- * examples/config/example-ignite.xml} configuration.</p>
- */
-public class MovieGAExample {
- /**
- * Executes example.
- * <p>
- * Specify value for {@code -DGENRES} JVM system variable.
- *
- * @param args Command line arguments, none required.
- */
- public static void main(String args[]) {
- System.out.println(">>> Movie GA grid example started.");
-
- List<String> genres = new ArrayList<>();
- String sGenres = "Action,Comedy,Romance";
-
- StringBuffer sbErrorMsg = new StringBuffer();
- sbErrorMsg.append("GENRES System property not set. Please provide GENRES information.");
- sbErrorMsg.append(" ");
- sbErrorMsg.append("IE: -DGENRES=Action,Comedy,Romance");
- sbErrorMsg.append("\n");
- sbErrorMsg.append("Using default value: Action,Comedy,Romance");
-
- if (System.getProperty("GENRES") == null)
- System.out.println(sbErrorMsg);
- else
- sGenres = System.getProperty("GENRES");
-
- StringTokenizer st = new StringTokenizer(sGenres, ",");
-
- while (st.hasMoreElements()) {
- String genre = st.nextToken();
- genres.add(genre);
- }
-
- // Create GAConfiguration.
- GAConfiguration gaCfg = new GAConfiguration();
-
- // Set Gene Pool.
- List<Gene> genes = getGenePool();
-
- // Define Chromosome.
- gaCfg.setChromosomeLen(3);
- gaCfg.setPopulationSize(100);
- gaCfg.setGenePool(genes);
- gaCfg.setTruncateRate(.10);
- gaCfg.setCrossOverRate(.50);
- gaCfg.setMutationRate(.50);
- gaCfg.setSelectionMtd(GAGridConstants.SELECTION_METHOD.SELECTION_METHOD_TRUNCATION);
-
- // Create fitness function.
- MovieFitnessFunction function = new MovieFitnessFunction(genres);
-
- // Set fitness function.
- gaCfg.setFitnessFunction(function);
-
- try {
- // Create an Ignite instance as you would in any other use case.
- Ignite ignite = Ignition.start("examples/config/example-ignite.xml");
-
- MovieTerminateCriteria termCriteria = new MovieTerminateCriteria(ignite, System.out::println);
-
- gaCfg.setTerminateCriteria(termCriteria);
-
- GAGrid gaGrid = new GAGrid(gaCfg, ignite);
-
- Chromosome chromosome = gaGrid.evolve();
-
- System.out.println(">>> Evolution result: " + chromosome);
-
- Ignition.stop(true);
-
- System.out.println(">>> Movie GA grid example completed.");
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- e.printStackTrace();
- }
- }
-
- /**
- *
- */
- private static List<Gene> getGenePool() {
- List<Gene> list = new ArrayList<>();
-
- Movie movie1 = new Movie();
- movie1.setName("The Matrix");
- movie1.setImdbRating(7);
- List<String> genre1 = new ArrayList<>();
- genre1.add("SciFi");
- genre1.add("Action");
- movie1.setGenre(genre1);
- movie1.setRating("PG-13");
- movie1.setYear("1999");
-
- Gene gene1 = new Gene(movie1);
-
- Movie movie2 = new Movie();
- movie2.setName("The Dark Knight");
- movie2.setImdbRating(9.6);
- List<String> genre2 = new ArrayList<>();
- genre2.add("Action");
- movie2.setGenre(genre2);
- movie2.setRating("PG-13");
- movie2.setYear("2008");
-
- Gene gene2 = new Gene(movie2);
-
- Movie movie3 = new Movie();
- movie3.setName("The Avengers");
- movie3.setImdbRating(9.6);
- movie3.setYear("2012");
-
- List<String> genre3 = new ArrayList<>();
- genre3.add("Action");
- movie3.setGenre(genre3);
- movie3.setRating("PG-13");
-
- Gene gene3 = new Gene(movie3);
-
- Movie movie4 = new Movie();
- movie4.setName("The Hangover");
- movie4.setImdbRating(7.6);
- List<String> genre4 = new ArrayList<>();
- genre4.add("Comedy");
- movie4.setGenre(genre4);
- movie4.setRating("R");
- movie4.setYear("2009");
-
- Gene gene4 = new Gene(movie4);
-
- Movie movie5 = new Movie();
- movie5.setName("The Hangover 2");
- movie5.setImdbRating(9.6);
- List<String> genre5 = new ArrayList<>();
- genre5.add("Comedy");
- movie5.setGenre(genre5);
- movie5.setRating("R");
- movie5.setYear("2012");
-
- Gene gene5 = new Gene(movie5);
-
- Movie movie6 = new Movie();
- movie6.setName("This Means War");
- movie6.setImdbRating(6.4);
- List<String> genre6 = new ArrayList<>();
- genre6.add("Comedy");
- genre6.add("Action");
- genre6.add("Romance");
- movie6.setGenre(genre6);
- movie6.setRating("PG-13");
- movie6.setYear("2012");
-
- Gene gene6 = new Gene(movie6);
-
- Movie movie7 = new Movie();
- movie7.setName("Hitch");
- movie7.setImdbRating(10);
- List<String> genre7 = new ArrayList<>();
- genre7.add("Comedy");
- genre7.add("Romance");
- movie7.setGenre(genre7);
- movie7.setRating("PG-13");
- movie7.setYear("2005");
-
- Gene gene7 = new Gene(movie7);
-
- Movie movie8 = new Movie();
- movie8.setName("21 Jump Street");
- movie8.setImdbRating(6.7);
- List<String> genre8 = new ArrayList<>();
- genre8.add("Comedy");
- genre8.add("Action");
- movie8.setGenre(genre8);
- movie8.setRating("R");
- movie8.setYear("2012");
-
- Gene gene8 = new Gene(movie8);
-
- Movie movie9 = new Movie();
- movie9.setName("Killers");
- movie9.setImdbRating(5.1);
- List<String> genre9 = new ArrayList<>();
- genre9.add("Comedy");
- genre9.add("Action");
- genre9.add("Romance");
- movie9.setGenre(genre9);
- movie9.setRating("PG-13");
- movie9.setYear("2010");
-
- Gene gene9 = new Gene(movie9);
-
- Movie movie10 = new Movie();
- movie10.setName("What to Expect When You're Expecting");
- movie10.setImdbRating(5.1);
- List<String> genre10 = new ArrayList<>();
- genre10.add("Comedy");
- genre10.add("Romance");
- movie10.setGenre(genre10);
- movie10.setRating("PG-13");
- movie10.setYear("2012");
-
- Gene gene10 = new Gene(movie10);
-
- list.add(gene1);
- list.add(gene2);
- list.add(gene3);
- list.add(gene4);
- list.add(gene5);
- list.add(gene6);
- list.add(gene7);
- list.add(gene8);
- list.add(gene9);
- list.add(gene10);
-
- return list;
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java b/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java
deleted file mode 100644
index b193b7d..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/genetic/movie/MovieTerminateCriteria.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.genetic.movie;
-
-import java.util.List;
-import java.util.function.Consumer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.parameter.ITerminateCriteria;
-import org.apache.ignite.ml.genetic.utils.GAGridUtils;
-
-/**
- * Represents the terminate condition for {@link MovieGAExample}.
- * <p>
- * Class terminates Genetic algorithm when fitness score is more than 32.</p>
- */
-public class MovieTerminateCriteria implements ITerminateCriteria {
- /**
- * Ignite instance.
- */
- private final Ignite ignite;
-
- /**
- *
- */
- private final Consumer<String> logConsumer;
-
- /**
- * Create class instance.
- *
- * @param ignite Ignite instance.
- * @param logConsumer Logging consumer.
- */
- MovieTerminateCriteria(Ignite ignite, Consumer<String> logConsumer) {
- this.ignite = ignite;
- this.logConsumer = logConsumer;
-
- }
-
- /**
- * {@inheritDoc}
- */
- @Override public boolean isTerminationConditionMet(Chromosome fittestChromosome, double averageFitnessScore,
- int currGeneration) {
- boolean isTerminate = true;
-
- logConsumer.accept(
- "\n##########################################################################################"
- + "\n Generation: " + currGeneration
- + "\n Fittest is Chromosome Key: " + fittestChromosome
- + "\nChromosome: " + fittestChromosome
- + "\n" + reportMovies(GAGridUtils.getGenesInOrderForChromosome(ignite, fittestChromosome))
- + "\n##########################################################################################");
-
- if (!(fittestChromosome.getFitnessScore() > 32))
- isTerminate = false;
-
- return isTerminate;
- }
-
- /**
- * Helper to print movies details.
- *
- * @param genes List of Genes.
- * @return Movies details.
- */
- private String reportMovies(List<Gene> genes) {
- StringBuilder sb = new StringBuilder();
-
- for (Gene gene : genes) {
- sb.append("\nName: ").append(((Movie)gene.getVal()).getName())
- .append("\nGenres: ").append(((Movie)gene.getVal()).getGenre().toString())
- .append("\nIMDB Rating: ").append(((Movie)gene.getVal()).getImdbRating());
- }
-
- return sb.toString();
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
index 26cf41c..deb7de2 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/IgniteModelDistributedInferenceExample.java
@@ -27,6 +27,8 @@
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.examples.ml.regression.linear.LinearRegressionLSQRTrainerExample;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.inference.Model;
@@ -38,8 +40,6 @@
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.regressions.linear.LinearRegressionLSQRTrainer;
import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* This example is based on {@link LinearRegressionLSQRTrainerExample}, but to perform inference it uses an approach
@@ -101,7 +101,8 @@
System.out.println(">>> Linear regression model over cache based dataset usage example completed.");
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
deleted file mode 100644
index 0d65219..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.inference;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Random;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.Model;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
-import org.apache.ignite.ml.inference.parser.ModelParser;
-import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
-import org.apache.ignite.ml.inference.reader.ModelReader;
-import org.apache.ignite.ml.util.MnistUtils;
-import org.tensorflow.Tensor;
-
-/**
- * This example demonstrates how to: load TensorFlow model into Java, make inference in distributed environment using
- * Apache Ignite services.
- */
-public class TensorFlowDistributedInferenceExample {
- /**
- * Path to the directory with saved TensorFlow model.
- */
- private static final String MODEL_PATH = "examples/src/main/resources/models/mnist_tf_model";
-
- /**
- * Path to the MNIST images data.
- */
- private static final String MNIST_IMG_PATH = "examples/src/main/resources/datasets/t10k-images-idx3-ubyte";
-
- /**
- * Path to the MNIST labels data.
- */
- private static final String MNIST_LBL_PATH = "examples/src/main/resources/datasets/t10k-labels-idx1-ubyte";
-
- /**
- * Run example.
- */
- public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
- try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
- File mdlRsrc = IgniteUtils.resolveIgnitePath(MODEL_PATH);
- if (mdlRsrc == null)
- throw new IllegalArgumentException("Resource not found [resource_path=" + MODEL_PATH + "]");
-
- ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
-
- ModelParser<double[], Long, ?> parser = new TensorFlowSavedModelModelParser<double[], Long>("serve")
-
- .withInput("Placeholder", doubles -> {
- float[][][] reshaped = new float[1][28][28];
- for (int i = 0; i < doubles.length; i++)
- reshaped[0][i / 28][i % 28] = (float)doubles[i];
- return Tensor.create(reshaped);
- })
-
- .withOutput(Collections.singletonList("ArgMax"), collectedTensors -> collectedTensors.get("ArgMax")
- .copyTo(new long[1])[0]);
-
- List<MnistUtils.MnistLabeledImage> images = MnistUtils.mnistAsList(
- Objects.requireNonNull(IgniteUtils.resolveIgnitePath(MNIST_IMG_PATH)).getPath(),
- Objects.requireNonNull(IgniteUtils.resolveIgnitePath(MNIST_LBL_PATH)).getPath(),
- new Random(0),
- 10000
- );
-
- long t0 = System.currentTimeMillis();
-
- try (Model<double[], Future<Long>> threadedMdl = new IgniteDistributedModelBuilder(ignite, 4, 4)
- .build(reader, parser)) {
- List<Future<?>> futures = new ArrayList<>(images.size());
- for (MnistUtils.MnistLabeledImage image : images)
- futures.add(threadedMdl.predict(image.getPixels()));
- for (Future<?> f : futures)
- f.get();
- }
-
- long t1 = System.currentTimeMillis();
-
- System.out.println("Threaded model throughput: " + images.size() / ((t1 - t0) / 1000.0) + " req/sec");
- }
- finally {
- System.out.flush();
- }
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
deleted file mode 100644
index f77ac82..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.inference;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Random;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.Model;
-import org.apache.ignite.ml.inference.builder.SingleModelBuilder;
-import org.apache.ignite.ml.inference.parser.ModelParser;
-import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
-import org.apache.ignite.ml.inference.reader.ModelReader;
-import org.apache.ignite.ml.util.MnistUtils;
-import org.tensorflow.Tensor;
-
-/**
- * This example demonstrates how to: load TensorFlow model into Java, make inference using this model in one thread.
- */
-public class TensorFlowLocalInferenceExample {
- /**
- * Path to the directory with saved TensorFlow model.
- */
- private static final String MODEL_PATH = "examples/src/main/resources/models/mnist_tf_model";
-
- /**
- * Path to the MNIST images data.
- */
- private static final String MNIST_IMG_PATH = "examples/src/main/resources/datasets/t10k-images-idx3-ubyte";
-
- /**
- * Path to the MNIST labels data.
- */
- private static final String MNIST_LBL_PATH = "examples/src/main/resources/datasets/t10k-labels-idx1-ubyte";
-
- /**
- * Run example.
- */
- public static void main(String[] args) throws IOException {
- File mdlRsrc = IgniteUtils.resolveIgnitePath(MODEL_PATH);
- if (mdlRsrc == null)
- throw new IllegalArgumentException("Resource not found [resource_path=" + MODEL_PATH + "]");
-
- ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
-
- ModelParser<double[], Long, ?> parser = new TensorFlowSavedModelModelParser<double[], Long>("serve")
- .withInput("Placeholder", doubles -> {
- float[][][] reshaped = new float[1][28][28];
- for (int i = 0; i < doubles.length; i++)
- reshaped[0][i / 28][i % 28] = (float)doubles[i];
- return Tensor.create(reshaped);
- })
- .withOutput(Collections.singletonList("ArgMax"), collectedTensors -> collectedTensors.get("ArgMax")
- .copyTo(new long[1])[0]);
-
- List<MnistUtils.MnistLabeledImage> images = MnistUtils.mnistAsList(
- Objects.requireNonNull(IgniteUtils.resolveIgnitePath(MNIST_IMG_PATH)).getPath(),
- Objects.requireNonNull(IgniteUtils.resolveIgnitePath(MNIST_LBL_PATH)).getPath(),
- new Random(0),
- 10000
- );
-
- long t0 = System.currentTimeMillis();
-
- try (Model<double[], Long> locMdl = new SingleModelBuilder().build(reader, parser)) {
- for (MnistUtils.MnistLabeledImage image : images)
- locMdl.predict(image.getPixels());
- }
-
- long t1 = System.currentTimeMillis();
-
- System.out.println("Threaded model throughput: " + 1.0 * images.size() / ((t1 - t0) / 1000) + " req/sec");
- System.out.flush();
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
deleted file mode 100644
index 22f0b23..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.inference;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Random;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.Model;
-import org.apache.ignite.ml.inference.builder.ThreadedModelBuilder;
-import org.apache.ignite.ml.inference.parser.ModelParser;
-import org.apache.ignite.ml.inference.parser.TensorFlowSavedModelModelParser;
-import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
-import org.apache.ignite.ml.inference.reader.ModelReader;
-import org.apache.ignite.ml.util.MnistUtils;
-import org.tensorflow.Tensor;
-
-/**
- * This example demonstrates how to: load TensorFlow model into Java, make inference using this model in multiple
- * threads.
- */
-public class TensorFlowThreadedInferenceExample {
- /**
- * Path to the directory with saved TensorFlow model.
- */
- private static final String MODEL_PATH = "examples/src/main/resources/models/mnist_tf_model";
-
- /**
- * Path to the MNIST images data.
- */
- private static final String MNIST_IMG_PATH = "examples/src/main/resources/datasets/t10k-images-idx3-ubyte";
-
- /**
- * Path to the MNIST labels data.
- */
- private static final String MNIST_LBL_PATH = "examples/src/main/resources/datasets/t10k-labels-idx1-ubyte";
-
- /**
- * Run example.
- */
- public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
- File mdlRsrc = IgniteUtils.resolveIgnitePath(MODEL_PATH);
- if (mdlRsrc == null)
- throw new IllegalArgumentException("Resource not found [resource_path=" + MODEL_PATH + "]");
-
- ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
-
- ModelParser<double[], Long, ?> parser = new TensorFlowSavedModelModelParser<double[], Long>("serve")
-
- .withInput("Placeholder", doubles -> {
- float[][][] reshaped = new float[1][28][28];
- for (int i = 0; i < doubles.length; i++)
- reshaped[0][i / 28][i % 28] = (float)doubles[i];
- return Tensor.create(reshaped);
- })
-
- .withOutput(Collections.singletonList("ArgMax"), collectedTensors -> collectedTensors.get("ArgMax")
- .copyTo(new long[1])[0]);
-
- List<MnistUtils.MnistLabeledImage> images = MnistUtils.mnistAsList(
- Objects.requireNonNull(IgniteUtils.resolveIgnitePath(MNIST_IMG_PATH)).getPath(),
- Objects.requireNonNull(IgniteUtils.resolveIgnitePath(MNIST_LBL_PATH)).getPath(),
- new Random(0),
- 10000
- );
-
- long t0 = System.currentTimeMillis();
-
- try (Model<double[], Future<Long>> threadedMdl = new ThreadedModelBuilder(8)
- .build(reader, parser)) {
- List<Future<?>> futures = new ArrayList<>(images.size());
- for (MnistUtils.MnistLabeledImage image : images)
- futures.add(threadedMdl.predict(image.getPixels()));
- for (Future<?> f : futures)
- f.get();
- }
-
- long t1 = System.currentTimeMillis();
-
- System.out.println("Threaded model throughput: " + 1.0 * images.size() / ((t1 - t0) / 1000) + " req/sec");
- System.out.flush();
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/spark/LogRegFromSparkThroughPMMLExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/spark/LogRegFromSparkThroughPMMLExample.java
index 7fa112c..f1beb70 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/spark/LogRegFromSparkThroughPMMLExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/spark/LogRegFromSparkThroughPMMLExample.java
@@ -25,6 +25,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
@@ -33,8 +35,6 @@
import org.apache.ignite.ml.regressions.logistic.LogisticRegressionModel;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
import org.dmg.pmml.PMML;
import org.dmg.pmml.regression.RegressionModel;
import org.dmg.pmml.regression.RegressionTable;
@@ -81,8 +81,9 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- } finally {
- dataCache.destroy();
+ } finally {
+ if (dataCache != null)
+ dataCache.destroy();
}
}
}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/xgboost/XGBoostModelParserExample.java
similarity index 98%
rename from examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
rename to examples/src/main/java/org/apache/ignite/examples/ml/inference/xgboost/XGBoostModelParserExample.java
index 9f9c6f9..997ece8 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/xgboost/XGBoostModelParserExample.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.examples.ml.xgboost;
+package org.apache.ignite.examples.ml.inference.xgboost;
import java.io.File;
import java.io.FileNotFoundException;
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/xgboost/package-info.java
similarity index 93%
rename from examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java
rename to examples/src/main/java/org/apache/ignite/examples/ml/inference/xgboost/package-info.java
index f0c8db4..3f834d2 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/xgboost/package-info.java
@@ -19,4 +19,4 @@
* <!-- Package description. --> XGBoost model inference examples.
*/
-package org.apache.ignite.examples.ml.xgboost;
+package org.apache.ignite.examples.ml.inference.xgboost;
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/knn/IrisClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/knn/IrisClassificationExample.java
index c06c5c3..e8ef55e 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/knn/IrisClassificationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/knn/IrisClassificationExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
@@ -32,8 +34,6 @@
import org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy;
import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
import org.apache.ignite.ml.selection.split.TrainTestSplit;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example of using Knn model in Apache Ignite for iris class predicion.
@@ -87,7 +87,8 @@
System.out.println(">> Model accuracy: " + accuracy);
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
index e089f51..1917d22 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNClassificationExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.knn.classification.KNNClassificationModel;
@@ -29,8 +31,6 @@
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run kNN multi-class classification trainer ({@link KNNClassificationTrainer}) over distributed dataset.
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
index 80d8a1a..a2c1cbe 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/knn/KNNRegressionExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.knn.regression.KNNRegressionModel;
@@ -30,8 +32,6 @@
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.regression.Rmse;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run kNN regression trainer ({@link KNNRegressionTrainer}) over distributed dataset.
@@ -84,7 +84,8 @@
System.out.println("\n>>> Rmse = " + rmse);
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
index 7201899..dd5fecf 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/multiclass/OneVsRestClassificationExample.java
@@ -26,6 +26,8 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.multiclass.MultiClassModel;
@@ -34,8 +36,6 @@
import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
import org.apache.ignite.ml.svm.SVMLinearClassificationModel;
import org.apache.ignite.ml.svm.SVMLinearClassificationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run One-vs-Rest multi-class classification trainer ({@link OneVsRestTrainer}) parametrized by binary SVM classifier
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/CompoundNaiveBayesExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/CompoundNaiveBayesExample.java
index 0f7e3a1..24bbcb8 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/CompoundNaiveBayesExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/CompoundNaiveBayesExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -30,8 +32,6 @@
import org.apache.ignite.ml.naivebayes.gaussian.GaussianNaiveBayesTrainer;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
import static java.util.Arrays.asList;
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
index c62c53a..2aee5fe 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -28,8 +30,6 @@
import org.apache.ignite.ml.naivebayes.discrete.DiscreteNaiveBayesTrainer;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run naive Bayes classification model based on <a href=https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Multinomial_naive_Bayes">
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
index 15ac6cb..6571d3e 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/GaussianNaiveBayesTrainerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -28,8 +30,6 @@
import org.apache.ignite.ml.naivebayes.gaussian.GaussianNaiveBayesTrainer;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run naive Bayes classification model based on <a href="https://en.wikipedia.org/wiki/Naive_Bayes_classifier"> naive
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExample.java
index c189c1c..c24091c 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.ObjectArrayVectorizer;
import org.apache.ignite.ml.preprocessing.Preprocessor;
@@ -30,8 +32,6 @@
import org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy;
import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
import org.apache.ignite.ml.tree.DecisionTreeNode;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example that shows how to use String Encoder preprocessor to encode features presented as a strings.
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExampleWithNormalization.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExampleWithNormalization.java
index 3af14e3..d9482a5 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExampleWithNormalization.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/EncoderExampleWithNormalization.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.ObjectArrayVectorizer;
import org.apache.ignite.ml.preprocessing.Preprocessor;
@@ -31,8 +33,6 @@
import org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy;
import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
import org.apache.ignite.ml.tree.DecisionTreeNode;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example that shows how to combine together two preprocessors: String Encoder preprocessor to encode features presented as a strings
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/LabelEncoderExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/LabelEncoderExample.java
index 675336f..d97c49c 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/LabelEncoderExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/preprocessing/encoding/LabelEncoderExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.ObjectArrayVectorizer;
import org.apache.ignite.ml.preprocessing.Preprocessor;
@@ -30,8 +32,6 @@
import org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy;
import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
import org.apache.ignite.ml.tree.DecisionTreeNode;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example that shows how to use Label Encoder preprocessor to encode labels presented as a strings.
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensExample.java
index 35e8151..b5c7984 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensExample.java
@@ -26,13 +26,13 @@
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.impl.cache.CacheBasedDatasetBuilder;
import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
import org.apache.ignite.ml.recommendation.ObjectSubjectRatingTriplet;
import org.apache.ignite.ml.recommendation.RecommendationModel;
import org.apache.ignite.ml.recommendation.RecommendationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example of recommendation system based on MovieLens dataset (see https://grouplens.org/datasets/movielens/).
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensSQLExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensSQLExample.java
index b316c61..dbfb553 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensSQLExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/recommendation/MovieLensSQLExample.java
@@ -26,14 +26,14 @@
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
import org.apache.ignite.ml.inference.IgniteModelStorageUtil;
import org.apache.ignite.ml.recommendation.RecommendationModel;
import org.apache.ignite.ml.recommendation.RecommendationTrainer;
import org.apache.ignite.ml.sql.SQLFunctions;
import org.apache.ignite.ml.sql.SqlDatasetBuilder;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example of recommendation system based on MovieLens dataset (see https://grouplens.org/datasets/movielens/) and SQL.
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/BostonHousePricesPredictionExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/BostonHousePricesPredictionExample.java
index afaa4c9..511eb05 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/BostonHousePricesPredictionExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/BostonHousePricesPredictionExample.java
@@ -22,6 +22,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
@@ -33,8 +35,6 @@
import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
import org.apache.ignite.ml.selection.split.TrainTestSplit;
import org.apache.ignite.ml.trainers.DatasetTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example of using Linear Regression model in Apache Ignite for house prices prediction.
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
index c4da76c..e6ab6f6e 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -28,8 +30,6 @@
import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run linear regression model based on <a href="http://web.stanford.edu/group/SOL/software/lsqr/">LSQR algorithm</a>
@@ -87,7 +87,8 @@
System.out.println(">>> Linear regression model over cache based dataset usage example completed.");
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
index 94c94b1..9979d3c 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionLSQRTrainerWithMinMaxScalerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -31,8 +33,6 @@
import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run linear regression model based on <a href="http://web.stanford.edu/group/SOL/software/lsqr/">LSQR algorithm</a>
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
index 2b59d6a..5f116c4 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/linear/LinearRegressionSGDTrainerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -31,8 +33,6 @@
import org.apache.ignite.ml.regressions.linear.LinearRegressionSGDTrainer;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run linear regression model based on based on
@@ -88,7 +88,8 @@
System.out.println(">>> Linear regression model over cache based dataset usage example completed.");
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/bagged/BaggedLogisticRegressionSGDTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/bagged/BaggedLogisticRegressionSGDTrainerExample.java
index daa0c15..d7f63d2 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/bagged/BaggedLogisticRegressionSGDTrainerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/bagged/BaggedLogisticRegressionSGDTrainerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.composition.bagging.BaggedTrainer;
import org.apache.ignite.ml.composition.predictionsaggregator.OnMajorityPredictionsAggregator;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
@@ -34,8 +36,6 @@
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
import org.apache.ignite.ml.trainers.TrainerTransformers;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* This example shows how bagging technique may be applied to arbitrary trainer. As an example (a bit synthetic)
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
index f6a4b09..fd6b9ff 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/regression/logistic/binary/LogisticRegressionSGDTrainerExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -31,8 +33,6 @@
import org.apache.ignite.ml.regressions.logistic.LogisticRegressionSGDTrainer;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run logistic regression model based on <a href="https://en.wikipedia.org/wiki/Stochastic_gradient_descent">
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java
index a53f16a..89e71fa 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java
@@ -21,14 +21,14 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.svm.SVMLinearClassificationModel;
import org.apache.ignite.ml.svm.SVMLinearClassificationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run SVM classification trainer ({@link SVMLinearClassificationTrainer}) over distributed dataset.
@@ -69,7 +69,8 @@
System.out.println(Evaluator.evaluateBinaryClassification(dataCache, mdl, vectorizer));
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java
deleted file mode 100644
index 7d24afd..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.selection.scoring;
-
-import java.io.IOException;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
-import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
-import org.apache.ignite.ml.knn.classification.KNNClassificationTrainer;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
-import org.apache.ignite.ml.svm.SVMLinearClassificationModel;
-import org.apache.ignite.ml.svm.SVMLinearClassificationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
-
-/**
- * Run kNN multi-class classification trainer ({@link KNNClassificationTrainer}) over distributed dataset.
- * <p>
- * Code in this example launches Ignite grid and fills the cache with test data points (based on the
- * <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
- * <p>
- * After that it trains the model based on the specified data using
- * <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">kNN</a> algorithm.</p>
- * <p>
- * Finally, this example loops over the test set of data points, applies the trained model to predict what cluster does
- * this point belong to, and compares prediction to expected outcome (ground truth).</p>
- * <p>
- * You can change the test data used in this example and re-run it to explore this algorithm further.</p>
- */
-public class MultipleMetricsExample {
- /**
- * Run example.
- */
- public static void main(String[] args) throws IOException {
- // Start ignite grid.
- try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
- System.out.println(">>> Ignite grid started.");
-
- IgniteCache<Integer, Vector> dataCache = null;
- try {
- dataCache = new SandboxMLCache(ignite).fillCacheWith(MLSandboxDatasets.TWO_CLASSED_IRIS);
-
- SVMLinearClassificationTrainer trainer = new SVMLinearClassificationTrainer();
-
- Vectorizer<Integer, Vector, Integer, Double> vectorizer = new DummyVectorizer<Integer>()
- .labeled(Vectorizer.LabelCoordinate.FIRST);
-
- SVMLinearClassificationModel mdl = trainer.fit(ignite, dataCache, vectorizer);
-
- System.out.println(Evaluator.evaluateBinaryClassification(dataCache, mdl, vectorizer));
- }
- finally {
- dataCache.destroy();
- }
- }
- finally {
- System.out.flush();
- }
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/RegressionMetricExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/RegressionMetricExample.java
index 448960d..67b977f 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/RegressionMetricExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/RegressionMetricExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.knn.regression.KNNRegressionModel;
@@ -30,8 +32,6 @@
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run kNN regression trainer ({@link KNNRegressionTrainer}) over distributed dataset.
@@ -78,7 +78,8 @@
System.out.println("\n>>> Mae " + mae);
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
index 04fe5e0..5c7f02ed 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/split/TrainTestDatasetSplitterExample.java
@@ -24,6 +24,8 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -31,8 +33,6 @@
import org.apache.ignite.ml.regressions.linear.LinearRegressionModel;
import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
import org.apache.ignite.ml.selection.split.TrainTestSplit;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run linear regression model over dataset split on train and test subsets ({@link TrainTestDatasetSplitter}).
@@ -100,7 +100,8 @@
System.out.println(">>> Linear regression model over cache based dataset usage example completed.");
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
index 3850749..20b3b2f 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/svm/SVMBinaryClassificationExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
import org.apache.ignite.ml.math.primitives.vector.Vector;
@@ -28,8 +30,6 @@
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
import org.apache.ignite.ml.svm.SVMLinearClassificationModel;
import org.apache.ignite.ml.svm.SVMLinearClassificationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Run SVM binary-class classification model ({@link SVMLinearClassificationModel}) over distributed dataset.
@@ -78,7 +78,8 @@
System.out.println(">>> SVM Binary classification model over cache based dataset usage example completed.");
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/FraudDetectionExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/FraudDetectionExample.java
index 1dab807..ed758d4 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/FraudDetectionExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/FraudDetectionExample.java
@@ -21,6 +21,8 @@
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.IgniteModel;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
@@ -32,8 +34,6 @@
import org.apache.ignite.ml.selection.split.TrainTestSplit;
import org.apache.ignite.ml.trainers.DatasetTrainer;
import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example of using classification algorithms for fraud detection problem.
@@ -79,7 +79,8 @@
);
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
index 15cc5d4..0d9dbef 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestClassificationExample.java
@@ -28,6 +28,8 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.composition.ModelsComposition;
import org.apache.ignite.ml.dataset.feature.FeatureMeta;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
@@ -35,8 +37,6 @@
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.tree.randomforest.RandomForestClassifierTrainer;
import org.apache.ignite.ml.tree.randomforest.data.FeaturesCountSelectionStrategies;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example represents a solution for the task of wine classification based on a
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
index cb2b1d0..714589a 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tree/randomforest/RandomForestRegressionExample.java
@@ -27,6 +27,8 @@
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.QueryCursor;
import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.examples.ml.util.MLSandboxDatasets;
+import org.apache.ignite.examples.ml.util.SandboxMLCache;
import org.apache.ignite.ml.composition.ModelsComposition;
import org.apache.ignite.ml.dataset.feature.FeatureMeta;
import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
@@ -37,8 +39,6 @@
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.tree.randomforest.RandomForestRegressionTrainer;
import org.apache.ignite.ml.tree.randomforest.data.FeaturesCountSelectionStrategies;
-import org.apache.ignite.ml.util.MLSandboxDatasets;
-import org.apache.ignite.ml.util.SandboxMLCache;
/**
* Example represents a solution for the task of price predictions for houses in Boston based on a
@@ -125,7 +125,8 @@
}
}
finally {
- dataCache.destroy();
+ if (dataCache != null)
+ dataCache.destroy();
}
}
finally {
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
index c2b2c1a..5b62714 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
@@ -123,7 +123,7 @@
= new CrossValidation<>();
ParamGrid paramGrid = new ParamGrid()
- .addHyperParam("maxDeep", trainerCV::withMaxDeep, new Double[] {1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 10.0})
+ .addHyperParam("maxDeep", trainerCV::withMaxDeep, new Double[] {1.0, 2.0, 3.0, 4.0, 5.0, 10.0})
.addHyperParam("minImpurityDecrease", trainerCV::withMinImpurityDecrease, new Double[] {0.0, 0.25, 0.5});
scoreCalculator
@@ -175,7 +175,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_metrics.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_metrics.java
deleted file mode 100644
index ef1defd..0000000
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_metrics.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.tutorial;
-
-import java.io.FileNotFoundException;
-import java.util.Arrays;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.dataset.feature.extractor.Vectorizer;
-import org.apache.ignite.ml.dataset.feature.extractor.impl.DummyVectorizer;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.preprocessing.Preprocessor;
-import org.apache.ignite.ml.preprocessing.encoding.EncoderTrainer;
-import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
-import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
-import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
-import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
-import org.apache.ignite.ml.selection.cv.CrossValidation;
-import org.apache.ignite.ml.selection.cv.CrossValidationResult;
-import org.apache.ignite.ml.selection.paramgrid.ParamGrid;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
-import org.apache.ignite.ml.selection.scoring.metric.MetricName;
-import org.apache.ignite.ml.selection.scoring.metric.classification.Accuracy;
-import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
-import org.apache.ignite.ml.selection.split.TrainTestSplit;
-import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
-import org.apache.ignite.ml.tree.DecisionTreeNode;
-
-/**
- * To choose the best hyper-parameters the cross-validation with {@link ParamGrid} will be used in this example.
- * <p>
- * Code in this example launches Ignite grid and fills the cache with test data (based on Titanic passengers data).</p>
- * <p>
- * After that it defines how to split the data to train and test sets and configures preprocessors that extract features
- * from an upstream data and perform other desired changes over the extracted data.</p>
- * <p>
- * Then, it tunes hyper-parameters with K-fold Cross-Validation on the split training set and trains the model based on the
- * processed data using decision tree classification and the obtained hyper-parameters.</p>
- * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
- * <p>
- * The purpose of cross-validation is model checking, not model building.</p>
- * <p>
- * We train {@code k} different models.</p>
- * <p>
- * They differ in that {@code 1/(k-1)}th of the training data is exchanged against other cases.</p>
- * <p>
- * These models are sometimes called surrogate models because the (average) performance measured for these models is
- * taken as a surrogate of the performance of the model trained on all cases.</p>
- * <p>
- * All scenarios are described there: https://sebastianraschka.com/faq/docs/evaluate-a-model.html</p>
- */
-public class Step_8_CV_with_Param_Grid_and_metrics {
- /**
- * Run example.
- */
- public static void main(String[] args) {
- System.out.println();
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
-
- try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
- try {
- IgniteCache<Integer, Vector> dataCache = TitanicUtils.readPassengers(ignite);
-
- // Extracts "pclass", "sibsp", "parch", "sex", "embarked", "age", "fare".
- final Vectorizer<Integer, Vector, Integer, Double> vectorizer
- = new DummyVectorizer<Integer>(0, 3, 4, 5, 6, 8, 10).labeled(1);
-
- TrainTestSplit<Integer, Vector> split = new TrainTestDatasetSplitter<Integer, Vector>()
- .split(0.75);
-
- Preprocessor<Integer, Vector> strEncoderPreprocessor = new EncoderTrainer<Integer, Vector>()
- .withEncoderType(EncoderType.STRING_ENCODER)
- .withEncodedFeature(1)
- .withEncodedFeature(6) // <--- Changed index here.
- .fit(ignite,
- dataCache,
- vectorizer
- );
-
- Preprocessor<Integer, Vector> imputingPreprocessor = new ImputerTrainer<Integer, Vector>()
- .fit(ignite,
- dataCache,
- strEncoderPreprocessor
- );
-
- Preprocessor<Integer, Vector> minMaxScalerPreprocessor = new MinMaxScalerTrainer<Integer, Vector>()
- .fit(
- ignite,
- dataCache,
- imputingPreprocessor
- );
-
- Preprocessor<Integer, Vector> normalizationPreprocessor = new NormalizationTrainer<Integer, Vector>()
- .withP(1)
- .fit(
- ignite,
- dataCache,
- minMaxScalerPreprocessor
- );
-
- // Tune hyper-parameters with K-fold Cross-Validation on the split training set.
-
- DecisionTreeClassificationTrainer trainerCV = new DecisionTreeClassificationTrainer();
-
- CrossValidation<DecisionTreeNode, Integer, Vector> scoreCalculator
- = new CrossValidation<>();
-
- ParamGrid paramGrid = new ParamGrid()
- .addHyperParam("maxDeep", trainerCV::withMaxDeep, new Double[] {1.0, 2.0, 3.0, 4.0, 5.0, 10.0})
- .addHyperParam("minImpurityDecrease", trainerCV::withMinImpurityDecrease, new Double[] {0.0, 0.25, 0.5});
-
- scoreCalculator
- .withIgnite(ignite)
- .withUpstreamCache(dataCache)
- .withTrainer(trainerCV)
- .withMetric(MetricName.ACCURACY)
- .withFilter(split.getTrainFilter())
- .isRunningOnPipeline(false)
- .withPreprocessor(normalizationPreprocessor)
- .withAmountOfFolds(3)
- .withParamGrid(paramGrid);
-
- CrossValidationResult crossValidationRes = scoreCalculator.tuneHyperParameters();
-
- System.out.println("Train with maxDeep: " + crossValidationRes.getBest("maxDeep")
- + " and minImpurityDecrease: " + crossValidationRes.getBest("minImpurityDecrease"));
-
- DecisionTreeClassificationTrainer trainer = new DecisionTreeClassificationTrainer()
- .withMaxDeep(crossValidationRes.getBest("maxDeep"))
- .withMinImpurityDecrease(crossValidationRes.getBest("minImpurityDecrease"));
-
- System.out.println(crossValidationRes);
-
- System.out.println("Best score: " + Arrays.toString(crossValidationRes.getBestScore()));
- System.out.println("Best hyper params: " + crossValidationRes.getBestHyperParams());
- System.out.println("Best average score: " + crossValidationRes.getBestAvgScore());
-
- crossValidationRes.getScoringBoard().forEach((hyperParams, score)
- -> System.out.println("Score " + Arrays.toString(score) + " for hyper params " + hyperParams));
-
- // Train decision tree model.
- DecisionTreeNode bestMdl = trainer.fit(
- ignite,
- dataCache,
- split.getTrainFilter(),
- normalizationPreprocessor
- );
-
- System.out.println("\n>>> Trained model: " + bestMdl);
-
- double accuracy = Evaluator.evaluate(
- dataCache, split.getTestFilter(),
- bestMdl,
- normalizationPreprocessor,
- new Accuracy<>()
- );
-
- System.out.println("\n>>> Accuracy " + accuracy);
- System.out.println("\n>>> Test Error " + (1 - accuracy));
-
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
- }
- catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- finally {
- System.out.flush();
- }
- }
-}
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_metrics_and_pipeline.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_pipeline.java
similarity index 96%
rename from examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_metrics_and_pipeline.java
rename to examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_pipeline.java
index 24f2d6d..6be8496 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_metrics_and_pipeline.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid_and_pipeline.java
@@ -62,13 +62,13 @@
* <p>
* All scenarios are described there: https://sebastianraschka.com/faq/docs/evaluate-a-model.html</p>
*/
-public class Step_8_CV_with_Param_Grid_and_metrics_and_pipeline {
+public class Step_8_CV_with_Param_Grid_and_pipeline {
/**
* Run example.
*/
public static void main(String[] args) {
System.out.println();
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 8 (cross-validation with param grid and pipeline) example started.");
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
try {
@@ -104,7 +104,6 @@
.withPipeline(pipeline)
.withMetric(MetricName.ACCURACY)
.withFilter(split.getTrainFilter())
- .withPreprocessor(vectorizer)
.withAmountOfFolds(3)
.withParamGrid(paramGrid);
@@ -122,6 +121,7 @@
crossValidationRes.getScoringBoard().forEach((hyperParams, score)
-> System.out.println("Score " + Arrays.toString(score) + " for hyper params " + hyperParams));
+ System.out.println(">>> Tutorial step 8 (cross-validation with param grid and pipeline) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Scaling_With_Stacking.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Scaling_With_Stacking.java
index bb710d3..7199257 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Scaling_With_Stacking.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Scaling_With_Stacking.java
@@ -138,7 +138,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 5 (scaling) example completed.");
+ System.out.println(">>> Tutorial step 9 (scaling with stacking) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/TutorialStepByStepExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/TutorialStepByStepExample.java
index 5dd1551..8ef5fe0 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/TutorialStepByStepExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/TutorialStepByStepExample.java
@@ -18,7 +18,7 @@
package org.apache.ignite.examples.ml.tutorial;
import org.apache.ignite.examples.ml.tutorial.hyperparametertuning.Step_13_RandomSearch;
-import org.apache.ignite.examples.ml.tutorial.hyperparametertuning.Step_14_Parallel_BrutForce_Search;
+import org.apache.ignite.examples.ml.tutorial.hyperparametertuning.Step_14_Parallel_Brute_Force_Search;
import org.apache.ignite.examples.ml.tutorial.hyperparametertuning.Step_15_Parallel_Random_Search;
import org.apache.ignite.examples.ml.tutorial.hyperparametertuning.Step_16_Genetic_Programming_Search;
import org.apache.ignite.examples.ml.tutorial.hyperparametertuning.Step_17_Parallel_Genetic_Programming_Search;
@@ -42,12 +42,13 @@
Step_7_Split_train_test.main(args);
Step_8_CV.main(args);
Step_8_CV_with_Param_Grid.main(args);
+ Step_8_CV_with_Param_Grid_and_pipeline.main(args);
Step_9_Scaling_With_Stacking.main(args);
Step_10_Bagging.main(args);
Step_11_Boosting.main(args);
Step_12_Model_Update.main(args);
Step_13_RandomSearch.main(args);
- Step_14_Parallel_BrutForce_Search.main(args);
+ Step_14_Parallel_Brute_Force_Search.main(args);
Step_15_Parallel_Random_Search.main(args);
Step_16_Genetic_Programming_Search.main(args);
Step_17_Parallel_Genetic_Programming_Search.main(args);
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_13_RandomSearch.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_13_RandomSearch.java
index dcf94a0..d7e2f27 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_13_RandomSearch.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_13_RandomSearch.java
@@ -73,6 +73,9 @@
* Run example.
*/
public static void main(String[] args) {
+ System.out.println();
+ System.out.println(">>> Tutorial step 13 (Random Search) example started.");
+
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
try {
IgniteCache<Integer, Vector> dataCache = TitanicUtils.readPassengers(ignite);
@@ -182,7 +185,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 13 (Random Search) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_14_Parallel_BrutForce_Search.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_14_Parallel_Brute_Force_Search.java
similarity index 97%
rename from examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_14_Parallel_BrutForce_Search.java
rename to examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_14_Parallel_Brute_Force_Search.java
index 2fa6b40..017f123 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_14_Parallel_BrutForce_Search.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_14_Parallel_Brute_Force_Search.java
@@ -71,11 +71,14 @@
* <p>
* All scenarios are described there: https://sebastianraschka.com/faq/docs/evaluate-a-model.html</p>
*/
-public class Step_14_Parallel_BrutForce_Search {
+public class Step_14_Parallel_Brute_Force_Search {
/**
* Run example.
*/
public static void main(String[] args) {
+ System.out.println();
+ System.out.println(">>> Tutorial step 14 (Brute Force) example started.");
+
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
try {
IgniteCache<Integer, Vector> dataCache = TitanicUtils.readPassengers(ignite);
@@ -184,7 +187,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 14 (Brute Force) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_15_Parallel_Random_Search.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_15_Parallel_Random_Search.java
index c0cf6c4..3a3e9e8 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_15_Parallel_Random_Search.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_15_Parallel_Random_Search.java
@@ -76,6 +76,9 @@
* Run example.
*/
public static void main(String[] args) {
+ System.out.println();
+ System.out.println(">>> Tutorial step 15 (Parallel Random Search) example started.");
+
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
try {
IgniteCache<Integer, Vector> dataCache = TitanicUtils.readPassengers(ignite);
@@ -187,7 +190,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 15 (Parallel Random Search) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_16_Genetic_Programming_Search.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_16_Genetic_Programming_Search.java
index 7261c5a..bee51e4 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_16_Genetic_Programming_Search.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_16_Genetic_Programming_Search.java
@@ -73,6 +73,9 @@
* Run example.
*/
public static void main(String[] args) {
+ System.out.println();
+ System.out.println(">>> Tutorial step 16 (Genetic Programming) example started.");
+
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
try {
IgniteCache<Integer, Vector> dataCache = TitanicUtils.readPassengers(ignite);
@@ -178,7 +181,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 16 (Genetic Programming) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_17_Parallel_Genetic_Programming_Search.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_17_Parallel_Genetic_Programming_Search.java
index 446d914..34a8158 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_17_Parallel_Genetic_Programming_Search.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/hyperparametertuning/Step_17_Parallel_Genetic_Programming_Search.java
@@ -76,6 +76,9 @@
* Run example.
*/
public static void main(String[] args) {
+ System.out.println();
+ System.out.println(">>> Tutorial step 17 (Parallel Genetic Programming) example started.");
+
try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
try {
IgniteCache<Integer, Vector> dataCache = TitanicUtils.readPassengers(ignite);
@@ -184,7 +187,7 @@
System.out.println("\n>>> Accuracy " + accuracy);
System.out.println("\n>>> Test Error " + (1 - accuracy));
- System.out.println(">>> Tutorial step 8 (cross-validation with param grid) example started.");
+ System.out.println(">>> Tutorial step 17 (Parallel Genetic Programming) example completed.");
}
catch (FileNotFoundException e) {
e.printStackTrace();
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java b/examples/src/main/java/org/apache/ignite/examples/ml/util/MLSandboxDatasets.java
similarity index 71%
rename from modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java
rename to examples/src/main/java/org/apache/ignite/examples/ml/util/MLSandboxDatasets.java
index 4b7a2e8..7021e7d 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/util/MLSandboxDatasets.java
@@ -15,60 +15,60 @@
* limitations under the License.
*/
-package org.apache.ignite.ml.util;
+package org.apache.ignite.examples.ml.util;
/**
* The names of popular datasets used in examples.
*/
public enum MLSandboxDatasets {
/** Movielens dataset with ratings. */
- MOVIELENS("modules/ml/src/main/resources/datasets/ratings.csv", true, ","),
+ MOVIELENS("examples/src/main/resources/datasets/ratings.csv", true, ","),
/** The full Iris dataset from Machine Learning Repository. */
- IRIS("modules/ml/src/main/resources/datasets/iris.txt", false, "\t"),
+ IRIS("examples/src/main/resources/datasets/iris.txt", false, "\t"),
/** The Titanic dataset from Kaggle competition. */
- TITANIC("modules/ml/src/main/resources/datasets/titanic.csv", true, ";"),
+ TITANIC("examples/src/main/resources/datasets/titanic.csv", true, ";"),
/** The 1st and 2nd classes from the Iris dataset. */
- TWO_CLASSED_IRIS("modules/ml/src/main/resources/datasets/two_classed_iris.csv", false, "\t"),
+ TWO_CLASSED_IRIS("examples/src/main/resources/datasets/two_classed_iris.csv", false, "\t"),
/** The dataset is about different computers' properties based on https://archive.ics.uci.edu/ml/datasets/Computer+Hardware. */
- CLEARED_MACHINES("modules/ml/src/main/resources/datasets/cleared_machines.csv", false, ";"),
+ CLEARED_MACHINES("examples/src/main/resources/datasets/cleared_machines.csv", false, ";"),
/**
* The health data is related to death rate based on; doctor availability, hospital availability,
* annual per capita income, and population density people per square mile.
*/
- MORTALITY_DATA("modules/ml/src/main/resources/datasets/mortalitydata.csv", false, ";"),
+ MORTALITY_DATA("examples/src/main/resources/datasets/mortalitydata.csv", false, ";"),
/**
* The preprocessed Glass dataset from the Machine Learning Repository https://archive.ics.uci.edu/ml/datasets/Glass+Identification
* There are 3 classes with labels: 1 {building_windows_float_processed}, 3 {vehicle_windows_float_processed}, 7 {headlamps}.
* Feature names: 'Na-Sodium', 'Mg-Magnesium', 'Al-Aluminum', 'Ba-Barium', 'Fe-Iron'.
*/
- GLASS_IDENTIFICATION("modules/ml/src/main/resources/datasets/glass_identification.csv", false, ";"),
+ GLASS_IDENTIFICATION("examples/src/main/resources/datasets/glass_identification.csv", false, ";"),
/** The Wine recognition data. Could be found <a href="https://archive.ics.uci.edu/ml/machine-learning-databases/wine/">here</a>. */
- WINE_RECOGNITION("modules/ml/src/main/resources/datasets/wine.txt", false, ","),
+ WINE_RECOGNITION("examples/src/main/resources/datasets/wine.txt", false, ","),
/** The Boston house-prices dataset. Could be found <a href="https://archive.ics.uci.edu/ml/machine-learning-databases/housing/">here</a>. */
- BOSTON_HOUSE_PRICES("modules/ml/src/main/resources/datasets/boston_housing_dataset.txt", false, ","),
+ BOSTON_HOUSE_PRICES("examples/src/main/resources/datasets/boston_housing_dataset.txt", false, ","),
/** Example from book Barber D. Bayesian reasoning and machine learning. Chapter 10. */
- ENGLISH_VS_SCOTTISH("modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv", true, ","),
+ ENGLISH_VS_SCOTTISH("examples/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv", true, ","),
/** Wholesale customers dataset. Could be found <a href="https://archive.ics.uci.edu/ml/datasets/Wholesale+customers">here</a>. */
- WHOLESALE_CUSTOMERS("modules/ml/src/main/resources/datasets/wholesale_customers.csv", true, ","),
+ WHOLESALE_CUSTOMERS("examples/src/main/resources/datasets/wholesale_customers.csv", true, ","),
/** Fraud detection problem [part of whole dataset]. Could be found <a href="https://www.kaggle.com/mlg-ulb/creditcardfraud/">here</a>. */
- FRAUD_DETECTION("modules/ml/src/main/resources/datasets/fraud_detection.csv", false, ","),
+ FRAUD_DETECTION("examples/src/main/resources/datasets/fraud_detection.csv", false, ","),
/** A dataset with discrete and continuous features. */
- MIXED_DATASET("modules/ml/src/main/resources/datasets/mixed_dataset.csv", true, ","),
+ MIXED_DATASET("examples/src/main/resources/datasets/mixed_dataset.csv", true, ","),
/** A dataset with categorical features and labels. */
- MUSHROOMS("modules/ml/src/main/resources/datasets/mushrooms.csv", true, ",");
+ MUSHROOMS("examples/src/main/resources/datasets/mushrooms.csv", true, ",");
/** Filename. */
private final String filename;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/util/SandboxMLCache.java b/examples/src/main/java/org/apache/ignite/examples/ml/util/SandboxMLCache.java
similarity index 98%
rename from modules/ml/src/main/java/org/apache/ignite/ml/util/SandboxMLCache.java
rename to examples/src/main/java/org/apache/ignite/examples/ml/util/SandboxMLCache.java
index 81e38e2..341a341 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/util/SandboxMLCache.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/util/SandboxMLCache.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.ignite.ml.util;
+package org.apache.ignite.examples.ml.util;
import java.io.File;
import java.io.FileNotFoundException;
@@ -68,7 +68,6 @@
return cache;
}
-
/**
* Loads dataset as a list of rows.
*
@@ -95,11 +94,9 @@
String row = scanner.nextLine();
res.add(row);
}
-
return res;
}
-
/**
* Fills cache with data and returns it.
*
@@ -108,7 +105,6 @@
* @throws FileNotFoundException If file not found.
*/
public IgniteCache<Integer, Vector> fillCacheWith(MLSandboxDatasets dataset) throws FileNotFoundException {
-
IgniteCache<Integer, Vector> cache = getCache();
String fileName = dataset.getFileName();
@@ -137,7 +133,7 @@
try{
if(cells[i].isEmpty()) data[i] = Double.NaN;
else data[i] = Double.valueOf(cells[i]);
- } catch (java.lang.NumberFormatException e) {
+ } catch (NumberFormatException e) {
try {
data[i] = format.parse(cells[i]).doubleValue();
}
@@ -148,7 +144,6 @@
cache.put(cnt++, VectorUtils.of(data));
}
return cache;
-
}
/**
@@ -159,7 +154,6 @@
* @throws FileNotFoundException If file not found.
*/
public IgniteCache<Integer, Object[]> fillObjectCacheWithDoubleLabels(MLSandboxDatasets dataset) throws FileNotFoundException {
-
IgniteCache<Integer, Object[]> cache = getCache2();
String fileName = dataset.getFileName();
@@ -190,7 +184,6 @@
cache.put(cnt++, res);
}
return cache;
-
}
/**
@@ -201,7 +194,6 @@
* @throws FileNotFoundException If file not found.
*/
public IgniteCache<Integer, Object[]> fillObjectCacheWithCategoricalData(MLSandboxDatasets dataset) throws FileNotFoundException {
-
IgniteCache<Integer, Object[]> cache = getCache2();
String fileName = dataset.getFileName();
@@ -225,7 +217,6 @@
cache.put(cnt++, cells);
}
return cache;
-
}
/**
@@ -234,7 +225,6 @@
* @return Filled Ignite Cache.
*/
private IgniteCache<Integer, Vector> getCache() {
-
CacheConfiguration<Integer, Vector> cacheConfiguration = new CacheConfiguration<>();
cacheConfiguration.setName("ML_EXAMPLE_" + UUID.randomUUID());
cacheConfiguration.setAffinity(new RendezvousAffinityFunction(false, 10));
@@ -248,7 +238,6 @@
* @return Filled Ignite Cache.
*/
private IgniteCache<Integer, Object[]> getCache2() {
-
CacheConfiguration<Integer, Object[]> cacheConfiguration = new CacheConfiguration<>();
cacheConfiguration.setName("ML_EXAMPLE_" + UUID.randomUUID());
cacheConfiguration.setAffinity(new RendezvousAffinityFunction(false, 10));
diff --git a/modules/ml/src/main/resources/datasets/boston_housing_dataset.txt b/examples/src/main/resources/datasets/boston_housing_dataset.txt
similarity index 100%
rename from modules/ml/src/main/resources/datasets/boston_housing_dataset.txt
rename to examples/src/main/resources/datasets/boston_housing_dataset.txt
diff --git a/modules/ml/src/main/resources/datasets/cleared_machines.csv b/examples/src/main/resources/datasets/cleared_machines.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/cleared_machines.csv
rename to examples/src/main/resources/datasets/cleared_machines.csv
diff --git a/modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv b/examples/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv
rename to examples/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv
diff --git a/modules/ml/src/main/resources/datasets/fraud_detection.csv b/examples/src/main/resources/datasets/fraud_detection.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/fraud_detection.csv
rename to examples/src/main/resources/datasets/fraud_detection.csv
diff --git a/modules/ml/src/main/resources/datasets/glass_identification.csv b/examples/src/main/resources/datasets/glass_identification.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/glass_identification.csv
rename to examples/src/main/resources/datasets/glass_identification.csv
diff --git a/modules/ml/src/main/resources/datasets/iris.txt b/examples/src/main/resources/datasets/iris.txt
similarity index 100%
rename from modules/ml/src/main/resources/datasets/iris.txt
rename to examples/src/main/resources/datasets/iris.txt
diff --git a/modules/ml/src/main/resources/datasets/mixed_dataset.csv b/examples/src/main/resources/datasets/mixed_dataset.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/mixed_dataset.csv
rename to examples/src/main/resources/datasets/mixed_dataset.csv
diff --git a/modules/ml/src/main/resources/datasets/mortalitydata.csv b/examples/src/main/resources/datasets/mortalitydata.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/mortalitydata.csv
rename to examples/src/main/resources/datasets/mortalitydata.csv
diff --git a/modules/ml/src/main/resources/datasets/mushrooms.csv b/examples/src/main/resources/datasets/mushrooms.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/mushrooms.csv
rename to examples/src/main/resources/datasets/mushrooms.csv
diff --git a/modules/ml/src/main/resources/datasets/ratings.csv b/examples/src/main/resources/datasets/ratings.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/ratings.csv
rename to examples/src/main/resources/datasets/ratings.csv
diff --git a/examples/src/main/resources/datasets/t10k-images-idx3-ubyte b/examples/src/main/resources/datasets/t10k-images-idx3-ubyte
deleted file mode 100644
index 261057a..0000000
--- a/examples/src/main/resources/datasets/t10k-images-idx3-ubyte
+++ /dev/null
Binary files differ
diff --git a/examples/src/main/resources/datasets/t10k-labels-idx1-ubyte b/examples/src/main/resources/datasets/t10k-labels-idx1-ubyte
deleted file mode 100644
index d1c3a97..0000000
--- a/examples/src/main/resources/datasets/t10k-labels-idx1-ubyte
+++ /dev/null
Binary files differ
diff --git a/examples/src/main/resources/datasets/titanic.csv b/examples/src/main/resources/datasets/titanic.csv
index 6994016..ed25e85 100644
--- a/examples/src/main/resources/datasets/titanic.csv
+++ b/examples/src/main/resources/datasets/titanic.csv
@@ -1,17 +1,17 @@
pclass;survived;name;sex;age;sibsp;parch;ticket;fare;cabin;embarked;boat;body;homedest
-1;1;Allen, Miss. Elisabeth Walton;;29;;;24160;211,3375;B5;;2;;St Louis, MO
-1;1;Allison, Master. Hudson Trevor;male;0,9167;1;2;113781;151,55;C22 C26;AA;11;;Montreal, PQ / Chesterville, ON
-1;0;Allison, Miss. Helen Loraine;female;2;1;2;113781;151,55;C22 C26;S;;;Montreal, PQ / Chesterville, ON
-1;0;Allison, Mr. Hudson Joshua Creighton;male;30;1;2;113781;151,55;C22 C26;S;;135;Montreal, PQ / Chesterville, ON
-1;0;Allison, Mrs. Hudson J C (Bessie Waldo Daniels);female;25;1;2;113781;151,55;C22 C26;S;;;Montreal, PQ / Chesterville, ON
-1;1;Anderson, Mr. Harry;male;48;0;0;19952;26,55;E12;S;3;;New York, NY
-1;1;Andrews, Miss. Kornelia Theodosia;female;63;1;0;13502;77,9583;D7;S;10;;Hudson, NY
-1;0;Andrews, Mr. Thomas Jr;male;39;0;0;112050;0;A36;S;;;Belfast, NI
-1;1;Appleton, Mrs. Edward Dale (Charlotte Lamson);female;53;2;0;11769;51,4792;C101;S;D;;Bayside, Queens, NY
-1;0;Artagaveytia, Mr. Ramon;male;71;0;0;PC 17609;49,5042;;C;;22;Montevideo, Uruguay
-1;0;Astor, Col. John Jacob;male;47;1;0;PC 17757;227,525;C62 C64;C;;124;New York, NY
-1;1;Astor, Mrs. John Jacob (Madeleine Talmadge Force);female;18;1;0;PC 17757;227,525;C62 C64;C;4;;New York, NY
-1;1;Aubart, Mme. Leontine Pauline;female;24;0;0;PC 17477;69,3;B35;C;9;;Paris, France
+1;1;Allen ,Miss. Elisabeth Walton;;29;;;24160;211 ,3375;B5;;2;;St Louis ,MO
+1;1;Allison ,Master. Hudson Trevor;male;0 ,9167;1;2;113781;151 ,55;C22 C26;AA;11;;Montreal,PQ / Chesterville,ON
+1;0;Allison ,Miss. Helen Loraine;female;2;1;2;113781;151 ,55;C22 C26;S;;;Montreal ,PQ / Chesterville ,ON
+1;0;Allison ,Mr. Hudson Joshua Creighton;male;30;1;2;113781;151 ,55;C22 C26;S;;135;Montreal ,PQ / Chesterville ,ON
+1;0;Allison ,Mrs. Hudson J C (Bessie Waldo Daniels);female;25;1;2;113781;151 ,55;C22 C26;S;;;Montreal ,PQ / Chesterville ,ON
+1;1;Anderson ,Mr. Harry;male;48;0;0;19952;26 ,55;E12;S;3;;New York ,NY
+1;1;Andrews ,Miss. Kornelia Theodosia;female;63;1;0;13502;77 ,9583;D7;S;10;;Hudson ,NY
+1;0;Andrews ,Mr. Thomas Jr;male;39;0;0;112050;0;A36;S;;;Belfast ,NI
+1;1;Appleton ,Mrs. Edward Dale (Charlotte Lamson);female;53;2;0;11769;51 ,4792;C101;S;D;;Bayside ,Queens ,NY
+1;0;Artagaveytia ,Mr. Ramon;male;71;0;0;PC 17609;49 ,5042;;C;;22;Montevideo ,Uruguay
+1;0;Astor ,Col. John Jacob;male;47;1;0;PC 17757;227 ,525;C62 C64;C;;124;New York,NY
+1;1;Astor ,Mrs. John Jacob (Madeleine Talmadge Force);female;18;1;0;PC 17757;227,525;C62 C64;C;4;;New York ,NY
+1;1;Aubart ,Mme. Leontine Pauline;female;24;0;0;PC 17477;69 ,3;B35;C;9;;Paris ,France
1;1;"Barber, Miss. Ellen ""Nellie""";female;26;0;0;19877;78,85;;S;6;;
1;1;Barkworth, Mr. Algernon Henry Wilson;male;80;0;0;27042;30;A23;S;B;;Hessle, Yorks
1;0;Baumann, Mr. John D;male;;0;0;PC 17318;25,925;;S;;;New York, NY
diff --git a/modules/ml/src/main/resources/datasets/two_classed_iris.csv b/examples/src/main/resources/datasets/two_classed_iris.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/two_classed_iris.csv
rename to examples/src/main/resources/datasets/two_classed_iris.csv
diff --git a/modules/ml/src/main/resources/datasets/wholesale_customers.csv b/examples/src/main/resources/datasets/wholesale_customers.csv
similarity index 100%
rename from modules/ml/src/main/resources/datasets/wholesale_customers.csv
rename to examples/src/main/resources/datasets/wholesale_customers.csv
diff --git a/modules/ml/src/main/resources/datasets/wine.txt b/examples/src/main/resources/datasets/wine.txt
similarity index 100%
rename from modules/ml/src/main/resources/datasets/wine.txt
rename to examples/src/main/resources/datasets/wine.txt
diff --git a/examples/src/main/resources/models/mleap/airbnb.model.rf.zip b/examples/src/main/resources/models/mleap/airbnb.model.rf.zip
deleted file mode 100644
index 0da815c..0000000
--- a/examples/src/main/resources/models/mleap/airbnb.model.rf.zip
+++ /dev/null
Binary files differ
diff --git a/examples/src/main/resources/models/mnist_tf_model/saved_model.pb b/examples/src/main/resources/models/mnist_tf_model/saved_model.pb
deleted file mode 100644
index 4d36671..0000000
--- a/examples/src/main/resources/models/mnist_tf_model/saved_model.pb
+++ /dev/null
Binary files differ
diff --git a/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001 b/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001
deleted file mode 100644
index a65398f..0000000
--- a/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001
+++ /dev/null
Binary files differ
diff --git a/examples/src/main/resources/models/mnist_tf_model/variables/variables.index b/examples/src/main/resources/models/mnist_tf_model/variables/variables.index
deleted file mode 100644
index 221dd2d..0000000
--- a/examples/src/main/resources/models/mnist_tf_model/variables/variables.index
+++ /dev/null
Binary files differ
diff --git a/examples/src/main/spark/org/apache/ignite/examples/ml/mleap/MLeapModelParserExample.java b/examples/src/main/spark/org/apache/ignite/examples/ml/mleap/MLeapModelParserExample.java
deleted file mode 100644
index 2462bfd..0000000
--- a/examples/src/main/spark/org/apache/ignite/examples/ml/mleap/MLeapModelParserExample.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.examples.ml.mleap;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.internal.util.IgniteUtils;
-import org.apache.ignite.ml.inference.Model;
-import org.apache.ignite.ml.inference.builder.AsyncModelBuilder;
-import org.apache.ignite.ml.inference.builder.IgniteDistributedModelBuilder;
-import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
-import org.apache.ignite.ml.inference.reader.ModelReader;
-import org.apache.ignite.ml.math.primitives.vector.NamedVector;
-import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
-import org.apache.ignite.ml.mleap.MLeapModelParser;
-
-/**
- * This example demonstrates how to import MLeap model and use imported model for distributed inference in Apache
- * Ignite.
- */
-public class MLeapModelParserExample {
- /** Test model resource name. */
- private static final String TEST_MODEL_RES = "examples/src/main/resources/models/mleap/airbnb.model.rf.zip";
-
- /** Parser. */
- private static final MLeapModelParser parser = new MLeapModelParser();
-
- /** Run example. */
- public static void main(String... args) throws ExecutionException, InterruptedException {
- try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
- File mdlRsrc = IgniteUtils.resolveIgnitePath(TEST_MODEL_RES);
- if (mdlRsrc == null)
- throw new IllegalArgumentException("File not found [resource_path=" + TEST_MODEL_RES + "]");
-
- ModelReader reader = new FileSystemModelReader(mdlRsrc.getPath());
-
- AsyncModelBuilder mdlBuilder = new IgniteDistributedModelBuilder(ignite, 4, 4);
-
- try (Model<NamedVector, Future<Double>> mdl = mdlBuilder.build(reader, parser)) {
- HashMap<String, Double> input = new HashMap<>();
- input.put("bathrooms", 1.0);
- input.put("bedrooms", 1.0);
- input.put("security_deposit", 1.0);
- input.put("cleaning_fee", 1.0);
- input.put("extra_people", 1.0);
- input.put("number_of_reviews", 1.0);
- input.put("square_feet", 1.0);
- input.put("review_scores_rating", 1.0);
-
- Future<Double> prediction = mdl.predict(VectorUtils.of(input));
-
- System.out.println("Predicted price: " + prediction.get());
- }
- }
- }
-}
diff --git a/modules/ml/mleap-model-parser/pom.xml b/modules/ml/mleap-model-parser/pom.xml
deleted file mode 100644
index 48df94a..0000000
--- a/modules/ml/mleap-model-parser/pom.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- POM file.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <artifactId>ignite-parent</artifactId>
- <groupId>org.apache.ignite</groupId>
- <version>1</version>
- <relativePath>../../../parent</relativePath>
- </parent>
-
- <artifactId>ignite-ml-mleap-model-parser</artifactId>
- <version>2.9.0-SNAPSHOT</version>
- <url>http://ignite.apache.org</url>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-libs</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <excludeTransitive>false</excludeTransitive>
- <excludeArtifactIds>
- fastutil,h2,ignite-shmem,annotations,arpack_combined_all,
- cache-api,commons-math3,commons-rng-client-api,commons-rng-core,
- commons-rng-simple,core,ignite-ml
- </excludeArtifactIds>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>ml.combust.mleap</groupId>
- <artifactId>mleap-runtime_2.11</artifactId>
- <version>0.13.0</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/MLeapModel.java b/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/MLeapModel.java
deleted file mode 100644
index fe33a5f..0000000
--- a/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/MLeapModel.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.mleap;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-import ml.combust.mleap.core.types.ScalarType;
-import ml.combust.mleap.core.types.StructField;
-import ml.combust.mleap.core.types.StructType;
-import ml.combust.mleap.runtime.frame.DefaultLeapFrame;
-import ml.combust.mleap.runtime.frame.Row;
-import ml.combust.mleap.runtime.frame.Transformer;
-import ml.combust.mleap.runtime.javadsl.LeapFrameBuilder;
-import org.apache.ignite.ml.inference.Model;
-import org.apache.ignite.ml.math.primitives.vector.NamedVector;
-import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
-import scala.collection.immutable.Set;
-import scala.collection.immutable.Stream;
-import scala.util.Try;
-
-/**
- * MLeap model imported and wrapped to be compatible with Apache Ignite infrastructure.
- */
-public class MLeapModel implements Model<NamedVector, Double> {
- /** MLeap model (transformer in terms of MLeap). */
- private final Transformer transformer;
-
- /** List of field names. */
- private final List<String> schema;
-
- /** Output field name. */
- private final String outputFieldName;
-
- /**
- * Constructs a new instance of MLeap model.
- *
- * @param transformer MLpeap model (transformer in terms of MLeap).
- * @param schema List of field names.
- * @param outputFieldName Output field name.
- */
- public MLeapModel(Transformer transformer, List<String> schema, String outputFieldName) {
- this.transformer = transformer;
- this.schema = new ArrayList<>(schema);
- this.outputFieldName = outputFieldName;
- }
-
- /** {@inheritDoc} */
- @Override public Double predict(NamedVector input) {
- LeapFrameBuilder builder = new LeapFrameBuilder();
- List<StructField> structFields = new ArrayList<>();
-
- List<Object> values = new ArrayList<>();
- for (String fieldName : input.getKeys()) {
- structFields.add(new StructField(fieldName, ScalarType.Double()));
- values.add(input.get(fieldName));
- }
-
- StructType schema = builder.createSchema(structFields);
-
- List<Row> rows = new ArrayList<>();
- rows.add(builder.createRowFromIterable(values));
-
- DefaultLeapFrame inputFrame = builder.createFrame(schema, rows);
-
- return predict(inputFrame);
- }
-
- /**
- * Makes a prediction using default column order specified in {@link #schema}.
- *
- * @param input Input arguments.
- * @return Prediction result.
- */
- public double predict(Double[] input) {
- if (input.length != schema.size())
- throw new IllegalArgumentException("Input size is not equal to schema size");
-
- Map<String, Double> vec = IntStream.range(0, input.length)
- .boxed()
- .collect(Collectors.toMap(schema::get, i -> input[i]));
-
- return predict(VectorUtils.of(vec));
- }
-
- /**
- * Makes a prediction using MLeap API.
- *
- * @param inputFrame Input MLeap frame.
- * @return Prediction result.
- */
- public double predict(DefaultLeapFrame inputFrame) {
- DefaultLeapFrame outputFrame = transformer.transform(inputFrame).get();
-
- Try<DefaultLeapFrame> resFrame = outputFrame.select(new Set.Set1<>(outputFieldName).toSeq());
- DefaultLeapFrame frame = resFrame.get();
-
- Stream<?> stream = (Stream<?>)frame.productElement(1);
- Row row = (Row)stream.head();
-
- return (Double)row.get(0);
- }
-
- /** {@inheritDoc} */
- @Override public void close() {
- transformer.close();
- }
-}
diff --git a/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/MLeapModelParser.java b/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/MLeapModelParser.java
deleted file mode 100644
index 7f7c258..0000000
--- a/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/MLeapModelParser.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.mleap;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import ml.combust.mleap.core.types.ScalarType;
-import ml.combust.mleap.core.types.StructField;
-import ml.combust.mleap.core.types.StructType;
-import ml.combust.mleap.runtime.MleapContext;
-import ml.combust.mleap.runtime.frame.Transformer;
-import ml.combust.mleap.runtime.javadsl.BundleBuilder;
-import ml.combust.mleap.runtime.javadsl.ContextBuilder;
-import ml.combust.mleap.runtime.transformer.PipelineModel;
-import org.apache.ignite.ml.inference.parser.ModelParser;
-import org.apache.ignite.ml.math.primitives.vector.NamedVector;
-import scala.collection.JavaConverters;
-
-/**
- * MLeap model parser.
- */
-public class MLeapModelParser implements ModelParser<NamedVector, Double, MLeapModel> {
- /** */
- private static final long serialVersionUID = -370352744966205715L;
-
- /** Temporary file prefix. */
- private static final String TMP_FILE_PREFIX = "mleap_model";
-
- /** Temporary file postfix. */
- private static final String TMP_FILE_POSTFIX = ".zip";
-
- /** {@inheritDoc} */
- @Override public MLeapModel parse(byte[] mdl) {
- MleapContext mleapCtx = new ContextBuilder().createMleapContext();
- BundleBuilder bundleBuilder = new BundleBuilder();
-
- File file = null;
- try {
- file = File.createTempFile(TMP_FILE_PREFIX, TMP_FILE_POSTFIX);
- try (FileOutputStream fos = new FileOutputStream(file)) {
- fos.write(mdl);
- fos.flush();
- }
-
- Transformer transformer = bundleBuilder.load(file, mleapCtx).root();
- PipelineModel pipelineMdl = (PipelineModel)transformer.model();
-
- List<String> inputSchema = checkAndGetInputSchema(pipelineMdl);
- String outputSchema = checkAndGetOutputSchema(pipelineMdl);
-
- return new MLeapModel(transformer, inputSchema, outputSchema);
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- finally {
- if (file != null)
- file.delete();
- }
- }
-
- /**
- * Util method that checks that input schema contains only one double type.
- *
- * @param mdl Pipeline model.
- * @return Name of output field.
- */
- private String checkAndGetOutputSchema(PipelineModel mdl) {
- Transformer lastTransformer = mdl.transformers().last();
- StructType outputSchema = lastTransformer.outputSchema();
-
- List<StructField> output = new ArrayList<>(JavaConverters.seqAsJavaListConverter(outputSchema.fields()).asJava());
-
- if (output.size() != 1)
- throw new IllegalArgumentException("Parser supports only scalar outputs");
-
- return output.get(0).name();
- }
-
- /**
- * Util method that checks that output schema contains only double types and returns list of field names.
- *
- * @param mdl Pipeline model.
- * @return List of field names.
- */
- private List<String> checkAndGetInputSchema(PipelineModel mdl) {
- Transformer firstTransformer = mdl.transformers().head();
- StructType inputSchema = firstTransformer.inputSchema();
-
- List<StructField> input = new ArrayList<>(JavaConverters.seqAsJavaListConverter(inputSchema.fields()).asJava());
-
- List<String> schema = new ArrayList<>();
-
- for (StructField field : input) {
- String fieldName = field.name();
-
- schema.add(field.name());
- if (!ScalarType.Double().base().equals(field.dataType().base()))
- throw new IllegalArgumentException("Parser supports only double types [name=" +
- fieldName + ",type=" + field.dataType() + "]");
- }
-
- return schema;
- }
-}
diff --git a/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/package-info.java b/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/package-info.java
deleted file mode 100644
index 1930ed7..0000000
--- a/modules/ml/mleap-model-parser/src/main/java/org/apache/ignite/ml/mleap/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Base package for Mleap model parser.
- */
-
-package org.apache.ignite.ml.mleap;
diff --git a/modules/ml/mleap-model-parser/src/test/java/org/apache/ignite/ml/mleap/IgniteMLeapTestSuite.java b/modules/ml/mleap-model-parser/src/test/java/org/apache/ignite/ml/mleap/IgniteMLeapTestSuite.java
deleted file mode 100644
index 109b91d..0000000
--- a/modules/ml/mleap-model-parser/src/test/java/org/apache/ignite/ml/mleap/IgniteMLeapTestSuite.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.mleap;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/** Test suite for all module tests. */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- MLeapModelParserTest.class
-})
-public class IgniteMLeapTestSuite {
- // No-op.
-}
diff --git a/modules/ml/mleap-model-parser/src/test/java/org/apache/ignite/ml/mleap/MLeapModelParserTest.java b/modules/ml/mleap-model-parser/src/test/java/org/apache/ignite/ml/mleap/MLeapModelParserTest.java
deleted file mode 100644
index 12f6ee1..0000000
--- a/modules/ml/mleap-model-parser/src/test/java/org/apache/ignite/ml/mleap/MLeapModelParserTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.mleap;
-
-import java.net.URL;
-import java.util.HashMap;
-import org.apache.ignite.ml.inference.builder.SingleModelBuilder;
-import org.apache.ignite.ml.inference.builder.SyncModelBuilder;
-import org.apache.ignite.ml.inference.reader.FileSystemModelReader;
-import org.apache.ignite.ml.inference.reader.ModelReader;
-import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Tests for {@link MLeapModelParser}.
- */
-public class MLeapModelParserTest {
- /** Test model resource name. */
- private static final String TEST_MODEL_RESOURCE = "datasets/scikit-airbnb.rf.zip";
-
- /** Parser. */
- private final MLeapModelParser parser = new MLeapModelParser();
-
- /** Model builder. */
- private final SyncModelBuilder mdlBuilder = new SingleModelBuilder();
-
- /** */
- @Test
- public void testParseAndPredict() {
- URL url = MLeapModelParserTest.class.getClassLoader().getResource(TEST_MODEL_RESOURCE);
- if (url == null)
- throw new IllegalStateException("File not found [resource_name=" + TEST_MODEL_RESOURCE + "]");
-
- ModelReader reader = new FileSystemModelReader(url.getPath());
-
- try (MLeapModel mdl = mdlBuilder.build(reader, parser)) {
- HashMap<String, Double> input = new HashMap<>();
- input.put("imp_bathrooms", 1.0);
- input.put("imp_bedrooms", 1.0);
- input.put("imp_security_deposit", 1.0);
- input.put("imp_cleaning_fee", 1.0);
- input.put("imp_extra_people", 1.0);
- input.put("imp_number_of_reviews", 1.0);
- input.put("imp_square_feet", 1.0);
- input.put("imp_review_scores_rating", 1.0);
-
- double prediction = mdl.predict(VectorUtils.of(input));
-
- assertEquals(95.3919, prediction, 1e-5);
- }
- }
-}
diff --git a/modules/ml/mleap-model-parser/src/test/resources/datasets/scikit-airbnb.rf.zip b/modules/ml/mleap-model-parser/src/test/resources/datasets/scikit-airbnb.rf.zip
deleted file mode 100644
index e24d3b4..0000000
--- a/modules/ml/mleap-model-parser/src/test/resources/datasets/scikit-airbnb.rf.zip
+++ /dev/null
Binary files differ
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Chromosome.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Chromosome.java
deleted file mode 100644
index 0552036..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Chromosome.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.Arrays;
-import java.util.concurrent.atomic.AtomicLong;
-import org.apache.ignite.cache.query.annotations.QuerySqlField;
-
-/**
- * Represents a potential solution consisting of a fixed-length collection of genes. <br/>
- *
- * <p>
- *
- * NOTE: Chromosome resides in cache: GAGridConstants.POPULATION_CACHE. This cached is partitioned.
- *
- * </p>
- */
-public class Chromosome {
- /** primary key of Chromosome */
- private static final AtomicLong ID_GEN = new AtomicLong();
-
- /** fitness score */
- @QuerySqlField(index = true)
- private double fitnessScore = -1;
-
- /** Id (indexed). */
- @QuerySqlField(index = true)
- private Long id;
-
- /** array of gene keys. */
- private long[] genes;
-
- /**
- * @param genes Primary keys of Genes
- */
- public Chromosome(long[] genes) {
- id = ID_GEN.incrementAndGet();
- this.genes = genes;
- }
-
- /**
- * Gets the fitnessScore
- *
- * @return This chromosome's fitness score
- */
- public double getFitnessScore() {
- return fitnessScore;
- }
-
- /**
- * Set the fitnessScore for this chromosome
- *
- * @param fitnessScore This chromosome's new fitness score
- */
- public void setFitnessScore(double fitnessScore) {
- this.fitnessScore = fitnessScore;
- }
-
- /**
- * Gets the gene keys (ie: primary keys) for this chromosome
- *
- * @return This chromosome's genes
- */
- public long[] getGenes() {
- return genes;
- }
-
- /**
- * Set the gene keys (ie: primary keys)
- *
- * @param genes This chromosome's new genes
- */
- public void setGenes(long[] genes) {
- this.genes = genes;
- }
-
- /**
- * Get the id (primary key) for this chromosome
- *
- * @return This chromosome's primary key
- */
- public Long id() {
- return id;
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return "Chromosome [fitnessScore=" + fitnessScore + ", id=" + id + ", genes=" + Arrays.toString(genes) + "]";
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
deleted file mode 100644
index afd0119..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.Arrays;
-import java.util.Random;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.resources.LoggerResource;
-import org.apache.ignite.transactions.Transaction;
-
-/**
- * Responsible for performing 'crossover' genetic operation for 2 X 'parent' chromosomes.
- *
- * <p>
- *
- * It relies on the GAConfiguration.getCrossOverRate() to determine probability rate of crossover for pair of
- * chromosome.
- *
- * <br/>
- *
- * CrossOverJob will randomly pick a start index j in Chromosome.getGenes[] and continue
- *
- * swapping until end of genes[] array.
- *
- * </p>
- */
-public class CrossOverJob extends ComputeJobAdapter {
- /** Ignite resource */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** Ignite logger */
- @LoggerResource
- private IgniteLogger log;
-
- /** primary key of 1st chromosome */
- private Long key1;
-
- /** primary key of 2nd chromosome */
- private Long key2;
-
- /** Cross over rate */
- private double crossOverRate;
-
- /**
- * @param key1 Primary key for 1st chromosome
- * @param key2 Primary key for 2nd chromosome
- * @param crossOverRate CrossOver rate
- */
- public CrossOverJob(Long key1, Long key2, double crossOverRate) {
- this.key1 = key1;
- this.key2 = key2;
- this.crossOverRate = crossOverRate;
- }
-
- /**
- * helper routine to assist cross over
- *
- * @param newKeySwapArrForChrome New gene keys to copy starting at updateIdx
- * @param updateIdx Update Index
- * @param genekeys Original gene Keys for a chromosome
- * @return New Gene keys
- */
- private long[] crossOver(long[] newKeySwapArrForChrome, int updateIdx, long[] genekeys) {
- long[] newGeneKeys = genekeys.clone();
-
- int k = 0;
- for (int x = updateIdx; x < newGeneKeys.length; x++) {
- newGeneKeys[x] = newKeySwapArrForChrome[k];
- k += 1;
- }
- return newGeneKeys;
- }
-
- /** {@inheritDoc} */
- @Override public Object execute() throws IgniteException {
-
- if (this.crossOverRate > Math.random()) {
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- Transaction tx = ignite.transactions().txStart();
-
- Chromosome chromosome1 = populationCache.localPeek(this.key1);
- Chromosome chromosome2 = populationCache.localPeek(this.key2);
-
- long[] genesforChrom1 = chromosome1.getGenes();
- long[] genesforChrom2 = chromosome2.getGenes();
-
- Random rn = new Random();
-
- // compute index to start for copying respective genes
- int geneIdxStartSwap = rn.nextInt(genesforChrom1.length);
-
- long[] newKeySwapArrForChrome1 =
- Arrays.copyOfRange(genesforChrom2, geneIdxStartSwap, genesforChrom1.length);
- long[] newKeySwapArrForChrome2 =
- Arrays.copyOfRange(genesforChrom1, geneIdxStartSwap, genesforChrom1.length);
-
- long[] newGeneKeysForChrom1 = crossOver(newKeySwapArrForChrome1, geneIdxStartSwap, genesforChrom1);
- long[] newGeneKeysForChrom2 = crossOver(newKeySwapArrForChrome2, geneIdxStartSwap, genesforChrom2);
-
- chromosome1.setGenes(newGeneKeysForChrom1);
- populationCache.put(chromosome1.id(), chromosome1);
-
- chromosome2.setGenes(newGeneKeysForChrom2);
- populationCache.put(chromosome2.id(), chromosome2);
-
- tx.commit();
-
- }
-
- return null;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
deleted file mode 100644
index 7b9ec8c..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeJobResultPolicy;
-import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Responsible for assigning 2 X 'parent' chromosomes to produce 2 X 'child' chromosomes.
- *
- * <p>
- *
- * CrossOverTask leverages Ignite's data affinity capabilities for routing CrossOverJobs to primary <br/> IgniteNode
- * where 'parent' chromosomes reside.
- *
- * </p>
- */
-public class CrossOverTask extends ComputeTaskAdapter<List<Long>, Boolean> {
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** GAConfiguration */
- private GAConfiguration cfg;
-
- /**
- * @param cfg GAConfiguration
- */
- public CrossOverTask(GAConfiguration cfg) {
- this.cfg = cfg;
- }
-
- /** {@inheritDoc} */
- @NotNull @Override public Map map(List<ClusterNode> nodes, List<Long> chromosomeKeys) throws IgniteException {
-
- Map<ComputeJob, ClusterNode> map = new HashMap<>();
-
- Affinity affinity = ignite.affinity(GAGridConstants.POPULATION_CACHE);
-
- Map<ClusterNode, Collection<Long>> nodeKeys = affinity.mapKeysToNodes(chromosomeKeys);
-
- for (Map.Entry<ClusterNode, Collection<Long>> entry : nodeKeys.entrySet()) {
- ClusterNode aNode = entry.getKey();
- map = setupCrossOver(aNode, (List<Long>)entry.getValue(), map);
- }
- return map;
- }
-
- /** {@inheritDoc} */
- @Override public Boolean reduce(List<ComputeJobResult> list) throws IgniteException {
- // TODO Auto-generated method stub
- return Boolean.TRUE;
- }
-
- /** {@inheritDoc} */
- @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> rcvd) {
- IgniteException err = res.getException();
-
- if (err != null)
- return ComputeJobResultPolicy.FAILOVER;
-
- // If there is no exception, wait for all job results.
- return ComputeJobResultPolicy.WAIT;
-
- }
-
- /**
- * Helper method to help assign ComputeJobs to respective ClusterNodes.
- *
- * @param clusterNode Cluster node.
- * @param keys Primary keys of Chromosomes.
- * @param map Nodes where jobs will be sent.
- * @return A map of ComputeJob/ClusterNode's.
- */
- private Map<ComputeJob, ClusterNode> setupCrossOver(ClusterNode clusterNode, List<Long> keys,
- Map<ComputeJob, ClusterNode> map) {
- // Calculate number of Jobs = keys / 2
- // as we desire pairs of Chromosomes to be swapped
- int numOfJobs = keys.size() / 2;
- int k = 0;
- for (int i = 0; i < numOfJobs; i++) {
- Long key1 = keys.get(k);
- Long key2 = keys.get(k + 1);
-
- CrossOverJob job = new CrossOverJob(key1, key2, this.cfg.getCrossOverRate());
- map.put(job, clusterNode);
- k += 2;
- }
- return map;
- }
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
deleted file mode 100644
index 445f1d7..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.resources.LoggerResource;
-import org.apache.ignite.transactions.Transaction;
-
-/**
- * Responsible for performing fitness evaluation on an individual chromosome
- */
-public class FitnessJob extends ComputeJobAdapter {
- /**
- * Chromosome primary Key
- */
- private Long key;
-
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** Ignite logger */
- @LoggerResource
- private IgniteLogger log;
-
- /** IFitnessFunction */
- private IFitnessFunction fitnessFunction;
-
- /**
- * @param key Chromosome primary Key
- * @param fitnessFunction Fitness function defined by developer
- */
- public FitnessJob(Long key, IFitnessFunction fitnessFunction) {
- this.key = key;
- this.fitnessFunction = fitnessFunction;
- }
-
- /** {@inheritDoc} */
- @Override public Double execute() throws IgniteException {
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- IgniteCache<Long, Gene> geneCache = ignite.cache(GAGridConstants.GENE_CACHE);
-
- Chromosome chromosome = populationCache.localPeek(key);
-
- long[] geneKeys = chromosome.getGenes();
-
- List<Gene> genes = new ArrayList<>();
-
- for (int i = 0; i < geneKeys.length; i++) {
- long aKey = geneKeys[i];
- Gene aGene = geneCache.localPeek(aKey);
- genes.add(aGene);
- }
-
- Double val = fitnessFunction.evaluate(genes);
-
- chromosome.setFitnessScore(val);
-
- Transaction tx = ignite.transactions().txStart();
-
- populationCache.put(chromosome.id(), chromosome);
-
- tx.commit();
-
- return val;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
deleted file mode 100644
index 97b5275..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeJobResultPolicy;
-import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Responsible for fitness operation
- */
-public class FitnessTask extends ComputeTaskAdapter<List<Long>, Boolean> {
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** GAConfiguration */
- private GAConfiguration cfg;
-
- /**
- * @param cfg GAConfiguration
- */
- public FitnessTask(GAConfiguration cfg) {
- this.cfg = cfg;
- }
-
- /** {@inheritDoc} */
- @NotNull @Override public Map map(List<ClusterNode> nodes, List<Long> chromosomeKeys) throws IgniteException {
-
- Map<ComputeJob, ClusterNode> map = new HashMap<>();
-
- Affinity affinity = ignite.affinity(GAGridConstants.POPULATION_CACHE);
-
- for (Long key : chromosomeKeys) {
-
- FitnessJob ajob = new FitnessJob(key, this.cfg.getFitnessFunction());
-
- ClusterNode primary = affinity.mapKeyToNode(key);
-
- map.put(ajob, primary);
- }
- return map;
- }
-
- /** {@inheritDoc} */
- @Override public Boolean reduce(List<ComputeJobResult> list) throws IgniteException {
-
- return Boolean.TRUE;
- }
-
- /** {@inheritDoc} */
- @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> rcvd) {
- IgniteException err = res.getException();
-
- if (err != null)
- return ComputeJobResultPolicy.FAILOVER;
-
- // If there is no exception, wait for all job results.
- return ComputeJobResultPolicy.WAIT;
-
- }
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
deleted file mode 100644
index 68c6f76..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Random;
-import java.util.stream.Collectors;
-import javax.cache.Cache.Entry;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.cache.query.SqlQuery;
-import org.apache.ignite.ml.genetic.cache.GeneCacheConfig;
-import org.apache.ignite.ml.genetic.cache.PopulationCacheConfig;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * Central class responsible for orchestrating distributive Genetic Algorithm.
- *
- * This class accepts a GAConfigriation and Ignite instance.
- */
-public class GAGrid {
- /** Ignite logger */
- private IgniteLogger igniteLog;
-
- /** GAConfiguraton */
- private GAConfiguration cfg;
-
- /** Ignite instance */
- private Ignite ignite;
-
- /** Population cache */
- private IgniteCache<Long, Chromosome> populationCache;
-
- /** Gene cache */
- private IgniteCache<Long, Gene> geneCache;
-
- /**
- * @param cfg GAConfiguration
- * @param ignite Ignite
- */
- public GAGrid(GAConfiguration cfg, Ignite ignite) {
- this.ignite = ignite;
- this.cfg = cfg;
- this.ignite = ignite;
- this.igniteLog = ignite.log();
-
- // Get/Create cache
- populationCache = this.ignite.getOrCreateCache(PopulationCacheConfig.populationCache());
- populationCache.clear();
-
- // Get/Create cache
- geneCache = this.ignite.getOrCreateCache(GeneCacheConfig.geneCache());
- geneCache.clear();
- }
-
- /**
- * Calculate average fitness value
- *
- * @return Average fitness score
- */
- private Double calculateAverageFitness() {
- double avgFitnessScore = 0;
-
- IgniteCache<Long, Gene> cache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- // Execute query calculate average fitness
- SqlFieldsQuery sql = new SqlFieldsQuery("select AVG(FITNESSSCORE) from Chromosome");
-
- // Iterate over the result set.
- try (QueryCursor<List<?>> cursor = cache.query(sql)) {
- for (List<?> row : cursor)
- avgFitnessScore = (Double)row.get(0);
- }
-
- return avgFitnessScore;
- }
-
- /**
- * Calculate fitness each Chromosome in population
- *
- * @param chromosomeKeys List of chromosome primary keys
- */
- private void calculateFitness(List<Long> chromosomeKeys) {
- this.ignite.compute().execute(new FitnessTask(this.cfg), chromosomeKeys);
- }
-
- /**
- * @param fittestKeys List of chromosome keys that will be copied from
- * @param selectedKeys List of chromosome keys that will be overwritten evenly by fittestKeys
- * @return Boolean value
- */
- private Boolean copyFitterChromosomesToPopulation(List<Long> fittestKeys, List<Long> selectedKeys) {
- double truncatePercentage = this.cfg.getTruncateRate();
-
- int totalSize = this.cfg.getPopulationSize();
-
- int truncateCnt = (int)(truncatePercentage * totalSize);
-
- int numOfCopies = selectedKeys.size() / truncateCnt;
-
- return this.ignite.compute()
- .execute(new TruncateSelectionTask(fittestKeys, numOfCopies), selectedKeys);
- }
-
- /**
- * create a Chromsome
- *
- * @param numOfGenes Number of Genes in resepective Chromosome
- * @return Chromosome
- */
- private Chromosome createChromosome(int numOfGenes) {
- long[] genes = new long[numOfGenes];
- List<Long> keys = new ArrayList<>();
- int k = 0;
- while (k < numOfGenes) {
- long key = selectGene(k);
-
- if (!(keys.contains(key))) {
- genes[k] = key;
- keys.add(key);
- k += 1;
- }
- }
- return new Chromosome(genes);
- }
-
- /**
- * Perform crossover
- *
- * @param leastFitKeys List of primary keys for Chromosomes that are considered 'least fit'
- */
- private void crossover(List<Long> leastFitKeys) {
- this.ignite.compute().execute(new CrossOverTask(this.cfg), leastFitKeys);
- }
-
- /**
- * Evolve the population
- *
- * @return Fittest Chromosome
- */
- public Chromosome evolve() {
- // keep track of current generation
- int generationCnt = 1;
-
- Chromosome fittestChromosome;
-
- initializeGenePopulation();
-
- initializePopulation();
-
- // Calculate Fitness
- calculateFitness(getPopulationKeys());
-
- // Retrieve chromosomes in order by fitness value
- LinkedHashMap<Long, Double> map = getChromosomesByFittest();
-
- // Calculate average fitness value of population
- double averageFitnessScore = calculateAverageFitness();
-
- Long key = map.keySet().iterator().next();
-
- fittestChromosome = populationCache.get(key);
-
- // while NOT terminateCondition met
- while (!(cfg.getTerminateCriteria().isTerminationConditionMet(fittestChromosome, averageFitnessScore,
- generationCnt))) {
- generationCnt += 1;
-
- // We will crossover/mutate over chromosomes based on selection method
- List<Long> selectedKeystoreCrossMutation = selection(map);
-
- // Cross Over
- crossover(selectedKeystoreCrossMutation);
-
- // Mutate
- mutation(selectedKeystoreCrossMutation);
-
- // Calculate Fitness
- calculateFitness(selectedKeystoreCrossMutation);
-
- // Retrieve chromosomes in order by fitness value
- map = getChromosomesByFittest();
-
- key = map.keySet().iterator().next();
-
- // Retreive the first chromosome from the list
- fittestChromosome = populationCache.get(key);
-
- // Calculate average fitness value of population
- averageFitnessScore = calculateAverageFitness();
-
- // End Loop
-
- }
- return fittestChromosome;
- }
-
- /**
- * helper routine to retrieve Chromosome keys in order of fittest
- *
- * @return Map of primary key/fitness score pairs for chromosomes.
- */
- private LinkedHashMap<Long,Double> getChromosomesByFittest() {
- LinkedHashMap<Long, Double> orderChromKeysByFittest = new LinkedHashMap<>();
-
- String orderDirection = "desc";
-
- if (!cfg.isHigherFitnessValFitter())
- orderDirection = "asc";
-
- String fittestSQL = "select _key, fitnessScore from Chromosome order by fitnessScore " + orderDirection;
-
- // Execute query to retrieve keys for ALL Chromosomes by fittnessScore
- QueryCursor<List<?>> cursor = populationCache.query(new SqlFieldsQuery(fittestSQL));
-
- List<List<?>> res = cursor.getAll();
-
- for (List row : res) {
- Long key = (Long)row.get(0);
- Double fitnessScore = (Double)row.get(1);
- orderChromKeysByFittest.put(key, fitnessScore);
- }
-
- return orderChromKeysByFittest;
- }
-
- /**
- * @param keys List of primary keys for respective Chromosomes
- * @return List of keys for respective Chromosomes
- */
- private List<Long> getFittestKeysForTruncation(List<Long> keys) {
- double truncatePercentage = this.cfg.getTruncateRate();
-
- int truncateCnt = (int)(truncatePercentage * keys.size());
-
- return keys.subList(0, truncateCnt);
- }
-
- /**
- * initialize the Gene pool
- */
- void initializeGenePopulation() {
- geneCache.clear();
-
- List<Gene> genePool = cfg.getGenePool();
-
- for (Gene gene : genePool)
- geneCache.put(gene.id(), gene);
- }
-
- /**
- * Initialize the population of Chromosomes
- */
- void initializePopulation() {
- int populationSize = cfg.getPopulationSize();
- populationCache.clear();
-
- for (int j = 0; j < populationSize; j++) {
- Chromosome chromosome = createChromosome(cfg.getChromosomeLen());
- populationCache.put(chromosome.id(), chromosome);
- }
-
- }
-
- /**
- * Perform mutation
- *
- * @param leastFitKeys List of primary keys for Chromosomes that are considered 'least fit'.
- */
- private void mutation(List<Long> leastFitKeys) {
- this.ignite.compute().execute(new MutateTask(this.cfg), leastFitKeys);
- }
-
- /**
- * select a gene from the Gene pool
- *
- * @return Primary key of respective Gene
- */
- private long selectAnyGene() {
- int idx = selectRandomIndex(cfg.getGenePool().size());
- Gene gene = cfg.getGenePool().get(idx);
- return gene.id();
- }
-
- /**
- * For our implementation we consider 'best fit' chromosomes, by selecting least fit chromosomes for crossover and
- * mutation
- *
- * As result, we are interested in least fit chromosomes.
- *
- * @param keys List of primary keys for respective Chromosomes
- * @return List of primary Keys for respective Chromosomes that are considered least fit
- */
- private List<Long> selectByElitism(List<Long> keys) {
- int elitismCnt = this.cfg.getElitismCnt();
- return keys.subList(elitismCnt, keys.size());
- }
-
- /**
- * Truncation selection simply retains the fittest x% of the population. These fittest individuals are duplicated so
- * that the population size is maintained.
- *
- * @param keys Keys.
- * @return List of keys
- */
- private List<Long> selectByTruncation(List<Long> keys) {
- double truncatePercentage = this.cfg.getTruncateRate();
-
- int truncateCnt = (int)(truncatePercentage * keys.size());
-
- return keys.subList(truncateCnt, keys.size());
- }
-
- /**
- * Roulette Wheel selection
- *
- * @param map Map of keys/fitness scores
- * @return List of primary Keys for respective chromosomes that will breed
- */
- private List<Long> selectByRouletteWheel(LinkedHashMap map) {
- List<Long> populationKeys = this.ignite.compute().execute(new RouletteWheelSelectionTask(this.cfg), map);
-
- return populationKeys;
- }
-
- /**
- * @param k Gene index in Chromosome.
- * @return Primary key of respective Gene chosen
- */
- private long selectGene(int k) {
- if (cfg.getChromosomeCriteria() == null)
- return (selectAnyGene());
- else
- return (selectGeneByChromosomeCriteria(k));
- }
-
- /**
- * method assumes ChromosomeCriteria is set.
- *
- * @param k Gene index in Chromosome
- * @return Primary key of respective Gene
- */
- private long selectGeneByChromosomeCriteria(int k) {
- List<Gene> genes = new ArrayList<>();
-
- StringBuffer sbSqlClause = new StringBuffer("_val like '");
- sbSqlClause.append("%");
- sbSqlClause.append(cfg.getChromosomeCriteria().getCriteria().get(k));
- sbSqlClause.append("%'");
-
- IgniteCache<Long, Gene> cache = ignite.cache(GAGridConstants.GENE_CACHE);
-
- SqlQuery sql = new SqlQuery(Gene.class, sbSqlClause.toString());
-
- try (QueryCursor<Entry<Long, Gene>> cursor = cache.query(sql)) {
- for (Entry<Long, Gene> e : cursor)
- genes.add(e.getValue());
- }
-
- int idx = selectRandomIndex(genes.size());
-
- Gene gene = genes.get(idx);
- return gene.id();
- }
-
- /**
- * @param sizeOfGenePool Size of Gene pool
- * @return Index
- */
- private int selectRandomIndex(int sizeOfGenePool) {
- Random randomGenerator = new Random();
- return randomGenerator.nextInt(sizeOfGenePool);
- }
-
- /**
- * Select chromosomes
- *
- * @param map Map of keys/fitness scores for respective Chromosomes
- * @return List of primary keys for respective Chromosomes
- */
- private List<Long> selection(LinkedHashMap map) {
- List<Long> selectedKeys = new ArrayList<>();
-
- // We will crossover/mutate over chromosomes based on selection method
- List<Long> chromosomeKeys = new ArrayList<>(map.keySet());
-
- GAGridConstants.SELECTION_METHOD selectionMtd = cfg.getSelectionMtd();
-
- switch (selectionMtd) {
- case SELECTION_METHOD_ELITISM:
- selectedKeys = selectByElitism(chromosomeKeys);
- break;
- case SELECTION_METHOD_TRUNCATION:
- selectedKeys = selectByTruncation(chromosomeKeys);
-
- List<Long> fittestKeys = getFittestKeysForTruncation(chromosomeKeys);
-
- copyFitterChromosomesToPopulation(fittestKeys, selectedKeys);
-
- // copy more fit keys to rest of population
- break;
- case SELECTION_METHOD_ROULETTE_WHEEL:
- selectedKeys = this.selectByRouletteWheel(map);
-
- default:
- break;
- }
-
- return selectedKeys;
- }
-
- /**
- * Get primary keys for Chromosomes
- *
- * @return List of Chromosome primary keys
- */
- List<Long> getPopulationKeys() {
- String fittestSQL = "select _key from Chromosome";
-
- // Execute query to retrieve keys for ALL Chromosomes
- QueryCursor<List<?>> cursor = populationCache.query(new SqlFieldsQuery(fittestSQL));
-
- List<List<?>> res = cursor.getAll();
-
- return (List<Long>) res.stream().map(x -> x.get(0)).collect(Collectors.toList());
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
deleted file mode 100644
index 04b054b..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import org.apache.ignite.cache.query.annotations.QuerySqlField;
-
-import java.util.concurrent.atomic.AtomicLong;
-
-/**
- * Represents the discrete parts of a potential solution (ie: Chromosome)
- *
- * <p>
- *
- * Gene is a container for a POJO that developer will implement. <br/>
- *
- * For the Movie Fitness example, the Movie object is the POJO contained within Gene. <br/> NOTE: Gene resides in cache:
- * 'geneCache'. This cache is replicated.
- *
- *
- * </p>
- */
-public class Gene {
- /** primary key of Gene */
- private static final AtomicLong ID_GEN = new AtomicLong();
-
- /** Id (indexed). */
- @QuerySqlField(index = true)
- private Long id;
-
- /** value used to model an individual Gene. */
- private Object val;
-
- /**
- * object Object parameter.
- *
- * @param obj Object parameter.
- */
- public Gene(Object obj) {
- id = ID_GEN.incrementAndGet();
- this.val = obj;
- }
-
- /**
- * @return Value for Gene
- */
- public Object getVal() {
- return val;
- }
-
- /**
- * Set the Gene value
- *
- * @param obj Value for Gene
- */
- public void setVal(Object obj) {
- this.val = obj;
- }
-
- /**
- * @return Primary key for Gene
- */
- public Long id() {
- return id;
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return "Gene [id=" + id + ", value=" + val + "]";
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/IFitnessFunction.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/IFitnessFunction.java
deleted file mode 100644
index fa84946..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/IFitnessFunction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.List;
-
-/**
- * Fitness function are used to determine how optimal a particular solution is relative to other solutions.
- *
- * <p> The evaluate() method should be implemented for this interface. The fitness function is provided list of Genes.
- *
- * The evaluate method should return a positive double value that reflects fitness score.
- *
- * </p>
- */
-public interface IFitnessFunction {
- /**
- * @param genes Genes within an individual Chromosome
- * @return Fitness score
- */
- public double evaluate(List<Gene> genes);
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateJob.java
deleted file mode 100644
index c3a4d4e..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateJob.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.transactions.Transaction;
-
-/**
- * Responsible for applying mutation on respective Chromosome based on mutation Rate
- */
-public class MutateJob extends ComputeJobAdapter {
- /** primary key of Chromosome to mutate **/
- private Long key;
-
- /** primary keys of genes to be used in mutation **/
- private List<Long> mutatedGeneKeys;
-
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** Mutation Rate **/
- private double mutationRate;
-
- /**
- * @param key Primary key of chromosome
- * @param mutatedGeneKeys Primary keys of genes to be used in mutation
- * @param mutationRate Mutation rate
- */
- public MutateJob(Long key, List<Long> mutatedGeneKeys, double mutationRate) {
- this.key = key;
- this.mutationRate = mutationRate;
- this.mutatedGeneKeys = mutatedGeneKeys;
- }
-
- /** {@inheritDoc} */
- @Override public Boolean execute() throws IgniteException {
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- Chromosome chromosome = populationCache.localPeek(key);
-
- long[] geneKeys = chromosome.getGenes();
-
- for (int k = 0; k < this.mutatedGeneKeys.size(); k++) {
- // Mutate gene based on MutationRate
- if (this.mutationRate > Math.random())
- geneKeys[k] = this.mutatedGeneKeys.get(k);
- }
-
- chromosome.setGenes(geneKeys);
-
- Transaction tx = ignite.transactions().txStart();
-
- populationCache.put(chromosome.id(), chromosome);
-
- tx.commit();
-
- return Boolean.TRUE;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
deleted file mode 100644
index c32406b..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import javax.cache.Cache.Entry;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlQuery;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeJobResultPolicy;
-import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Responsible for applying mutation on respective chromosomes. <br/>
- *
- * MutateTask leverages Ignite's data affinity capabilities for routing MutateJobs to primary IgniteNode where <br/>
- * chromosomes reside.<br/>
- */
-public class MutateTask extends ComputeTaskAdapter<List<Long>, Boolean> {
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** GAConfiguration */
- private GAConfiguration cfg;
-
- /**
- * @param cfg GAConfiguration
- */
- public MutateTask(GAConfiguration cfg) {
- this.cfg = cfg;
- }
-
- /**
- * choose mutated genes.
- *
- * @return Gene primary keys
- */
- private List<Long> getMutatedGenes() {
- List<Long> mutatedGenes = new ArrayList<>();
- cfg.getChromosomeLen();
-
- for (int i = 0; i < cfg.getChromosomeLen(); i++)
- mutatedGenes.add(selectGene(i));
-
- return mutatedGenes;
- }
-
- /** {@inheritDoc} */
- @NotNull @Override public Map map(List<ClusterNode> nodes, List<Long> chromosomeKeys) throws IgniteException {
-
- Map<ComputeJob, ClusterNode> map = new HashMap<>();
- Affinity affinity = ignite.affinity(GAGridConstants.POPULATION_CACHE);
-
- for (Long key : chromosomeKeys) {
- MutateJob ajob = new MutateJob(key, getMutatedGenes(), this.cfg.getMutationRate());
- ClusterNode primary = affinity.mapKeyToNode(key);
- map.put(ajob, primary);
- }
- return map;
- }
-
- /** {@inheritDoc} */
- @Override public Boolean reduce(List<ComputeJobResult> list) throws IgniteException {
- return Boolean.TRUE;
- }
-
- /** {@inheritDoc} */
- @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> rcvd) {
- IgniteException err = res.getException();
-
- if (err != null)
- return ComputeJobResultPolicy.FAILOVER;
-
- // If there is no exception, wait for all job results.
- return ComputeJobResultPolicy.WAIT;
-
- }
-
- /**
- * select a gene from the Gene pool
- *
- * @return Primary key of Gene
- */
- private long selectAnyGene() {
- int idx = selectRandomIndex(cfg.getGenePool().size());
- Gene gene = cfg.getGenePool().get(idx);
- return gene.id();
- }
-
- /**
- * select a gene based from the Gene pool
- *
- * @param k Gene index in Chromosome.
- * @return Primary key of Gene
- */
- private long selectGene(int k) {
- if (cfg.getChromosomeCriteria() == null)
- return (selectAnyGene());
- else
- return (selectGeneByChromosomeCriteria(k));
- }
-
- /**
- * method assumes ChromosomeCriteria is set.
- *
- * @param k Gene index in Chromosome.
- * @return Primary key of Gene
- */
- private long selectGeneByChromosomeCriteria(int k) {
- List<Gene> genes = new ArrayList<>();
-
- StringBuffer sbSqlClause = new StringBuffer("_val like '");
- sbSqlClause.append("%");
- sbSqlClause.append(cfg.getChromosomeCriteria().getCriteria().get(k));
- sbSqlClause.append("%'");
-
- IgniteCache<Long, Gene> cache = ignite.cache(GAGridConstants.GENE_CACHE);
-
- SqlQuery sql = new SqlQuery(Gene.class, sbSqlClause.toString());
-
- try (QueryCursor<Entry<Long, Gene>> cursor = cache.query(sql)) {
- for (Entry<Long, Gene> e : cursor)
- genes.add(e.getValue());
- }
-
- int idx = selectRandomIndex(genes.size());
-
- Gene gene = genes.get(idx);
- return gene.id();
- }
-
- /**
- * select an index at random
- *
- * @param sizeOfGenePool Size of gene pool
- * @return Index of Gene to be selected
- */
- private int selectRandomIndex(int sizeOfGenePool) {
- Random randomGenerator = new Random();
- return randomGenerator.nextInt(sizeOfGenePool);
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/RouletteWheelSelectionJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/RouletteWheelSelectionJob.java
deleted file mode 100644
index da0085f..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/RouletteWheelSelectionJob.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.stream.Collectors;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.resources.LoggerResource;
-
-/**
- * Responsible for performing Roulette Wheel selection
- */
-public class RouletteWheelSelectionJob extends ComputeJobAdapter {
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** Ignite logger */
- @LoggerResource
- private IgniteLogger log;
-
- /** Total Fitness score */
- Double totalFitnessScore;
-
- /** Chromosome key/fitness score pair */
- LinkedHashMap<Long, Double> map;
-
- /**
- * @param totalFitnessScore Total fitness score
- * @param map Chromosome key / fitness score map
- */
- public RouletteWheelSelectionJob(Double totalFitnessScore, LinkedHashMap<Long, Double> map) {
- this.totalFitnessScore = totalFitnessScore;
- this.map = map;
- }
-
- /**
- * Perform Roulette Wheel selection
- *
- * @return Chromosome parent chosen after 'spinning' the wheel.
- */
- @Override public Chromosome execute() throws IgniteException {
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- int value = spintheWheel(this.totalFitnessScore);
-
- double partialSum = 0;
- boolean notFound = true;
-
- //sort map in ascending order by fitness score
- Map<Long, Double> sortedAscendingMap = map.entrySet().stream()
- .sorted(Map.Entry.comparingByValue())
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
-
- Iterator<Entry<Long, Double>> entries = sortedAscendingMap.entrySet().iterator();
-
- Long chromosomeKey = (long)-1;
-
- while (entries.hasNext() && notFound) {
- Entry<Long, Double> entry = entries.next();
- Long key = entry.getKey();
- Double fitnessScore = entry.getValue();
- partialSum += fitnessScore;
-
- if (partialSum >= value) {
- notFound = false;
- chromosomeKey = key;
- }
- }
-
- return populationCache.get(chromosomeKey);
- }
-
- /**
- * Spin the wheel.
- *
- * @param fitnessScore Size of Gene pool
- * @return value
- */
- private int spintheWheel(Double fitnessScore) {
- Random randomGenerator = new Random();
- return randomGenerator.nextInt(fitnessScore.intValue());
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/RouletteWheelSelectionTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/RouletteWheelSelectionTask.java
deleted file mode 100644
index 74253d8..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/RouletteWheelSelectionTask.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeJobResultPolicy;
-import org.apache.ignite.compute.ComputeLoadBalancer;
-import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.resources.LoadBalancerResource;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Responsible for performing Roulette Wheel selection.
- */
-public class RouletteWheelSelectionTask extends ComputeTaskAdapter<LinkedHashMap<Long, Double>, List<Long>> {
- /** Ignite resource. */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** Inject load balancer. */
- @LoadBalancerResource
- ComputeLoadBalancer balancer;
-
- /** GAConfiguration */
- private GAConfiguration cfg;
-
- /**
- * @param cfg GAConfiguration
- */
- public RouletteWheelSelectionTask(GAConfiguration cfg) {
- this.cfg = cfg;
- }
-
- /**
- * Calculate total fitness of population
- *
- * @return Double value representing total fitness score of population
- */
- private Double calculateTotalFitness() {
- double totalFitnessScore = 0;
-
- IgniteCache<Long, Chromosome> cache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- SqlFieldsQuery sql = new SqlFieldsQuery("select SUM(FITNESSSCORE) from Chromosome");
-
- // Iterate over the result set.
- try (QueryCursor<List<?>> cursor = cache.query(sql)) {
- for (List<?> row : cursor)
- totalFitnessScore = (Double)row.get(0);
- }
-
- return totalFitnessScore;
- }
-
- /**
- * @param nodes List of ClusterNode.
- * @param chromosomeKeyFitness Map of key/fitness score pairs.
- * @return Map of nodes to jobs.
- */
- @NotNull @Override public Map<ComputeJob, ClusterNode> map(List<ClusterNode> nodes,
- LinkedHashMap<Long, Double> chromosomeKeyFitness) throws IgniteException {
- Map<ComputeJob, ClusterNode> map = new HashMap<>();
-
- Affinity affinity = ignite.affinity(GAGridConstants.POPULATION_CACHE);
- Double totalFitness = this.calculateTotalFitness();
-
- int populationSize = this.cfg.getPopulationSize();
-
- for (int i = 0; i < populationSize; i++) {
- // Pick the next best balanced node for the job.
- RouletteWheelSelectionJob job = new RouletteWheelSelectionJob(totalFitness, chromosomeKeyFitness);
- map.put(job, balancer.getBalancedNode(job, null));
- }
-
- return map;
- }
-
- /**
- * Return list of parent Chromosomes.
- *
- * @param list List of ComputeJobResult.
- * @return List of Chromosome keys.
- */
- @Override public List<Long> reduce(List<ComputeJobResult> list) throws IgniteException {
- List<Chromosome> parents = list.stream().map((x) -> (Chromosome)x.getData()).collect(Collectors.toList());
-
- return createParents(parents);
- }
-
- /**
- * Create new parents and add to populationCache
- *
- * @param parents Chromosomes chosen to breed
- * @return List of Chromosome keys.
- */
- private List<Long> createParents(List<Chromosome> parents) {
- IgniteCache<Long, Chromosome> cache = ignite.cache(GAGridConstants.POPULATION_CACHE);
- cache.clear();
-
- List<Long> keys = new ArrayList();
-
- parents.forEach((x) -> {
- long[] genes = x.getGenes();
- Chromosome newparent = new Chromosome(genes);
- cache.put(newparent.id(), newparent);
- keys.add(newparent.id());
- });
-
- return keys;
- }
-
- /** {@inheritDoc} */
- @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> rcvd) {
- IgniteException err = res.getException();
-
- if (err != null)
- return ComputeJobResultPolicy.FAILOVER;
-
- // If there is no exception, wait for all job results.
- return ComputeJobResultPolicy.WAIT;
- }
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
deleted file mode 100644
index 19cbc39..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.compute.ComputeJobAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.transactions.Transaction;
-
-/**
- * Responsible for performing truncate selection
- */
-public class TruncateSelectionJob extends ComputeJobAdapter {
- /** primary key of Chromosome to mutate */
- private Long key;
-
- /** primary keys of genes to be used in mutation */
- private List<Long> mutatedGeneKeys;
-
- /** Ignite instance */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /**
- * @param key Primary key of Chromosome to mutate
- * @param mutatedGeneKeys Primary keys of genes to be used in mutation
- */
- public TruncateSelectionJob(Long key, List<Long> mutatedGeneKeys) {
- this.key = key;
- this.mutatedGeneKeys = mutatedGeneKeys;
- }
-
- /** {@inheritDoc} */
- @Override public Boolean execute() throws IgniteException {
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- Chromosome chromosome = populationCache.localPeek(key);
-
- long[] geneKeys = chromosome.getGenes();
-
- for (int k = 0; k < this.mutatedGeneKeys.size(); k++)
- geneKeys[k] = this.mutatedGeneKeys.get(k);
-
- chromosome.setGenes(geneKeys);
-
- Transaction tx = ignite.transactions().txStart();
-
- populationCache.put(chromosome.id(), chromosome);
-
- tx.commit();
-
- return Boolean.TRUE;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
deleted file mode 100644
index 9d3ccb1..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.cache.Cache.Entry;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlQuery;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.compute.ComputeJob;
-import org.apache.ignite.compute.ComputeJobResult;
-import org.apache.ignite.compute.ComputeJobResultPolicy;
-import org.apache.ignite.compute.ComputeTaskAdapter;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Responsible for performing truncate selection.
- */
-public class TruncateSelectionTask extends ComputeTaskAdapter<List<Long>, Boolean> {
- /** Ignite resource. */
- @IgniteInstanceResource
- private Ignite ignite;
-
- /** Fittest keys. */
- private List<Long> fittestKeys;
-
- /** Number of Copies. */
- private int numOfCopies;
-
- /**
- * @param fittestKeys List of long.
- * @param numOfCopies Number of Copies.
- */
- public TruncateSelectionTask(List<Long> fittestKeys, int numOfCopies) {
- this.fittestKeys = fittestKeys;
- this.numOfCopies = numOfCopies;
- }
-
- /**
- * Retrieve a chromosome.
- *
- * @param key Primary key of chromosome.
- * @return Chromosome.
- */
- private Chromosome getChromosome(Long key) {
- IgniteCache<Long, Chromosome> cache = ignite.cache(GAGridConstants.POPULATION_CACHE);
- StringBuffer sbSqlClause = new StringBuffer();
- sbSqlClause.append("_key IN (");
- sbSqlClause.append(key);
- sbSqlClause.append(")");
-
- Chromosome chromosome = null;
-
- SqlQuery sql = new SqlQuery(Chromosome.class, sbSqlClause.toString());
-
- try (QueryCursor<Entry<Long, Chromosome>> cursor = cache.query(sql)) {
- for (Entry<Long, Chromosome> e : cursor)
- chromosome = (e.getValue());
- }
-
- return chromosome;
- }
-
- /**
- * Return a List of lists containing keys.
- *
- * @return List of lists containing keys.
- */
- private List<List<Long>> getEnhancedPopulation() {
- List<List<Long>> list = new ArrayList<>();
-
- for (Long key : fittestKeys) {
- Chromosome cp = getChromosome(key);
- for (int i = 0; i < numOfCopies; i++) {
- long[] thegenes = cp.getGenes();
- List<Long> geneList = new ArrayList<>();
- for (int k = 0; k < cp.getGenes().length; k++)
- geneList.add(thegenes[k]);
-
- list.add(geneList);
- }
- }
-
- return list;
- }
-
- /** {@inheritDoc} */
- @NotNull @Override public Map map(List<ClusterNode> nodes, List<Long> chromosomeKeys) throws IgniteException {
- Map<ComputeJob, ClusterNode> map = new HashMap<>();
- Affinity affinity = ignite.affinity(GAGridConstants.POPULATION_CACHE);
-
- // Retrieve enhanced population
- List<List<Long>> enhancedPopulation = getEnhancedPopulation();
-
- int k = 0;
- for (Long key : chromosomeKeys) {
- TruncateSelectionJob ajob = new TruncateSelectionJob(key, enhancedPopulation.get(k));
- ClusterNode primary = affinity.mapKeyToNode(key);
- map.put(ajob, primary);
- k += 1;
- }
- return map;
- }
-
- /** {@inheritDoc} */
- @Override public Boolean reduce(List<ComputeJobResult> list) throws IgniteException {
- return Boolean.TRUE;
- }
-
- /** {@inheritDoc} */
- @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> rcvd) {
- IgniteException err = res.getException();
-
- if (err != null)
- return ComputeJobResultPolicy.FAILOVER;
-
- // If there is no exception, wait for all job results.
- return ComputeJobResultPolicy.WAIT;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/GeneCacheConfig.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/GeneCacheConfig.java
deleted file mode 100644
index f980e22..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/GeneCacheConfig.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.cache;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.CacheRebalanceMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.functions.GAGridFunction;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * Cache configuration for GAGridConstants.GENE_CACHE
- *
- * cache maintains full population of genes.
- */
-public class GeneCacheConfig {
- /**
- * @return Cache Configuration
- */
- public static CacheConfiguration<Long, Gene> geneCache() {
-
- CacheConfiguration<Long, Gene> cfg = new CacheConfiguration<>(GAGridConstants.GENE_CACHE);
- cfg.setIndexedTypes(Long.class, Gene.class);
- cfg.setCacheMode(CacheMode.REPLICATED);
- cfg.setRebalanceMode(CacheRebalanceMode.SYNC);
- cfg.setStatisticsEnabled(true);
- cfg.setBackups(1);
- cfg.setSqlFunctionClasses(GAGridFunction.class);
- return cfg;
-
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/PopulationCacheConfig.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/PopulationCacheConfig.java
deleted file mode 100644
index 6a8b2b4..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/PopulationCacheConfig.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.CacheRebalanceMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * Cache configuration for GAGridConstants.POPULATION_CACHE
- *
- * cache population of chromosomes (ie: potential solutions)
- */
-public class PopulationCacheConfig {
- /**
- * @return Cache Configuration
- */
- public static CacheConfiguration<Long, Chromosome> populationCache() {
-
- CacheConfiguration<Long, Chromosome> cfg = new CacheConfiguration<>(GAGridConstants.POPULATION_CACHE);
- cfg.setIndexedTypes(Long.class, Chromosome.class);
- cfg.setCacheMode(CacheMode.PARTITIONED);
- cfg.setRebalanceMode(CacheRebalanceMode.SYNC);
- cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
- cfg.setStatisticsEnabled(true);
- cfg.setBackups(1);
-
- return cfg;
-
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/package-info.java
deleted file mode 100644
index 3dfd401..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/cache/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Contains cache configurations for GA Grid
- */
-
-package org.apache.ignite.ml.genetic.cache;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
deleted file mode 100644
index bdc3baf..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.functions;
-
-import java.sql.SQLException;
-import java.sql.Types;
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.query.annotations.QuerySqlFunction;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.utils.GAGridUtils;
-import org.h2.tools.SimpleResultSet;
-
-/**
- * Responsible for providing custom SQL functions to retrieve optimization results.
- */
-public class GAGridFunction {
- /** */
- public GAGridFunction() {
- }
-
- /**
- * Retrieve solutions in descending order based on fitness score.
- *
- * @return Result set.
- * @throws SQLException If failed.
- */
- @QuerySqlFunction
- public static SimpleResultSet getSolutionsDesc() {
- return (getChromosomes("order by fitnessScore desc"));
- }
-
- /**
- * Retrieve solutions in ascending order based on fitness score.
- *
- * @return Result set
- * @throws SQLException If failed.
- */
- @QuerySqlFunction
- public static SimpleResultSet getSolutionsAsc() throws SQLException {
- return (getChromosomes("order by fitnessScore asc"));
- }
-
- /**
- * Retrieve and individual solution by Chromosome key.
- *
- * @param key Primary key of Chromosome.
- * @return SimpleResultSet.
- * @throws SQLException If failed.
- */
- @QuerySqlFunction
- public static SimpleResultSet getSolutionById(int key) throws SQLException {
- StringBuffer sbSqlClause = new StringBuffer();
- sbSqlClause.append("_key IN");
- sbSqlClause.append("(");
- sbSqlClause.append(key);
- sbSqlClause.append(")");
- return (getChromosomes(sbSqlClause.toString()));
- }
-
- /**
- * Helper routine to return 'pivoted' results using the provided query param.
- *
- * @param qry Sql
- * @return Result set
- */
- private static SimpleResultSet getChromosomes(String qry) {
- Ignite ignite = Ignition.localIgnite();
-
- List<Chromosome> chromosomes = GAGridUtils.getChromosomes(ignite, qry);
-
- SimpleResultSet rs2 = new SimpleResultSet();
-
- Chromosome aChrom = chromosomes.get(0);
- int genesCnt = aChrom.getGenes().length;
-
- rs2.addColumn("Chromosome Id", Types.INTEGER, 0, 0);
- rs2.addColumn("Fitness Score", Types.DOUBLE, 0, 0);
-
- for (int i = 0; i < genesCnt; i++) {
- int colIdx = i + 1;
- rs2.addColumn("Gene " + colIdx, Types.VARCHAR, 0, 0);
- }
-
- for (Chromosome rowChrom : chromosomes) {
-
- Object[] row = new Object[genesCnt + 2];
- row[0] = rowChrom.id();
- row[1] = rowChrom.getFitnessScore();
-
- List<Gene> genes = GAGridUtils.getGenesInOrderForChromosome(ignite, rowChrom);
- int i = 2;
-
- for (Gene gene : genes) {
- row[i] = gene.getVal().toString();
- i += 1;
- }
- //Add a row for an individual Chromosome
- rs2.addRow(row);
- }
-
- return rs2;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/package-info.java
deleted file mode 100644
index 8822a00..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Contains functions used for GA Grid
- */
-
-package org.apache.ignite.ml.genetic.functions;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/package-info.java
deleted file mode 100644
index fad2a52..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Root GA package (GA Grid)
- */
-
-package org.apache.ignite.ml.genetic;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/ChromosomeCriteria.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/ChromosomeCriteria.java
deleted file mode 100644
index de035be..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/ChromosomeCriteria.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.parameter;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Responsible for describing the characteristics of an individual Chromosome.
- */
-public class ChromosomeCriteria {
- /** List of criteria for a Chromosome */
- private List<String> criteria = new ArrayList<>();
-
- /**
- * Retrieve criteria
- *
- * @return List of strings
- */
- public List<String> getCriteria() {
- return criteria;
- }
-
- /**
- * Set criteria
- *
- * @param criteria List of criteria to be applied for a Chromosome ;Use format "name=value", ie: "coinType=QUARTER"
- */
- public void setCriteria(List<String> criteria) {
- this.criteria = criteria;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
deleted file mode 100644
index c7da056..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.parameter;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.IFitnessFunction;
-
-/**
- * Maintains configuration parameters to be used in genetic algorithm
- *
- * <br/>
- *
- * <p>
- *
- * NOTE: Default selectionMethod is SELECTION_METHOD_TRUNCATION
- *
- * Default truncateRate is .10
- *
- * More selectionMethods will be introduced in future releases.
- *
- * </p>
- */
-public class GAConfiguration {
- /** Selection method */
- private GAGridConstants.SELECTION_METHOD selectionMtd;
-
- /** Criteria used to describe a chromosome */
- private ChromosomeCriteria chromosomeCriteria;
-
- /**
- * Percentage of most fit chromosomes to be maintained and utilized to copy into new population.
- *
- * NOTE: This parameter is only considered when selectionMethod is SELECTION_METHOD_TRUNCATION
- *
- * Accepted values between 0 and 1
- */
- private double truncateRate;
-
- /**
- * Elitism is the concept that the strongest members of the population will be preserved from generation to
- * generation. <br/>
- *
- * No crossovers or mutations will be performed for elite chromosomes.
- *
- * NOTE: This parameter is only considered when selectionMethod is SELECTION_METHOD_ELITISM.
- */
- private int elitismCnt;
-
- /**
- * Indicates how chromosome fitness values should be evaluated. </br> A chromosome with
- * isHigherFitnessValueFitter=true is considered fittest.
- */
- private boolean isHigherFitnessValFitter = true;
-
- /**
- * Population size represents the number of potential solutions (ie: chromosomes) between each generation Default
- * size is 500
- *
- * </br> NOTE: The population size remains fixed between each generation
- */
- private int populationSize = 500;
-
- /** Gene pool is the sum of ALL genes utilized to create chromosomes */
- private List<Gene> genePool = new ArrayList<>();
-
- /** Number of genes within a chromosome */
- private int chromosomeLen;
-
- /**
- * Crossover rate is the probability that two chromosomes will breed with each other. offspring with traits of each
- * of the parents.
- *
- * Accepted values are between 0 and 1
- */
- private double crossOverRate = .50;
-
- /**
- * Mutation rate is the probability that a chromosome will be mutated offspring with traits of each of the parents.
- *
- *
- * Accepted values are between 0 and 1
- */
- private double mutationRate = .50;
-
- /**
- * Call back interface used to terminate Genetic algorithm.
- *
- * Implement this interface based on particular use case.
- */
- private ITerminateCriteria terminateCriteria;
-
- /**
- * Represents a fitness function. Implement the IFitnessFunction to satisfy your particular use case.
- */
- private IFitnessFunction fitnessFunction;
-
- /**
- * Default constructor.
- */
- public GAConfiguration() {
- this.setSelectionMtd(GAGridConstants.SELECTION_METHOD.SELECTION_METHOD_TRUNCATION);
- this.setTruncateRate(.10);
- }
-
- /**
- * retrieve the ChromosomeCriteria
- *
- * @return Chromosome criteria
- */
- public ChromosomeCriteria getChromosomeCriteria() {
- return chromosomeCriteria;
- }
-
- /**
- * set value for ChromosomeCriteria
- *
- * @param chromosomeCriteria Chromosome criteria
- */
-
- public void setChromosomeCriteria(ChromosomeCriteria chromosomeCriteria) {
- this.chromosomeCriteria = chromosomeCriteria;
- }
-
- /**
- * @return Boolean value indicating how fitness values should be evaluated.
- */
- public boolean isHigherFitnessValFitter() {
- return this.isHigherFitnessValFitter;
- }
-
- /**
- * Retrieve the chromosome length
- *
- * @return Size of Chromosome
- */
- public int getChromosomeLen() {
- return chromosomeLen;
- }
-
- /**
- * Set the Chromsome length
- *
- * @param chromosomeLen Size of Chromosome
- */
- public void setChromosomeLen(int chromosomeLen) {
- this.chromosomeLen = chromosomeLen;
- }
-
- /**
- * Retrieve the cross over rate
- *
- * @return Cross over rate
- */
- public double getCrossOverRate() {
- return crossOverRate;
- }
-
- /**
- * Set the cross over rate.
- *
- * @param crossOverRate Cross over rate
- */
- public void setCrossOverRate(double crossOverRate) {
- this.crossOverRate = crossOverRate;
- }
-
- /**
- * Retrieve the elitism count
- *
- * @return Elitism count
- */
- public int getElitismCnt() {
- return elitismCnt;
- }
-
- /**
- * Set the elitism count.
- *
- * @param elitismCnt Elitism count
- */
- public void setElitismCnt(int elitismCnt) {
- this.elitismCnt = elitismCnt;
- }
-
- /**
- * Retrieve IFitnessFunction
- *
- * @return Fitness function
- */
- public IFitnessFunction getFitnessFunction() {
- return fitnessFunction;
- }
-
- /**
- * Set IFitnessFunction
- *
- * @param fitnessFunction Fitness function
- */
- public void setFitnessFunction(IFitnessFunction fitnessFunction) {
- this.fitnessFunction = fitnessFunction;
- }
-
- /**
- * Retrieve the gene pool
- *
- * @return List of Genes
- */
- public List<Gene> getGenePool() {
- return (this.genePool);
- }
-
- /**
- * Set the gene pool.
- *
- * NOTE: When Apache Ignite is started the gene pool is utilized to initialize the distributed
- * GAGridConstants.GENE_CACHE.
- *
- * @param genePool List of Genes
- */
- public void setGenePool(List<Gene> genePool) {
- this.genePool = genePool;
- }
-
- /**
- * Retrieve the mutation rate.
- *
- * @return Mutation Rate
- */
- public double getMutationRate() {
- return mutationRate;
- }
-
- /**
- * Set the mutation rate.
- *
- * @param mutationRate Mutation Rate
- */
- public void setMutationRate(double mutationRate) {
- this.mutationRate = mutationRate;
- }
-
- /**
- * Retrieve the population size
- *
- * @return Population size
- */
-
- public int getPopulationSize() {
- return populationSize;
- }
-
- /**
- * Set the population size
- *
- * @param populationSize Size of population
- */
- public void setPopulationSize(int populationSize) {
- this.populationSize = populationSize;
- }
-
- /**
- * Get the selection method
- *
- * @return Selection method
- */
- public GAGridConstants.SELECTION_METHOD getSelectionMtd() {
- return selectionMtd;
- }
-
- /**
- * Set the selection method
- *
- * @param selectionMtd Selection method
- */
- public void setSelectionMtd(GAGridConstants.SELECTION_METHOD selectionMtd) {
- this.selectionMtd = selectionMtd;
- }
-
- /**
- * Retrieve the termination criteria
- *
- * @return Termination Criteria
- */
- public ITerminateCriteria getTerminateCriteria() {
- return terminateCriteria;
- }
-
- /**
- * Set the termination criteria.
- *
- * @param terminateCriteria Termination Criteria
- */
- public void setTerminateCriteria(ITerminateCriteria terminateCriteria) {
- this.terminateCriteria = terminateCriteria;
- }
-
- /**
- * Retrieve truncateRate
- *
- * @return Truncate Rate
- */
- public double getTruncateRate() {
- return truncateRate;
- }
-
- /**
- * Set truncatePercentage
- *
- * @param truncateRate Truncate rate
- */
- public void setTruncateRate(double truncateRate) {
- this.truncateRate = truncateRate;
- }
-
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAGridConstants.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAGridConstants.java
deleted file mode 100644
index 86111ea..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAGridConstants.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.parameter;
-
-/**
- * GAGridConstants
- */
-public interface GAGridConstants {
- /** populationCache constant */
- public static final String POPULATION_CACHE = "populationCache";
-
- /** populationCache constant */
- public static final String GENE_CACHE = "geneCache";
-
- /** Selection Method type **/
- public enum SELECTION_METHOD {
- /** Selection method eletism. */
- SELECTION_METHOD_ELITISM,
- /** Selection method truncation. */
- SELECTION_METHOD_TRUNCATION,
- /** Selection method roulette wheel. */
- SELECTION_METHOD_ROULETTE_WHEEL
- }
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/ITerminateCriteria.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/ITerminateCriteria.java
deleted file mode 100644
index 5868b3d..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/ITerminateCriteria.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.parameter;
-
-import org.apache.ignite.ml.genetic.Chromosome;
-
-/**
- * Represents the terminate condition for a genetic algorithm.
- *
- * <p>
- *
- * Implement this interface for your respective use case.
- *
- * </p>
- */
-public interface ITerminateCriteria {
- /**
- * @param fittestChromosome Fittest chromosome as of the nth generation
- * @param averageFitnessScore Average fitness score
- * @param generation Current number of generations
- * @return Boolean value to determine when to stop evolution
- */
- public boolean isTerminationConditionMet(Chromosome fittestChromosome, double averageFitnessScore, int generation);
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/package-info.java
deleted file mode 100644
index a22dd60..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Contains parameters used for GA Grid
- */
-
-package org.apache.ignite.ml.genetic.parameter;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
deleted file mode 100644
index c80fa52..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic.utils;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.cache.Cache.Entry;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlQuery;
-import org.apache.ignite.ml.genetic.Chromosome;
-import org.apache.ignite.ml.genetic.Gene;
-import org.apache.ignite.ml.genetic.cache.PopulationCacheConfig;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
-/**
- * GA Grid Helper routines
- */
-public class GAGridUtils {
- /**
- * Retrieve chromosomes
- *
- * @param ignite Ignite
- * @param qry Sql
- * @return List of Chromosomes
- */
- public static List<Chromosome> getChromosomes(Ignite ignite, String qry) {
- List<Chromosome> chromosomes = new ArrayList<>();
-
- IgniteCache<Long, Chromosome> populationCache = ignite.getOrCreateCache(PopulationCacheConfig.populationCache());
-
- SqlQuery sql = new SqlQuery(Chromosome.class, qry);
-
- try (QueryCursor<Entry<Long, Chromosome>> cursor = populationCache.query(sql)) {
- for (Entry<Long, Chromosome> e : cursor)
- chromosomes.add(e.getValue());
- }
-
- return chromosomes;
- }
-
- /**
- * Retrieve genes in order
- *
- * @param ignite Ignite
- * @param chromosome Chromosome
- * @return List of Genes
- */
- public static List<Gene> getGenesInOrderForChromosome(Ignite ignite, Chromosome chromosome) {
- List<Gene> genes = new ArrayList<>();
- IgniteCache<Long, Gene> cache = ignite.cache(GAGridConstants.GENE_CACHE);
-
- long[] primaryKeys = chromosome.getGenes();
-
- for (int k = 0; k < primaryKeys.length; k++) {
-
- StringBuffer sbSqlClause = new StringBuffer();
- sbSqlClause.append("_key IN ");
- sbSqlClause.append("(");
- sbSqlClause.append(primaryKeys[k]);
- sbSqlClause.append(")");
-
- SqlQuery sql = new SqlQuery(Gene.class, sbSqlClause.toString());
-
- try (QueryCursor<Entry<Long, Gene>> cursor = cache.query(sql)) {
- for (Entry<Long, Gene> e : cursor)
- genes.add(e.getValue());
- }
- }
-
- return genes;
- }
-}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/package-info.java
deleted file mode 100644
index eaf23ba5..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Contains utils for GA Grid
- */
-
-package org.apache.ignite.ml.genetic.utils;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/SerializableConsumer.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.java
similarity index 78%
rename from modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/SerializableConsumer.java
rename to modules/ml/src/main/java/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.java
index ece58aa..baa478a 100644
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/SerializableConsumer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/functions/IgniteDoubleConsumer.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.ignite.tensorflow.util;
+package org.apache.ignite.ml.math.functions;
import java.io.Serializable;
-import java.util.function.Consumer;
+import java.util.function.DoubleConsumer;
/**
- * Serializable consumer.
+ * Serializable DoubleConsumer.
*
- * @param <T> The type of the input to the operation.
+ * @see DoubleConsumer
*/
-public interface SerializableConsumer<T> extends Consumer<T>, Serializable {
+public interface IgniteDoubleConsumer extends DoubleConsumer, Serializable {
}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/pipeline/Pipeline.java b/modules/ml/src/main/java/org/apache/ignite/ml/pipeline/Pipeline.java
index b869aed..cea87c5 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/pipeline/Pipeline.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/pipeline/Pipeline.java
@@ -43,7 +43,7 @@
* @param <K> Type of a key in {@code upstream} data.
* @param <V> Type of a value in {@code upstream} data.
*/
-public class Pipeline<K, V, C extends Serializable, L> {
+public class Pipeline<K, V, C extends Serializable, L> implements Serializable {
/** Final Feature extractor. */
private Preprocessor<K, V> finalPreprocessor;
@@ -158,4 +158,11 @@
.withPreprocessor(finalPreprocessor)
.withInternalMdl(internalMdl);
}
+
+ /**
+ * Returns the final preprocessor for evaluation needs.
+ */
+ public Preprocessor<K, V> getFinalPreprocessor() {
+ return finalPreprocessor;
+ }
}
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.java
index 911be41..518bcef 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/AbstractCrossValidation.java
@@ -17,18 +17,35 @@
package org.apache.ignite.ml.selection.cv;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.stream.Collectors;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.ml.IgniteModel;
import org.apache.ignite.ml.dataset.DatasetBuilder;
import org.apache.ignite.ml.environment.LearningEnvironment;
import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
import org.apache.ignite.ml.environment.parallelism.Promise;
+import org.apache.ignite.ml.math.functions.IgniteDoubleConsumer;
import org.apache.ignite.ml.math.functions.IgniteSupplier;
import org.apache.ignite.ml.math.primitives.vector.Vector;
import org.apache.ignite.ml.pipeline.Pipeline;
import org.apache.ignite.ml.pipeline.PipelineMdl;
import org.apache.ignite.ml.preprocessing.Preprocessor;
-import org.apache.ignite.ml.selection.paramgrid.*;
+import org.apache.ignite.ml.selection.paramgrid.BruteForceStrategy;
+import org.apache.ignite.ml.selection.paramgrid.EvolutionOptimizationStrategy;
+import org.apache.ignite.ml.selection.paramgrid.HyperParameterTuningStrategy;
+import org.apache.ignite.ml.selection.paramgrid.ParamGrid;
+import org.apache.ignite.ml.selection.paramgrid.ParameterSetGenerator;
+import org.apache.ignite.ml.selection.paramgrid.RandomStrategy;
import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
import org.apache.ignite.ml.selection.scoring.metric.Metric;
import org.apache.ignite.ml.selection.scoring.metric.MetricName;
@@ -39,12 +56,6 @@
import org.apache.ignite.ml.util.genetic.GeneticAlgorithm;
import org.jetbrains.annotations.NotNull;
-import java.util.*;
-import java.util.function.BiFunction;
-import java.util.function.DoubleConsumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
/**
* Cross validation score calculator. Cross validation is an approach that allows to avoid overfitting that is made the
* following way: the training set is split into k smaller sets. The following procedure is followed for each of the k
@@ -59,7 +70,7 @@
* @param <K> Type of a key in {@code upstream} data.
* @param <V> Type of a value in {@code upstream} data.
*/
-public abstract class AbstractCrossValidation<M extends IgniteModel<Vector, Double>, K, V> {
+public abstract class AbstractCrossValidation<M extends IgniteModel<Vector, Double>, K, V> implements Serializable {
/** Learning environment builder. */
protected LearningEnvironmentBuilder envBuilder = LearningEnvironmentBuilder.defaultBuilder();
@@ -300,7 +311,7 @@
Map<String, Double> paramMap = new HashMap<>();
for (int paramIdx = 0; paramIdx < paramSet.length; paramIdx++) {
- DoubleConsumer setter = paramGrid.getSetterByIndex(paramIdx);
+ IgniteDoubleConsumer setter = paramGrid.getSetterByIndex(paramIdx);
Double paramVal = paramSet[paramIdx];
setter.accept(paramVal);
@@ -330,10 +341,10 @@
return pnt < from || pnt > to;
};
- IgniteBiPredicate<K, V> testSetFilter = (k, v) -> !trainSetFilter.apply(k,v);
+ IgniteBiPredicate<K, V> testSetFilter = (k, v) -> !trainSetFilter.apply(k, v);
DatasetBuilder<K, V> trainSet = datasetBuilderSupplier.apply(trainSetFilter);
- M mdl = trainer.fit(trainSet, preprocessor); //TODO: IGNITE-11580
+ M mdl = trainer.fit(trainSet, preprocessor);
DatasetBuilder<K, V> testSet = datasetBuilderSupplier.apply(testSetFilter);
scores[i] = Evaluator.evaluate(testSet, mdl, preprocessor, metric).getSingle();
@@ -361,13 +372,13 @@
return pnt < from || pnt > to;
};
- IgniteBiPredicate<K, V> testSetFilter = (k, v) -> !trainSetFilter.apply(k,v);
+ IgniteBiPredicate<K, V> testSetFilter = (k, v) -> !trainSetFilter.apply(k, v);
- DatasetBuilder<K, V> datasetBuilder = datasetBuilderSupplier.apply(trainSetFilter);
- PipelineMdl<K, V> mdl = pipeline.fit(datasetBuilder);
+ DatasetBuilder<K, V> trainSet = datasetBuilderSupplier.apply(trainSetFilter);
+ PipelineMdl<K, V> mdl = pipeline.fit(trainSet);
DatasetBuilder<K, V> testSet = datasetBuilderSupplier.apply(testSetFilter);
- scores[i] = Evaluator.evaluate(testSet, mdl, preprocessor, metric).getSingle();
+ scores[i] = Evaluator.evaluate(testSet, mdl, pipeline.getFinalPreprocessor(), metric).getSingle();
}
return scores;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/CrossValidationResult.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/CrossValidationResult.java
index f7ddae3..ad50cc5 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/CrossValidationResult.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/cv/CrossValidationResult.java
@@ -17,6 +17,7 @@
package org.apache.ignite.ml.selection.cv;
+import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -26,7 +27,7 @@
* Represents the cross validation procedure result,
* wraps score and values of hyper parameters associated with these values.
*/
-public class CrossValidationResult {
+public class CrossValidationResult implements Serializable {
/** Best hyper params. */
private Map<String, Double> bestHyperParams;
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/paramgrid/ParamGrid.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/paramgrid/ParamGrid.java
index 11878a1..054ed90 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/paramgrid/ParamGrid.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/paramgrid/ParamGrid.java
@@ -17,22 +17,23 @@
package org.apache.ignite.ml.selection.paramgrid;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.function.DoubleConsumer;
+import org.apache.ignite.ml.math.functions.IgniteDoubleConsumer;
/**
* Keeps the grid of parameters.
*/
-public class ParamGrid {
+public class ParamGrid implements Serializable {
/** Parameter values by parameter index. */
private Map<Integer, Double[]> paramValuesByParamIdx = new HashMap<>();
/** Parameter names by parameter index. */
- private Map<Integer, DoubleConsumer> settersByParamIdx = new HashMap<>();
+ private Map<Integer, IgniteDoubleConsumer> settersByParamIdx = new HashMap<>();
/** Parameter names by parameter index. */
private Map<Integer, String> paramNamesByParamIdx = new HashMap<>();
@@ -55,7 +56,7 @@
* @param params The array of the given hyper parameter values.
* @return The updated ParamGrid.
*/
- public ParamGrid addHyperParam(String paramName, DoubleConsumer setter, Double[] params) {
+ public ParamGrid addHyperParam(String paramName, IgniteDoubleConsumer setter, Double[] params) {
paramValuesByParamIdx.put(paramCntr, params);
paramNamesByParamIdx.put(paramCntr, paramName);
settersByParamIdx.put(paramCntr, setter);
@@ -80,7 +81,7 @@
}
/** Returns setter for parameter with the given index. */
- public DoubleConsumer getSetterByIndex(int idx) {
+ public IgniteDoubleConsumer getSetterByIndex(int idx) {
return settersByParamIdx.get(idx);
}
diff --git a/modules/ml/src/main/resources/datasets/titanic.csv b/modules/ml/src/main/resources/datasets/titanic.csv
deleted file mode 100644
index ed25e85..0000000
--- a/modules/ml/src/main/resources/datasets/titanic.csv
+++ /dev/null
@@ -1,1310 +0,0 @@
-pclass;survived;name;sex;age;sibsp;parch;ticket;fare;cabin;embarked;boat;body;homedest
-1;1;Allen ,Miss. Elisabeth Walton;;29;;;24160;211 ,3375;B5;;2;;St Louis ,MO
-1;1;Allison ,Master. Hudson Trevor;male;0 ,9167;1;2;113781;151 ,55;C22 C26;AA;11;;Montreal,PQ / Chesterville,ON
-1;0;Allison ,Miss. Helen Loraine;female;2;1;2;113781;151 ,55;C22 C26;S;;;Montreal ,PQ / Chesterville ,ON
-1;0;Allison ,Mr. Hudson Joshua Creighton;male;30;1;2;113781;151 ,55;C22 C26;S;;135;Montreal ,PQ / Chesterville ,ON
-1;0;Allison ,Mrs. Hudson J C (Bessie Waldo Daniels);female;25;1;2;113781;151 ,55;C22 C26;S;;;Montreal ,PQ / Chesterville ,ON
-1;1;Anderson ,Mr. Harry;male;48;0;0;19952;26 ,55;E12;S;3;;New York ,NY
-1;1;Andrews ,Miss. Kornelia Theodosia;female;63;1;0;13502;77 ,9583;D7;S;10;;Hudson ,NY
-1;0;Andrews ,Mr. Thomas Jr;male;39;0;0;112050;0;A36;S;;;Belfast ,NI
-1;1;Appleton ,Mrs. Edward Dale (Charlotte Lamson);female;53;2;0;11769;51 ,4792;C101;S;D;;Bayside ,Queens ,NY
-1;0;Artagaveytia ,Mr. Ramon;male;71;0;0;PC 17609;49 ,5042;;C;;22;Montevideo ,Uruguay
-1;0;Astor ,Col. John Jacob;male;47;1;0;PC 17757;227 ,525;C62 C64;C;;124;New York,NY
-1;1;Astor ,Mrs. John Jacob (Madeleine Talmadge Force);female;18;1;0;PC 17757;227,525;C62 C64;C;4;;New York ,NY
-1;1;Aubart ,Mme. Leontine Pauline;female;24;0;0;PC 17477;69 ,3;B35;C;9;;Paris ,France
-1;1;"Barber, Miss. Ellen ""Nellie""";female;26;0;0;19877;78,85;;S;6;;
-1;1;Barkworth, Mr. Algernon Henry Wilson;male;80;0;0;27042;30;A23;S;B;;Hessle, Yorks
-1;0;Baumann, Mr. John D;male;;0;0;PC 17318;25,925;;S;;;New York, NY
-1;0;Baxter, Mr. Quigg Edmond;male;24;0;1;PC 17558;247,5208;B58 B60;C;;;Montreal, PQ
-1;1;Baxter, Mrs. James (Helene DeLaudeniere Chaput);female;50;0;1;PC 17558;247,5208;B58 B60;C;6;;Montreal, PQ
-1;1;Bazzani, Miss. Albina;female;32;0;0;11813;76,2917;D15;C;8;;
-1;0;Beattie, Mr. Thomson;male;36;0;0;13050;75,2417;C6;C;A;;Winnipeg, MN
-1;1;Beckwith, Mr. Richard Leonard;male;37;1;1;11751;52,5542;D35;S;5;;New York, NY
-1;1;Beckwith, Mrs. Richard Leonard (Sallie Monypeny);female;47;1;1;11751;52,5542;D35;S;5;;New York, NY
-1;1;Behr, Mr. Karl Howell;male;26;0;0;111369;30;C148;C;5;;New York, NY
-1;1;Bidois, Miss. Rosalie;female;42;0;0;PC 17757;227,525;;C;4;;
-1;1;Bird, Miss. Ellen;female;29;0;0;PC 17483;221,7792;C97;S;8;;
-1;0;Birnbaum, Mr. Jakob;male;25;0;0;13905;26;;C;;148;San Francisco, CA
-1;1;Bishop, Mr. Dickinson H;male;25;1;0;11967;91,0792;B49;C;7;;Dowagiac, MI
-1;1;Bishop, Mrs. Dickinson H (Helen Walton);female;19;1;0;11967;91,0792;B49;C;7;;Dowagiac, MI
-1;1;Bissette, Miss. Amelia;female;35;0;0;PC 17760;135,6333;C99;S;8;;
-1;1;Bjornstrom-Steffansson, Mr. Mauritz Hakan;male;28;0;0;110564;26,55;C52;S;D;;Stockholm, Sweden / Washington, DC
-1;0;Blackwell, Mr. Stephen Weart;male;45;0;0;113784;35,5;T;S;;;Trenton, NJ
-1;1;Blank, Mr. Henry;male;40;0;0;112277;31;A31;C;7;;Glen Ridge, NJ
-1;1;Bonnell, Miss. Caroline;female;30;0;0;36928;164,8667;C7;S;8;;Youngstown, OH
-1;1;Bonnell, Miss. Elizabeth;female;58;0;0;113783;26,55;C103;S;8;;Birkdale, England Cleveland, Ohio
-1;0;Borebank, Mr. John James;male;42;0;0;110489;26,55;D22;S;;;London / Winnipeg, MB
-1;1;Bowen, Miss. Grace Scott;female;45;0;0;PC 17608;262,375;;C;4;;Cooperstown, NY
-1;1;Bowerman, Miss. Elsie Edith;female;22;0;1;113505;55;E33;S;6;;St Leonards-on-Sea, England Ohio
-1;1;"Bradley, Mr. George (""George Arthur Brayton"")";male;;0;0;111427;26,55;;S;9;;Los Angeles, CA
-1;0;Brady, Mr. John Bertram;male;41;0;0;113054;30,5;A21;S;;;Pomeroy, WA
-1;0;Brandeis, Mr. Emil;male;48;0;0;PC 17591;50,4958;B10;C;;208;Omaha, NE
-1;0;Brewe, Dr. Arthur Jackson;male;;0;0;112379;39,6;;C;;;Philadelphia, PA
-1;1;Brown, Mrs. James Joseph (Margaret Tobin);female;44;0;0;PC 17610;27,7208;B4;C;6;;Denver, CO
-1;1;Brown, Mrs. John Murray (Caroline Lane Lamson);female;59;2;0;11769;51,4792;C101;S;D;;Belmont, MA
-1;1;Bucknell, Mrs. William Robert (Emma Eliza Ward);female;60;0;0;11813;76,2917;D15;C;8;;Philadelphia, PA
-1;1;Burns, Miss. Elizabeth Margaret;female;41;0;0;16966;134,5;E40;C;3;;
-1;0;Butt, Major. Archibald Willingham;male;45;0;0;113050;26,55;B38;S;;;Washington, DC
-1;0;Cairns, Mr. Alexander;male;;0;0;113798;31;;S;;;
-1;1;Calderhead, Mr. Edward Pennington;male;42;0;0;PC 17476;26,2875;E24;S;5;;New York, NY
-1;1;Candee, Mrs. Edward (Helen Churchill Hungerford);female;53;0;0;PC 17606;27,4458;;C;6;;Washington, DC
-1;1;Cardeza, Mr. Thomas Drake Martinez;male;36;0;1;PC 17755;512,3292;B51 B53 B55;C;3;;Austria-Hungary / Germantown, Philadelphia, PA
-1;1;Cardeza, Mrs. James Warburton Martinez (Charlotte Wardle Drake);female;58;0;1;PC 17755;512,3292;B51 B53 B55;C;3;;Germantown, Philadelphia, PA
-1;0;Carlsson, Mr. Frans Olof;male;33;0;0;695;5;B51 B53 B55;S;;;New York, NY
-1;0;Carrau, Mr. Francisco M;male;28;0;0;113059;47,1;;S;;;Montevideo, Uruguay
-1;0;Carrau, Mr. Jose Pedro;male;17;0;0;113059;47,1;;S;;;Montevideo, Uruguay
-1;1;Carter, Master. William Thornton II;male;11;1;2;113760;120;B96 B98;S;4;;Bryn Mawr, PA
-1;1;Carter, Miss. Lucile Polk;female;14;1;2;113760;120;B96 B98;S;4;;Bryn Mawr, PA
-1;1;Carter, Mr. William Ernest;male;36;1;2;113760;120;B96 B98;S;C;;Bryn Mawr, PA
-1;1;Carter, Mrs. William Ernest (Lucile Polk);female;36;1;2;113760;120;B96 B98;S;4;;Bryn Mawr, PA
-1;0;Case, Mr. Howard Brown;male;49;0;0;19924;26;;S;;;Ascot, Berkshire / Rochester, NY
-1;1;Cassebeer, Mrs. Henry Arthur Jr (Eleanor Genevieve Fosdick);female;;0;0;17770;27,7208;;C;5;;New York, NY
-1;0;Cavendish, Mr. Tyrell William;male;36;1;0;19877;78,85;C46;S;;172;Little Onn Hall, Staffs
-1;1;Cavendish, Mrs. Tyrell William (Julia Florence Siegel);female;76;1;0;19877;78,85;C46;S;6;;Little Onn Hall, Staffs
-1;0;Chaffee, Mr. Herbert Fuller;male;46;1;0;W.E.P. 5734;61,175;E31;S;;;Amenia, ND
-1;1;Chaffee, Mrs. Herbert Fuller (Carrie Constance Toogood);female;47;1;0;W.E.P. 5734;61,175;E31;S;4;;Amenia, ND
-1;1;Chambers, Mr. Norman Campbell;male;27;1;0;113806;53,1;E8;S;5;;New York, NY / Ithaca, NY
-1;1;Chambers, Mrs. Norman Campbell (Bertha Griggs);female;33;1;0;113806;53,1;E8;S;5;;New York, NY / Ithaca, NY
-1;1;Chaudanson, Miss. Victorine;female;36;0;0;PC 17608;262,375;B61;C;4;;
-1;1;Cherry, Miss. Gladys;female;30;0;0;110152;86,5;B77;S;8;;London, England
-1;1;Chevre, Mr. Paul Romaine;male;45;0;0;PC 17594;29,7;A9;C;7;;Paris, France
-1;1;Chibnall, Mrs. (Edith Martha Bowerman);female;;0;1;113505;55;E33;S;6;;St Leonards-on-Sea, England Ohio
-1;0;Chisholm, Mr. Roderick Robert Crispin;male;;0;0;112051;0;;S;;;Liverpool, England / Belfast
-1;0;Clark, Mr. Walter Miller;male;27;1;0;13508;136,7792;C89;C;;;Los Angeles, CA
-1;1;Clark, Mrs. Walter Miller (Virginia McDowell);female;26;1;0;13508;136,7792;C89;C;4;;Los Angeles, CA
-1;1;Cleaver, Miss. Alice;female;22;0;0;113781;151,55;;S;11;;
-1;0;Clifford, Mr. George Quincy;male;;0;0;110465;52;A14;S;;;Stoughton, MA
-1;0;Colley, Mr. Edward Pomeroy;male;47;0;0;5727;25,5875;E58;S;;;Victoria, BC
-1;1;Compton, Miss. Sara Rebecca;female;39;1;1;PC 17756;83,1583;E49;C;14;;Lakewood, NJ
-1;0;Compton, Mr. Alexander Taylor Jr;male;37;1;1;PC 17756;83,1583;E52;C;;;Lakewood, NJ
-1;1;Compton, Mrs. Alexander Taylor (Mary Eliza Ingersoll);female;64;0;2;PC 17756;83,1583;E45;C;14;;Lakewood, NJ
-1;1;Cornell, Mrs. Robert Clifford (Malvina Helen Lamson);female;55;2;0;11770;25,7;C101;S;2;;New York, NY
-1;0;Crafton, Mr. John Bertram;male;;0;0;113791;26,55;;S;;;Roachdale, IN
-1;0;Crosby, Capt. Edward Gifford;male;70;1;1;WE/P 5735;71;B22;S;;269;Milwaukee, WI
-1;1;Crosby, Miss. Harriet R;female;36;0;2;WE/P 5735;71;B22;S;7;;Milwaukee, WI
-1;1;Crosby, Mrs. Edward Gifford (Catherine Elizabeth Halstead);female;64;1;1;112901;26,55;B26;S;7;;Milwaukee, WI
-1;0;Cumings, Mr. John Bradley;male;39;1;0;PC 17599;71,2833;C85;C;;;New York, NY
-1;1;Cumings, Mrs. John Bradley (Florence Briggs Thayer);female;38;1;0;PC 17599;71,2833;C85;C;4;;New York, NY
-1;1;Daly, Mr. Peter Denis ;male;51;0;0;113055;26,55;E17;S;5 9;;Lima, Peru
-1;1;Daniel, Mr. Robert Williams;male;27;0;0;113804;30,5;;S;3;;Philadelphia, PA
-1;1;Daniels, Miss. Sarah;female;33;0;0;113781;151,55;;S;8;;
-1;0;Davidson, Mr. Thornton;male;31;1;0;F.C. 12750;52;B71;S;;;Montreal, PQ
-1;1;Davidson, Mrs. Thornton (Orian Hays);female;27;1;2;F.C. 12750;52;B71;S;3;;Montreal, PQ
-1;1;Dick, Mr. Albert Adrian;male;31;1;0;17474;57;B20;S;3;;Calgary, AB
-1;1;Dick, Mrs. Albert Adrian (Vera Gillespie);female;17;1;0;17474;57;B20;S;3;;Calgary, AB
-1;1;Dodge, Dr. Washington;male;53;1;1;33638;81,8583;A34;S;13;;San Francisco, CA
-1;1;Dodge, Master. Washington;male;4;0;2;33638;81,8583;A34;S;5;;San Francisco, CA
-1;1;Dodge, Mrs. Washington (Ruth Vidaver);female;54;1;1;33638;81,8583;A34;S;5;;San Francisco, CA
-1;0;Douglas, Mr. Walter Donald;male;50;1;0;PC 17761;106,425;C86;C;;62;Deephaven, MN / Cedar Rapids, IA
-1;1;Douglas, Mrs. Frederick Charles (Mary Helene Baxter);female;27;1;1;PC 17558;247,5208;B58 B60;C;6;;Montreal, PQ
-1;1;Douglas, Mrs. Walter Donald (Mahala Dutton);female;48;1;0;PC 17761;106,425;C86;C;2;;Deephaven, MN / Cedar Rapids, IA
-1;1;"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")";female;48;1;0;11755;39,6;A16;C;1;;London / Paris
-1;1;"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")";male;49;1;0;PC 17485;56,9292;A20;C;1;;London / Paris
-1;0;Dulles, Mr. William Crothers;male;39;0;0;PC 17580;29,7;A18;C;;133;Philadelphia, PA
-1;1;Earnshaw, Mrs. Boulton (Olive Potter);female;23;0;1;11767;83,1583;C54;C;7;;Mt Airy, Philadelphia, PA
-1;1;Endres, Miss. Caroline Louise;female;38;0;0;PC 17757;227,525;C45;C;4;;New York, NY
-1;1;Eustis, Miss. Elizabeth Mussey;female;54;1;0;36947;78,2667;D20;C;4;;Brookline, MA
-1;0;Evans, Miss. Edith Corse;female;36;0;0;PC 17531;31,6792;A29;C;;;New York, NY
-1;0;Farthing, Mr. John;male;;0;0;PC 17483;221,7792;C95;S;;;
-1;1;Flegenheim, Mrs. Alfred (Antoinette);female;;0;0;PC 17598;31,6833;;S;7;;New York, NY
-1;1;Fleming, Miss. Margaret;female;;0;0;17421;110,8833;;C;4;;
-1;1;"Flynn, Mr. John Irwin (""Irving"")";male;36;0;0;PC 17474;26,3875;E25;S;5;;Brooklyn, NY
-1;0;Foreman, Mr. Benjamin Laventall;male;30;0;0;113051;27,75;C111;C;;;New York, NY
-1;1;Fortune, Miss. Alice Elizabeth;female;24;3;2;19950;263;C23 C25 C27;S;10;;Winnipeg, MB
-1;1;Fortune, Miss. Ethel Flora;female;28;3;2;19950;263;C23 C25 C27;S;10;;Winnipeg, MB
-1;1;Fortune, Miss. Mabel Helen;female;23;3;2;19950;263;C23 C25 C27;S;10;;Winnipeg, MB
-1;0;Fortune, Mr. Charles Alexander;male;19;3;2;19950;263;C23 C25 C27;S;;;Winnipeg, MB
-1;0;Fortune, Mr. Mark;male;64;1;4;19950;263;C23 C25 C27;S;;;Winnipeg, MB
-1;1;Fortune, Mrs. Mark (Mary McDougald);female;60;1;4;19950;263;C23 C25 C27;S;10;;Winnipeg, MB
-1;1;Francatelli, Miss. Laura Mabel;female;30;0;0;PC 17485;56,9292;E36;C;1;;
-1;0;Franklin, Mr. Thomas Parham;male;;0;0;113778;26,55;D34;S;;;Westcliff-on-Sea, Essex
-1;1;Frauenthal, Dr. Henry William;male;50;2;0;PC 17611;133,65;;S;5;;New York, NY
-1;1;Frauenthal, Mr. Isaac Gerald;male;43;1;0;17765;27,7208;D40;C;5;;New York, NY
-1;1;Frauenthal, Mrs. Henry William (Clara Heinsheimer);female;;1;0;PC 17611;133,65;;S;5;;New York, NY
-1;1;Frolicher, Miss. Hedwig Margaritha;female;22;0;2;13568;49,5;B39;C;5;;Zurich, Switzerland
-1;1;Frolicher-Stehli, Mr. Maxmillian;male;60;1;1;13567;79,2;B41;C;5;;Zurich, Switzerland
-1;1;Frolicher-Stehli, Mrs. Maxmillian (Margaretha Emerentia Stehli);female;48;1;1;13567;79,2;B41;C;5;;Zurich, Switzerland
-1;0;Fry, Mr. Richard;male;;0;0;112058;0;B102;S;;;
-1;0;Futrelle, Mr. Jacques Heath;male;37;1;0;113803;53,1;C123;S;;;Scituate, MA
-1;1;Futrelle, Mrs. Jacques Heath (Lily May Peel);female;35;1;0;113803;53,1;C123;S;D;;Scituate, MA
-1;0;Gee, Mr. Arthur H;male;47;0;0;111320;38,5;E63;S;;275;St Anne's-on-Sea, Lancashire
-1;1;Geiger, Miss. Amalie;female;35;0;0;113503;211,5;C130;C;4;;
-1;1;Gibson, Miss. Dorothy Winifred;female;22;0;1;112378;59,4;;C;7;;New York, NY
-1;1;Gibson, Mrs. Leonard (Pauline C Boeson);female;45;0;1;112378;59,4;;C;7;;New York, NY
-1;0;Giglio, Mr. Victor;male;24;0;0;PC 17593;79,2;B86;C;;;
-1;1;Goldenberg, Mr. Samuel L;male;49;1;0;17453;89,1042;C92;C;5;;Paris, France / New York, NY
-1;1;Goldenberg, Mrs. Samuel L (Edwiga Grabowska);female;;1;0;17453;89,1042;C92;C;5;;Paris, France / New York, NY
-1;0;Goldschmidt, Mr. George B;male;71;0;0;PC 17754;34,6542;A5;C;;;New York, NY
-1;1;Gracie, Col. Archibald IV;male;53;0;0;113780;28,5;C51;C;B;;Washington, DC
-1;1;Graham, Miss. Margaret Edith;female;19;0;0;112053;30;B42;S;3;;Greenwich, CT
-1;0;Graham, Mr. George Edward;male;38;0;1;PC 17582;153,4625;C91;S;;147;Winnipeg, MB
-1;1;Graham, Mrs. William Thompson (Edith Junkins);female;58;0;1;PC 17582;153,4625;C125;S;3;;Greenwich, CT
-1;1;Greenfield, Mr. William Bertram;male;23;0;1;PC 17759;63,3583;D10 D12;C;7;;New York, NY
-1;1;Greenfield, Mrs. Leo David (Blanche Strouse);female;45;0;1;PC 17759;63,3583;D10 D12;C;7;;New York, NY
-1;0;Guggenheim, Mr. Benjamin;male;46;0;0;PC 17593;79,2;B82 B84;C;;;New York, NY
-1;1;Harder, Mr. George Achilles;male;25;1;0;11765;55,4417;E50;C;5;;Brooklyn, NY
-1;1;Harder, Mrs. George Achilles (Dorothy Annan);female;25;1;0;11765;55,4417;E50;C;5;;Brooklyn, NY
-1;1;Harper, Mr. Henry Sleeper;male;48;1;0;PC 17572;76,7292;D33;C;3;;New York, NY
-1;1;Harper, Mrs. Henry Sleeper (Myna Haxtun);female;49;1;0;PC 17572;76,7292;D33;C;3;;New York, NY
-1;0;Harrington, Mr. Charles H;male;;0;0;113796;42,4;;S;;;
-1;0;Harris, Mr. Henry Birkhardt;male;45;1;0;36973;83,475;C83;S;;;New York, NY
-1;1;Harris, Mrs. Henry Birkhardt (Irene Wallach);female;35;1;0;36973;83,475;C83;S;D;;New York, NY
-1;0;Harrison, Mr. William;male;40;0;0;112059;0;B94;S;;110;
-1;1;Hassab, Mr. Hammad;male;27;0;0;PC 17572;76,7292;D49;C;3;;
-1;1;Hawksford, Mr. Walter James;male;;0;0;16988;30;D45;S;3;;Kingston, Surrey
-1;1;Hays, Miss. Margaret Bechstein;female;24;0;0;11767;83,1583;C54;C;7;;New York, NY
-1;0;Hays, Mr. Charles Melville;male;55;1;1;12749;93,5;B69;S;;307;Montreal, PQ
-1;1;Hays, Mrs. Charles Melville (Clara Jennings Gregg);female;52;1;1;12749;93,5;B69;S;3;;Montreal, PQ
-1;0;Head, Mr. Christopher;male;42;0;0;113038;42,5;B11;S;;;London / Middlesex
-1;0;Hilliard, Mr. Herbert Henry;male;;0;0;17463;51,8625;E46;S;;;Brighton, MA
-1;0;Hipkins, Mr. William Edward;male;55;0;0;680;50;C39;S;;;London / Birmingham
-1;1;Hippach, Miss. Jean Gertrude;female;16;0;1;111361;57,9792;B18;C;4;;Chicago, IL
-1;1;Hippach, Mrs. Louis Albert (Ida Sophia Fischer);female;44;0;1;111361;57,9792;B18;C;4;;Chicago, IL
-1;1;Hogeboom, Mrs. John C (Anna Andrews);female;51;1;0;13502;77,9583;D11;S;10;;Hudson, NY
-1;0;Holverson, Mr. Alexander Oskar;male;42;1;0;113789;52;;S;;38;New York, NY
-1;1;Holverson, Mrs. Alexander Oskar (Mary Aline Towner);female;35;1;0;113789;52;;S;8;;New York, NY
-1;1;"Homer, Mr. Harry (""Mr E Haven"")";male;35;0;0;111426;26,55;;C;15;;Indianapolis, IN
-1;1;Hoyt, Mr. Frederick Maxfield;male;38;1;0;19943;90;C93;S;D;;New York, NY / Stamford CT
-1;0;Hoyt, Mr. William Fisher;male;;0;0;PC 17600;30,6958;;C;14;;New York, NY
-1;1;Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby);female;35;1;0;19943;90;C93;S;D;;New York, NY / Stamford CT
-1;1;Icard, Miss. Amelie;female;38;0;0;113572;80;B28;;6;;
-1;0;Isham, Miss. Ann Elizabeth;female;50;0;0;PC 17595;28,7125;C49;C;;;Paris, France New York, NY
-1;1;Ismay, Mr. Joseph Bruce;male;49;0;0;112058;0;B52 B54 B56;S;C;;Liverpool
-1;0;Jones, Mr. Charles Cresson;male;46;0;0;694;26;;S;;80;Bennington, VT
-1;0;Julian, Mr. Henry Forbes;male;50;0;0;113044;26;E60;S;;;London
-1;0;Keeping, Mr. Edwin;male;32,5;0;0;113503;211,5;C132;C;;45;
-1;0;Kent, Mr. Edward Austin;male;58;0;0;11771;29,7;B37;C;;258;Buffalo, NY
-1;0;Kenyon, Mr. Frederick R;male;41;1;0;17464;51,8625;D21;S;;;Southington / Noank, CT
-1;1;Kenyon, Mrs. Frederick R (Marion);female;;1;0;17464;51,8625;D21;S;8;;Southington / Noank, CT
-1;1;Kimball, Mr. Edwin Nelson Jr;male;42;1;0;11753;52,5542;D19;S;5;;Boston, MA
-1;1;Kimball, Mrs. Edwin Nelson Jr (Gertrude Parsons);female;45;1;0;11753;52,5542;D19;S;5;;Boston, MA
-1;0;Klaber, Mr. Herman;male;;0;0;113028;26,55;C124;S;;;Portland, OR
-1;1;Kreuchen, Miss. Emilie;female;39;0;0;24160;211,3375;;S;2;;
-1;1;Leader, Dr. Alice (Farnham);female;49;0;0;17465;25,9292;D17;S;8;;New York, NY
-1;1;LeRoy, Miss. Bertha;female;30;0;0;PC 17761;106,425;;C;2;;
-1;1;Lesurer, Mr. Gustave J;male;35;0;0;PC 17755;512,3292;B101;C;3;;
-1;0;Lewy, Mr. Ervin G;male;;0;0;PC 17612;27,7208;;C;;;Chicago, IL
-1;0;"Lindeberg-Lind, Mr. Erik Gustaf (""Mr Edward Lingrey"")";male;42;0;0;17475;26,55;;S;;;Stockholm, Sweden
-1;1;Lindstrom, Mrs. Carl Johan (Sigrid Posse);female;55;0;0;112377;27,7208;;C;6;;Stockholm, Sweden
-1;1;Lines, Miss. Mary Conover;female;16;0;1;PC 17592;39,4;D28;S;9;;Paris, France
-1;1;Lines, Mrs. Ernest H (Elizabeth Lindsey James);female;51;0;1;PC 17592;39,4;D28;S;9;;Paris, France
-1;0;Long, Mr. Milton Clyde;male;29;0;0;113501;30;D6;S;;126;Springfield, MA
-1;1;Longley, Miss. Gretchen Fiske;female;21;0;0;13502;77,9583;D9;S;10;;Hudson, NY
-1;0;Loring, Mr. Joseph Holland;male;30;0;0;113801;45,5;;S;;;London / New York, NY
-1;1;Lurette, Miss. Elise;female;58;0;0;PC 17569;146,5208;B80;C;;;
-1;1;Madill, Miss. Georgette Alexandra;female;15;0;1;24160;211,3375;B5;S;2;;St Louis, MO
-1;0;Maguire, Mr. John Edward;male;30;0;0;110469;26;C106;S;;;Brockton, MA
-1;1;Maioni, Miss. Roberta;female;16;0;0;110152;86,5;B79;S;8;;
-1;1;Marechal, Mr. Pierre;male;;0;0;11774;29,7;C47;C;7;;Paris, France
-1;0;Marvin, Mr. Daniel Warner;male;19;1;0;113773;53,1;D30;S;;;New York, NY
-1;1;Marvin, Mrs. Daniel Warner (Mary Graham Carmichael Farquarson);female;18;1;0;113773;53,1;D30;S;10;;New York, NY
-1;1;"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")";female;24;0;0;PC 17482;49,5042;C90;C;6;;Belgium Montreal, PQ
-1;0;McCaffry, Mr. Thomas Francis;male;46;0;0;13050;75,2417;C6;C;;292;Vancouver, BC
-1;0;McCarthy, Mr. Timothy J;male;54;0;0;17463;51,8625;E46;S;;175;Dorchester, MA
-1;1;McGough, Mr. James Robert;male;36;0;0;PC 17473;26,2875;E25;S;7;;Philadelphia, PA
-1;0;Meyer, Mr. Edgar Joseph;male;28;1;0;PC 17604;82,1708;;C;;;New York, NY
-1;1;Meyer, Mrs. Edgar Joseph (Leila Saks);female;;1;0;PC 17604;82,1708;;C;6;;New York, NY
-1;0;Millet, Mr. Francis Davis;male;65;0;0;13509;26,55;E38;S;;249;East Bridgewater, MA
-1;0;Minahan, Dr. William Edward;male;44;2;0;19928;90;C78;Q;;230;Fond du Lac, WI
-1;1;Minahan, Miss. Daisy E;female;33;1;0;19928;90;C78;Q;14;;Green Bay, WI
-1;1;Minahan, Mrs. William Edward (Lillian E Thorpe);female;37;1;0;19928;90;C78;Q;14;;Fond du Lac, WI
-1;1;Mock, Mr. Philipp Edmund;male;30;1;0;13236;57,75;C78;C;11;;New York, NY
-1;0;Molson, Mr. Harry Markland;male;55;0;0;113787;30,5;C30;S;;;Montreal, PQ
-1;0;Moore, Mr. Clarence Bloomfield;male;47;0;0;113796;42,4;;S;;;Washington, DC
-1;0;Natsch, Mr. Charles H;male;37;0;1;PC 17596;29,7;C118;C;;;Brooklyn, NY
-1;1;Newell, Miss. Madeleine;female;31;1;0;35273;113,275;D36;C;6;;Lexington, MA
-1;1;Newell, Miss. Marjorie;female;23;1;0;35273;113,275;D36;C;6;;Lexington, MA
-1;0;Newell, Mr. Arthur Webster;male;58;0;2;35273;113,275;D48;C;;122;Lexington, MA
-1;1;Newsom, Miss. Helen Monypeny;female;19;0;2;11752;26,2833;D47;S;5;;New York, NY
-1;0;Nicholson, Mr. Arthur Ernest;male;64;0;0;693;26;;S;;263;Isle of Wight, England
-1;1;Oliva y Ocana, Dona. Fermina;female;39;0;0;PC 17758;108,9;C105;C;8;;
-1;1;Omont, Mr. Alfred Fernand;male;;0;0;F.C. 12998;25,7417;;C;7;;Paris, France
-1;1;Ostby, Miss. Helene Ragnhild;female;22;0;1;113509;61,9792;B36;C;5;;Providence, RI
-1;0;Ostby, Mr. Engelhart Cornelius;male;65;0;1;113509;61,9792;B30;C;;234;Providence, RI
-1;0;Ovies y Rodriguez, Mr. Servando;male;28,5;0;0;PC 17562;27,7208;D43;C;;189;?Havana, Cuba
-1;0;Parr, Mr. William Henry Marsh;male;;0;0;112052;0;;S;;;Belfast
-1;0;Partner, Mr. Austen;male;45,5;0;0;113043;28,5;C124;S;;166;Surbiton Hill, Surrey
-1;0;Payne, Mr. Vivian Ponsonby;male;23;0;0;12749;93,5;B24;S;;;Montreal, PQ
-1;0;Pears, Mr. Thomas Clinton;male;29;1;0;113776;66,6;C2;S;;;Isleworth, England
-1;1;Pears, Mrs. Thomas (Edith Wearne);female;22;1;0;113776;66,6;C2;S;8;;Isleworth, England
-1;0;Penasco y Castellana, Mr. Victor de Satode;male;18;1;0;PC 17758;108,9;C65;C;;;Madrid, Spain
-1;1;Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo);female;17;1;0;PC 17758;108,9;C65;C;8;;Madrid, Spain
-1;1;Perreault, Miss. Anne;female;30;0;0;12749;93,5;B73;S;3;;
-1;1;Peuchen, Major. Arthur Godfrey;male;52;0;0;113786;30,5;C104;S;6;;Toronto, ON
-1;0;Porter, Mr. Walter Chamberlain;male;47;0;0;110465;52;C110;S;;207;Worcester, MA
-1;1;Potter, Mrs. Thomas Jr (Lily Alexenia Wilson);female;56;0;1;11767;83,1583;C50;C;7;;Mt Airy, Philadelphia, PA
-1;0;Reuchlin, Jonkheer. John George;male;38;0;0;19972;0;;S;;;Rotterdam, Netherlands
-1;1;Rheims, Mr. George Alexander Lucien;male;;0;0;PC 17607;39,6;;S;A;;Paris / New York, NY
-1;0;Ringhini, Mr. Sante;male;22;0;0;PC 17760;135,6333;;C;;232;
-1;0;Robbins, Mr. Victor;male;;0;0;PC 17757;227,525;;C;;;
-1;1;Robert, Mrs. Edward Scott (Elisabeth Walton McMillan);female;43;0;1;24160;211,3375;B3;S;2;;St Louis, MO
-1;0;Roebling, Mr. Washington Augustus II;male;31;0;0;PC 17590;50,4958;A24;S;;;Trenton, NJ
-1;1;"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")";male;45;0;0;111428;26,55;;S;9;;New York, NY
-1;0;Rood, Mr. Hugh Roscoe;male;;0;0;113767;50;A32;S;;;Seattle, WA
-1;1;Rosenbaum, Miss. Edith Louise;female;33;0;0;PC 17613;27,7208;A11;C;11;;Paris, France
-1;0;"Rosenshine, Mr. George (""Mr George Thorne"")";male;46;0;0;PC 17585;79,2;;C;;16;New York, NY
-1;0;Ross, Mr. John Hugo;male;36;0;0;13049;40,125;A10;C;;;Winnipeg, MB
-1;1;Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards);female;33;0;0;110152;86,5;B77;S;8;;London Vancouver, BC
-1;0;Rothschild, Mr. Martin;male;55;1;0;PC 17603;59,4;;C;;;New York, NY
-1;1;Rothschild, Mrs. Martin (Elizabeth L. Barrett);female;54;1;0;PC 17603;59,4;;C;6;;New York, NY
-1;0;Rowe, Mr. Alfred G;male;33;0;0;113790;26,55;;S;;109;London
-1;1;Ryerson, Master. John Borie;male;13;2;2;PC 17608;262,375;B57 B59 B63 B66;C;4;;Haverford, PA / Cooperstown, NY
-1;1;Ryerson, Miss. Emily Borie;female;18;2;2;PC 17608;262,375;B57 B59 B63 B66;C;4;;Haverford, PA / Cooperstown, NY
-1;1;"Ryerson, Miss. Susan Parker ""Suzette""";female;21;2;2;PC 17608;262,375;B57 B59 B63 B66;C;4;;Haverford, PA / Cooperstown, NY
-1;0;Ryerson, Mr. Arthur Larned;male;61;1;3;PC 17608;262,375;B57 B59 B63 B66;C;;;Haverford, PA / Cooperstown, NY
-1;1;Ryerson, Mrs. Arthur Larned (Emily Maria Borie);female;48;1;3;PC 17608;262,375;B57 B59 B63 B66;C;4;;Haverford, PA / Cooperstown, NY
-1;1;Saalfeld, Mr. Adolphe;male;;0;0;19988;30,5;C106;S;3;;Manchester, England
-1;1;Sagesser, Mlle. Emma;female;24;0;0;PC 17477;69,3;B35;C;9;;
-1;1;Salomon, Mr. Abraham L;male;;0;0;111163;26;;S;1;;New York, NY
-1;1;Schabert, Mrs. Paul (Emma Mock);female;35;1;0;13236;57,75;C28;C;11;;New York, NY
-1;1;Serepeca, Miss. Augusta;female;30;0;0;113798;31;;C;4;;
-1;1;Seward, Mr. Frederic Kimber;male;34;0;0;113794;26,55;;S;7;;New York, NY
-1;1;Shutes, Miss. Elizabeth W;female;40;0;0;PC 17582;153,4625;C125;S;3;;New York, NY / Greenwich CT
-1;1;Silverthorne, Mr. Spencer Victor;male;35;0;0;PC 17475;26,2875;E24;S;5;;St Louis, MO
-1;0;Silvey, Mr. William Baird;male;50;1;0;13507;55,9;E44;S;;;Duluth, MN
-1;1;Silvey, Mrs. William Baird (Alice Munger);female;39;1;0;13507;55,9;E44;S;11;;Duluth, MN
-1;1;Simonius-Blumer, Col. Oberst Alfons;male;56;0;0;13213;35,5;A26;C;3;;Basel, Switzerland
-1;1;Sloper, Mr. William Thompson;male;28;0;0;113788;35,5;A6;S;7;;New Britain, CT
-1;0;Smart, Mr. John Montgomery;male;56;0;0;113792;26,55;;S;;;New York, NY
-1;0;Smith, Mr. James Clinch;male;56;0;0;17764;30,6958;A7;C;;;St James, Long Island, NY
-1;0;Smith, Mr. Lucien Philip;male;24;1;0;13695;60;C31;S;;;Huntington, WV
-1;0;Smith, Mr. Richard William;male;;0;0;113056;26;A19;S;;;Streatham, Surrey
-1;1;Smith, Mrs. Lucien Philip (Mary Eloise Hughes);female;18;1;0;13695;60;C31;S;6;;Huntington, WV
-1;1;Snyder, Mr. John Pillsbury;male;24;1;0;21228;82,2667;B45;S;7;;Minneapolis, MN
-1;1;Snyder, Mrs. John Pillsbury (Nelle Stevenson);female;23;1;0;21228;82,2667;B45;S;7;;Minneapolis, MN
-1;1;Spedden, Master. Robert Douglas;male;6;0;2;16966;134,5;E34;C;3;;Tuxedo Park, NY
-1;1;Spedden, Mr. Frederic Oakley;male;45;1;1;16966;134,5;E34;C;3;;Tuxedo Park, NY
-1;1;Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone);female;40;1;1;16966;134,5;E34;C;3;;Tuxedo Park, NY
-1;0;Spencer, Mr. William Augustus;male;57;1;0;PC 17569;146,5208;B78;C;;;Paris, France
-1;1;Spencer, Mrs. William Augustus (Marie Eugenie);female;;1;0;PC 17569;146,5208;B78;C;6;;Paris, France
-1;1;Stahelin-Maeglin, Dr. Max;male;32;0;0;13214;30,5;B50;C;3;;Basel, Switzerland
-1;0;Stead, Mr. William Thomas;male;62;0;0;113514;26,55;C87;S;;;Wimbledon Park, London / Hayling Island, Hants
-1;1;Stengel, Mr. Charles Emil Henry;male;54;1;0;11778;55,4417;C116;C;1;;Newark, NJ
-1;1;Stengel, Mrs. Charles Emil Henry (Annie May Morris);female;43;1;0;11778;55,4417;C116;C;5;;Newark, NJ
-1;1;Stephenson, Mrs. Walter Bertram (Martha Eustis);female;52;1;0;36947;78,2667;D20;C;4;;Haverford, PA
-1;0;Stewart, Mr. Albert A;male;;0;0;PC 17605;27,7208;;C;;;Gallipolis, Ohio / ? Paris / New York
-1;1;Stone, Mrs. George Nelson (Martha Evelyn);female;62;0;0;113572;80;B28;;6;;Cincinatti, OH
-1;0;Straus, Mr. Isidor;male;67;1;0;PC 17483;221,7792;C55 C57;S;;96;New York, NY
-1;0;Straus, Mrs. Isidor (Rosalie Ida Blun);female;63;1;0;PC 17483;221,7792;C55 C57;S;;;New York, NY
-1;0;Sutton, Mr. Frederick;male;61;0;0;36963;32,3208;D50;S;;46;Haddenfield, NJ
-1;1;Swift, Mrs. Frederick Joel (Margaret Welles Barron);female;48;0;0;17466;25,9292;D17;S;8;;Brooklyn, NY
-1;1;Taussig, Miss. Ruth;female;18;0;2;110413;79,65;E68;S;8;;New York, NY
-1;0;Taussig, Mr. Emil;male;52;1;1;110413;79,65;E67;S;;;New York, NY
-1;1;Taussig, Mrs. Emil (Tillie Mandelbaum);female;39;1;1;110413;79,65;E67;S;8;;New York, NY
-1;1;Taylor, Mr. Elmer Zebley;male;48;1;0;19996;52;C126;S;5 7;;London / East Orange, NJ
-1;1;Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright);female;;1;0;19996;52;C126;S;5 7;;London / East Orange, NJ
-1;0;Thayer, Mr. John Borland;male;49;1;1;17421;110,8833;C68;C;;;Haverford, PA
-1;1;Thayer, Mr. John Borland Jr;male;17;0;2;17421;110,8833;C70;C;B;;Haverford, PA
-1;1;Thayer, Mrs. John Borland (Marian Longstreth Morris);female;39;1;1;17421;110,8833;C68;C;4;;Haverford, PA
-1;1;Thorne, Mrs. Gertrude Maybelle;female;;0;0;PC 17585;79,2;;C;D;;New York, NY
-1;1;Tucker, Mr. Gilbert Milligan Jr;male;31;0;0;2543;28,5375;C53;C;7;;Albany, NY
-1;0;Uruchurtu, Don. Manuel E;male;40;0;0;PC 17601;27,7208;;C;;;Mexico City, Mexico
-1;0;Van der hoef, Mr. Wyckoff;male;61;0;0;111240;33,5;B19;S;;245;Brooklyn, NY
-1;0;Walker, Mr. William Anderson;male;47;0;0;36967;34,0208;D46;S;;;East Orange, NJ
-1;1;Ward, Miss. Anna;female;35;0;0;PC 17755;512,3292;;C;3;;
-1;0;Warren, Mr. Frank Manley;male;64;1;0;110813;75,25;D37;C;;;Portland, OR
-1;1;Warren, Mrs. Frank Manley (Anna Sophia Atkinson);female;60;1;0;110813;75,25;D37;C;5;;Portland, OR
-1;0;Weir, Col. John;male;60;0;0;113800;26,55;;S;;;England Salt Lake City, Utah
-1;0;White, Mr. Percival Wayland;male;54;0;1;35281;77,2875;D26;S;;;Brunswick, ME
-1;0;White, Mr. Richard Frasar;male;21;0;1;35281;77,2875;D26;S;;169;Brunswick, ME
-1;1;White, Mrs. John Stuart (Ella Holmes);female;55;0;0;PC 17760;135,6333;C32;C;8;;New York, NY / Briarcliff Manor NY
-1;1;Wick, Miss. Mary Natalie;female;31;0;2;36928;164,8667;C7;S;8;;Youngstown, OH
-1;0;Wick, Mr. George Dennick;male;57;1;1;36928;164,8667;;S;;;Youngstown, OH
-1;1;Wick, Mrs. George Dennick (Mary Hitchcock);female;45;1;1;36928;164,8667;;S;8;;Youngstown, OH
-1;0;Widener, Mr. George Dunton;male;50;1;1;113503;211,5;C80;C;;;Elkins Park, PA
-1;0;Widener, Mr. Harry Elkins;male;27;0;2;113503;211,5;C82;C;;;Elkins Park, PA
-1;1;Widener, Mrs. George Dunton (Eleanor Elkins);female;50;1;1;113503;211,5;C80;C;4;;Elkins Park, PA
-1;1;Willard, Miss. Constance;female;21;0;0;113795;26,55;;S;8 10;;Duluth, MN
-1;0;Williams, Mr. Charles Duane;male;51;0;1;PC 17597;61,3792;;C;;;Geneva, Switzerland / Radnor, PA
-1;1;Williams, Mr. Richard Norris II;male;21;0;1;PC 17597;61,3792;;C;A;;Geneva, Switzerland / Radnor, PA
-1;0;Williams-Lambert, Mr. Fletcher Fellows;male;;0;0;113510;35;C128;S;;;London, England
-1;1;Wilson, Miss. Helen Alice;female;31;0;0;16966;134,5;E39 E41;C;3;;
-1;1;Woolner, Mr. Hugh;male;;0;0;19947;35,5;C52;S;D;;London, England
-1;0;Wright, Mr. George;male;62;0;0;113807;26,55;;S;;;Halifax, NS
-1;1;Young, Miss. Marie Grice;female;36;0;0;PC 17760;135,6333;C32;C;8;;New York, NY / Washington, DC
-2;0;Abelson, Mr. Samuel;male;30;1;0;P/PP 3381;24;;C;;;Russia New York, NY
-2;1;Abelson, Mrs. Samuel (Hannah Wizosky);female;28;1;0;P/PP 3381;24;;C;10;;Russia New York, NY
-2;0;Aldworth, Mr. Charles Augustus;male;30;0;0;248744;13;;S;;;Bryn Mawr, PA, USA
-2;0;Andrew, Mr. Edgardo Samuel;male;18;0;0;231945;11,5;;S;;;Buenos Aires, Argentina / New Jersey, NJ
-2;0;Andrew, Mr. Frank Thomas;male;25;0;0;C.A. 34050;10,5;;S;;;Cornwall, England Houghton, MI
-2;0;Angle, Mr. William A;male;34;1;0;226875;26;;S;;;Warwick, England
-2;1;"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)";female;36;1;0;226875;26;;S;11;;Warwick, England
-2;0;Ashby, Mr. John;male;57;0;0;244346;13;;S;;;West Hoboken, NJ
-2;0;Bailey, Mr. Percy Andrew;male;18;0;0;29108;11,5;;S;;;Penzance, Cornwall / Akron, OH
-2;0;Baimbrigge, Mr. Charles Robert;male;23;0;0;C.A. 31030;10,5;;S;;;Guernsey
-2;1;Ball, Mrs. (Ada E Hall);female;36;0;0;28551;13;D;S;10;;Bristol, Avon / Jacksonville, FL
-2;0;Banfield, Mr. Frederick James;male;28;0;0;C.A./SOTON 34068;10,5;;S;;;Plymouth, Dorset / Houghton, MI
-2;0;Bateman, Rev. Robert James;male;51;0;0;S.O.P. 1166;12,525;;S;;174;Jacksonville, FL
-2;1;Beane, Mr. Edward;male;32;1;0;2908;26;;S;13;;Norwich / New York, NY
-2;1;Beane, Mrs. Edward (Ethel Clarke);female;19;1;0;2908;26;;S;13;;Norwich / New York, NY
-2;0;Beauchamp, Mr. Henry James;male;28;0;0;244358;26;;S;;;England
-2;1;Becker, Master. Richard F;male;1;2;1;230136;39;F4;S;11;;Guntur, India / Benton Harbour, MI
-2;1;Becker, Miss. Marion Louise;female;4;2;1;230136;39;F4;S;11;;Guntur, India / Benton Harbour, MI
-2;1;Becker, Miss. Ruth Elizabeth;female;12;2;1;230136;39;F4;S;13;;Guntur, India / Benton Harbour, MI
-2;1;Becker, Mrs. Allen Oliver (Nellie E Baumgardner);female;36;0;3;230136;39;F4;S;11;;Guntur, India / Benton Harbour, MI
-2;1;Beesley, Mr. Lawrence;male;34;0;0;248698;13;D56;S;13;;London
-2;1;Bentham, Miss. Lilian W;female;19;0;0;28404;13;;S;12;;Rochester, NY
-2;0;Berriman, Mr. William John;male;23;0;0;28425;13;;S;;;St Ives, Cornwall / Calumet, MI
-2;0;Botsford, Mr. William Hull;male;26;0;0;237670;13;;S;;;Elmira, NY / Orange, NJ
-2;0;Bowenur, Mr. Solomon;male;42;0;0;211535;13;;S;;;London
-2;0;Bracken, Mr. James H;male;27;0;0;220367;13;;S;;;Lake Arthur, Chavez County, NM
-2;1;"Brown, Miss. Amelia ""Mildred""";female;24;0;0;248733;13;F33;S;11;;London / Montreal, PQ
-2;1;Brown, Miss. Edith Eileen;female;15;0;2;29750;39;;S;14;;Cape Town, South Africa / Seattle, WA
-2;0;Brown, Mr. Thomas William Solomon;male;60;1;1;29750;39;;S;;;Cape Town, South Africa / Seattle, WA
-2;1;Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford);female;40;1;1;29750;39;;S;14;;Cape Town, South Africa / Seattle, WA
-2;1;Bryhl, Miss. Dagmar Jenny Ingeborg ;female;20;1;0;236853;26;;S;12;;Skara, Sweden / Rockford, IL
-2;0;Bryhl, Mr. Kurt Arnold Gottfrid;male;25;1;0;236853;26;;S;;;Skara, Sweden / Rockford, IL
-2;1;Buss, Miss. Kate;female;36;0;0;27849;13;;S;9;;Sittingbourne, England / San Diego, CA
-2;0;Butler, Mr. Reginald Fenton;male;25;0;0;234686;13;;S;;97;Southsea, Hants
-2;0;Byles, Rev. Thomas Roussel Davids;male;42;0;0;244310;13;;S;;;London
-2;1;Bystrom, Mrs. (Karolina);female;42;0;0;236852;13;;S;;;New York, NY
-2;1;Caldwell, Master. Alden Gates;male;0,8333;0;2;248738;29;;S;13;;Bangkok, Thailand / Roseville, IL
-2;1;Caldwell, Mr. Albert Francis;male;26;1;1;248738;29;;S;13;;Bangkok, Thailand / Roseville, IL
-2;1;Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh);female;22;1;1;248738;29;;S;13;;Bangkok, Thailand / Roseville, IL
-2;1;Cameron, Miss. Clear Annie;female;35;0;0;F.C.C. 13528;21;;S;14;;Mamaroneck, NY
-2;0;Campbell, Mr. William;male;;0;0;239853;0;;S;;;Belfast
-2;0;Carbines, Mr. William;male;19;0;0;28424;13;;S;;18;St Ives, Cornwall / Calumet, MI
-2;0;Carter, Mrs. Ernest Courtenay (Lilian Hughes);female;44;1;0;244252;26;;S;;;London
-2;0;Carter, Rev. Ernest Courtenay;male;54;1;0;244252;26;;S;;;London
-2;0;Chapman, Mr. Charles Henry;male;52;0;0;248731;13,5;;S;;130;Bronx, NY
-2;0;Chapman, Mr. John Henry;male;37;1;0;SC/AH 29037;26;;S;;17;Cornwall / Spokane, WA
-2;0;Chapman, Mrs. John Henry (Sara Elizabeth Lawry);female;29;1;0;SC/AH 29037;26;;S;;;Cornwall / Spokane, WA
-2;1;Christy, Miss. Julie Rachel;female;25;1;1;237789;30;;S;12;;London
-2;1;Christy, Mrs. (Alice Frances);female;45;0;2;237789;30;;S;12;;London
-2;0;Clarke, Mr. Charles Valentine;male;29;1;0;2003;26;;S;;;England / San Francisco, CA
-2;1;Clarke, Mrs. Charles V (Ada Maria Winfield);female;28;1;0;2003;26;;S;14;;England / San Francisco, CA
-2;0;Coleridge, Mr. Reginald Charles;male;29;0;0;W./C. 14263;10,5;;S;;;Hartford, Huntingdonshire
-2;0;Collander, Mr. Erik Gustaf;male;28;0;0;248740;13;;S;;;Helsinki, Finland Ashtabula, Ohio
-2;1;Collett, Mr. Sidney C Stuart;male;24;0;0;28034;10,5;;S;9;;London / Fort Byron, NY
-2;1;"Collyer, Miss. Marjorie ""Lottie""";female;8;0;2;C.A. 31921;26,25;;S;14;;Bishopstoke, Hants / Fayette Valley, ID
-2;0;Collyer, Mr. Harvey;male;31;1;1;C.A. 31921;26,25;;S;;;Bishopstoke, Hants / Fayette Valley, ID
-2;1;Collyer, Mrs. Harvey (Charlotte Annie Tate);female;31;1;1;C.A. 31921;26,25;;S;14;;Bishopstoke, Hants / Fayette Valley, ID
-2;1;Cook, Mrs. (Selena Rogers);female;22;0;0;W./C. 14266;10,5;F33;S;14;;Pennsylvania
-2;0;Corbett, Mrs. Walter H (Irene Colvin);female;30;0;0;237249;13;;S;;;Provo, UT
-2;0;Corey, Mrs. Percy C (Mary Phyllis Elizabeth Miller);female;;0;0;F.C.C. 13534;21;;S;;;Upper Burma, India Pittsburgh, PA
-2;0;"Cotterill, Mr. Henry ""Harry""";male;21;0;0;29107;11,5;;S;;;Penzance, Cornwall / Akron, OH
-2;0;Cunningham, Mr. Alfred Fleming;male;;0;0;239853;0;;S;;;Belfast
-2;1;Davies, Master. John Morgan Jr;male;8;1;1;C.A. 33112;36,75;;S;14;;St Ives, Cornwall / Hancock, MI
-2;0;Davies, Mr. Charles Henry;male;18;0;0;S.O.C. 14879;73,5;;S;;;Lyndhurst, England
-2;1;Davies, Mrs. John Morgan (Elizabeth Agnes Mary White) ;female;48;0;2;C.A. 33112;36,75;;S;14;;St Ives, Cornwall / Hancock, MI
-2;1;Davis, Miss. Mary;female;28;0;0;237668;13;;S;13;;London / Staten Island, NY
-2;0;de Brito, Mr. Jose Joaquim;male;32;0;0;244360;13;;S;;;Portugal / Sau Paulo, Brazil
-2;0;Deacon, Mr. Percy William;male;17;0;0;S.O.C. 14879;73,5;;S;;;
-2;0;del Carlo, Mr. Sebastiano;male;29;1;0;SC/PARIS 2167;27,7208;;C;;295;Lucca, Italy / California
-2;1;del Carlo, Mrs. Sebastiano (Argenia Genovesi);female;24;1;0;SC/PARIS 2167;27,7208;;C;12;;Lucca, Italy / California
-2;0;Denbury, Mr. Herbert;male;25;0;0;C.A. 31029;31,5;;S;;;Guernsey / Elizabeth, NJ
-2;0;Dibden, Mr. William;male;18;0;0;S.O.C. 14879;73,5;;S;;;New Forest, England
-2;1;Doling, Miss. Elsie;female;18;0;1;231919;23;;S;;;Southampton
-2;1;Doling, Mrs. John T (Ada Julia Bone);female;34;0;1;231919;23;;S;;;Southampton
-2;0;Downton, Mr. William James;male;54;0;0;28403;26;;S;;;Holley, NY
-2;1;Drew, Master. Marshall Brines;male;8;0;2;28220;32,5;;S;10;;Greenport, NY
-2;0;Drew, Mr. James Vivian;male;42;1;1;28220;32,5;;S;;;Greenport, NY
-2;1;Drew, Mrs. James Vivian (Lulu Thorne Christian);female;34;1;1;28220;32,5;;S;10;;Greenport, NY
-2;1;Duran y More, Miss. Asuncion;female;27;1;0;SC/PARIS 2149;13,8583;;C;12;;Barcelona, Spain / Havana, Cuba
-2;1;Duran y More, Miss. Florentina;female;30;1;0;SC/PARIS 2148;13,8583;;C;12;;Barcelona, Spain / Havana, Cuba
-2;0;Eitemiller, Mr. George Floyd;male;23;0;0;29751;13;;S;;;England / Detroit, MI
-2;0;Enander, Mr. Ingvar;male;21;0;0;236854;13;;S;;;Goteborg, Sweden / Rockford, IL
-2;0;Fahlstrom, Mr. Arne Jonas;male;18;0;0;236171;13;;S;;;Oslo, Norway Bayonne, NJ
-2;0;Faunthorpe, Mr. Harry;male;40;1;0;2926;26;;S;;286;England / Philadelphia, PA
-2;1;Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson);female;29;1;0;2926;26;;S;16;;
-2;0;Fillbrook, Mr. Joseph Charles;male;18;0;0;C.A. 15185;10,5;;S;;;Cornwall / Houghton, MI
-2;0;Fox, Mr. Stanley Hubert;male;36;0;0;229236;13;;S;;236;Rochester, NY
-2;0;"Frost, Mr. Anthony Wood ""Archie""";male;;0;0;239854;0;;S;;;Belfast
-2;0;Funk, Miss. Annie Clemmer;female;38;0;0;237671;13;;S;;;Janjgir, India / Pennsylvania
-2;0;Fynney, Mr. Joseph J;male;35;0;0;239865;26;;S;;322;Liverpool / Montreal, PQ
-2;0;Gale, Mr. Harry;male;38;1;0;28664;21;;S;;;Cornwall / Clear Creek, CO
-2;0;Gale, Mr. Shadrach;male;34;1;0;28664;21;;S;;;Cornwall / Clear Creek, CO
-2;1;Garside, Miss. Ethel;female;34;0;0;243880;13;;S;12;;Brooklyn, NY
-2;0;Gaskell, Mr. Alfred;male;16;0;0;239865;26;;S;;;Liverpool / Montreal, PQ
-2;0;Gavey, Mr. Lawrence;male;26;0;0;31028;10,5;;S;;;Guernsey / Elizabeth, NJ
-2;0;Gilbert, Mr. William;male;47;0;0;C.A. 30769;10,5;;S;;;Cornwall
-2;0;Giles, Mr. Edgar;male;21;1;0;28133;11,5;;S;;;Cornwall / Camden, NJ
-2;0;Giles, Mr. Frederick Edward;male;21;1;0;28134;11,5;;S;;;Cornwall / Camden, NJ
-2;0;Giles, Mr. Ralph;male;24;0;0;248726;13,5;;S;;297;West Kensington, London
-2;0;Gill, Mr. John William;male;24;0;0;233866;13;;S;;155;Clevedon, England
-2;0;Gillespie, Mr. William Henry;male;34;0;0;12233;13;;S;;;Vancouver, BC
-2;0;Givard, Mr. Hans Kristensen;male;30;0;0;250646;13;;S;;305;
-2;0;Greenberg, Mr. Samuel;male;52;0;0;250647;13;;S;;19;Bronx, NY
-2;0;Hale, Mr. Reginald;male;30;0;0;250653;13;;S;;75;Auburn, NY
-2;1;Hamalainen, Master. Viljo;male;0,6667;1;1;250649;14,5;;S;4;;Detroit, MI
-2;1;Hamalainen, Mrs. William (Anna);female;24;0;2;250649;14,5;;S;4;;Detroit, MI
-2;0;Harbeck, Mr. William H;male;44;0;0;248746;13;;S;;35;Seattle, WA / Toledo, OH
-2;1;"Harper, Miss. Annie Jessie ""Nina""";female;6;0;1;248727;33;;S;11;;Denmark Hill, Surrey / Chicago
-2;0;Harper, Rev. John;male;28;0;1;248727;33;;S;;;Denmark Hill, Surrey / Chicago
-2;1;Harris, Mr. George;male;62;0;0;S.W./PP 752;10,5;;S;15;;London
-2;0;Harris, Mr. Walter;male;30;0;0;W/C 14208;10,5;;S;;;Walthamstow, England
-2;1;Hart, Miss. Eva Miriam;female;7;0;2;F.C.C. 13529;26,25;;S;14;;Ilford, Essex / Winnipeg, MB
-2;0;Hart, Mr. Benjamin;male;43;1;1;F.C.C. 13529;26,25;;S;;;Ilford, Essex / Winnipeg, MB
-2;1;Hart, Mrs. Benjamin (Esther Ada Bloomfield);female;45;1;1;F.C.C. 13529;26,25;;S;14;;Ilford, Essex / Winnipeg, MB
-2;1;Herman, Miss. Alice;female;24;1;2;220845;65;;S;9;;Somerset / Bernardsville, NJ
-2;1;Herman, Miss. Kate;female;24;1;2;220845;65;;S;9;;Somerset / Bernardsville, NJ
-2;0;Herman, Mr. Samuel;male;49;1;2;220845;65;;S;;;Somerset / Bernardsville, NJ
-2;1;Herman, Mrs. Samuel (Jane Laver);female;48;1;2;220845;65;;S;9;;Somerset / Bernardsville, NJ
-2;1;Hewlett, Mrs. (Mary D Kingcome) ;female;55;0;0;248706;16;;S;13;;India / Rapid City, SD
-2;0;Hickman, Mr. Leonard Mark;male;24;2;0;S.O.C. 14879;73,5;;S;;;West Hampstead, London / Neepawa, MB
-2;0;Hickman, Mr. Lewis;male;32;2;0;S.O.C. 14879;73,5;;S;;256;West Hampstead, London / Neepawa, MB
-2;0;Hickman, Mr. Stanley George;male;21;2;0;S.O.C. 14879;73,5;;S;;;West Hampstead, London / Neepawa, MB
-2;0;Hiltunen, Miss. Marta;female;18;1;1;250650;13;;S;;;Kontiolahti, Finland / Detroit, MI
-2;1;"Hocking, Miss. Ellen ""Nellie""";female;20;2;1;29105;23;;S;4;;Cornwall / Akron, OH
-2;0;Hocking, Mr. Richard George;male;23;2;1;29104;11,5;;S;;;Cornwall / Akron, OH
-2;0;Hocking, Mr. Samuel James Metcalfe;male;36;0;0;242963;13;;S;;;Devonport, England
-2;1;Hocking, Mrs. Elizabeth (Eliza Needs);female;54;1;3;29105;23;;S;4;;Cornwall / Akron, OH
-2;0;Hodges, Mr. Henry Price;male;50;0;0;250643;13;;S;;149;Southampton
-2;0;Hold, Mr. Stephen;male;44;1;0;26707;26;;S;;;England / Sacramento, CA
-2;1;Hold, Mrs. Stephen (Annie Margaret Hill);female;29;1;0;26707;26;;S;10;;England / Sacramento, CA
-2;0;Hood, Mr. Ambrose Jr;male;21;0;0;S.O.C. 14879;73,5;;S;;;New Forest, England
-2;1;Hosono, Mr. Masabumi;male;42;0;0;237798;13;;S;10;;Tokyo, Japan
-2;0;Howard, Mr. Benjamin;male;63;1;0;24065;26;;S;;;Swindon, England
-2;0;Howard, Mrs. Benjamin (Ellen Truelove Arman);female;60;1;0;24065;26;;S;;;Swindon, England
-2;0;Hunt, Mr. George Henry;male;33;0;0;SCO/W 1585;12,275;;S;;;Philadelphia, PA
-2;1;Ilett, Miss. Bertha;female;17;0;0;SO/C 14885;10,5;;S;;;Guernsey
-2;0;Jacobsohn, Mr. Sidney Samuel;male;42;1;0;243847;27;;S;;;London
-2;1;Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy);female;24;2;1;243847;27;;S;12;;London
-2;0;Jarvis, Mr. John Denzil;male;47;0;0;237565;15;;S;;;North Evington, England
-2;0;Jefferys, Mr. Clifford Thomas;male;24;2;0;C.A. 31029;31,5;;S;;;Guernsey / Elizabeth, NJ
-2;0;Jefferys, Mr. Ernest Wilfred;male;22;2;0;C.A. 31029;31,5;;S;;;Guernsey / Elizabeth, NJ
-2;0;Jenkin, Mr. Stephen Curnow;male;32;0;0;C.A. 33111;10,5;;S;;;St Ives, Cornwall / Houghton, MI
-2;1;Jerwan, Mrs. Amin S (Marie Marthe Thuillard);female;23;0;0;SC/AH Basle 541;13,7917;D;C;11;;New York, NY
-2;0;Kantor, Mr. Sinai;male;34;1;0;244367;26;;S;;283;Moscow / Bronx, NY
-2;1;Kantor, Mrs. Sinai (Miriam Sternin);female;24;1;0;244367;26;;S;12;;Moscow / Bronx, NY
-2;0;Karnes, Mrs. J Frank (Claire Bennett);female;22;0;0;F.C.C. 13534;21;;S;;;India / Pittsburgh, PA
-2;1;Keane, Miss. Nora A;female;;0;0;226593;12,35;E101;Q;10;;Harrisburg, PA
-2;0;Keane, Mr. Daniel;male;35;0;0;233734;12,35;;Q;;;
-2;1;"Kelly, Mrs. Florence ""Fannie""";female;45;0;0;223596;13,5;;S;9;;London / New York, NY
-2;0;Kirkland, Rev. Charles Leonard;male;57;0;0;219533;12,35;;Q;;;Glasgow / Bangor, ME
-2;0;Knight, Mr. Robert J;male;;0;0;239855;0;;S;;;Belfast
-2;0;Kvillner, Mr. Johan Henrik Johannesson;male;31;0;0;C.A. 18723;10,5;;S;;165;Sweden / Arlington, NJ
-2;0;Lahtinen, Mrs. William (Anna Sylfven);female;26;1;1;250651;26;;S;;;Minneapolis, MN
-2;0;Lahtinen, Rev. William;male;30;1;1;250651;26;;S;;;Minneapolis, MN
-2;0;Lamb, Mr. John Joseph;male;;0;0;240261;10,7083;;Q;;;
-2;1;Laroche, Miss. Louise;female;1;1;2;SC/Paris 2123;41,5792;;C;14;;Paris / Haiti
-2;1;Laroche, Miss. Simonne Marie Anne Andree;female;3;1;2;SC/Paris 2123;41,5792;;C;14;;Paris / Haiti
-2;0;Laroche, Mr. Joseph Philippe Lemercier;male;25;1;2;SC/Paris 2123;41,5792;;C;;;Paris / Haiti
-2;1;Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue);female;22;1;2;SC/Paris 2123;41,5792;;C;14;;Paris / Haiti
-2;1;Lehmann, Miss. Bertha;female;17;0;0;SC 1748;12;;C;12;;Berne, Switzerland / Central City, IA
-2;1;Leitch, Miss. Jessie Wills;female;;0;0;248727;33;;S;11;;London / Chicago, IL
-2;1;Lemore, Mrs. (Amelia Milley);female;34;0;0;C.A. 34260;10,5;F33;S;14;;Chicago, IL
-2;0;Levy, Mr. Rene Jacques;male;36;0;0;SC/Paris 2163;12,875;D;C;;;Montreal, PQ
-2;0;Leyson, Mr. Robert William Norman;male;24;0;0;C.A. 29566;10,5;;S;;108;
-2;0;Lingane, Mr. John;male;61;0;0;235509;12,35;;Q;;;
-2;0;Louch, Mr. Charles Alexander;male;50;1;0;SC/AH 3085;26;;S;;121;Weston-Super-Mare, Somerset
-2;1;Louch, Mrs. Charles Alexander (Alice Adelaide Slow);female;42;1;0;SC/AH 3085;26;;S;;;Weston-Super-Mare, Somerset
-2;0;Mack, Mrs. (Mary);female;57;0;0;S.O./P.P. 3;10,5;E77;S;;52;Southampton / New York, NY
-2;0;Malachard, Mr. Noel;male;;0;0;237735;15,0458;D;C;;;Paris
-2;1;Mallet, Master. Andre;male;1;0;2;S.C./PARIS 2079;37,0042;;C;10;;Paris / Montreal, PQ
-2;0;Mallet, Mr. Albert;male;31;1;1;S.C./PARIS 2079;37,0042;;C;;;Paris / Montreal, PQ
-2;1;Mallet, Mrs. Albert (Antoinette Magnin);female;24;1;1;S.C./PARIS 2079;37,0042;;C;10;;Paris / Montreal, PQ
-2;0;Mangiavacchi, Mr. Serafino Emilio;male;;0;0;SC/A.3 2861;15,5792;;C;;;New York, NY
-2;0;Matthews, Mr. William John;male;30;0;0;28228;13;;S;;;St Austall, Cornwall
-2;0;Maybery, Mr. Frank Hubert;male;40;0;0;239059;16;;S;;;Weston-Super-Mare / Moose Jaw, SK
-2;0;McCrae, Mr. Arthur Gordon;male;32;0;0;237216;13,5;;S;;209;Sydney, Australia
-2;0;McCrie, Mr. James Matthew;male;30;0;0;233478;13;;S;;;Sarnia, ON
-2;0;McKane, Mr. Peter David;male;46;0;0;28403;26;;S;;;Rochester, NY
-2;1;Mellinger, Miss. Madeleine Violet;female;13;0;1;250644;19,5;;S;14;;England / Bennington, VT
-2;1;Mellinger, Mrs. (Elizabeth Anne Maidment);female;41;0;1;250644;19,5;;S;14;;England / Bennington, VT
-2;1;Mellors, Mr. William John;male;19;0;0;SW/PP 751;10,5;;S;B;;Chelsea, London
-2;0;Meyer, Mr. August;male;39;0;0;248723;13;;S;;;Harrow-on-the-Hill, Middlesex
-2;0;Milling, Mr. Jacob Christian;male;48;0;0;234360;13;;S;;271;Copenhagen, Denmark
-2;0;Mitchell, Mr. Henry Michael;male;70;0;0;C.A. 24580;10,5;;S;;;Guernsey / Montclair, NJ and/or Toledo, Ohio
-2;0;Montvila, Rev. Juozas;male;27;0;0;211536;13;;S;;;Worcester, MA
-2;0;Moraweck, Dr. Ernest;male;54;0;0;29011;14;;S;;;Frankfort, KY
-2;0;"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")";male;39;0;0;250655;26;;S;;;
-2;0;Mudd, Mr. Thomas Charles;male;16;0;0;S.O./P.P. 3;10,5;;S;;;Halesworth, England
-2;0;Myles, Mr. Thomas Francis;male;62;0;0;240276;9,6875;;Q;;;Cambridge, MA
-2;0;Nasser, Mr. Nicholas;male;32,5;1;0;237736;30,0708;;C;;43;New York, NY
-2;1;Nasser, Mrs. Nicholas (Adele Achem);female;14;1;0;237736;30,0708;;C;;;New York, NY
-2;1;Navratil, Master. Edmond Roger;male;2;1;1;230080;26;F2;S;D;;Nice, France
-2;1;Navratil, Master. Michel M;male;3;1;1;230080;26;F2;S;D;;Nice, France
-2;0;"Navratil, Mr. Michel (""Louis M Hoffman"")";male;36,5;0;2;230080;26;F2;S;;15;Nice, France
-2;0;Nesson, Mr. Israel;male;26;0;0;244368;13;F2;S;;;Boston, MA
-2;0;Nicholls, Mr. Joseph Charles;male;19;1;1;C.A. 33112;36,75;;S;;101;Cornwall / Hancock, MI
-2;0;Norman, Mr. Robert Douglas;male;28;0;0;218629;13,5;;S;;287;Glasgow
-2;1;"Nourney, Mr. Alfred (""Baron von Drachstedt"")";male;20;0;0;SC/PARIS 2166;13,8625;D38;C;7;;Cologne, Germany
-2;1;Nye, Mrs. (Elizabeth Ramell);female;29;0;0;C.A. 29395;10,5;F33;S;11;;Folkstone, Kent / New York, NY
-2;0;Otter, Mr. Richard;male;39;0;0;28213;13;;S;;;Middleburg Heights, OH
-2;1;Oxenham, Mr. Percy Thomas;male;22;0;0;W./C. 14260;10,5;;S;13;;Pondersend, England / New Durham, NJ
-2;1;Padro y Manent, Mr. Julian;male;;0;0;SC/PARIS 2146;13,8625;;C;9;;Spain / Havana, Cuba
-2;0;Pain, Dr. Alfred;male;23;0;0;244278;10,5;;S;;;Hamilton, ON
-2;1;Pallas y Castello, Mr. Emilio;male;29;0;0;SC/PARIS 2147;13,8583;;C;9;;Spain / Havana, Cuba
-2;0;Parker, Mr. Clifford Richard;male;28;0;0;SC 14888;10,5;;S;;;St Andrews, Guernsey
-2;0;"Parkes, Mr. Francis ""Frank""";male;;0;0;239853;0;;S;;;Belfast
-2;1;Parrish, Mrs. (Lutie Davis);female;50;0;1;230433;26;;S;12;;Woodford County, KY
-2;0;Pengelly, Mr. Frederick William;male;19;0;0;28665;10,5;;S;;;Gunnislake, England / Butte, MT
-2;0;Pernot, Mr. Rene;male;;0;0;SC/PARIS 2131;15,05;;C;;;
-2;0;Peruschitz, Rev. Joseph Maria;male;41;0;0;237393;13;;S;;;
-2;1;Phillips, Miss. Alice Frances Louisa;female;21;0;1;S.O./P.P. 2;21;;S;12;;Ilfracombe, Devon
-2;1;"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")";female;19;0;0;250655;26;;S;11;;Worcester, England
-2;0;Phillips, Mr. Escott Robert;male;43;0;1;S.O./P.P. 2;21;;S;;;Ilfracombe, Devon
-2;1;Pinsky, Mrs. (Rosa);female;32;0;0;234604;13;;S;9;;Russia
-2;0;Ponesell, Mr. Martin;male;34;0;0;250647;13;;S;;;Denmark / New York, NY
-2;1;Portaluppi, Mr. Emilio Ilario Giuseppe;male;30;0;0;C.A. 34644;12,7375;;C;14;;Milford, NH
-2;0;Pulbaum, Mr. Franz;male;27;0;0;SC/PARIS 2168;15,0333;;C;;;Paris
-2;1;Quick, Miss. Phyllis May;female;2;1;1;26360;26;;S;11;;Plymouth, Devon / Detroit, MI
-2;1;Quick, Miss. Winifred Vera;female;8;1;1;26360;26;;S;11;;Plymouth, Devon / Detroit, MI
-2;1;Quick, Mrs. Frederick Charles (Jane Richards);female;33;0;2;26360;26;;S;11;;Plymouth, Devon / Detroit, MI
-2;0;Reeves, Mr. David;male;36;0;0;C.A. 17248;10,5;;S;;;Brighton, Sussex
-2;0;Renouf, Mr. Peter Henry;male;34;1;0;31027;21;;S;12;;Elizabeth, NJ
-2;1;Renouf, Mrs. Peter Henry (Lillian Jefferys);female;30;3;0;31027;21;;S;;;Elizabeth, NJ
-2;1;Reynaldo, Ms. Encarnacion;female;28;0;0;230434;13;;S;9;;Spain
-2;0;Richard, Mr. Emile;male;23;0;0;SC/PARIS 2133;15,0458;;C;;;Paris / Montreal, PQ
-2;1;Richards, Master. George Sibley;male;0,8333;1;1;29106;18,75;;S;4;;Cornwall / Akron, OH
-2;1;Richards, Master. William Rowe;male;3;1;1;29106;18,75;;S;4;;Cornwall / Akron, OH
-2;1;Richards, Mrs. Sidney (Emily Hocking);female;24;2;3;29106;18,75;;S;4;;Cornwall / Akron, OH
-2;1;Ridsdale, Miss. Lucy;female;50;0;0;W./C. 14258;10,5;;S;13;;London, England / Marietta, Ohio and Milwaukee, WI
-2;0;Rogers, Mr. Reginald Harry;male;19;0;0;28004;10,5;;S;;;
-2;1;Rugg, Miss. Emily;female;21;0;0;C.A. 31026;10,5;;S;12;;Guernsey / Wilmington, DE
-2;0;Schmidt, Mr. August;male;26;0;0;248659;13;;S;;;Newark, NJ
-2;0;Sedgwick, Mr. Charles Frederick Waddington;male;25;0;0;244361;13;;S;;;Liverpool
-2;0;Sharp, Mr. Percival James R;male;27;0;0;244358;26;;S;;;Hornsey, England
-2;1;Shelley, Mrs. William (Imanita Parrish Hall);female;25;0;1;230433;26;;S;12;;Deer Lodge, MT
-2;1;Silven, Miss. Lyyli Karoliina;female;18;0;2;250652;13;;S;16;;Finland / Minneapolis, MN
-2;1;Sincock, Miss. Maude;female;20;0;0;C.A. 33112;36,75;;S;11;;Cornwall / Hancock, MI
-2;1;Sinkkonen, Miss. Anna;female;30;0;0;250648;13;;S;10;;Finland / Washington, DC
-2;0;Sjostedt, Mr. Ernst Adolf;male;59;0;0;237442;13,5;;S;;;Sault St Marie, ON
-2;1;Slayter, Miss. Hilda Mary;female;30;0;0;234818;12,35;;Q;13;;Halifax, NS
-2;0;Slemen, Mr. Richard James;male;35;0;0;28206;10,5;;S;;;Cornwall
-2;1;Smith, Miss. Marion Elsie;female;40;0;0;31418;13;;S;9;;
-2;0;Sobey, Mr. Samuel James Hayden;male;25;0;0;C.A. 29178;13;;S;;;Cornwall / Houghton, MI
-2;0;Stanton, Mr. Samuel Ward;male;41;0;0;237734;15,0458;;C;;;New York, NY
-2;0;Stokes, Mr. Philip Joseph;male;25;0;0;F.C.C. 13540;10,5;;S;;81;Catford, Kent / Detroit, MI
-2;0;Swane, Mr. George;male;18,5;0;0;248734;13;F;S;;294;
-2;0;Sweet, Mr. George Frederick;male;14;0;0;220845;65;;S;;;Somerset / Bernardsville, NJ
-2;1;Toomey, Miss. Ellen;female;50;0;0;F.C.C. 13531;10,5;;S;9;;Indianapolis, IN
-2;0;Troupiansky, Mr. Moses Aaron;male;23;0;0;233639;13;;S;;;
-2;1;Trout, Mrs. William H (Jessie L);female;28;0;0;240929;12,65;;S;;;Columbus, OH
-2;1;"Troutt, Miss. Edwina Celia ""Winnie""";female;27;0;0;34218;10,5;E101;S;16;;Bath, England / Massachusetts
-2;0;Turpin, Mr. William John Robert;male;29;1;0;11668;21;;S;;;Plymouth, England
-2;0;Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott);female;27;1;0;11668;21;;S;;;Plymouth, England
-2;0;Veal, Mr. James;male;40;0;0;28221;13;;S;;;Barre, Co Washington, VT
-2;1;Walcroft, Miss. Nellie;female;31;0;0;F.C.C. 13528;21;;S;14;;Mamaroneck, NY
-2;0;Ware, Mr. John James;male;30;1;0;CA 31352;21;;S;;;Bristol, England / New Britain, CT
-2;0;Ware, Mr. William Jeffery;male;23;1;0;28666;10,5;;S;;;
-2;1;Ware, Mrs. John James (Florence Louise Long);female;31;0;0;CA 31352;21;;S;10;;Bristol, England / New Britain, CT
-2;0;Watson, Mr. Ennis Hastings;male;;0;0;239856;0;;S;;;Belfast
-2;1;Watt, Miss. Bertha J;female;12;0;0;C.A. 33595;15,75;;S;9;;Aberdeen / Portland, OR
-2;1;"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)";female;40;0;0;C.A. 33595;15,75;;S;9;;Aberdeen / Portland, OR
-2;1;Webber, Miss. Susan;female;32,5;0;0;27267;13;E101;S;12;;England / Hartford, CT
-2;0;Weisz, Mr. Leopold;male;27;1;0;228414;26;;S;;293;Bromsgrove, England / Montreal, PQ
-2;1;Weisz, Mrs. Leopold (Mathilde Francoise Pede);female;29;1;0;228414;26;;S;10;;Bromsgrove, England / Montreal, PQ
-2;1;Wells, Master. Ralph Lester;male;2;1;1;29103;23;;S;14;;Cornwall / Akron, OH
-2;1;Wells, Miss. Joan;female;4;1;1;29103;23;;S;14;;Cornwall / Akron, OH
-2;1;"Wells, Mrs. Arthur Henry (""Addie"" Dart Trevaskis)";female;29;0;2;29103;23;;S;14;;Cornwall / Akron, OH
-2;1;West, Miss. Barbara J;female;0,9167;1;2;C.A. 34651;27,75;;S;10;;Bournmouth, England
-2;1;West, Miss. Constance Mirium;female;5;1;2;C.A. 34651;27,75;;S;10;;Bournmouth, England
-2;0;West, Mr. Edwy Arthur;male;36;1;2;C.A. 34651;27,75;;S;;;Bournmouth, England
-2;1;West, Mrs. Edwy Arthur (Ada Mary Worth);female;33;1;2;C.A. 34651;27,75;;S;10;;Bournmouth, England
-2;0;Wheadon, Mr. Edward H;male;66;0;0;C.A. 24579;10,5;;S;;;Guernsey, England / Edgewood, RI
-2;0;"Wheeler, Mr. Edwin ""Frederick""";male;;0;0;SC/PARIS 2159;12,875;;S;;;
-2;1;Wilhelms, Mr. Charles;male;31;0;0;244270;13;;S;9;;London, England
-2;1;Williams, Mr. Charles Eugene;male;;0;0;244373;13;;S;14;;Harrow, England
-2;1;Wright, Miss. Marion;female;26;0;0;220844;13,5;;S;9;;Yoevil, England / Cottage Grove, OR
-2;0;"Yrois, Miss. Henriette (""Mrs Harbeck"")";female;24;0;0;248747;13;;S;;;Paris
-3;0;Abbing, Mr. Anthony;male;42;0;0;C.A. 5547;7,55;;S;;;
-3;0;Abbott, Master. Eugene Joseph;male;13;0;2;C.A. 2673;20,25;;S;;;East Providence, RI
-3;0;Abbott, Mr. Rossmore Edward;male;16;1;1;C.A. 2673;20,25;;S;;190;East Providence, RI
-3;1;Abbott, Mrs. Stanton (Rosa Hunt);female;35;1;1;C.A. 2673;20,25;;S;A;;East Providence, RI
-3;1;Abelseth, Miss. Karen Marie;female;16;0;0;348125;7,65;;S;16;;Norway Los Angeles, CA
-3;1;Abelseth, Mr. Olaus Jorgensen;male;25;0;0;348122;7,65;F G63;S;A;;Perkins County, SD
-3;1;Abrahamsson, Mr. Abraham August Johannes;male;20;0;0;SOTON/O2 3101284;7,925;;S;15;;Taalintehdas, Finland Hoboken, NJ
-3;1;Abrahim, Mrs. Joseph (Sophie Halaut Easu);female;18;0;0;2657;7,2292;;C;C;;Greensburg, PA
-3;0;Adahl, Mr. Mauritz Nils Martin;male;30;0;0;C 7076;7,25;;S;;72;Asarum, Sweden Brooklyn, NY
-3;0;Adams, Mr. John;male;26;0;0;341826;8,05;;S;;103;Bournemouth, England
-3;0;Ahlin, Mrs. Johan (Johanna Persdotter Larsson);female;40;1;0;7546;9,475;;S;;;Sweden Akeley, MN
-3;1;Aks, Master. Philip Frank;male;0,8333;0;1;392091;9,35;;S;11;;London, England Norfolk, VA
-3;1;Aks, Mrs. Sam (Leah Rosen);female;18;0;1;392091;9,35;;S;13;;London, England Norfolk, VA
-3;1;Albimona, Mr. Nassef Cassem;male;26;0;0;2699;18,7875;;C;15;;Syria Fredericksburg, VA
-3;0;Alexander, Mr. William;male;26;0;0;3474;7,8875;;S;;;England Albion, NY
-3;0;Alhomaki, Mr. Ilmari Rudolf;male;20;0;0;SOTON/O2 3101287;7,925;;S;;;Salo, Finland Astoria, OR
-3;0;Ali, Mr. Ahmed;male;24;0;0;SOTON/O.Q. 3101311;7,05;;S;;;
-3;0;Ali, Mr. William;male;25;0;0;SOTON/O.Q. 3101312;7,05;;S;;79;Argentina
-3;0;Allen, Mr. William Henry;male;35;0;0;373450;8,05;;S;;;Lower Clapton, Middlesex or Erdington, Birmingham
-3;0;Allum, Mr. Owen George;male;18;0;0;2223;8,3;;S;;259;Windsor, England New York, NY
-3;0;Andersen, Mr. Albert Karvin;male;32;0;0;C 4001;22,525;;S;;260;Bergen, Norway
-3;1;Andersen-Jensen, Miss. Carla Christine Nielsine;female;19;1;0;350046;7,8542;;S;16;;
-3;0;Andersson, Master. Sigvard Harald Elias;male;4;4;2;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;0;Andersson, Miss. Ebba Iris Alfrida;female;6;4;2;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;0;Andersson, Miss. Ellis Anna Maria;female;2;4;2;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;1;Andersson, Miss. Erna Alexandra;female;17;4;2;3101281;7,925;;S;D;;Ruotsinphyhtaa, Finland New York, NY
-3;0;Andersson, Miss. Ida Augusta Margareta;female;38;4;2;347091;7,775;;S;;;Vadsbro, Sweden Ministee, MI
-3;0;Andersson, Miss. Ingeborg Constanzia;female;9;4;2;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;0;Andersson, Miss. Sigrid Elisabeth;female;11;4;2;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;0;Andersson, Mr. Anders Johan;male;39;1;5;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;1;"Andersson, Mr. August Edvard (""Wennerstrom"")";male;27;0;0;350043;7,7958;;S;A;;
-3;0;Andersson, Mr. Johan Samuel;male;26;0;0;347075;7,775;;S;;;Hartford, CT
-3;0;Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren);female;39;1;5;347082;31,275;;S;;;Sweden Winnipeg, MN
-3;0;Andreasson, Mr. Paul Edvin;male;20;0;0;347466;7,8542;;S;;;Sweden Chicago, IL
-3;0;Angheloff, Mr. Minko;male;26;0;0;349202;7,8958;;S;;;Bulgaria Chicago, IL
-3;0;Arnold-Franchi, Mr. Josef;male;25;1;0;349237;17,8;;S;;;Altdorf, Switzerland
-3;0;Arnold-Franchi, Mrs. Josef (Josefine Franchi);female;18;1;0;349237;17,8;;S;;;Altdorf, Switzerland
-3;0;Aronsson, Mr. Ernst Axel Algot;male;24;0;0;349911;7,775;;S;;;Sweden Joliet, IL
-3;0;Asim, Mr. Adola;male;35;0;0;SOTON/O.Q. 3101310;7,05;;S;;;
-3;0;Asplund, Master. Carl Edgar;male;5;4;2;347077;31,3875;;S;;;Sweden Worcester, MA
-3;0;Asplund, Master. Clarence Gustaf Hugo;male;9;4;2;347077;31,3875;;S;;;Sweden Worcester, MA
-3;1;Asplund, Master. Edvin Rojj Felix;male;3;4;2;347077;31,3875;;S;15;;Sweden Worcester, MA
-3;0;Asplund, Master. Filip Oscar;male;13;4;2;347077;31,3875;;S;;;Sweden Worcester, MA
-3;1;Asplund, Miss. Lillian Gertrud;female;5;4;2;347077;31,3875;;S;15;;Sweden Worcester, MA
-3;0;Asplund, Mr. Carl Oscar Vilhelm Gustafsson;male;40;1;5;347077;31,3875;;S;;142;Sweden Worcester, MA
-3;1;Asplund, Mr. Johan Charles;male;23;0;0;350054;7,7958;;S;13;;Oskarshamn, Sweden Minneapolis, MN
-3;1;Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson);female;38;1;5;347077;31,3875;;S;15;;Sweden Worcester, MA
-3;1;"Assaf Khalil, Mrs. Mariana (""Miriam"")";female;45;0;0;2696;7,225;;C;C;;Ottawa, ON
-3;0;Assaf, Mr. Gerios;male;21;0;0;2692;7,225;;C;;;Ottawa, ON
-3;0;Assam, Mr. Ali;male;23;0;0;SOTON/O.Q. 3101309;7,05;;S;;;
-3;0;Attalah, Miss. Malake;female;17;0;0;2627;14,4583;;C;;;
-3;0;Attalah, Mr. Sleiman;male;30;0;0;2694;7,225;;C;;;Ottawa, ON
-3;0;Augustsson, Mr. Albert;male;23;0;0;347468;7,8542;;S;;;Krakoryd, Sweden Bloomington, IL
-3;1;Ayoub, Miss. Banoura;female;13;0;0;2687;7,2292;;C;C;;Syria Youngstown, OH
-3;0;Baccos, Mr. Raffull;male;20;0;0;2679;7,225;;C;;;
-3;0;Backstrom, Mr. Karl Alfred;male;32;1;0;3101278;15,85;;S;D;;Ruotsinphytaa, Finland New York, NY
-3;1;Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson);female;33;3;0;3101278;15,85;;S;;;Ruotsinphytaa, Finland New York, NY
-3;1;Baclini, Miss. Eugenie;female;0,75;2;1;2666;19,2583;;C;C;;Syria New York, NY
-3;1;Baclini, Miss. Helene Barbara;female;0,75;2;1;2666;19,2583;;C;C;;Syria New York, NY
-3;1;Baclini, Miss. Marie Catherine;female;5;2;1;2666;19,2583;;C;C;;Syria New York, NY
-3;1;Baclini, Mrs. Solomon (Latifa Qurban);female;24;0;3;2666;19,2583;;C;C;;Syria New York, NY
-3;1;Badman, Miss. Emily Louisa;female;18;0;0;A/4 31416;8,05;;S;C;;London Skanteales, NY
-3;0;Badt, Mr. Mohamed;male;40;0;0;2623;7,225;;C;;;
-3;0;Balkic, Mr. Cerin;male;26;0;0;349248;7,8958;;S;;;
-3;1;Barah, Mr. Hanna Assi;male;20;0;0;2663;7,2292;;C;15;;
-3;0;Barbara, Miss. Saiide;female;18;0;1;2691;14,4542;;C;;;Syria Ottawa, ON
-3;0;Barbara, Mrs. (Catherine David);female;45;0;1;2691;14,4542;;C;;;Syria Ottawa, ON
-3;0;Barry, Miss. Julia;female;27;0;0;330844;7,8792;;Q;;;New York, NY
-3;0;Barton, Mr. David John;male;22;0;0;324669;8,05;;S;;;England New York, NY
-3;0;Beavan, Mr. William Thomas;male;19;0;0;323951;8,05;;S;;;England
-3;0;Bengtsson, Mr. John Viktor;male;26;0;0;347068;7,775;;S;;;Krakudden, Sweden Moune, IL
-3;0;Berglund, Mr. Karl Ivar Sven;male;22;0;0;PP 4348;9,35;;S;;;Tranvik, Finland New York
-3;0;Betros, Master. Seman;male;;0;0;2622;7,2292;;C;;;
-3;0;Betros, Mr. Tannous;male;20;0;0;2648;4,0125;;C;;;Syria
-3;1;Bing, Mr. Lee;male;32;0;0;1601;56,4958;;S;C;;Hong Kong New York, NY
-3;0;Birkeland, Mr. Hans Martin Monsen;male;21;0;0;312992;7,775;;S;;;Brennes, Norway New York
-3;0;Bjorklund, Mr. Ernst Herbert;male;18;0;0;347090;7,75;;S;;;Stockholm, Sweden New York
-3;0;Bostandyeff, Mr. Guentcho;male;26;0;0;349224;7,8958;;S;;;Bulgaria Chicago, IL
-3;0;Boulos, Master. Akar;male;6;1;1;2678;15,2458;;C;;;Syria Kent, ON
-3;0;Boulos, Miss. Nourelain;female;9;1;1;2678;15,2458;;C;;;Syria Kent, ON
-3;0;Boulos, Mr. Hanna;male;;0;0;2664;7,225;;C;;;Syria
-3;0;Boulos, Mrs. Joseph (Sultana);female;;0;2;2678;15,2458;;C;;;Syria Kent, ON
-3;0;Bourke, Miss. Mary;female;;0;2;364848;7,75;;Q;;;Ireland Chicago, IL
-3;0;Bourke, Mr. John;male;40;1;1;364849;15,5;;Q;;;Ireland Chicago, IL
-3;0;Bourke, Mrs. John (Catherine);female;32;1;1;364849;15,5;;Q;;;Ireland Chicago, IL
-3;0;"Bowen, Mr. David John ""Dai""";male;21;0;0;54636;16,1;;S;;;Treherbert, Cardiff, Wales
-3;1;Bradley, Miss. Bridget Delia;female;22;0;0;334914;7,725;;Q;13;;Kingwilliamstown, Co Cork, Ireland Glens Falls, NY
-3;0;Braf, Miss. Elin Ester Maria;female;20;0;0;347471;7,8542;;S;;;Medeltorp, Sweden Chicago, IL
-3;0;Braund, Mr. Lewis Richard;male;29;1;0;3460;7,0458;;S;;;Bridgerule, Devon
-3;0;Braund, Mr. Owen Harris;male;22;1;0;A/5 21171;7,25;;S;;;Bridgerule, Devon
-3;0;Brobeck, Mr. Karl Rudolf;male;22;0;0;350045;7,7958;;S;;;Sweden Worcester, MA
-3;0;Brocklebank, Mr. William Alfred;male;35;0;0;364512;8,05;;S;;;Broomfield, Chelmsford, England
-3;0;Buckley, Miss. Katherine;female;18,5;0;0;329944;7,2833;;Q;;299;Co Cork, Ireland Roxbury, MA
-3;1;Buckley, Mr. Daniel;male;21;0;0;330920;7,8208;;Q;13;;Kingwilliamstown, Co Cork, Ireland New York, NY
-3;0;Burke, Mr. Jeremiah;male;19;0;0;365222;6,75;;Q;;;Co Cork, Ireland Charlestown, MA
-3;0;Burns, Miss. Mary Delia;female;18;0;0;330963;7,8792;;Q;;;Co Sligo, Ireland New York, NY
-3;0;Cacic, Miss. Manda;female;21;0;0;315087;8,6625;;S;;;
-3;0;Cacic, Miss. Marija;female;30;0;0;315084;8,6625;;S;;;
-3;0;Cacic, Mr. Jego Grga;male;18;0;0;315091;8,6625;;S;;;
-3;0;Cacic, Mr. Luka;male;38;0;0;315089;8,6625;;S;;;Croatia
-3;0;Calic, Mr. Jovo;male;17;0;0;315093;8,6625;;S;;;
-3;0;Calic, Mr. Petar;male;17;0;0;315086;8,6625;;S;;;
-3;0;Canavan, Miss. Mary;female;21;0;0;364846;7,75;;Q;;;
-3;0;Canavan, Mr. Patrick;male;21;0;0;364858;7,75;;Q;;;Ireland Philadelphia, PA
-3;0;Cann, Mr. Ernest Charles;male;21;0;0;A./5. 2152;8,05;;S;;;
-3;0;Caram, Mr. Joseph;male;;1;0;2689;14,4583;;C;;;Ottawa, ON
-3;0;Caram, Mrs. Joseph (Maria Elias);female;;1;0;2689;14,4583;;C;;;Ottawa, ON
-3;0;Carlsson, Mr. August Sigfrid;male;28;0;0;350042;7,7958;;S;;;Dagsas, Sweden Fower, MN
-3;0;Carlsson, Mr. Carl Robert;male;24;0;0;350409;7,8542;;S;;;Goteborg, Sweden Huntley, IL
-3;1;"Carr, Miss. Helen ""Ellen""";female;16;0;0;367231;7,75;;Q;16;;Co Longford, Ireland New York, NY
-3;0;Carr, Miss. Jeannie;female;37;0;0;368364;7,75;;Q;;;Co Sligo, Ireland Hartford, CT
-3;0;Carver, Mr. Alfred John;male;28;0;0;392095;7,25;;S;;;St Denys, Southampton, Hants
-3;0;Celotti, Mr. Francesco;male;24;0;0;343275;8,05;;S;;;London
-3;0;Charters, Mr. David;male;21;0;0;A/5. 13032;7,7333;;Q;;;Ireland New York, NY
-3;1;Chip, Mr. Chang;male;32;0;0;1601;56,4958;;S;C;;Hong Kong New York, NY
-3;0;Christmann, Mr. Emil;male;29;0;0;343276;8,05;;S;;;
-3;0;Chronopoulos, Mr. Apostolos;male;26;1;0;2680;14,4542;;C;;;Greece
-3;0;Chronopoulos, Mr. Demetrios;male;18;1;0;2680;14,4542;;C;;;Greece
-3;0;Coelho, Mr. Domingos Fernandeo;male;20;0;0;SOTON/O.Q. 3101307;7,05;;S;;;Portugal
-3;1;"Cohen, Mr. Gurshon ""Gus""";male;18;0;0;A/5 3540;8,05;;S;12;;London Brooklyn, NY
-3;0;Colbert, Mr. Patrick;male;24;0;0;371109;7,25;;Q;;;Co Limerick, Ireland Sherbrooke, PQ
-3;0;Coleff, Mr. Peju;male;36;0;0;349210;7,4958;;S;;;Bulgaria Chicago, IL
-3;0;Coleff, Mr. Satio;male;24;0;0;349209;7,4958;;S;;;
-3;0;Conlon, Mr. Thomas Henry;male;31;0;0;21332;7,7333;;Q;;;Philadelphia, PA
-3;0;Connaghton, Mr. Michael;male;31;0;0;335097;7,75;;Q;;;Ireland Brooklyn, NY
-3;1;Connolly, Miss. Kate;female;22;0;0;370373;7,75;;Q;13;;Ireland
-3;0;Connolly, Miss. Kate;female;30;0;0;330972;7,6292;;Q;;;Ireland
-3;0;Connors, Mr. Patrick;male;70,5;0;0;370369;7,75;;Q;;171;
-3;0;Cook, Mr. Jacob;male;43;0;0;A/5 3536;8,05;;S;;;
-3;0;Cor, Mr. Bartol;male;35;0;0;349230;7,8958;;S;;;Austria
-3;0;Cor, Mr. Ivan;male;27;0;0;349229;7,8958;;S;;;Austria
-3;0;Cor, Mr. Liudevit;male;19;0;0;349231;7,8958;;S;;;Austria
-3;0;Corn, Mr. Harry;male;30;0;0;SOTON/OQ 392090;8,05;;S;;;London
-3;1;"Coutts, Master. Eden Leslie ""Neville""";male;9;1;1;C.A. 37671;15,9;;S;2;;England Brooklyn, NY
-3;1;"Coutts, Master. William Loch ""William""";male;3;1;1;C.A. 37671;15,9;;S;2;;England Brooklyn, NY
-3;1;"Coutts, Mrs. William (Winnie ""Minnie"" Treanor)";female;36;0;2;C.A. 37671;15,9;;S;2;;England Brooklyn, NY
-3;0;Coxon, Mr. Daniel;male;59;0;0;364500;7,25;;S;;;Merrill, WI
-3;0;Crease, Mr. Ernest James;male;19;0;0;S.P. 3464;8,1583;;S;;;Bristol, England Cleveland, OH
-3;1;Cribb, Miss. Laura Alice;female;17;0;1;371362;16,1;;S;12;;Bournemouth, England Newark, NJ
-3;0;Cribb, Mr. John Hatfield;male;44;0;1;371362;16,1;;S;;;Bournemouth, England Newark, NJ
-3;0;Culumovic, Mr. Jeso;male;17;0;0;315090;8,6625;;S;;;Austria-Hungary
-3;0;Daher, Mr. Shedid;male;22,5;0;0;2698;7,225;;C;;9;
-3;1;Dahl, Mr. Karl Edwart;male;45;0;0;7598;8,05;;S;15;;Australia Fingal, ND
-3;0;Dahlberg, Miss. Gerda Ulrika;female;22;0;0;7552;10,5167;;S;;;Norrlot, Sweden Chicago, IL
-3;0;Dakic, Mr. Branko;male;19;0;0;349228;10,1708;;S;;;Austria
-3;1;"Daly, Miss. Margaret Marcella ""Maggie""";female;30;0;0;382650;6,95;;Q;15;;Co Athlone, Ireland New York, NY
-3;1;Daly, Mr. Eugene Patrick;male;29;0;0;382651;7,75;;Q;13 15 B;;Co Athlone, Ireland New York, NY
-3;0;Danbom, Master. Gilbert Sigvard Emanuel;male;0,3333;0;2;347080;14,4;;S;;;Stanton, IA
-3;0;Danbom, Mr. Ernst Gilbert;male;34;1;1;347080;14,4;;S;;197;Stanton, IA
-3;0;Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren);female;28;1;1;347080;14,4;;S;;;Stanton, IA
-3;0;Danoff, Mr. Yoto;male;27;0;0;349219;7,8958;;S;;;Bulgaria Chicago, IL
-3;0;Dantcheff, Mr. Ristiu;male;25;0;0;349203;7,8958;;S;;;Bulgaria Chicago, IL
-3;0;Davies, Mr. Alfred J;male;24;2;0;A/4 48871;24,15;;S;;;West Bromwich, England Pontiac, MI
-3;0;Davies, Mr. Evan;male;22;0;0;SC/A4 23568;8,05;;S;;;
-3;0;Davies, Mr. John Samuel;male;21;2;0;A/4 48871;24,15;;S;;;West Bromwich, England Pontiac, MI
-3;0;Davies, Mr. Joseph;male;17;2;0;A/4 48873;8,05;;S;;;West Bromwich, England Pontiac, MI
-3;0;Davison, Mr. Thomas Henry;male;;1;0;386525;16,1;;S;;;Liverpool, England Bedford, OH
-3;1;Davison, Mrs. Thomas Henry (Mary E Finck);female;;1;0;386525;16,1;;S;16;;Liverpool, England Bedford, OH
-3;1;de Messemaeker, Mr. Guillaume Joseph;male;36,5;1;0;345572;17,4;;S;15;;Tampico, MT
-3;1;de Messemaeker, Mrs. Guillaume Joseph (Emma);female;36;1;0;345572;17,4;;S;13;;Tampico, MT
-3;1;de Mulder, Mr. Theodore;male;30;0;0;345774;9,5;;S;11;;Belgium Detroit, MI
-3;0;de Pelsmaeker, Mr. Alfons;male;16;0;0;345778;9,5;;S;;;
-3;1;Dean, Master. Bertram Vere;male;1;1;2;C.A. 2315;20,575;;S;10;;Devon, England Wichita, KS
-3;1;"Dean, Miss. Elizabeth Gladys ""Millvina""";female;0,1667;1;2;C.A. 2315;20,575;;S;10;;Devon, England Wichita, KS
-3;0;Dean, Mr. Bertram Frank;male;26;1;2;C.A. 2315;20,575;;S;;;Devon, England Wichita, KS
-3;1;Dean, Mrs. Bertram (Eva Georgetta Light);female;33;1;2;C.A. 2315;20,575;;S;10;;Devon, England Wichita, KS
-3;0;Delalic, Mr. Redjo;male;25;0;0;349250;7,8958;;S;;;
-3;0;Demetri, Mr. Marinko;male;;0;0;349238;7,8958;;S;;;
-3;0;Denkoff, Mr. Mitto;male;;0;0;349225;7,8958;;S;;;Bulgaria Coon Rapids, IA
-3;0;Dennis, Mr. Samuel;male;22;0;0;A/5 21172;7,25;;S;;;
-3;0;Dennis, Mr. William;male;36;0;0;A/5 21175;7,25;;S;;;
-3;1;Devaney, Miss. Margaret Delia;female;19;0;0;330958;7,8792;;Q;C;;Kilmacowen, Co Sligo, Ireland New York, NY
-3;0;Dika, Mr. Mirko;male;17;0;0;349232;7,8958;;S;;;
-3;0;Dimic, Mr. Jovan;male;42;0;0;315088;8,6625;;S;;;
-3;0;Dintcheff, Mr. Valtcho;male;43;0;0;349226;7,8958;;S;;;
-3;0;Doharr, Mr. Tannous;male;;0;0;2686;7,2292;;C;;;
-3;0;Dooley, Mr. Patrick;male;32;0;0;370376;7,75;;Q;;;Ireland New York, NY
-3;1;Dorking, Mr. Edward Arthur;male;19;0;0;A/5. 10482;8,05;;S;B;;England Oglesby, IL
-3;1;Dowdell, Miss. Elizabeth;female;30;0;0;364516;12,475;;S;13;;Union Hill, NJ
-3;0;Doyle, Miss. Elizabeth;female;24;0;0;368702;7,75;;Q;;;Ireland New York, NY
-3;1;Drapkin, Miss. Jennie;female;23;0;0;SOTON/OQ 392083;8,05;;S;;;London New York, NY
-3;0;Drazenoic, Mr. Jozef;male;33;0;0;349241;7,8958;;C;;51;Austria Niagara Falls, NY
-3;0;Duane, Mr. Frank;male;65;0;0;336439;7,75;;Q;;;
-3;1;Duquemin, Mr. Joseph;male;24;0;0;S.O./P.P. 752;7,55;;S;D;;England Albion, NY
-3;0;Dyker, Mr. Adolf Fredrik;male;23;1;0;347072;13,9;;S;;;West Haven, CT
-3;1;Dyker, Mrs. Adolf Fredrik (Anna Elisabeth Judith Andersson);female;22;1;0;347072;13,9;;S;16;;West Haven, CT
-3;0;Edvardsson, Mr. Gustaf Hjalmar;male;18;0;0;349912;7,775;;S;;;Tofta, Sweden Joliet, IL
-3;0;Eklund, Mr. Hans Linus;male;16;0;0;347074;7,775;;S;;;Karberg, Sweden Jerome Junction, AZ
-3;0;Ekstrom, Mr. Johan;male;45;0;0;347061;6,975;;S;;;Effington Rut, SD
-3;0;Elias, Mr. Dibo;male;;0;0;2674;7,225;;C;;;
-3;0;Elias, Mr. Joseph;male;39;0;2;2675;7,2292;;C;;;Syria Ottawa, ON
-3;0;Elias, Mr. Joseph Jr;male;17;1;1;2690;7,2292;;C;;;
-3;0;Elias, Mr. Tannous;male;15;1;1;2695;7,2292;;C;;;Syria
-3;0;Elsbury, Mr. William James;male;47;0;0;A/5 3902;7,25;;S;;;Illinois, USA
-3;1;Emanuel, Miss. Virginia Ethel;female;5;0;0;364516;12,475;;S;13;;New York, NY
-3;0;Emir, Mr. Farred Chehab;male;;0;0;2631;7,225;;C;;;
-3;0;Everett, Mr. Thomas James;male;40,5;0;0;C.A. 6212;15,1;;S;;187;
-3;0;Farrell, Mr. James;male;40,5;0;0;367232;7,75;;Q;;68;Aughnacliff, Co Longford, Ireland New York, NY
-3;1;Finoli, Mr. Luigi;male;;0;0;SOTON/O.Q. 3101308;7,05;;S;15;;Italy Philadelphia, PA
-3;0;Fischer, Mr. Eberhard Thelander;male;18;0;0;350036;7,7958;;S;;;
-3;0;Fleming, Miss. Honora;female;;0;0;364859;7,75;;Q;;;
-3;0;Flynn, Mr. James;male;;0;0;364851;7,75;;Q;;;
-3;0;Flynn, Mr. John;male;;0;0;368323;6,95;;Q;;;
-3;0;Foley, Mr. Joseph;male;26;0;0;330910;7,8792;;Q;;;Ireland Chicago, IL
-3;0;Foley, Mr. William;male;;0;0;365235;7,75;;Q;;;Ireland
-3;1;Foo, Mr. Choong;male;;0;0;1601;56,4958;;S;13;;Hong Kong New York, NY
-3;0;"Ford, Miss. Doolina Margaret ""Daisy""";female;21;2;2;W./C. 6608;34,375;;S;;;Rotherfield, Sussex, England Essex Co, MA
-3;0;"Ford, Miss. Robina Maggie ""Ruby""";female;9;2;2;W./C. 6608;34,375;;S;;;Rotherfield, Sussex, England Essex Co, MA
-3;0;Ford, Mr. Arthur;male;;0;0;A/5 1478;8,05;;S;;;Bridgwater, Somerset, England
-3;0;Ford, Mr. Edward Watson;male;18;2;2;W./C. 6608;34,375;;S;;;Rotherfield, Sussex, England Essex Co, MA
-3;0;Ford, Mr. William Neal;male;16;1;3;W./C. 6608;34,375;;S;;;Rotherfield, Sussex, England Essex Co, MA
-3;0;Ford, Mrs. Edward (Margaret Ann Watson);female;48;1;3;W./C. 6608;34,375;;S;;;Rotherfield, Sussex, England Essex Co, MA
-3;0;Fox, Mr. Patrick;male;;0;0;368573;7,75;;Q;;;Ireland New York, NY
-3;0;Franklin, Mr. Charles (Charles Fardon);male;;0;0;SOTON/O.Q. 3101314;7,25;;S;;;
-3;0;Gallagher, Mr. Martin;male;25;0;0;36864;7,7417;;Q;;;New York, NY
-3;0;Garfirth, Mr. John;male;;0;0;358585;14,5;;S;;;
-3;0;Gheorgheff, Mr. Stanio;male;;0;0;349254;7,8958;;C;;;
-3;0;Gilinski, Mr. Eliezer;male;22;0;0;14973;8,05;;S;;47;
-3;1;"Gilnagh, Miss. Katherine ""Katie""";female;16;0;0;35851;7,7333;;Q;16;;Co Longford, Ireland New York, NY
-3;1;Glynn, Miss. Mary Agatha;female;;0;0;335677;7,75;;Q;13;;Co Clare, Ireland Washington, DC
-3;1;"Goldsmith, Master. Frank John William ""Frankie""";male;9;0;2;363291;20,525;;S;C D;;Strood, Kent, England Detroit, MI
-3;0;Goldsmith, Mr. Frank John;male;33;1;1;363291;20,525;;S;;;Strood, Kent, England Detroit, MI
-3;0;Goldsmith, Mr. Nathan;male;41;0;0;SOTON/O.Q. 3101263;7,85;;S;;;Philadelphia, PA
-3;1;Goldsmith, Mrs. Frank John (Emily Alice Brown);female;31;1;1;363291;20,525;;S;C D;;Strood, Kent, England Detroit, MI
-3;0;Goncalves, Mr. Manuel Estanslas;male;38;0;0;SOTON/O.Q. 3101306;7,05;;S;;;Portugal
-3;0;Goodwin, Master. Harold Victor;male;9;5;2;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Master. Sidney Leonard;male;1;5;2;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Master. William Frederick;male;11;5;2;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Miss. Jessie Allis;female;10;5;2;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Miss. Lillian Amy;female;16;5;2;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Mr. Charles Edward;male;14;5;2;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Mr. Charles Frederick;male;40;1;6;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Goodwin, Mrs. Frederick (Augusta Tyler);female;43;1;6;CA 2144;46,9;;S;;;Wiltshire, England Niagara Falls, NY
-3;0;Green, Mr. George Henry;male;51;0;0;21440;8,05;;S;;;Dorking, Surrey, England
-3;0;Gronnestad, Mr. Daniel Danielsen;male;32;0;0;8471;8,3625;;S;;;Foresvik, Norway Portland, ND
-3;0;Guest, Mr. Robert;male;;0;0;376563;8,05;;S;;;
-3;0;Gustafsson, Mr. Alfred Ossian;male;20;0;0;7534;9,8458;;S;;;Waukegan, Chicago, IL
-3;0;Gustafsson, Mr. Anders Vilhelm;male;37;2;0;3101276;7,925;;S;;98;Ruotsinphytaa, Finland New York, NY
-3;0;Gustafsson, Mr. Johan Birger;male;28;2;0;3101277;7,925;;S;;;Ruotsinphytaa, Finland New York, NY
-3;0;Gustafsson, Mr. Karl Gideon;male;19;0;0;347069;7,775;;S;;;Myren, Sweden New York, NY
-3;0;Haas, Miss. Aloisia;female;24;0;0;349236;8,85;;S;;;
-3;0;Hagardon, Miss. Kate;female;17;0;0;AQ/3. 30631;7,7333;;Q;;;
-3;0;Hagland, Mr. Ingvald Olai Olsen;male;;1;0;65303;19,9667;;S;;;
-3;0;Hagland, Mr. Konrad Mathias Reiersen;male;;1;0;65304;19,9667;;S;;;
-3;0;Hakkarainen, Mr. Pekka Pietari;male;28;1;0;STON/O2. 3101279;15,85;;S;;;
-3;1;Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck);female;24;1;0;STON/O2. 3101279;15,85;;S;15;;
-3;0;Hampe, Mr. Leon;male;20;0;0;345769;9,5;;S;;;
-3;0;Hanna, Mr. Mansour;male;23,5;0;0;2693;7,2292;;C;;188;
-3;0;Hansen, Mr. Claus Peter;male;41;2;0;350026;14,1083;;S;;;
-3;0;Hansen, Mr. Henrik Juul;male;26;1;0;350025;7,8542;;S;;;
-3;0;Hansen, Mr. Henry Damsgaard;male;21;0;0;350029;7,8542;;S;;69;
-3;1;Hansen, Mrs. Claus Peter (Jennie L Howard);female;45;1;0;350026;14,1083;;S;11;;
-3;0;Harknett, Miss. Alice Phoebe;female;;0;0;W./C. 6609;7,55;;S;;;
-3;0;Harmer, Mr. Abraham (David Lishin);male;25;0;0;374887;7,25;;S;B;;
-3;0;Hart, Mr. Henry;male;;0;0;394140;6,8583;;Q;;;
-3;0;Hassan, Mr. Houssein G N;male;11;0;0;2699;18,7875;;C;;;
-3;1;"Healy, Miss. Hanora ""Nora""";female;;0;0;370375;7,75;;Q;16;;
-3;1;Hedman, Mr. Oskar Arvid;male;27;0;0;347089;6,975;;S;15;;
-3;1;Hee, Mr. Ling;male;;0;0;1601;56,4958;;S;C;;
-3;0;"Hegarty, Miss. Hanora ""Nora""";female;18;0;0;365226;6,75;;Q;;;
-3;1;Heikkinen, Miss. Laina;female;26;0;0;STON/O2. 3101282;7,925;;S;;;
-3;0;Heininen, Miss. Wendla Maria;female;23;0;0;STON/O2. 3101290;7,925;;S;;;
-3;1;Hellstrom, Miss. Hilda Maria;female;22;0;0;7548;8,9625;;S;C;;
-3;0;Hendekovic, Mr. Ignjac;male;28;0;0;349243;7,8958;;S;;306;
-3;0;Henriksson, Miss. Jenny Lovisa;female;28;0;0;347086;7,775;;S;;;
-3;0;Henry, Miss. Delia;female;;0;0;382649;7,75;;Q;;;
-3;1;Hirvonen, Miss. Hildur E;female;2;0;1;3101298;12,2875;;S;15;;
-3;1;Hirvonen, Mrs. Alexander (Helga E Lindqvist);female;22;1;1;3101298;12,2875;;S;15;;
-3;0;Holm, Mr. John Fredrik Alexander;male;43;0;0;C 7075;6,45;;S;;;
-3;0;Holthen, Mr. Johan Martin;male;28;0;0;C 4001;22,525;;S;;;
-3;1;Honkanen, Miss. Eliina;female;27;0;0;STON/O2. 3101283;7,925;;S;;;
-3;0;Horgan, Mr. John;male;;0;0;370377;7,75;;Q;;;
-3;1;Howard, Miss. May Elizabeth;female;;0;0;A. 2. 39186;8,05;;S;C;;
-3;0;Humblen, Mr. Adolf Mathias Nicolai Olsen;male;42;0;0;348121;7,65;F G63;S;;120;
-3;1;Hyman, Mr. Abraham;male;;0;0;3470;7,8875;;S;C;;
-3;0;Ibrahim Shawah, Mr. Yousseff;male;30;0;0;2685;7,2292;;C;;;
-3;0;Ilieff, Mr. Ylio;male;;0;0;349220;7,8958;;S;;;
-3;0;Ilmakangas, Miss. Ida Livija;female;27;1;0;STON/O2. 3101270;7,925;;S;;;
-3;0;Ilmakangas, Miss. Pieta Sofia;female;25;1;0;STON/O2. 3101271;7,925;;S;;;
-3;0;Ivanoff, Mr. Kanio;male;;0;0;349201;7,8958;;S;;;
-3;1;Jalsevac, Mr. Ivan;male;29;0;0;349240;7,8958;;C;15;;
-3;1;Jansson, Mr. Carl Olof;male;21;0;0;350034;7,7958;;S;A;;
-3;0;Jardin, Mr. Jose Neto;male;;0;0;SOTON/O.Q. 3101305;7,05;;S;;;
-3;0;Jensen, Mr. Hans Peder;male;20;0;0;350050;7,8542;;S;;;
-3;0;Jensen, Mr. Niels Peder;male;48;0;0;350047;7,8542;;S;;;
-3;0;Jensen, Mr. Svend Lauritz;male;17;1;0;350048;7,0542;;S;;;
-3;1;Jermyn, Miss. Annie;female;;0;0;14313;7,75;;Q;D;;
-3;1;Johannesen-Bratthammer, Mr. Bernt;male;;0;0;65306;8,1125;;S;13;;
-3;0;Johanson, Mr. Jakob Alfred;male;34;0;0;3101264;6,4958;;S;;143;
-3;1;Johansson Palmquist, Mr. Oskar Leander;male;26;0;0;347070;7,775;;S;15;;
-3;0;Johansson, Mr. Erik;male;22;0;0;350052;7,7958;;S;;156;
-3;0;Johansson, Mr. Gustaf Joel;male;33;0;0;7540;8,6542;;S;;285;
-3;0;Johansson, Mr. Karl Johan;male;31;0;0;347063;7,775;;S;;;
-3;0;Johansson, Mr. Nils;male;29;0;0;347467;7,8542;;S;;;
-3;1;Johnson, Master. Harold Theodor;male;4;1;1;347742;11,1333;;S;15;;
-3;1;Johnson, Miss. Eleanor Ileen;female;1;1;1;347742;11,1333;;S;15;;
-3;0;Johnson, Mr. Alfred;male;49;0;0;LINE;0;;S;;;
-3;0;Johnson, Mr. Malkolm Joackim;male;33;0;0;347062;7,775;;S;;37;
-3;0;Johnson, Mr. William Cahoone Jr;male;19;0;0;LINE;0;;S;;;
-3;1;Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg);female;27;0;2;347742;11,1333;;S;15;;
-3;0;"Johnston, Master. William Arthur ""Willie""";male;;1;2;W./C. 6607;23,45;;S;;;
-3;0;"Johnston, Miss. Catherine Helen ""Carrie""";female;;1;2;W./C. 6607;23,45;;S;;;
-3;0;Johnston, Mr. Andrew G;male;;1;2;W./C. 6607;23,45;;S;;;
-3;0;"Johnston, Mrs. Andrew G (Elizabeth ""Lily"" Watson)";female;;1;2;W./C. 6607;23,45;;S;;;
-3;0;Jonkoff, Mr. Lalio;male;23;0;0;349204;7,8958;;S;;;
-3;1;Jonsson, Mr. Carl;male;32;0;0;350417;7,8542;;S;15;;
-3;0;Jonsson, Mr. Nils Hilding;male;27;0;0;350408;7,8542;;S;;;
-3;0;Jussila, Miss. Katriina;female;20;1;0;4136;9,825;;S;;;
-3;0;Jussila, Miss. Mari Aina;female;21;1;0;4137;9,825;;S;;;
-3;1;Jussila, Mr. Eiriik;male;32;0;0;STON/O 2. 3101286;7,925;;S;15;;
-3;0;Kallio, Mr. Nikolai Erland;male;17;0;0;STON/O 2. 3101274;7,125;;S;;;
-3;0;Kalvik, Mr. Johannes Halvorsen;male;21;0;0;8475;8,4333;;S;;;
-3;0;Karaic, Mr. Milan;male;30;0;0;349246;7,8958;;S;;;
-3;1;Karlsson, Mr. Einar Gervasius;male;21;0;0;350053;7,7958;;S;13;;
-3;0;Karlsson, Mr. Julius Konrad Eugen;male;33;0;0;347465;7,8542;;S;;;
-3;0;Karlsson, Mr. Nils August;male;22;0;0;350060;7,5208;;S;;;
-3;1;Karun, Miss. Manca;female;4;0;1;349256;13,4167;;C;15;;
-3;1;Karun, Mr. Franz;male;39;0;1;349256;13,4167;;C;15;;
-3;0;Kassem, Mr. Fared;male;;0;0;2700;7,2292;;C;;;
-3;0;"Katavelas, Mr. Vassilios (""Catavelas Vassilios"")";male;18,5;0;0;2682;7,2292;;C;;58;
-3;0;"Keane, Mr. Andrew ""Andy""";male;;0;0;12460;7,75;;Q;;;
-3;0;Keefe, Mr. Arthur;male;;0;0;323592;7,25;;S;A;;
-3;1;"Kelly, Miss. Anna Katherine ""Annie Kate""";female;;0;0;9234;7,75;;Q;16;;
-3;1;Kelly, Miss. Mary;female;;0;0;14312;7,75;;Q;D;;
-3;0;Kelly, Mr. James;male;34,5;0;0;330911;7,8292;;Q;;70;
-3;0;Kelly, Mr. James;male;44;0;0;363592;8,05;;S;;;
-3;1;Kennedy, Mr. John;male;;0;0;368783;7,75;;Q;;;
-3;0;Khalil, Mr. Betros;male;;1;0;2660;14,4542;;C;;;
-3;0;"Khalil, Mrs. Betros (Zahie ""Maria"" Elias)";female;;1;0;2660;14,4542;;C;;;
-3;0;Kiernan, Mr. John;male;;1;0;367227;7,75;;Q;;;
-3;0;Kiernan, Mr. Philip;male;;1;0;367229;7,75;;Q;;;
-3;0;Kilgannon, Mr. Thomas J;male;;0;0;36865;7,7375;;Q;;;
-3;0;Kink, Miss. Maria;female;22;2;0;315152;8,6625;;S;;;
-3;0;Kink, Mr. Vincenz;male;26;2;0;315151;8,6625;;S;;;
-3;1;Kink-Heilmann, Miss. Luise Gretchen;female;4;0;2;315153;22,025;;S;2;;
-3;1;Kink-Heilmann, Mr. Anton;male;29;3;1;315153;22,025;;S;2;;
-3;1;Kink-Heilmann, Mrs. Anton (Luise Heilmann);female;26;1;1;315153;22,025;;S;2;;
-3;0;Klasen, Miss. Gertrud Emilia;female;1;1;1;350405;12,1833;;S;;;
-3;0;Klasen, Mr. Klas Albin;male;18;1;1;350404;7,8542;;S;;;
-3;0;Klasen, Mrs. (Hulda Kristina Eugenia Lofqvist);female;36;0;2;350405;12,1833;;S;;;
-3;0;Kraeff, Mr. Theodor;male;;0;0;349253;7,8958;;C;;;
-3;1;Krekorian, Mr. Neshan;male;25;0;0;2654;7,2292;F E57;C;10;;
-3;0;Lahoud, Mr. Sarkis;male;;0;0;2624;7,225;;C;;;
-3;0;Laitinen, Miss. Kristina Sofia;female;37;0;0;4135;9,5875;;S;;;
-3;0;Laleff, Mr. Kristo;male;;0;0;349217;7,8958;;S;;;
-3;1;Lam, Mr. Ali;male;;0;0;1601;56,4958;;S;C;;
-3;0;Lam, Mr. Len;male;;0;0;1601;56,4958;;S;;;
-3;1;Landergren, Miss. Aurora Adelia;female;22;0;0;C 7077;7,25;;S;13;;
-3;0;Lane, Mr. Patrick;male;;0;0;7935;7,75;;Q;;;
-3;1;Lang, Mr. Fang;male;26;0;0;1601;56,4958;;S;14;;
-3;0;Larsson, Mr. August Viktor;male;29;0;0;7545;9,4833;;S;;;
-3;0;Larsson, Mr. Bengt Edvin;male;29;0;0;347067;7,775;;S;;;
-3;0;Larsson-Rondberg, Mr. Edvard A;male;22;0;0;347065;7,775;;S;;;
-3;1;"Leeni, Mr. Fahim (""Philip Zenni"")";male;22;0;0;2620;7,225;;C;6;;
-3;0;Lefebre, Master. Henry Forbes;male;;3;1;4133;25,4667;;S;;;
-3;0;Lefebre, Miss. Ida;female;;3;1;4133;25,4667;;S;;;
-3;0;Lefebre, Miss. Jeannie;female;;3;1;4133;25,4667;;S;;;
-3;0;Lefebre, Miss. Mathilde;female;;3;1;4133;25,4667;;S;;;
-3;0;Lefebre, Mrs. Frank (Frances);female;;0;4;4133;25,4667;;S;;;
-3;0;Leinonen, Mr. Antti Gustaf;male;32;0;0;STON/O 2. 3101292;7,925;;S;;;
-3;0;Lemberopolous, Mr. Peter L;male;34,5;0;0;2683;6,4375;;C;;196;
-3;0;Lennon, Miss. Mary;female;;1;0;370371;15,5;;Q;;;
-3;0;Lennon, Mr. Denis;male;;1;0;370371;15,5;;Q;;;
-3;0;Leonard, Mr. Lionel;male;36;0;0;LINE;0;;S;;;
-3;0;Lester, Mr. James;male;39;0;0;A/4 48871;24,15;;S;;;
-3;0;Lievens, Mr. Rene Aime;male;24;0;0;345781;9,5;;S;;;
-3;0;Lindahl, Miss. Agda Thorilda Viktoria;female;25;0;0;347071;7,775;;S;;;
-3;0;Lindblom, Miss. Augusta Charlotta;female;45;0;0;347073;7,75;;S;;;
-3;0;Lindell, Mr. Edvard Bengtsson;male;36;1;0;349910;15,55;;S;A;;
-3;0;Lindell, Mrs. Edvard Bengtsson (Elin Gerda Persson);female;30;1;0;349910;15,55;;S;A;;
-3;1;Lindqvist, Mr. Eino William;male;20;1;0;STON/O 2. 3101285;7,925;;S;15;;
-3;0;Linehan, Mr. Michael;male;;0;0;330971;7,8792;;Q;;;
-3;0;Ling, Mr. Lee;male;28;0;0;1601;56,4958;;S;;;
-3;0;Lithman, Mr. Simon;male;;0;0;S.O./P.P. 251;7,55;;S;;;
-3;0;Lobb, Mr. William Arthur;male;30;1;0;A/5. 3336;16,1;;S;;;
-3;0;Lobb, Mrs. William Arthur (Cordelia K Stanlick);female;26;1;0;A/5. 3336;16,1;;S;;;
-3;0;Lockyer, Mr. Edward;male;;0;0;1222;7,8792;;S;;153;
-3;0;"Lovell, Mr. John Hall (""Henry"")";male;20,5;0;0;A/5 21173;7,25;;S;;;
-3;1;Lulic, Mr. Nikola;male;27;0;0;315098;8,6625;;S;15;;
-3;0;Lundahl, Mr. Johan Svensson;male;51;0;0;347743;7,0542;;S;;;
-3;1;Lundin, Miss. Olga Elida;female;23;0;0;347469;7,8542;;S;10;;
-3;1;Lundstrom, Mr. Thure Edvin;male;32;0;0;350403;7,5792;;S;15;;
-3;0;Lyntakoff, Mr. Stanko;male;;0;0;349235;7,8958;;S;;;
-3;0;MacKay, Mr. George William;male;;0;0;C.A. 42795;7,55;;S;;;
-3;1;"Madigan, Miss. Margaret ""Maggie""";female;;0;0;370370;7,75;;Q;15;;
-3;1;Madsen, Mr. Fridtjof Arne;male;24;0;0;C 17369;7,1417;;S;13;;
-3;0;Maenpaa, Mr. Matti Alexanteri;male;22;0;0;STON/O 2. 3101275;7,125;;S;;;
-3;0;Mahon, Miss. Bridget Delia;female;;0;0;330924;7,8792;;Q;;;
-3;0;Mahon, Mr. John;male;;0;0;AQ/4 3130;7,75;;Q;;;
-3;0;Maisner, Mr. Simon;male;;0;0;A/S 2816;8,05;;S;;;
-3;0;Makinen, Mr. Kalle Edvard;male;29;0;0;STON/O 2. 3101268;7,925;;S;;;
-3;1;Mamee, Mr. Hanna;male;;0;0;2677;7,2292;;C;15;;
-3;0;Mangan, Miss. Mary;female;30,5;0;0;364850;7,75;;Q;;61;
-3;1;Mannion, Miss. Margareth;female;;0;0;36866;7,7375;;Q;16;;
-3;0;Mardirosian, Mr. Sarkis;male;;0;0;2655;7,2292;F E46;C;;;
-3;0;Markoff, Mr. Marin;male;35;0;0;349213;7,8958;;C;;;
-3;0;Markun, Mr. Johann;male;33;0;0;349257;7,8958;;S;;;
-3;1;Masselmani, Mrs. Fatima;female;;0;0;2649;7,225;;C;C;;
-3;0;Matinoff, Mr. Nicola;male;;0;0;349255;7,8958;;C;;;
-3;1;"McCarthy, Miss. Catherine ""Katie""";female;;0;0;383123;7,75;;Q;15 16;;
-3;1;McCormack, Mr. Thomas Joseph;male;;0;0;367228;7,75;;Q;;;
-3;1;McCoy, Miss. Agnes;female;;2;0;367226;23,25;;Q;16;;
-3;1;McCoy, Miss. Alicia;female;;2;0;367226;23,25;;Q;16;;
-3;1;McCoy, Mr. Bernard;male;;2;0;367226;23,25;;Q;16;;
-3;1;McDermott, Miss. Brigdet Delia;female;;0;0;330932;7,7875;;Q;13;;
-3;0;McEvoy, Mr. Michael;male;;0;0;36568;15,5;;Q;;;
-3;1;McGovern, Miss. Mary;female;;0;0;330931;7,8792;;Q;13;;
-3;1;"McGowan, Miss. Anna ""Annie""";female;15;0;0;330923;8,0292;;Q;;;
-3;0;McGowan, Miss. Katherine;female;35;0;0;9232;7,75;;Q;;;
-3;0;McMahon, Mr. Martin;male;;0;0;370372;7,75;;Q;;;
-3;0;McNamee, Mr. Neal;male;24;1;0;376566;16,1;;S;;;
-3;0;McNamee, Mrs. Neal (Eileen O'Leary);female;19;1;0;376566;16,1;;S;;53;
-3;0;McNeill, Miss. Bridget;female;;0;0;370368;7,75;;Q;;;
-3;0;Meanwell, Miss. (Marion Ogden);female;;0;0;SOTON/O.Q. 392087;8,05;;S;;;
-3;0;Meek, Mrs. Thomas (Annie Louise Rowley);female;;0;0;343095;8,05;;S;;;
-3;0;Meo, Mr. Alfonzo;male;55,5;0;0;A.5. 11206;8,05;;S;;201;
-3;0;Mernagh, Mr. Robert;male;;0;0;368703;7,75;;Q;;;
-3;1;Midtsjo, Mr. Karl Albert;male;21;0;0;345501;7,775;;S;15;;
-3;0;Miles, Mr. Frank;male;;0;0;359306;8,05;;S;;;
-3;0;Mineff, Mr. Ivan;male;24;0;0;349233;7,8958;;S;;;
-3;0;Minkoff, Mr. Lazar;male;21;0;0;349211;7,8958;;S;;;
-3;0;Mionoff, Mr. Stoytcho;male;28;0;0;349207;7,8958;;S;;;
-3;0;Mitkoff, Mr. Mito;male;;0;0;349221;7,8958;;S;;;
-3;1;"Mockler, Miss. Helen Mary ""Ellie""";female;;0;0;330980;7,8792;;Q;16;;
-3;0;Moen, Mr. Sigurd Hansen;male;25;0;0;348123;7,65;F G73;S;;309;
-3;1;Moor, Master. Meier;male;6;0;1;392096;12,475;E121;S;14;;
-3;1;Moor, Mrs. (Beila);female;27;0;1;392096;12,475;E121;S;14;;
-3;0;Moore, Mr. Leonard Charles;male;;0;0;A4. 54510;8,05;;S;;;
-3;1;Moran, Miss. Bertha;female;;1;0;371110;24,15;;Q;16;;
-3;0;Moran, Mr. Daniel J;male;;1;0;371110;24,15;;Q;;;
-3;0;Moran, Mr. James;male;;0;0;330877;8,4583;;Q;;;
-3;0;Morley, Mr. William;male;34;0;0;364506;8,05;;S;;;
-3;0;Morrow, Mr. Thomas Rowan;male;;0;0;372622;7,75;;Q;;;
-3;1;Moss, Mr. Albert Johan;male;;0;0;312991;7,775;;S;B;;
-3;1;Moubarek, Master. Gerios;male;;1;1;2661;15,2458;;C;C;;
-3;1;"Moubarek, Master. Halim Gonios (""William George"")";male;;1;1;2661;15,2458;;C;C;;
-3;1;"Moubarek, Mrs. George (Omine ""Amenia"" Alexander)";female;;0;2;2661;15,2458;;C;C;;
-3;1;Moussa, Mrs. (Mantoura Boulos);female;;0;0;2626;7,2292;;C;;;
-3;0;Moutal, Mr. Rahamin Haim;male;;0;0;374746;8,05;;S;;;
-3;1;"Mullens, Miss. Katherine ""Katie""";female;;0;0;35852;7,7333;;Q;16;;
-3;1;Mulvihill, Miss. Bertha E;female;24;0;0;382653;7,75;;Q;15;;
-3;0;Murdlin, Mr. Joseph;male;;0;0;A./5. 3235;8,05;;S;;;
-3;1;"Murphy, Miss. Katherine ""Kate""";female;;1;0;367230;15,5;;Q;16;;
-3;1;Murphy, Miss. Margaret Jane;female;;1;0;367230;15,5;;Q;16;;
-3;1;Murphy, Miss. Nora;female;;0;0;36568;15,5;;Q;16;;
-3;0;Myhrman, Mr. Pehr Fabian Oliver Malkolm;male;18;0;0;347078;7,75;;S;;;
-3;0;Naidenoff, Mr. Penko;male;22;0;0;349206;7,8958;;S;;;
-3;1;"Najib, Miss. Adele Kiamie ""Jane""";female;15;0;0;2667;7,225;;C;C;;
-3;1;"Nakid, Miss. Maria (""Mary"")";female;1;0;2;2653;15,7417;;C;C;;
-3;1;Nakid, Mr. Sahid;male;20;1;1;2653;15,7417;;C;C;;
-3;1;"Nakid, Mrs. Said (Waika ""Mary"" Mowad)";female;19;1;1;2653;15,7417;;C;C;;
-3;0;Nancarrow, Mr. William Henry;male;33;0;0;A./5. 3338;8,05;;S;;;
-3;0;Nankoff, Mr. Minko;male;;0;0;349218;7,8958;;S;;;
-3;0;Nasr, Mr. Mustafa;male;;0;0;2652;7,2292;;C;;;
-3;0;Naughton, Miss. Hannah;female;;0;0;365237;7,75;;Q;;;
-3;0;Nenkoff, Mr. Christo;male;;0;0;349234;7,8958;;S;;;
-3;1;Nicola-Yarred, Master. Elias;male;12;1;0;2651;11,2417;;C;C;;
-3;1;Nicola-Yarred, Miss. Jamila;female;14;1;0;2651;11,2417;;C;C;;
-3;0;Nieminen, Miss. Manta Josefina;female;29;0;0;3101297;7,925;;S;;;
-3;0;Niklasson, Mr. Samuel;male;28;0;0;363611;8,05;;S;;;
-3;1;Nilsson, Miss. Berta Olivia;female;18;0;0;347066;7,775;;S;D;;
-3;1;Nilsson, Miss. Helmina Josefina;female;26;0;0;347470;7,8542;;S;13;;
-3;0;Nilsson, Mr. August Ferdinand;male;21;0;0;350410;7,8542;;S;;;
-3;0;Nirva, Mr. Iisakki Antino Aijo;male;41;0;0;SOTON/O2 3101272;7,125;;S;;;Finland Sudbury, ON
-3;1;Niskanen, Mr. Juha;male;39;0;0;STON/O 2. 3101289;7,925;;S;9;;
-3;0;Nosworthy, Mr. Richard Cater;male;21;0;0;A/4. 39886;7,8;;S;;;
-3;0;Novel, Mr. Mansouer;male;28,5;0;0;2697;7,2292;;C;;181;
-3;1;Nysten, Miss. Anna Sofia;female;22;0;0;347081;7,75;;S;13;;
-3;0;Nysveen, Mr. Johan Hansen;male;61;0;0;345364;6,2375;;S;;;
-3;0;O'Brien, Mr. Thomas;male;;1;0;370365;15,5;;Q;;;
-3;0;O'Brien, Mr. Timothy;male;;0;0;330979;7,8292;;Q;;;
-3;1;"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)";female;;1;0;370365;15,5;;Q;;;
-3;0;O'Connell, Mr. Patrick D;male;;0;0;334912;7,7333;;Q;;;
-3;0;O'Connor, Mr. Maurice;male;;0;0;371060;7,75;;Q;;;
-3;0;O'Connor, Mr. Patrick;male;;0;0;366713;7,75;;Q;;;
-3;0;Odahl, Mr. Nils Martin;male;23;0;0;7267;9,225;;S;;;
-3;0;O'Donoghue, Ms. Bridget;female;;0;0;364856;7,75;;Q;;;
-3;1;O'Driscoll, Miss. Bridget;female;;0;0;14311;7,75;;Q;D;;
-3;1;"O'Dwyer, Miss. Ellen ""Nellie""";female;;0;0;330959;7,8792;;Q;;;
-3;1;Ohman, Miss. Velin;female;22;0;0;347085;7,775;;S;C;;
-3;1;O'Keefe, Mr. Patrick;male;;0;0;368402;7,75;;Q;B;;
-3;1;"O'Leary, Miss. Hanora ""Norah""";female;;0;0;330919;7,8292;;Q;13;;
-3;1;Olsen, Master. Artur Karl;male;9;0;1;C 17368;3,1708;;S;13;;
-3;0;Olsen, Mr. Henry Margido;male;28;0;0;C 4001;22,525;;S;;173;
-3;0;Olsen, Mr. Karl Siegwart Andreas;male;42;0;1;4579;8,4042;;S;;;
-3;0;Olsen, Mr. Ole Martin;male;;0;0;Fa 265302;7,3125;;S;;;
-3;0;Olsson, Miss. Elina;female;31;0;0;350407;7,8542;;S;;;
-3;0;Olsson, Mr. Nils Johan Goransson;male;28;0;0;347464;7,8542;;S;;;
-3;1;Olsson, Mr. Oscar Wilhelm;male;32;0;0;347079;7,775;;S;A;;
-3;0;Olsvigen, Mr. Thor Anderson;male;20;0;0;6563;9,225;;S;;89;Oslo, Norway Cameron, WI
-3;0;Oreskovic, Miss. Jelka;female;23;0;0;315085;8,6625;;S;;;
-3;0;Oreskovic, Miss. Marija;female;20;0;0;315096;8,6625;;S;;;
-3;0;Oreskovic, Mr. Luka;male;20;0;0;315094;8,6625;;S;;;
-3;0;Osen, Mr. Olaf Elon;male;16;0;0;7534;9,2167;;S;;;
-3;1;Osman, Mrs. Mara;female;31;0;0;349244;8,6833;;S;;;
-3;0;O'Sullivan, Miss. Bridget Mary;female;;0;0;330909;7,6292;;Q;;;
-3;0;Palsson, Master. Gosta Leonard;male;2;3;1;349909;21,075;;S;;4;
-3;0;Palsson, Master. Paul Folke;male;6;3;1;349909;21,075;;S;;;
-3;0;Palsson, Miss. Stina Viola;female;3;3;1;349909;21,075;;S;;;
-3;0;Palsson, Miss. Torborg Danira;female;8;3;1;349909;21,075;;S;;;
-3;0;Palsson, Mrs. Nils (Alma Cornelia Berglund);female;29;0;4;349909;21,075;;S;;206;
-3;0;Panula, Master. Eino Viljami;male;1;4;1;3101295;39,6875;;S;;;
-3;0;Panula, Master. Juha Niilo;male;7;4;1;3101295;39,6875;;S;;;
-3;0;Panula, Master. Urho Abraham;male;2;4;1;3101295;39,6875;;S;;;
-3;0;Panula, Mr. Ernesti Arvid;male;16;4;1;3101295;39,6875;;S;;;
-3;0;Panula, Mr. Jaako Arnold;male;14;4;1;3101295;39,6875;;S;;;
-3;0;Panula, Mrs. Juha (Maria Emilia Ojala);female;41;0;5;3101295;39,6875;;S;;;
-3;0;Pasic, Mr. Jakob;male;21;0;0;315097;8,6625;;S;;;
-3;0;Patchett, Mr. George;male;19;0;0;358585;14,5;;S;;;
-3;0;Paulner, Mr. Uscher;male;;0;0;3411;8,7125;;C;;;
-3;0;Pavlovic, Mr. Stefo;male;32;0;0;349242;7,8958;;S;;;
-3;0;Peacock, Master. Alfred Edward;male;0,75;1;1;SOTON/O.Q. 3101315;13,775;;S;;;
-3;0;Peacock, Miss. Treasteall;female;3;1;1;SOTON/O.Q. 3101315;13,775;;S;;;
-3;0;Peacock, Mrs. Benjamin (Edith Nile);female;26;0;2;SOTON/O.Q. 3101315;13,775;;S;;;
-3;0;Pearce, Mr. Ernest;male;;0;0;343271;7;;S;;;
-3;0;Pedersen, Mr. Olaf;male;;0;0;345498;7,775;;S;;;
-3;0;Peduzzi, Mr. Joseph;male;;0;0;A/5 2817;8,05;;S;;;
-3;0;Pekoniemi, Mr. Edvard;male;21;0;0;STON/O 2. 3101294;7,925;;S;;;
-3;0;Peltomaki, Mr. Nikolai Johannes;male;25;0;0;STON/O 2. 3101291;7,925;;S;;;
-3;0;Perkin, Mr. John Henry;male;22;0;0;A/5 21174;7,25;;S;;;
-3;1;Persson, Mr. Ernst Ulrik;male;25;1;0;347083;7,775;;S;15;;
-3;1;Peter, Master. Michael J;male;;1;1;2668;22,3583;;C;C;;
-3;1;Peter, Miss. Anna;female;;1;1;2668;22,3583;F E69;C;D;;
-3;1;Peter, Mrs. Catherine (Catherine Rizk);female;;0;2;2668;22,3583;;C;D;;
-3;0;Peters, Miss. Katie;female;;0;0;330935;8,1375;;Q;;;
-3;0;Petersen, Mr. Marius;male;24;0;0;342441;8,05;;S;;;
-3;0;Petranec, Miss. Matilda;female;28;0;0;349245;7,8958;;S;;;
-3;0;Petroff, Mr. Nedelio;male;19;0;0;349212;7,8958;;S;;;
-3;0;"Petroff, Mr. Pastcho (""Pentcho"")";male;;0;0;349215;7,8958;;S;;;
-3;0;Petterson, Mr. Johan Emil;male;25;1;0;347076;7,775;;S;;;
-3;0;Pettersson, Miss. Ellen Natalia;female;18;0;0;347087;7,775;;S;;;
-3;1;Pickard, Mr. Berk (Berk Trembisky);male;32;0;0;SOTON/O.Q. 392078;8,05;E10;S;9;;
-3;0;Plotcharsky, Mr. Vasil;male;;0;0;349227;7,8958;;S;;;
-3;0;Pokrnic, Mr. Mate;male;17;0;0;315095;8,6625;;S;;;
-3;0;Pokrnic, Mr. Tome;male;24;0;0;315092;8,6625;;S;;;
-3;0;Radeff, Mr. Alexander;male;;0;0;349223;7,8958;;S;;;
-3;0;Rasmussen, Mrs. (Lena Jacobsen Solvang);female;;0;0;65305;8,1125;;S;;;
-3;0;Razi, Mr. Raihed;male;;0;0;2629;7,2292;;C;;;
-3;0;Reed, Mr. James George;male;;0;0;362316;7,25;;S;;;
-3;0;Rekic, Mr. Tido;male;38;0;0;349249;7,8958;;S;;;
-3;0;Reynolds, Mr. Harold J;male;21;0;0;342684;8,05;;S;;;
-3;0;Rice, Master. Albert;male;10;4;1;382652;29,125;;Q;;;
-3;0;Rice, Master. Arthur;male;4;4;1;382652;29,125;;Q;;;
-3;0;Rice, Master. Eric;male;7;4;1;382652;29,125;;Q;;;
-3;0;Rice, Master. Eugene;male;2;4;1;382652;29,125;;Q;;;
-3;0;Rice, Master. George Hugh;male;8;4;1;382652;29,125;;Q;;;
-3;0;Rice, Mrs. William (Margaret Norton);female;39;0;5;382652;29,125;;Q;;327;
-3;0;"Riihivouri, Miss. Susanna Juhantytar ""Sanni""";female;22;0;0;3101295;39,6875;;S;;;
-3;0;Rintamaki, Mr. Matti;male;35;0;0;STON/O 2. 3101273;7,125;;S;;;
-3;1;"Riordan, Miss. Johanna ""Hannah""";female;;0;0;334915;7,7208;;Q;13;;
-3;0;Risien, Mr. Samuel Beard;male;;0;0;364498;14,5;;S;;;
-3;0;Risien, Mrs. Samuel (Emma);female;;0;0;364498;14,5;;S;;;
-3;0;Robins, Mr. Alexander A;male;50;1;0;A/5. 3337;14,5;;S;;119;
-3;0;Robins, Mrs. Alexander A (Grace Charity Laury);female;47;1;0;A/5. 3337;14,5;;S;;7;
-3;0;Rogers, Mr. William John;male;;0;0;S.C./A.4. 23567;8,05;;S;;;
-3;0;Rommetvedt, Mr. Knud Paust;male;;0;0;312993;7,775;;S;;;
-3;0;Rosblom, Miss. Salli Helena;female;2;1;1;370129;20,2125;;S;;;
-3;0;Rosblom, Mr. Viktor Richard;male;18;1;1;370129;20,2125;;S;;;
-3;0;Rosblom, Mrs. Viktor (Helena Wilhelmina);female;41;0;2;370129;20,2125;;S;;;
-3;1;Roth, Miss. Sarah A;female;;0;0;342712;8,05;;S;C;;
-3;0;Rouse, Mr. Richard Henry;male;50;0;0;A/5 3594;8,05;;S;;;
-3;0;Rush, Mr. Alfred George John;male;16;0;0;A/4. 20589;8,05;;S;;;
-3;1;Ryan, Mr. Edward;male;;0;0;383162;7,75;;Q;14;;
-3;0;Ryan, Mr. Patrick;male;;0;0;371110;24,15;;Q;;;
-3;0;Saad, Mr. Amin;male;;0;0;2671;7,2292;;C;;;
-3;0;Saad, Mr. Khalil;male;25;0;0;2672;7,225;;C;;;
-3;0;Saade, Mr. Jean Nassr;male;;0;0;2676;7,225;;C;;;
-3;0;Sadlier, Mr. Matthew;male;;0;0;367655;7,7292;;Q;;;
-3;0;Sadowitz, Mr. Harry;male;;0;0;LP 1588;7,575;;S;;;
-3;0;Saether, Mr. Simon Sivertsen;male;38,5;0;0;SOTON/O.Q. 3101262;7,25;;S;;32;
-3;0;Sage, Master. Thomas Henry;male;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Master. William Henry;male;14,5;8;2;CA. 2343;69,55;;S;;67;
-3;0;Sage, Miss. Ada;female;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Miss. Constance Gladys;female;;8;2;CA. 2343;69,55;;S;;;
-3;0;"Sage, Miss. Dorothy Edith ""Dolly""";female;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Miss. Stella Anna;female;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Mr. Douglas Bullen;male;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Mr. Frederick;male;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Mr. George John Jr;male;;8;2;CA. 2343;69,55;;S;;;
-3;0;Sage, Mr. John George;male;;1;9;CA. 2343;69,55;;S;;;
-3;0;Sage, Mrs. John (Annie Bullen);female;;1;9;CA. 2343;69,55;;S;;;
-3;0;Salander, Mr. Karl Johan;male;24;0;0;7266;9,325;;S;;;
-3;1;Salkjelsvik, Miss. Anna Kristine;female;21;0;0;343120;7,65;;S;C;;
-3;0;Salonen, Mr. Johan Werner;male;39;0;0;3101296;7,925;;S;;;
-3;0;Samaan, Mr. Elias;male;;2;0;2662;21,6792;;C;;;
-3;0;Samaan, Mr. Hanna;male;;2;0;2662;21,6792;;C;;;
-3;0;Samaan, Mr. Youssef;male;;2;0;2662;21,6792;;C;;;
-3;1;Sandstrom, Miss. Beatrice Irene;female;1;1;1;PP 9549;16,7;G6;S;13;;
-3;1;Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson);female;24;0;2;PP 9549;16,7;G6;S;13;;
-3;1;Sandstrom, Miss. Marguerite Rut;female;4;1;1;PP 9549;16,7;G6;S;13;;
-3;1;Sap, Mr. Julius;male;25;0;0;345768;9,5;;S;11;;
-3;0;Saundercock, Mr. William Henry;male;20;0;0;A/5. 2151;8,05;;S;;;
-3;0;Sawyer, Mr. Frederick Charles;male;24,5;0;0;342826;8,05;;S;;284;
-3;0;Scanlan, Mr. James;male;;0;0;36209;7,725;;Q;;;
-3;0;Sdycoff, Mr. Todor;male;;0;0;349222;7,8958;;S;;;
-3;0;Shaughnessy, Mr. Patrick;male;;0;0;370374;7,75;;Q;;;
-3;1;Sheerlinck, Mr. Jan Baptist;male;29;0;0;345779;9,5;;S;11;;
-3;0;Shellard, Mr. Frederick William;male;;0;0;C.A. 6212;15,1;;S;;;
-3;1;Shine, Miss. Ellen Natalia;female;;0;0;330968;7,7792;;Q;;;
-3;0;Shorney, Mr. Charles Joseph;male;;0;0;374910;8,05;;S;;;
-3;0;Simmons, Mr. John;male;;0;0;SOTON/OQ 392082;8,05;;S;;;
-3;0;Sirayanian, Mr. Orsen;male;22;0;0;2669;7,2292;;C;;;
-3;0;Sirota, Mr. Maurice;male;;0;0;392092;8,05;;S;;;
-3;0;Sivic, Mr. Husein;male;40;0;0;349251;7,8958;;S;;;
-3;0;Sivola, Mr. Antti Wilhelm;male;21;0;0;STON/O 2. 3101280;7,925;;S;;;
-3;1;Sjoblom, Miss. Anna Sofia;female;18;0;0;3101265;7,4958;;S;16;;
-3;0;Skoog, Master. Harald;male;4;3;2;347088;27,9;;S;;;
-3;0;Skoog, Master. Karl Thorsten;male;10;3;2;347088;27,9;;S;;;
-3;0;Skoog, Miss. Mabel;female;9;3;2;347088;27,9;;S;;;
-3;0;Skoog, Miss. Margit Elizabeth;female;2;3;2;347088;27,9;;S;;;
-3;0;Skoog, Mr. Wilhelm;male;40;1;4;347088;27,9;;S;;;
-3;0;Skoog, Mrs. William (Anna Bernhardina Karlsson);female;45;1;4;347088;27,9;;S;;;
-3;0;Slabenoff, Mr. Petco;male;;0;0;349214;7,8958;;S;;;
-3;0;Slocovski, Mr. Selman Francis;male;;0;0;SOTON/OQ 392086;8,05;;S;;;
-3;0;Smiljanic, Mr. Mile;male;;0;0;315037;8,6625;;S;;;
-3;0;Smith, Mr. Thomas;male;;0;0;384461;7,75;;Q;;;
-3;1;Smyth, Miss. Julia;female;;0;0;335432;7,7333;;Q;13;;
-3;0;Soholt, Mr. Peter Andreas Lauritz Andersen;male;19;0;0;348124;7,65;F G73;S;;;
-3;0;Somerton, Mr. Francis William;male;30;0;0;A.5. 18509;8,05;;S;;;
-3;0;Spector, Mr. Woolf;male;;0;0;A.5. 3236;8,05;;S;;;
-3;0;Spinner, Mr. Henry John;male;32;0;0;STON/OQ. 369943;8,05;;S;;;
-3;0;Staneff, Mr. Ivan;male;;0;0;349208;7,8958;;S;;;
-3;0;Stankovic, Mr. Ivan;male;33;0;0;349239;8,6625;;C;;;
-3;1;Stanley, Miss. Amy Zillah Elsie;female;23;0;0;CA. 2314;7,55;;S;C;;
-3;0;Stanley, Mr. Edward Roland;male;21;0;0;A/4 45380;8,05;;S;;;
-3;0;Storey, Mr. Thomas;male;60,5;0;0;3701;;;S;;261;
-3;0;Stoytcheff, Mr. Ilia;male;19;0;0;349205;7,8958;;S;;;
-3;0;Strandberg, Miss. Ida Sofia;female;22;0;0;7553;9,8375;;S;;;
-3;1;Stranden, Mr. Juho;male;31;0;0;STON/O 2. 3101288;7,925;;S;9;;
-3;0;Strilic, Mr. Ivan;male;27;0;0;315083;8,6625;;S;;;
-3;0;Strom, Miss. Telma Matilda;female;2;0;1;347054;10,4625;G6;S;;;
-3;0;Strom, Mrs. Wilhelm (Elna Matilda Persson);female;29;1;1;347054;10,4625;G6;S;;;
-3;1;Sunderland, Mr. Victor Francis;male;16;0;0;SOTON/OQ 392089;8,05;;S;B;;
-3;1;Sundman, Mr. Johan Julian;male;44;0;0;STON/O 2. 3101269;7,925;;S;15;;
-3;0;Sutehall, Mr. Henry Jr;male;25;0;0;SOTON/OQ 392076;7,05;;S;;;
-3;0;Svensson, Mr. Johan;male;74;0;0;347060;7,775;;S;;;
-3;1;Svensson, Mr. Johan Cervin;male;14;0;0;7538;9,225;;S;13;;
-3;0;Svensson, Mr. Olof;male;24;0;0;350035;7,7958;;S;;;
-3;1;Tenglin, Mr. Gunnar Isidor;male;25;0;0;350033;7,7958;;S;13 15;;
-3;0;Theobald, Mr. Thomas Leonard;male;34;0;0;363294;8,05;;S;;176;
-3;1;Thomas, Master. Assad Alexander;male;0,4167;0;1;2625;8,5167;;C;16;;
-3;0;Thomas, Mr. Charles P;male;;1;0;2621;6,4375;;C;;;
-3;0;Thomas, Mr. John;male;;0;0;2681;6,4375;;C;;;
-3;0;Thomas, Mr. Tannous;male;;0;0;2684;7,225;;C;;;
-3;1;"Thomas, Mrs. Alexander (Thamine ""Thelma"")";female;16;1;1;2625;8,5167;;C;14;;
-3;0;Thomson, Mr. Alexander Morrison;male;;0;0;32302;8,05;;S;;;
-3;0;Thorneycroft, Mr. Percival;male;;1;0;376564;16,1;;S;;;
-3;1;Thorneycroft, Mrs. Percival (Florence Kate White);female;;1;0;376564;16,1;;S;10;;
-3;0;Tikkanen, Mr. Juho;male;32;0;0;STON/O 2. 3101293;7,925;;S;;;
-3;0;Tobin, Mr. Roger;male;;0;0;383121;7,75;F38;Q;;;
-3;0;Todoroff, Mr. Lalio;male;;0;0;349216;7,8958;;S;;;
-3;0;Tomlin, Mr. Ernest Portage;male;30,5;0;0;364499;8,05;;S;;50;
-3;0;Torber, Mr. Ernst William;male;44;0;0;364511;8,05;;S;;;
-3;0;Torfa, Mr. Assad;male;;0;0;2673;7,2292;;C;;;
-3;1;Tornquist, Mr. William Henry;male;25;0;0;LINE;0;;S;15;;
-3;0;Toufik, Mr. Nakli;male;;0;0;2641;7,2292;;C;;;
-3;1;Touma, Master. Georges Youssef;male;7;1;1;2650;15,2458;;C;C;;
-3;1;Touma, Miss. Maria Youssef;female;9;1;1;2650;15,2458;;C;C;;
-3;1;Touma, Mrs. Darwis (Hanne Youssef Razi);female;29;0;2;2650;15,2458;;C;C;;
-3;0;Turcin, Mr. Stjepan;male;36;0;0;349247;7,8958;;S;;;
-3;1;Turja, Miss. Anna Sofia;female;18;0;0;4138;9,8417;;S;15;;
-3;1;Turkula, Mrs. (Hedwig);female;63;0;0;4134;9,5875;;S;15;;
-3;0;van Billiard, Master. James William;male;;1;1;A/5. 851;14,5;;S;;;
-3;0;van Billiard, Master. Walter John;male;11,5;1;1;A/5. 851;14,5;;S;;1;
-3;0;van Billiard, Mr. Austin Blyler;male;40,5;0;2;A/5. 851;14,5;;S;;255;
-3;0;Van Impe, Miss. Catharina;female;10;0;2;345773;24,15;;S;;;
-3;0;Van Impe, Mr. Jean Baptiste;male;36;1;1;345773;24,15;;S;;;
-3;0;Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert);female;30;1;1;345773;24,15;;S;;;
-3;0;van Melkebeke, Mr. Philemon;male;;0;0;345777;9,5;;S;;;
-3;0;Vande Velde, Mr. Johannes Joseph;male;33;0;0;345780;9,5;;S;;;
-3;0;Vande Walle, Mr. Nestor Cyriel;male;28;0;0;345770;9,5;;S;;;
-3;0;Vanden Steen, Mr. Leo Peter;male;28;0;0;345783;9,5;;S;;;
-3;0;Vander Cruyssen, Mr. Victor;male;47;0;0;345765;9;;S;;;
-3;0;Vander Planke, Miss. Augusta Maria;female;18;2;0;345764;18;;S;;;
-3;0;Vander Planke, Mr. Julius;male;31;3;0;345763;18;;S;;;
-3;0;Vander Planke, Mr. Leo Edmondus;male;16;2;0;345764;18;;S;;;
-3;0;Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele);female;31;1;0;345763;18;;S;;;
-3;1;Vartanian, Mr. David;male;22;0;0;2658;7,225;;C;13 15;;
-3;0;Vendel, Mr. Olof Edvin;male;20;0;0;350416;7,8542;;S;;;
-3;0;Vestrom, Miss. Hulda Amanda Adolfina;female;14;0;0;350406;7,8542;;S;;;
-3;0;Vovk, Mr. Janko;male;22;0;0;349252;7,8958;;S;;;
-3;0;Waelens, Mr. Achille;male;22;0;0;345767;9;;S;;;Antwerp, Belgium / Stanton, OH
-3;0;Ware, Mr. Frederick;male;;0;0;359309;8,05;;S;;;
-3;0;Warren, Mr. Charles William;male;;0;0;C.A. 49867;7,55;;S;;;
-3;0;Webber, Mr. James;male;;0;0;SOTON/OQ 3101316;8,05;;S;;;
-3;0;Wenzel, Mr. Linhart;male;32,5;0;0;345775;9,5;;S;;298;
-3;1;Whabee, Mrs. George Joseph (Shawneene Abi-Saab);female;38;0;0;2688;7,2292;;C;C;;
-3;0;Widegren, Mr. Carl/Charles Peter;male;51;0;0;347064;7,75;;S;;;
-3;0;Wiklund, Mr. Jakob Alfred;male;18;1;0;3101267;6,4958;;S;;314;
-3;0;Wiklund, Mr. Karl Johan;male;21;1;0;3101266;6,4958;;S;;;
-3;1;Wilkes, Mrs. James (Ellen Needs);female;47;1;0;363272;7;;S;;;
-3;0;"Willer, Mr. Aaron (""Abi Weller"")";male;;0;0;3410;8,7125;;S;;;
-3;0;Willey, Mr. Edward;male;;0;0;S.O./P.P. 751;7,55;;S;;;
-3;0;"Williams, Mr. Howard Hugh ""Harry""";male;;0;0;A/5 2466;8,05;;S;;;
-3;0;Williams, Mr. Leslie;male;28,5;0;0;54636;16,1;;S;;14;
-3;0;Windelov, Mr. Einar;male;21;0;0;SOTON/OQ 3101317;7,25;;S;;;
-3;0;Wirz, Mr. Albert;male;27;0;0;315154;8,6625;;S;;131;
-3;0;Wiseman, Mr. Phillippe;male;;0;0;A/4. 34244;7,25;;S;;;
-3;0;Wittevrongel, Mr. Camille;male;36;0;0;345771;9,5;;S;;;
-3;0;Yasbeck, Mr. Antoni;male;27;1;0;2659;14,4542;;C;C;;
-3;1;Yasbeck, Mrs. Antoni (Selini Alexander);female;15;1;0;2659;14,4542;;C;;;
-3;0;Youseff, Mr. Gerious;male;45,5;0;0;2628;7,225;;C;;312;
-3;0;Yousif, Mr. Wazli;male;;0;0;2647;7,225;;C;;;
-3;0;Yousseff, Mr. Gerious;male;;0;0;2627;14,4583;;C;;;
-3;0;Zabour, Miss. Hileni;female;14,5;1;0;2665;14,4542;;C;;328;
-3;0;Zabour, Miss. Thamine;female;;1;0;2665;14,4542;;C;;;
-3;0;Zakarian, Mr. Mapriededer;male;26,5;0;0;2656;7,225;;C;;304;
-3;0;Zakarian, Mr. Ortin;male;27;0;0;2670;7,225;;C;;;
-3;0;Zimmerman, Mr. Leo;male;29;0;0;315082;7,875;;S;;;
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java
index c82d5de..b613ade 100644
--- a/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java
+++ b/modules/ml/src/test/java/org/apache/ignite/ml/IgniteMLTestSuite.java
@@ -22,7 +22,6 @@
import org.apache.ignite.ml.composition.CompositionTestSuite;
import org.apache.ignite.ml.dataset.DatasetTestSuite;
import org.apache.ignite.ml.environment.EnvironmentTestSuite;
-import org.apache.ignite.ml.genetic.GAGridTestSuite;
import org.apache.ignite.ml.inference.InferenceTestSuite;
import org.apache.ignite.ml.knn.KNNTestSuite;
import org.apache.ignite.ml.math.MathImplMainTestSuite;
@@ -55,7 +54,6 @@
KNNTestSuite.class,
PipelineTestSuite.class,
PreprocessingTestSuite.class,
- GAGridTestSuite.class,
CompositionTestSuite.class,
EnvironmentTestSuite.class,
StructuresTestSuite.class,
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridCalculateFitnessTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridCalculateFitnessTest.java
deleted file mode 100644
index fa05bad..0000000
--- a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridCalculateFitnessTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Calculate Fitness Test
- */
-public class GAGridCalculateFitnessTest {
- /** Ignite instance */
- private Ignite ignite;
-
- /** GAGrid **/
- private GAGrid gaGrid;
-
- /** GAConfiguration */
- private GAConfiguration gaCfg;
-
- /**
- * Setup test
- */
- @Before
- public void initialize() {
-
- try {
-
- // Create an Ignite instance as you would in any other use case.
- ignite = Ignition.start();
-
- // Create GAConfiguration
- gaCfg = new GAConfiguration();
-
- // set Gene Pool
- List<Gene> genes = this.getGenePool();
- gaCfg.setGenePool(genes);
-
- // set the Chromosome Length to '8' since password contains 8 characters.
- gaCfg.setChromosomeLen(8);
-
- // create and set Fitness function
- PasswordFitnessFunction function = new PasswordFitnessFunction();
- gaCfg.setFitnessFunction(function);
-
- gaGrid = new GAGrid(gaCfg, ignite);
- gaGrid.initializeGenePopulation();
- gaGrid.initializePopulation();
-
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
-
- /**
- * Test Calculate Fitness
- */
- @Test
- public void testCalculateFitness() {
- try {
-
- List<Long> chromosomeKeys = gaGrid.getPopulationKeys();
-
- Boolean boolVal = this.ignite.compute().execute(new FitnessTask(this.gaCfg), chromosomeKeys);
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- String sql = "select count(*) from Chromosome where fitnessScore>0";
-
- // Execute query to keys for ALL Chromosomes by fitnessScore
- QueryCursor<List<?>> cursor = populationCache.query(new SqlFieldsQuery(sql));
-
- List<List<?>> res = cursor.getAll();
-
- Long cnt = 0L;
-
- for (List row : res)
- cnt = (Long)row.get(0);
-
- assertEquals(500, cnt.longValue());
- }
-
- catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
-
- /**
- * Helper routine to initialize Gene pool
- *
- * @return List of Genes
- */
- private List<Gene> getGenePool() {
- List<Gene> list = new ArrayList();
-
- char[] chars = {
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
- 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '!', '"', '#', '$', '%', '&', '(', ')', '*', '+', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^'};
-
- for (int i = 0; i < chars.length; i++) {
- Gene gene = new Gene(chars[i]);
- list.add(gene);
- }
- return list;
- }
-
- /**
- * Stop the Ignite.
- */
- @After
- public void tearDown() {
-
- Ignition.stop(true);
- ignite = null;
- }
-}
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridInitializePopulationTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridInitializePopulationTest.java
deleted file mode 100644
index 1fd0538..0000000
--- a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridInitializePopulationTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * Initialize Gene and Chromosome Test
- */
-public class GAGridInitializePopulationTest {
- /** Ignite instance */
- private Ignite ignite;
-
- /** GAGrid **/
- private GAGrid gaGrid;
-
- /**
- * Initialize the population.
- */
- @Before
- public void initialize() {
- try {
-
- // Create an Ignite instance as you would in any other use case.
- ignite = Ignition.start();
-
- // Create GAConfiguration
- /* GAConfiguraton */ /** GAConfiguraton */GAConfiguration gaCfg = new GAConfiguration();
-
- // set Gene Pool
- List<Gene> genes = this.getGenePool();
-
- // set the Chromosome Length to '8' since password contains 8 characters.
- gaCfg.setChromosomeLen(8);
-
- gaCfg.setGenePool(genes);
-
- gaGrid = new GAGrid(gaCfg, ignite);
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
-
- /**
- * Check the initialization of genes.
- */
- @Test
- public void testInitializeGenes() {
- try {
- IgniteCache<Long, Gene> geneCache = ignite.cache(GAGridConstants.GENE_CACHE);
- gaGrid.initializeGenePopulation();
-
- String sql = "select count(*) from Gene";
-
- // Execute query to keys for ALL Chromosomes by fittnessScore
- QueryCursor<List<?>> cursor = geneCache.query(new SqlFieldsQuery(sql));
-
- List<List<?>> res = cursor.getAll();
-
- Long cnt = 0L;
-
- for (List row : res)
- cnt = (Long)row.get(0);
-
- assertEquals(83, cnt.longValue());
- }
-
- catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testInitializePopulation() {
- try {
-
- IgniteCache<Long, Chromosome> populationCache = ignite.cache(GAGridConstants.POPULATION_CACHE);
-
- gaGrid.initializePopulation();
-
- String sql = "select count(*) from Chromosome";
-
- // Execute query to keys for ALL Chromosomes by fittnessScore
- QueryCursor<List<?>> cursor = populationCache.query(new SqlFieldsQuery(sql));
-
- List<List<?>> res = cursor.getAll();
-
- Long cnt = 0L;
-
- for (List row : res)
- cnt = (Long)row.get(0);
-
- assertEquals(500, cnt.longValue());
- }
-
- catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
-
- /**
- * Helper routine to initialize Gene pool
- *
- * @return List of Genes
- */
- private List<Gene> getGenePool() {
- List<Gene> list = new ArrayList();
-
- char[] chars = {
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
- 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '!', '"', '#', '$', '%', '&', '(', ')', '*', '+', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^'};
-
- for (int i = 0; i < chars.length; i++) {
- Gene gene = new Gene(chars[i]);
- list.add(gene);
- }
- return list;
- }
-
- /**
- * Stop the Ignite.
- */
- @After
- public void tearDown() {
-
- Ignition.stop(true);
- ignite = null;
- }
-}
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridTestSuite.java b/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridTestSuite.java
deleted file mode 100644
index d7751fd..0000000
--- a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/GAGridTestSuite.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * Test suite for all tests located in org.apache.ignite.ml.genetic package.
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- GAGridInitializePopulationTest.class,
- GAGridCalculateFitnessTest.class
-})
-
-public class GAGridTestSuite {
-}
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/PasswordFitnessFunction.java b/modules/ml/src/test/java/org/apache/ignite/ml/genetic/PasswordFitnessFunction.java
deleted file mode 100644
index cb5aa00..0000000
--- a/modules/ml/src/test/java/org/apache/ignite/ml/genetic/PasswordFitnessFunction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.genetic;
-
-import java.util.List;
-
-/**
- * PasswordFitnessFunction evaluates randomly generated passwords giving higher score to passwords with more special
- * characters.
- */
-public class PasswordFitnessFunction implements IFitnessFunction {
- /**
- * @param genes List of Genes within an individual Chromosome
- * @return Fitness score
- */
- @Override public double evaluate(List<Gene> genes) {
-
- double specialCCnt = 0;
- double lowerCaseCnt = 0;
- double upperCaseCnt = 0;
-
- double fitness;
- double specialCScore = 2;
-
- for (Gene gene : genes) {
- Character aCharacter = (Character)(gene.getVal());
- if (Character.isUpperCase(aCharacter))
- upperCaseCnt += 1;
-
- else if (Character.isLowerCase(aCharacter))
- lowerCaseCnt += 1;
- else
- specialCCnt += 1;
- }
-
- specialCCnt = specialCScore * specialCCnt;
- fitness = upperCaseCnt + lowerCaseCnt + specialCCnt;
- return fitness;
- }
-}
diff --git a/modules/ml/tensorflow-model-parser/pom.xml b/modules/ml/tensorflow-model-parser/pom.xml
deleted file mode 100644
index adc8364..0000000
--- a/modules/ml/tensorflow-model-parser/pom.xml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- POM file.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
-
- <properties>
- <tensorflow.version>1.12.0</tensorflow.version>
- </properties>
-
- <parent>
- <artifactId>ignite-parent</artifactId>
- <groupId>org.apache.ignite</groupId>
- <version>1</version>
- <relativePath>../../../parent</relativePath>
- </parent>
-
-
- <artifactId>ignite-ml-tensorflow-model-parser</artifactId>
- <version>2.9.0-SNAPSHOT</version>
- <url>http://ignite.apache.org</url>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-libs</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <excludeTransitive>false</excludeTransitive>
- <excludeArtifactIds>
- fastutil,h2,ignite-shmem,annotations,arpack_combined_all,
- cache-api,commons-math3,commons-rng-client-api,commons-rng-core,
- commons-rng-simple,core,ignite-ml
- </excludeArtifactIds>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-ml</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.tensorflow</groupId>
- <artifactId>tensorflow</artifactId>
- <version>${tensorflow.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.tensorflow</groupId>
- <artifactId>proto</artifactId>
- <version>${tensorflow.version}</version>
- </dependency>
- </dependencies>
-</project>
diff --git a/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowBaseModelParser.java b/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowBaseModelParser.java
deleted file mode 100644
index b40486d..0000000
--- a/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowBaseModelParser.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.inference.parser;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.apache.ignite.ml.inference.Model;
-import org.tensorflow.Session;
-import org.tensorflow.Tensor;
-
-/**
- * Base class for TensorFlow model parsers. Contains the logic that is common for models saved as "SavedModel" and as a
- * simple graph.
- *
- * @param <I> Type of model input.
- * @param <O> Type of model output.
- */
-public abstract class TensorFlowBaseModelParser<I, O> implements ModelParser<I, O, Model<I, O>> {
- /** */
- private static final long serialVersionUID = 5574259553625871456L;
-
- /** Map of input graph nodes (placeholders) and transformers that allow to transform input into tensor. */
- private final Map<String, InputTransformer<I>> inputs = new HashMap<>();
-
- /** List of output graph nodes. */
- private List<String> outputNames;
-
- /** Transformer that allows to transform tensors into output. */
- private OutputTransformer<O> outputTransformer;
-
- /** {@inheritDoc} */
- @Override public Model<I, O> parse(byte[] mdl) {
- return new TensorFlowInfModel(parseModel(mdl));
- }
-
- /**
- * Parses model specified in serialized form as byte array.
- *
- * @param mdl Inference model in serialized form as byte array.
- * @return TensorFlow session that encapsulates the TensorFlow graph parsed from serialized model.
- */
- public abstract Session parseModel(byte[] mdl);
-
- /**
- * Setter that allows to specify additional input graph node and correspondent transformer that allows to transform
- * input into tensor.
- *
- * @param name Name of the input graph node.
- * @param transformer Transformer that allows to transform input into tensor.
- * @return This instance.
- */
- public TensorFlowBaseModelParser<I, O> withInput(String name, InputTransformer<I> transformer) {
- if (inputs.containsKey(name))
- throw new IllegalArgumentException("Inputs already contains specified name [name=" + name + "]");
-
- inputs.put(name, transformer);
-
- return this;
- }
-
- /**
- * Setter that allows to specify output graph nodes and correspondent transformer that allow to transform tensors
- * into output.
- *
- * @param names List of output graph node names.
- * @param transformer Transformer that allow to transform tensors into output.
- * @return This instance.
- */
- public TensorFlowBaseModelParser<I, O> withOutput(List<String> names, OutputTransformer<O> transformer) {
- if (outputNames != null || outputTransformer != null)
- throw new IllegalArgumentException("Outputs already specified");
-
- outputNames = names;
- outputTransformer = transformer;
-
- return this;
- }
-
- /**
- * Input transformer that accepts input and transforms it into tensor.
- *
- * @param <I> Type of model input.
- */
- @FunctionalInterface
- public interface InputTransformer<I> extends Serializable {
- /**
- * Transforms input into tensor.
- *
- * @param input Input data.
- * @return Tensor (transformed input data).
- */
- public Tensor<?> transform(I input);
- }
-
- /**
- * Output transformer that accepts tensors and transforms them into output.
- *
- * @param <O> Type of model output.
- */
- @FunctionalInterface
- public interface OutputTransformer<O> extends Serializable {
- /**
- * Transforms tensors into output.
- *
- * @param output Tensors.
- * @return Output (transformed tensors).
- */
- public O transform(Map<String, Tensor<?>> output);
- }
-
- /**
- * TensorFlow inference model based on pre-loaded graph and created session.
- */
- private class TensorFlowInfModel implements Model<I, O> {
- /** TensorFlow session. */
- private final Session ses;
-
- /**
- * Constructs a new instance of TensorFlow inference model.
- *
- * @param ses TensorFlow session.
- */
- TensorFlowInfModel(Session ses) {
- this.ses = ses;
- }
-
- /** {@inheritDoc} */
- @Override public O predict(I input) {
- Session.Runner runner = ses.runner();
-
- runner = feedAll(runner, input);
- runner = fetchAll(runner);
-
- List<Tensor<?>> prediction = runner.run();
- Map<String, Tensor<?>> collectedPredictionTensors = indexTensors(prediction);
-
- return outputTransformer.transform(collectedPredictionTensors);
- }
-
- /**
- * Feeds input into graphs input nodes using input transformers (see {@link #inputs}).
- *
- * @param runner TensorFlow session runner.
- * @param input Input.
- * @return TensorFlow session runner.
- */
- private Session.Runner feedAll(Session.Runner runner, I input) {
- for (Map.Entry<String, InputTransformer<I>> e : inputs.entrySet()) {
- String opName = e.getKey();
- InputTransformer<I> transformer = e.getValue();
-
- runner = runner.feed(opName, transformer.transform(input));
- }
-
- return runner;
- }
-
- /**
- * Specifies graph output nodes to be fetched using {@link #outputNames}.
- *
- * @param runner TensorFlow session runner.
- * @return TensorFlow session runner.
- */
- private Session.Runner fetchAll(Session.Runner runner) {
- for (String e : outputNames)
- runner.fetch(e);
-
- return runner;
- }
-
- /**
- * Indexes tensors fetched from graph using {@link #outputNames}.
- *
- * @param tensors List of fetched tensors.
- * @return Map of tensor name as a key and tensor as a value.
- */
- private Map<String, Tensor<?>> indexTensors(List<Tensor<?>> tensors) {
- Map<String, Tensor<?>> collectedTensors = new HashMap<>();
-
- Iterator<String> outputNamesIter = outputNames.iterator();
- Iterator<Tensor<?>> tensorsIter = tensors.iterator();
-
- while (outputNamesIter.hasNext() && tensorsIter.hasNext())
- collectedTensors.put(outputNamesIter.next(), tensorsIter.next());
-
- // We expect that output names and output tensors have the same size.
- if (outputNamesIter.hasNext() || tensorsIter.hasNext())
- throw new IllegalStateException("Outputs are incorrect");
-
- return collectedTensors;
- }
-
- /** {@inheritDoc} */
- @Override public void close() {
- ses.close();
- }
- }
-}
diff --git a/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowGraphModelParser.java b/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowGraphModelParser.java
deleted file mode 100644
index dc1d99e..0000000
--- a/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowGraphModelParser.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.inference.parser;
-
-import org.tensorflow.Graph;
-import org.tensorflow.Session;
-
-/**
- * Implementation of TensorFlow model parser that accepts serialized graph definition.
- *
- * @param <I> Type of model input.
- * @param <O> Type of model output.
- */
-public class TensorFlowGraphModelParser<I, O> extends TensorFlowBaseModelParser<I, O> {
- /** */
- private static final long serialVersionUID = -1872566748640565856L;
-
- /** {@inheritDoc} */
- @Override public Session parseModel(byte[] mdl) {
- Graph graph = new Graph();
- graph.importGraphDef(mdl);
-
- return new Session(graph);
- }
-}
diff --git a/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowSavedModelModelParser.java b/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowSavedModelModelParser.java
deleted file mode 100644
index 2c0b007..0000000
--- a/modules/ml/tensorflow-model-parser/src/main/java/org/apache/ignite/ml/inference/parser/TensorFlowSavedModelModelParser.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.inference.parser;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import org.apache.ignite.ml.inference.util.DirectorySerializer;
-import org.tensorflow.SavedModelBundle;
-import org.tensorflow.Session;
-
-/**
- * Implementation of TensorFlow model parser that accepts serialized directory with "SavedModel" as an input. The
- * directory is assumed to be serialized by {@link DirectorySerializer}.
- *
- * @param <I> Type of model input.
- * @param <O> Type of model output.
- */
-public class TensorFlowSavedModelModelParser<I, O> extends TensorFlowBaseModelParser<I, O> {
- /** */
- private static final long serialVersionUID = 5638083440240281879L;
-
- /** Prefix to be used to create temporary directory for TensorFlow model files. */
- private static final String TMP_DIR_PREFIX = "tensorflow_saved_model_";
-
- /** Model tags. */
- private final String[] tags;
-
- /**
- * Constructs a new instance of TensorFlow model parser.
- *
- * @param tags Model tags.
- */
- public TensorFlowSavedModelModelParser(String... tags) {
- this.tags = tags;
- }
-
- /** {@inheritDoc} */
- @Override public Session parseModel(byte[] mdl) {
- Path dir = null;
- try {
- dir = Files.createTempDirectory(TMP_DIR_PREFIX);
- DirectorySerializer.deserialize(dir.toAbsolutePath(), mdl);
- SavedModelBundle bundle = SavedModelBundle.load(dir.toString(), tags);
- return bundle.session();
- }
- catch (IOException | ClassNotFoundException e) {
- throw new RuntimeException(e);
- }
- finally {
- if (dir != null)
- DirectorySerializer.deleteDirectory(dir);
- }
- }
-}
diff --git a/modules/tensorflow/DEVNOTES.txt b/modules/tensorflow/DEVNOTES.txt
deleted file mode 100644
index 2fd9f95..0000000
--- a/modules/tensorflow/DEVNOTES.txt
+++ /dev/null
@@ -1 +0,0 @@
-TBD
\ No newline at end of file
diff --git a/modules/tensorflow/README.txt b/modules/tensorflow/README.txt
deleted file mode 100644
index 21ea88d..0000000
--- a/modules/tensorflow/README.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-Apache Ignite TensorFlow Integration Module
-------------------------
-
-Apache Ignite TensorFlow Integration Module allowed using TensorFlow with Apache Ignite. In this scenario Apache Ignite
-will be a datasource for any TensorFlow model training.
-
-Import Apache Ignite TensorFlow Integration Module In Maven Project
--------------------------------------
-
-If you are using Maven to manage dependencies of your project, you can add TensorFlow module
-dependency like this (replace '${ignite.version}' with actual Ignite version you are
-interested in):
-
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
- http://maven.apache.org/xsd/maven-4.0.0.xsd">
- ...
- <dependencies>
- ...
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-tensorflow</artifactId>
- <version>${ignite.version}</version>
- </dependency>
- ...
- </dependencies>
- ...
-</project>
--------------------------------------
-
-TensorFlow integration module provides command line tool that allows to start, maintain and stop distributed deep
-learning utilizing Apache Ignite infrastructure and data. This tool provides several commands that are shown here:
-
-Usage: ignite-tf [-hV] [-c=<cfg>] [COMMAND]
-Apache Ignite and TensorFlow integration command line utility that allows to
-start, maintain and stop distributed deep learning utilizing Apache Ignite
-infrastructure and data.
- -c, --config=<cfg> Apache Ignite client configuration.
- -h, --help Show this help message and exit.
- -V, --version Print version information and exit.
-Commands:
- start Starts a new TensorFlow cluster and attaches to user script process.
- stop Stops a running TensorFlow cluster.
- attach Attaches to running TensorFlow cluster (user script process).
- ps Prints identifiers of all running TensorFlow clusters.
-
-To start TensorFlow cluster you need to specify upstream cache that will be used as data source for training, folder
-that contains code that actually performs training and command that should be called on this code to start training
-correctly. Command "start" have the following help output:
-
-Usage: ignite-tf start [-hV] [-c=<cfg>] CACHE_NAME JOB_DIR JOB_CMD [JOB_ARGS...]
-Starts a new TensorFlow cluster and attaches to user script process.
- CACHE_NAME Upstream cache name.
- JOB_DIR Job folder (or zip archive).
- JOB_CMD Job command.
- [JOB_ARGS...] Job arguments.
- -c, --config=<cfg> Apache Ignite client configuration.
- -h, --help Show this help message and exit.
- -V, --version Print version information and exit.
-
-To attach to running TensorFlow cluster or stop it you can use commands "attach" and "stop" correspondingly. These
-commands accepts cluster identifier as a parameter:
-
-Usage: ignite-tf attach [-hV] [-c=<cfg>] CLUSTER_ID
-Attaches to running TensorFlow cluster (user script process).
- CLUSTER_ID Cluster identifier.
- -c, --config=<cfg> Apache Ignite client configuration.
- -h, --help Show this help message and exit.
- -V, --version Print version information and exit.
-
-Usage: ignite-tf stop [-hV] [-c=<cfg>] CLUSTER_ID
-Stops a running TensorFlow cluster.
- CLUSTER_ID Cluster identifier.
- -c, --config=<cfg> Apache Ignite client configuration.
- -h, --help Show this help message and exit.
- -V, --version Print version information and exit.
-
-To find out what TensorFlow clusters are currently running on top of Apache Ignite you can use "ps" command that doesn't
-require arguments.
\ No newline at end of file
diff --git a/modules/tensorflow/licenses/apache-2.0.txt b/modules/tensorflow/licenses/apache-2.0.txt
deleted file mode 100644
index d645695..0000000
--- a/modules/tensorflow/licenses/apache-2.0.txt
+++ /dev/null
@@ -1,202 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
diff --git a/modules/tensorflow/pom.xml b/modules/tensorflow/pom.xml
deleted file mode 100644
index 9f45ae9..0000000
--- a/modules/tensorflow/pom.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- POM file.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <artifactId>ignite-parent</artifactId>
- <groupId>org.apache.ignite</groupId>
- <version>1</version>
- <relativePath>../../parent/pom.xml</relativePath>
- </parent>
- <modelVersion>4.0.0</modelVersion>
-
- <artifactId>ignite-tensorflow</artifactId>
- <version>2.9.0-SNAPSHOT</version>
- <url>http://ignite.apache.org</url>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-libs</id>
- <phase>package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <excludeTransitive>false</excludeTransitive>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-core</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-spring</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-slf4j</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.2.3</version>
- </dependency>
-
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <version>1.2.3</version>
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>${commons.io.version}</version>
- </dependency>
-
- <dependency>
- <groupId>info.picocli</groupId>
- <artifactId>picocli</artifactId>
- <version>3.3.0</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.ignite</groupId>
- <artifactId>ignite-core</artifactId>
- <version>${project.version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <version>${mockito.version}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <profiles>
- <profile>
- <id>tensorflow</id>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <configuration>
- <skip>false</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
-</project>
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowCluster.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowCluster.java
deleted file mode 100644
index cf60e42..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowCluster.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster;
-
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-/**
- * TensorFlow Cluster metadata.
- */
-public class TensorFlowCluster implements Serializable {
- /** */
- private static final long serialVersionUID = -6636339457255751011L;
-
- /** TensorFlow cluster specification. */
- private final TensorFlowClusterSpec spec;
-
- /** Process identifiers. */
- private final Map<UUID, List<UUID>> processes;
-
- /**
- * Constructs a new instance of TensorFlow cluster.
- *
- * @param spec TensorFlow cluster specification.
- * @param processes Process identifiers.
- */
- public TensorFlowCluster(TensorFlowClusterSpec spec, Map<UUID, List<UUID>> processes) {
- assert spec != null : "TensorFlow cluster specification should not be null";
- assert processes != null : "Processes should not be null";
-
- this.spec = spec;
- this.processes = processes;
- }
-
- /** */
- public TensorFlowClusterSpec getSpec() {
- return spec;
- }
-
- /** */
- public Map<UUID, List<UUID>> getProcesses() {
- return processes;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterGateway.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterGateway.java
deleted file mode 100644
index 092dfcb..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterGateway.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster;
-
-import java.util.HashSet;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.function.Consumer;
-import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.tensorflow.util.SerializableConsumer;
-
-/**
- * TensorFlow cluster gateway that allows to subscribe on changes in cluster configuration.
- */
-public class TensorFlowClusterGateway implements IgniteBiPredicate<UUID, Optional<TensorFlowCluster>>, AutoCloseable {
- /** */
- private static final long serialVersionUID = -540323262800791340L;
-
- /** Callback that will be called on unsubscribe. */
- private final SerializableConsumer<TensorFlowClusterGateway> unsubscribeCb;
-
- /** Subscribers. */
- private final HashSet<Consumer<Optional<TensorFlowCluster>>> subscribers = new HashSet<>();
-
- /** Last value received from the upstream. */
- private Optional<TensorFlowCluster> last;
-
- /**
- * Constructs a new instance of TensorFlow cluster gateway.
- *
- * @param unsubscribeCb Callback that will be called on unsubscribe.
- */
- public TensorFlowClusterGateway(SerializableConsumer<TensorFlowClusterGateway> unsubscribeCb) {
- this.unsubscribeCb = unsubscribeCb;
- }
-
- /**
- * Subscribers the specified subscriber on the upstream events.
- *
- * @param subscriber Subscriber.
- */
- public synchronized void subscribe(Consumer<Optional<TensorFlowCluster>> subscriber) {
- subscribers.add(subscriber);
-
- if (last != null)
- subscriber.accept(last);
- }
-
- /**
- * Unsubscribe the specified subscriber.
- *
- * @param subscriber Subscriber.
- */
- public synchronized void unsubscribe(Consumer<Optional<TensorFlowCluster>> subscriber) {
- subscribers.remove(subscriber);
- }
-
- /** {@inheritDoc} */
- @Override public synchronized boolean apply(UUID uuid, Optional<TensorFlowCluster> cluster) {
- for (Consumer<Optional<TensorFlowCluster>> subscriber : subscribers)
- subscriber.accept(cluster);
-
- last = cluster;
-
- return true;
- }
-
- /** {@inheritDoc} */
- @Override public void close() {
- subscribers.clear();
- unsubscribeCb.accept(this);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterGatewayManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterGatewayManager.java
deleted file mode 100644
index a315aaf..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterGatewayManager.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster;
-
-import java.util.Optional;
-import java.util.UUID;
-import java.util.concurrent.CountDownLatch;
-import java.util.function.Consumer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteLogger;
-
-/**
- * TensorFlow cluster manager that allows to start, maintain and stop TensorFlow cluster using
- * {@link TensorFlowClusterManager} and Ignite Service Grid.
- */
-public class TensorFlowClusterGatewayManager {
- /** Service name template. */
- private static final String SERVICE_NAME_TEMPLATE = "TF_SERVICE_%s";
-
- /** Service topic name template. */
- private static final String SERVICE_TOPIC_NAME_TEMPLATE = "TF_SERVICE_TOPIC_%s";
-
- /** Ignite instance. */
- private final Ignite ignite;
-
- /** Logger. */
- private final IgniteLogger log;
-
- /**
- * Constructs a new instance of TensorFlow cluster manager with maintenance.
- *
- * @param ignite Ignite instance.
- */
- public TensorFlowClusterGatewayManager(Ignite ignite) {
- assert ignite != null : "Ignite should not be null";
-
- this.ignite = ignite;
- this.log = ignite.log().getLogger(TensorFlowClusterGatewayManager.class);
- }
-
- /**
- * Subscribes on changes of the specified cluster.
- *
- * @param clusterId Cluster identifier.
- * @return TensorFlow cluster gateway that allows to subscribe on cluster changes.
- */
- public TensorFlowClusterGateway getCluster(UUID clusterId) {
- String topicName = String.format(SERVICE_TOPIC_NAME_TEMPLATE, clusterId);
-
- return createTensorFlowClusterGateway(topicName);
- }
-
- /**
- * Creates and starts a new TensorFlow cluster for the specified cache.
- *
- * @param clusterId Cluster identifier.
- * @param jobArchive Job archive.
- * @return TensorFlow cluster gateway that allows to subscribe on cluster changes.
- */
- public TensorFlowClusterGateway createCluster(UUID clusterId, TensorFlowJobArchive jobArchive) {
- String svcName = String.format(SERVICE_NAME_TEMPLATE, clusterId);
- String topicName = String.format(SERVICE_TOPIC_NAME_TEMPLATE, clusterId);
-
- TensorFlowClusterGateway gateway = createTensorFlowClusterGateway(topicName);
-
- ignite.services().deployClusterSingleton(
- svcName,
- new TensorFlowClusterMaintainer(clusterId, jobArchive, topicName)
- );
- log.info("Cluster maintainer deployed as a service [clusterId=" + clusterId + "]");
-
- return gateway;
- }
-
- /**
- * Listens to TensorFlow cluster user script.
- *
- * @param clusterId Cluster identifier.
- * @param out Output stream consumer.
- * @param err Error stream consumer.
- */
- public void listenToClusterUserScript(UUID clusterId, Consumer<String> out, Consumer<String> err) {
- TensorFlowClusterGateway gateway = getCluster(clusterId);
-
- ignite.message().localListen("us_out_" + clusterId, (node, msg) -> {
- out.accept(msg.toString());
- return true;
- });
-
- ignite.message().localListen("us_err_" + clusterId, (node, msg) -> {
- err.accept(msg.toString());
- return true;
- });
-
- CountDownLatch latch = new CountDownLatch(1);
-
- Consumer<Optional<TensorFlowCluster>> subscriber = cluster -> {
- if (!cluster.isPresent())
- latch.countDown();
- };
-
- gateway.subscribe(subscriber);
-
- try {
- latch.await();
- gateway.unsubscribe(subscriber);
- }
- catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Stops TensorFlow cluster.
- *
- * @param clusterId Cluster identifier.
- */
- public void stopClusterIfExists(UUID clusterId) {
- ignite.services().cancel(String.format(SERVICE_NAME_TEMPLATE, clusterId));
- log.info("Cluster maintained cancelled as a service [clusterId=" + clusterId + "]");
- }
-
- /**
- * Creates TensorFlow cluster gateway.
- *
- * @param topicName Topic name.
- * @return TensorFlow cluster gateway.
- */
- private TensorFlowClusterGateway createTensorFlowClusterGateway(String topicName) {
- TensorFlowClusterGateway gateway = new TensorFlowClusterGateway(subscriber -> {
- ignite.message().stopLocalListen(topicName, subscriber);
- log.info("Stop listen to cluster gateway [topicName=" + topicName + "]");
- });
-
- ignite.message().localListen(topicName, gateway);
- log.info("Start listen to cluster gateway [topicName=" + topicName + "]");
-
- return gateway;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterMaintainer.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterMaintainer.java
deleted file mode 100644
index f44a4f8..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterMaintainer.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.concurrent.locks.LockSupport;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.resources.IgniteInstanceResource;
-import org.apache.ignite.resources.LoggerResource;
-import org.apache.ignite.services.Service;
-import org.apache.ignite.services.ServiceContext;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-
-/**
- * TensorFlow cluster service that maintains TensorFlow cluster.
- */
-public class TensorFlowClusterMaintainer implements Service {
- /** */
- private static final long serialVersionUID = -3220563310643566419L;
-
- /** Ignite instance. */
- @IgniteInstanceResource
- private transient Ignite ignite;
-
- /** Logger. */
- @LoggerResource
- private transient IgniteLogger log;
-
- /** TensorFlow cluster identifier. */
- private final UUID clusterId;
-
- /** Job archive. */
- private final TensorFlowJobArchive jobArchive;
-
- /** Topic name. */
- private final String topicName;
-
- /** TensorFlow cluster manager. */
- private transient TensorFlowClusterManager clusterMgr;
-
- /** Previous partition mapping. */
- private transient UUID[] prev;
-
- /**
- * Constructs a new instance of TensorFlow cluster service.
- *
- * @param clusterId Cluster identifier.
- * @param jobArchive Job archive.
- * @param topicName Topic name.
- */
- public TensorFlowClusterMaintainer(UUID clusterId, TensorFlowJobArchive jobArchive, String topicName) {
- assert clusterId != null : "Cluster identifier should not be null";
- assert jobArchive != null : "Job archive should not be null";
- assert topicName != null : "Topic name should not be null";
-
- this.clusterId = clusterId;
- this.jobArchive = jobArchive;
- this.topicName = topicName;
- }
-
- /** {@inheritDoc} */
- @Override public void cancel(ServiceContext ctx) {
- clusterMgr.stopClusterIfExists(clusterId);
- log.debug("Cluster maintainer canceled [clusterId=" + clusterId + "]");
- }
-
- /** {@inheritDoc} */
- @Override public void init(ServiceContext ctx) {
- clusterMgr = new TensorFlowClusterManager(ignite);
- log.debug("Cluster maintainer initialized [clusterId=" + clusterId + "]");
- }
-
- /** {@inheritDoc} */
- @Override public void execute(ServiceContext ctx) {
- while (!ctx.isCancelled() && !hasUserScriptCompletedSuccessfully()) {
- LockSupport.parkNanos(1_000_000);
-
- boolean restartRequired = hasAffinityChanged()
- || hasAnyWorkerFailed()
- || hasChiefFailed()
- || hasUserScriptFailed();
-
- if (restartRequired) {
- log.debug("Cluster will be restarted [clusterId=" + clusterId + "]");
-
- restartCluster();
- }
- }
-
- stopCluster(true);
-
- log.debug("Cluster maintainer completed [clusterId=" + clusterId + "]");
- }
-
- /**
- * Restarts TensorFlow cluster.
- */
- private void restartCluster() {
- stopCluster(false);
- startCluster();
- }
-
- /**
- * Stops TensorFlow cluster.
- *
- * @param terminate Terminate TensorFlow cluster and notify all listeners that cluster won't be started again.
- */
- private void stopCluster(boolean terminate) {
- clusterMgr.stopClusterIfExists(clusterId);
-
- if (terminate)
- ignite.message().send(topicName, Optional.empty());
- }
-
- /**
- * Starts TensorFlow cluster.
- */
- private void startCluster() {
- TensorFlowCluster cluster = clusterMgr.createCluster(
- clusterId,
- jobArchive,
- str -> ignite.message().sendOrdered("us_out_" + clusterId, str, 60 * 1000),
- str -> ignite.message().sendOrdered("us_err_" + clusterId, str, 60 * 1000)
- );
-
- ignite.message().send(topicName, Optional.of(cluster));
- }
-
- /**
- * Checks if affinity mapping has been changed.
- *
- * @return True if mapping has been changed, otherwise false.
- */
- private boolean hasAffinityChanged() {
- Affinity<?> affinity = ignite.affinity(jobArchive.getUpstreamCacheName());
-
- int parts = affinity.partitions();
-
- UUID[] ids = new UUID[parts];
-
- for (int part = 0; part < parts; part++) {
- ClusterNode node = affinity.mapPartitionToNode(part);
- UUID nodeId = node.id();
- ids[part] = nodeId;
- }
-
- if (prev == null || !Arrays.equals(ids, prev)) {
- prev = ids;
- return true;
- }
-
- return false;
- }
-
- /**
- * Checks is any worker has failed.
- *
- * @return True if any worker has failed, otherwise false.
- */
- private boolean hasAnyWorkerFailed() {
- TensorFlowCluster cluster = clusterMgr.getCluster(clusterId);
-
- Map<UUID, List<LongRunningProcessStatus>> statuses;
- try {
- statuses = clusterMgr.getSrvProcMgr().ping(cluster.getProcesses());
- }
- catch (Exception e) {
- log.error("Failed to check process statuses", e);
-
- return true;
- }
-
- for (UUID nodeId : statuses.keySet()) {
- for (LongRunningProcessStatus status : statuses.get(nodeId)) {
- if (status.getState().equals(LongRunningProcessState.DONE))
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Checks if chief has failed.
- *
- * @return True if chief has failed, otherwise false.
- */
- private boolean hasChiefFailed() {
- return clusterMgr.getChiefException(clusterId) != null;
- }
-
- /**
- * Checks if user script failed.
- *
- * @return True if user script has failed, otherwise false.
- */
- private boolean hasUserScriptFailed() {
- return clusterMgr.getUserScriptException(clusterId) != null;
- }
-
- /**
- * Checks if user script has completed successfully.
- *
- * @return True if user script has completed successfully, otherwise false.
- */
- private boolean hasUserScriptCompletedSuccessfully() {
- return clusterMgr.isUserScriptCompleted(clusterId)
- && clusterMgr.getUserScriptException(clusterId) == null;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterManager.java
deleted file mode 100644
index 12ed4ea..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowClusterManager.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.locks.Lock;
-import java.util.function.Consumer;
-import javax.cache.Cache;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.ScanQuery;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowServerAddressSpec;
-import org.apache.ignite.tensorflow.cluster.tfrunning.TensorFlowServer;
-import org.apache.ignite.tensorflow.cluster.tfrunning.TensorFlowServerManager;
-import org.apache.ignite.tensorflow.cluster.util.TensorFlowChiefRunner;
-import org.apache.ignite.tensorflow.cluster.util.TensorFlowClusterResolver;
-import org.apache.ignite.tensorflow.cluster.util.TensorFlowUserScriptRunner;
-import org.apache.ignite.tensorflow.core.util.CustomizableThreadFactory;
-
-/**
- * TensorFlow cluster manager that allows to start, maintain and stop TensorFlow cluster.
- */
-public class TensorFlowClusterManager {
- /** TensorFlow cluster metadata cache name. */
- private static final String TF_CLUSTER_METADATA_CACHE_NAME = "TF_CLUSTER_METADATA_CACHE";
-
- /** Ignite instance. */
- private final Ignite ignite;
-
- /** TensorFlow server manager. */
- private final TensorFlowServerManager srvProcMgr;
-
- /** TensorFlow cluster resolver. */
- private final TensorFlowClusterResolver clusterRslvr;
-
- /** TensorFlow cluster metadata cache. */
- private IgniteCache<UUID, TensorFlowCluster> cache;
-
- /** TensorFlow chief runners. */
- private ConcurrentMap<UUID, TensorFlowChiefRunner> chiefRunners;
-
- /** TensorFlow user script runners. */
- private ConcurrentMap<UUID, TensorFlowUserScriptRunner> userScriptRunners;
-
- /**
- * Constructs a new instance of TensorFlow cluster manager.
- *
- * @param ignite Ignite instance.
- */
- public TensorFlowClusterManager(Ignite ignite) {
- assert ignite != null : "Ignite instance should not be null";
-
- this.ignite = ignite;
- this.srvProcMgr = new TensorFlowServerManager(ignite);
- this.clusterRslvr = new TensorFlowClusterResolver(ignite, "TF", 10000, 1000);
- this.cache = getOrCreateCache();
- this.chiefRunners = new ConcurrentHashMap<>();
- this.userScriptRunners = new ConcurrentHashMap<>();
- }
-
- /**
- * Returns cluster by identifier.
- *
- * @param clusterId Cluster identifier.
- * @return TensorFlow cluster.
- */
- public TensorFlowCluster getCluster(UUID clusterId) {
- return cache.get(clusterId);
- }
-
- /**
- * Creates and starts a new TensorFlow cluster for the specified cache.
- *
- * @param clusterId Cluster identifier.
- * @param jobArchive Job archive.
- * @return TensorFlow cluster metadata.
- */
- public TensorFlowCluster createCluster(UUID clusterId, TensorFlowJobArchive jobArchive,
- Consumer<String> userScriptOut, Consumer<String> userScriptErr) {
- Lock clusterMgrCacheLock = cache.lock(clusterId);
- clusterMgrCacheLock.lock();
-
- try {
- TensorFlowCluster cluster = cache.get(clusterId);
-
- if (cluster != null)
- throw new IllegalStateException("Cluster is already created [clusterId=" + clusterId + "]");
-
- TensorFlowClusterSpec clusterSpec = clusterRslvr.resolveAndAcquirePorts(jobArchive.getUpstreamCacheName());
- cluster = startCluster(clusterId, clusterSpec, jobArchive, userScriptOut, userScriptErr);
- cache.put(clusterId, cluster);
-
- return cluster;
- }
- finally {
- clusterMgrCacheLock.unlock();
- }
- }
-
- /**
- * Stops TensorFlow cluster.
- *
- * @param clusterId TensorFlow cluster identifier.
- */
- public void stopClusterIfExists(UUID clusterId) {
- Lock clusterMgrCacheLock = cache.lock(clusterId);
- clusterMgrCacheLock.lock();
-
- try {
- TensorFlowCluster cluster = cache.get(clusterId);
-
- if (cluster != null) {
- stopChief(clusterId);
- stopUserScript(clusterId);
- srvProcMgr.stop(cluster.getProcesses(), true);
- clusterRslvr.releasePorts(cluster.getSpec());
- cache.remove(clusterId);
- }
- }
- finally {
- clusterMgrCacheLock.unlock();
- }
- }
-
- /** Destroys TensorFlow cluster manager and related caches. */
- public void destroy() {
- clusterRslvr.destroy();
- ignite.destroyCache(TF_CLUSTER_METADATA_CACHE_NAME);
- }
-
- /**
- * Starts TensorFlow cluster using the specified specification and returns metadata of the started cluster.
- *
- * @param clusterId Cluster identifier.
- * @param spec TensorFlow cluster specification.
- * @return TensorFlow cluster metadata.
- */
- private TensorFlowCluster startCluster(UUID clusterId, TensorFlowClusterSpec spec, TensorFlowJobArchive jobArchive,
- Consumer<String> userScriptOut, Consumer<String> userScriptErr) {
- Map<String, List<TensorFlowServerAddressSpec>> jobs = spec.getJobs();
-
- Map<UUID, List<UUID>> workerProcesses = startWorkers(spec, jobs.get(TensorFlowClusterResolver.WORKER_JOB_NAME));
-
- startChief(clusterId, spec);
- startUserScript(clusterId, jobArchive, spec, userScriptOut, userScriptErr);
-
- return new TensorFlowCluster(spec, workerProcesses);
- }
-
- /**
- * Starts TensorFlow worker processes using the specified specification and returns identifiers of the started
- * processes.
- *
- * @param spec TensorFlow cluster specification.
- * @param tasks Worker tasks.
- * @return Identifiers of the started processes.
- */
- private Map<UUID, List<UUID>> startWorkers(TensorFlowClusterSpec spec, List<TensorFlowServerAddressSpec> tasks) {
- List<TensorFlowServer> srvs = new ArrayList<>();
-
- if (tasks != null) {
- for (int i = 0; i < tasks.size(); i++) {
- TensorFlowServer srvSpec = new TensorFlowServer(spec, TensorFlowClusterResolver.WORKER_JOB_NAME, i);
- srvs.add(srvSpec);
- }
- }
-
- return srvProcMgr.start(srvs);
- }
-
- /**
- * Starts chief process using the specified cluster specification.
- *
- * @param clusterId Cluster identifier.
- * @param spec TensorFlow cluster specification.
- */
- private void startChief(UUID clusterId, TensorFlowClusterSpec spec) {
- TensorFlowChiefRunner chiefRunner = new TensorFlowChiefRunner(
- ignite,
- Executors.newSingleThreadExecutor(
- new CustomizableThreadFactory("tf-ch", true)
- ),
- spec,
- System.out::println,
- System.err::println
- );
-
- chiefRunner.start();
-
- chiefRunners.put(clusterId, chiefRunner);
- }
-
- /**
- * Stops chief process.
- *
- * @param clusterId Cluster identifier.
- */
- private void stopChief(UUID clusterId) {
- TensorFlowChiefRunner runner = chiefRunners.remove(clusterId);
-
- if (runner != null)
- runner.stop();
- }
-
- /**
- * Checks if chief completed and returns result.
- *
- * @param clusterId Cluster identifier.
- * @return {@code true} if chief completed, otherwise {@code false}.
- */
- public boolean isChiefCompleted(UUID clusterId) {
- TensorFlowChiefRunner runner = chiefRunners.get(clusterId);
-
- return runner != null && runner.isCompleted();
- }
-
- /**
- * Returns an exception that happened during execution or {@code null} if there is no exception.
- *
- * @param clusterId Cluster identifier.
- * @return Exception that happened during execution or {@code null} if there is no exception.
- */
- public Exception getChiefException(UUID clusterId) {
- TensorFlowChiefRunner runner = chiefRunners.get(clusterId);
-
- return runner != null ? runner.getException() : null;
- }
-
- /**
- * Starts user script processes using the specified job archive.
- *
- * @param clusterId Cluster identifier.
- * @param jobArchive Job archive.
- * @param clusterSpec Cluster specification.
- */
- private void startUserScript(UUID clusterId, TensorFlowJobArchive jobArchive, TensorFlowClusterSpec clusterSpec,
- Consumer<String> out, Consumer<String> err) {
- TensorFlowUserScriptRunner userScriptRunner = new TensorFlowUserScriptRunner(
- ignite,
- Executors.newSingleThreadExecutor(
- new CustomizableThreadFactory("tf-us", true)
- ),
- jobArchive,
- clusterSpec,
- out,
- err
- );
-
- userScriptRunner.start();
-
- userScriptRunners.put(clusterId, userScriptRunner);
- }
-
- /**
- * Stops user script process.
- *
- * @param clusterId Cluster identifier.
- */
- private void stopUserScript(UUID clusterId) {
- TensorFlowUserScriptRunner runner = userScriptRunners.remove(clusterId);
-
- if (runner != null)
- runner.stop();
- }
-
- /**
- * Checks if user script completed and returns result.
- *
- * @param clusterId Cluster identifier.
- * @return {@code true} if user script completed, otherwise {@code false}.
- */
- public boolean isUserScriptCompleted(UUID clusterId) {
- TensorFlowUserScriptRunner runner = userScriptRunners.get(clusterId);
-
- return runner != null && runner.isCompleted();
- }
-
- /**
- * Returns an exception that happened during execution or {@code null} if there is no exception.
- *
- * @param clusterId Cluster identifier.
- * @return Exception that happened during execution or {@code null} if there is no exception.
- */
- public Exception getUserScriptException(UUID clusterId) {
- TensorFlowUserScriptRunner runner = userScriptRunners.get(clusterId);
-
- return runner != null ? runner.getException() : null;
- }
-
- /**
- * Returns list of maintained TensorFlow clusters.
- *
- * @return List of maintained TensorFlow clusters.
- */
- public Map<UUID, TensorFlowCluster> getAllClusters() {
- Map<UUID, TensorFlowCluster> res = new HashMap<>();
-
- ScanQuery<UUID, TensorFlowCluster> qry = new ScanQuery<>();
- QueryCursor<Cache.Entry<UUID, TensorFlowCluster>> cursor = cache.query(qry);
- for (Cache.Entry<UUID, TensorFlowCluster> e : cursor)
- res.put(e.getKey(), e.getValue());
-
- return res;
- }
-
- /** */
- public TensorFlowServerManager getSrvProcMgr() {
- return srvProcMgr;
- }
-
- /**
- * Returns existing cluster manager cache or creates a new one.
- *
- * @return Cluster manager cache.
- */
- private IgniteCache<UUID, TensorFlowCluster> getOrCreateCache() {
- CacheConfiguration<UUID, TensorFlowCluster> cacheConfiguration = new CacheConfiguration<>();
- cacheConfiguration.setName(TF_CLUSTER_METADATA_CACHE_NAME);
- cacheConfiguration.setCacheMode(CacheMode.REPLICATED);
- cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
-
- return ignite.getOrCreateCache(cacheConfiguration);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowJobArchive.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowJobArchive.java
deleted file mode 100644
index 953cf76..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/TensorFlowJobArchive.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster;
-
-import java.io.Serializable;
-
-/**
- * TensorFlow job archive that keeps archived working directory and command to be executed.
- */
-public class TensorFlowJobArchive implements Serializable {
- /** */
- private static final long serialVersionUID = -5977231383594482459L;
-
- /** Upstream cache name. */
- private final String upstreamCacheName;
-
- /** Archived working directory. */
- private final byte[] data;
-
- /** Command to be executed with arguments. */
- private final String[] commands;
-
- /**
- * Constructs a new instance of TensorFlow job archive.
- *
- * @param upstreamCacheName Upstream cache name.
- * @param data Archived working directory.
- * @param commands Command to be executed with arguments.
- */
- public TensorFlowJobArchive(String upstreamCacheName, byte[] data, String[] commands) {
- this.upstreamCacheName = upstreamCacheName;
- this.data = data;
- this.commands = commands;
- }
-
- /** */
- public String getUpstreamCacheName() {
- return upstreamCacheName;
- }
-
- /** */
- public byte[] getData() {
- return data;
- }
-
- /** */
- public String[] getCommands() {
- return commands;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/package-info.java
deleted file mode 100644
index 858aa90..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/package-info.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * TensorFlow integration API that allows to start and maintain TensorFlow cluster using infrastructure tools from
- * package {@link org.apache.ignite.tensorflow.core}. The most important components are:
- * <ul>
- * <li>{@link org.apache.ignite.tensorflow.cluster.TensorFlowClusterManager} that allows to start and stop
- * TensorFlow cluster on top of Apache Ignite, but doesn't monitor it and doesn't maintain so that in case of
- * failure the cluster won't be restarted.</li>
- * <li>{@link org.apache.ignite.tensorflow.cluster.TensorFlowClusterGatewayManager} that allows to start, maintain
- * and stop TensorFlow cluster on top of Apache Ignite so that in case of failure the cluster will be restarted and
- * recovered.</li>
- * <li>{@link org.apache.ignite.tensorflow.cluster.TensorFlowClusterGateway} that allows to subscribe on cluster
- * configuration changes that might be done as result of rebalancing or node failures.</li>
- * </ul>
- */
-
-package org.apache.ignite.tensorflow.cluster;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/TensorFlowClusterSpec.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/TensorFlowClusterSpec.java
deleted file mode 100644
index ea813ea..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/TensorFlowClusterSpec.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.spec;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-
-/**
- * TensorFlow cluster specification.
- */
-public class TensorFlowClusterSpec implements Serializable {
- /** */
- private static final long serialVersionUID = 1428581667528448091L;
-
- /** TensorFlow cluster jobs. */
- private final Map<String, List<TensorFlowServerAddressSpec>> jobs = new HashMap<>();
-
- /**
- * Adds new task to the cluster specification.
- *
- * @param jobName Job name.
- * @param nodeId Node identifier.
- * @param port Port number.
- * @return This instance of TensorFlow cluster specification.
- */
- public TensorFlowClusterSpec addTask(String jobName, UUID nodeId, int port) {
- jobs.putIfAbsent(jobName, new ArrayList<>());
-
- List<TensorFlowServerAddressSpec> tasks = jobs.get(jobName);
-
- tasks.add(new TensorFlowServerAddressSpec(nodeId, port));
-
- return this;
- }
-
- /**
- * Formats cluster specification so that TensorFlow accepts it.
- *
- * @param ignite Ignite instance.
- * @return Formatted cluster specification.
- */
- public String format(Ignite ignite) {
- StringBuilder builder = new StringBuilder();
-
- builder.append("{\n");
-
- for (Map.Entry<String, List<TensorFlowServerAddressSpec>> entry : jobs.entrySet()) {
- builder
- .append("\t\"")
- .append(entry.getKey())
- .append("\" : [ ");
-
- for (TensorFlowServerAddressSpec address : entry.getValue()) {
- builder
- .append("\n\t\t\"")
- .append(address.format(ignite))
- .append("\", ");
- }
-
- if (!entry.getValue().isEmpty())
- builder.delete(builder.length() - 2, builder.length());
-
- builder.append("\n\t],\n");
- }
-
- if (!jobs.isEmpty())
- builder.delete(builder.length() - 2, builder.length() - 1);
-
- builder.append('}');
-
- return builder.toString();
- }
-
- /** */
- public Map<String, List<TensorFlowServerAddressSpec>> getJobs() {
- return jobs;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/TensorFlowServerAddressSpec.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/TensorFlowServerAddressSpec.java
deleted file mode 100644
index 9421874..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/TensorFlowServerAddressSpec.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.spec;
-
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-
-/**
- * TensorFlow server address specification.
- */
-public class TensorFlowServerAddressSpec implements Serializable {
- /** */
- private static final long serialVersionUID = 7883701602323727681L;
-
- /** Node identifier. */
- private final UUID nodeId;
-
- /** Port. */
- private final int port;
-
- /**
- * Constructs a new instance of TensorFlow server address specification.
- *
- * @param nodeId Node identifier.
- * @param port Port.
- */
- TensorFlowServerAddressSpec(UUID nodeId, int port) {
- assert nodeId != null : "Node identifier should not be null";
- assert port >= 0 && port <= 0xFFFF : "Port should be between 0 and 65535";
-
- this.nodeId = nodeId;
- this.port = port;
- }
-
- /**
- * Formats Server Address specification so that TensorFlow accepts it.
- *
- * @param ignite Ignite instance.
- * @return Formatted server address specification.
- */
- public String format(Ignite ignite) {
- Collection<String> names = ignite.cluster().forNodeId(nodeId).hostNames();
- return names.iterator().next() + ":" + port;
- }
-
- /** */
- public UUID getNodeId() {
- return nodeId;
- }
-
- /** */
- public int getPort() {
- return port;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/package-info.java
deleted file mode 100644
index f744ff9..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/spec/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains specifications that describes TensorFlow cluster configuration.
- */
-
-package org.apache.ignite.tensorflow.cluster.spec;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServer.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServer.java
deleted file mode 100644
index ca67405..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServer.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.tfrunning;
-
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import java.io.Serializable;
-
-/**
- * TensorFlow server specification.
- */
-public class TensorFlowServer implements Serializable {
- /** */
- private static final long serialVersionUID = 165988934166176805L;
-
- /** TensorFlow cluster specification. */
- private final TensorFlowClusterSpec clusterSpec;
-
- /** Job name. */
- private final String jobName;
-
- /** Task index. */
- private final Integer taskIdx;
-
- /** Protocol. */
- private final String proto;
-
- /**
- * Constructs a new instance of TensorFlow server specification.
- *
- * @param clusterSpec TensorFlow cluster specification.
- * @param jobName Job name.
- */
- public TensorFlowServer(TensorFlowClusterSpec clusterSpec, String jobName) {
- this(clusterSpec, jobName, null);
- }
-
- /**
- * Constructs a new instance of TensorFlow server specification.
- *
- * @param clusterSpec TensorFlow cluster specification.
- * @param jobName Job name.
- * @param taskIdx Task index.
- */
- public TensorFlowServer(TensorFlowClusterSpec clusterSpec, String jobName, Integer taskIdx) {
- this(clusterSpec, jobName, taskIdx, null);
- }
-
- /**
- * Constructs a new instance of TensorFlow server specification.
- *
- * @param clusterSpec TensorFlow cluster specification.
- * @param jobName Job name.
- * @param taskIdx Task index.
- * @param proto Task index.
- */
- public TensorFlowServer(TensorFlowClusterSpec clusterSpec, String jobName, Integer taskIdx, String proto) {
- assert clusterSpec != null : "TensorFlow cluster specification should not be null";
- assert jobName != null : "Job name should not be null";
-
- this.clusterSpec = clusterSpec;
- this.jobName = jobName;
- this.taskIdx = taskIdx;
- this.proto = proto;
- }
-
- /** */
- public TensorFlowClusterSpec getClusterSpec() {
- return clusterSpec;
- }
-
- /** */
- public String getJobName() {
- return jobName;
- }
-
- /** */
- public Integer getTaskIdx() {
- return taskIdx;
- }
-
- /** */
- public String getProto() {
- return proto;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServerManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServerManager.java
deleted file mode 100644
index 589d1d7..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServerManager.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.tfrunning;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowServerAddressSpec;
-import org.apache.ignite.tensorflow.cluster.util.TensorFlowProcessBuilderSupplier;
-import org.apache.ignite.tensorflow.core.ProcessManager;
-import org.apache.ignite.tensorflow.core.ProcessManagerWrapper;
-import org.apache.ignite.tensorflow.core.nativerunning.NativeProcess;
-import org.apache.ignite.tensorflow.core.nativerunning.NativeProcessManager;
-
-/**
- * TensorFlow server manager that allows to start, stop and make other actions with TensorFlow servers.
- */
-public class TensorFlowServerManager extends ProcessManagerWrapper<NativeProcess, TensorFlowServer> {
- /** TensorFlow server script formatter. */
- private static final TensorFlowServerScriptFormatter scriptFormatter = new TensorFlowServerScriptFormatter();
-
- /**
- * Constructs a new instance of TensorFlow server manager.
- *
- * @param ignite Ignite instance.
- */
- public TensorFlowServerManager(Ignite ignite) {
- this(new NativeProcessManager(ignite));
- }
-
- /**
- * Constructs a new instance of TensorFlow server manager.
- *
- * @param delegate Delegate.
- */
- public TensorFlowServerManager(ProcessManager<NativeProcess> delegate) {
- super(delegate);
- }
-
- /** {@inheritDoc} */
- @Override protected NativeProcess transformSpecification(TensorFlowServer spec) {
- return new NativeProcess(
- new TensorFlowProcessBuilderSupplier(
- true,
- true,
- "job:" + spec.getJobName(),
- "task:" + spec.getTaskIdx()
- ),
- scriptFormatter.format(spec, true, Ignition.ignite()),
- getNode(spec)
- );
- }
-
- /**
- * Extracts the cluster node server should be running on.
- *
- * @param spec TensorFlow server specification.
- * @return Node identifier.
- */
- private UUID getNode(TensorFlowServer spec) {
- TensorFlowClusterSpec clusterSpec = spec.getClusterSpec();
- Map<String, List<TensorFlowServerAddressSpec>> jobs = clusterSpec.getJobs();
- List<TensorFlowServerAddressSpec> tasks = jobs.get(spec.getJobName());
- TensorFlowServerAddressSpec addr = tasks.get(spec.getTaskIdx());
-
- return addr.getNodeId();
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServerScriptFormatter.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServerScriptFormatter.java
deleted file mode 100644
index fc90ef0..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/TensorFlowServerScriptFormatter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.tfrunning;
-
-import org.apache.ignite.Ignite;
-
-/**
- * Utils class that helps to format Python script that starts TensorFlow server.
- */
-public class TensorFlowServerScriptFormatter {
- /**
- * Formats TensorFlow server specification so that it's available to be passed into а python script.
- *
- * @param srv Server specification.
- * @param join Joins server by default or not.
- * @param ignite Ignite instance.
- * @return Formatted TensorFlow server script.
- */
- public String format(TensorFlowServer srv, boolean join, Ignite ignite) {
- StringBuilder builder = new StringBuilder();
-
- builder.append("from __future__ import absolute_import").append("\n");
- builder.append("from __future__ import division").append("\n");
- builder.append("from __future__ import print_function").append("\n");
-
- builder.append("from threading import Thread").append("\n");
- builder.append("from time import sleep").append("\n");
- builder.append("import os, signal").append("\n");
-
- builder.append("\n");
-
- builder.append("def check_pid(pid):").append("\n");
- builder.append(" try:").append("\n");
- builder.append(" os.kill(pid, 0)").append("\n");
- builder.append(" except OSError:").append("\n");
- builder.append(" return False").append("\n");
- builder.append(" else:").append("\n");
- builder.append(" return True").append("\n");
-
- builder.append("\n");
-
- builder.append("def threaded_function(pid):").append("\n");
- builder.append(" while check_pid(pid):").append("\n");
- builder.append(" sleep(1)").append("\n");
- builder.append(" os.kill(os.getpid(), signal.SIGUSR1)").append("\n");
-
- builder.append("\n");
-
- builder.append("Thread(target = threaded_function, args = (int(os.environ['PPID']), )).start()")
- .append("\n");
- builder.append("\n");
-
- builder.append("import tensorflow as tf").append('\n');
- builder.append("to_import_contrib_ops = tf.contrib.resampler").append("\n");
- builder.append("from tensorflow.contrib.ignite import IgniteDataset").append("\n");
- builder.append("import tensorflow.contrib.igfs.python.ops.igfs_ops").append("\n");
-
- builder.append("print('job:%s task:%d' % ('")
- .append(srv.getJobName())
- .append("', ")
- .append(srv.getTaskIdx())
- .append("))")
- .append("\n");
- builder.append("print('IGNITE_DATASET_HOST = ', os.environ.get('IGNITE_DATASET_HOST'))").append("\n");
- builder.append("print('IGNITE_DATASET_PORT = ', os.environ.get('IGNITE_DATASET_PORT'))").append("\n");
- builder.append("print('IGNITE_DATASET_LOCAL = ', os.environ.get('IGNITE_DATASET_LOCAL'))").append("\n");
-
- builder.append("os.environ['TF_CONFIG'] = '").append(formatTfConfigVar(srv, ignite)).append("'\n");
- builder.append("server = tf.contrib.distribute.run_standard_tensorflow_server()").append("\n");
-
- if (join)
- builder.append("server.join()").append('\n');
-
- return builder.toString();
- }
-
- /**
- * Formats "TF_CONFIG" variable to be passed into user script.
- *
- * @param srv Server description.
- * @param ignite Ignite instance.
- * @return Formatted "TF_CONFIG" variable to be passed into user script.
- */
- private String formatTfConfigVar(TensorFlowServer srv, Ignite ignite) {
- return "{\"cluster\" : " +
- srv.getClusterSpec().format(ignite).replace('\n', ' ') +
- ", " +
- "\"task\": {\"type\" : \"" +
- srv.getJobName() +
- "\", \"index\": " +
- srv.getTaskIdx() +
- "}}";
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/package-info.java
deleted file mode 100644
index b226bb1..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/tfrunning/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Additional "running" layer on top of Python running layer of infrastructure. Allows to start TensorFlow server using
- * server description ({@link org.apache.ignite.tensorflow.cluster.tfrunning.TensorFlowServer}).
- */
-
-package org.apache.ignite.tensorflow.cluster.tfrunning;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/ClusterPortManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/ClusterPortManager.java
deleted file mode 100644
index 681e07f..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/ClusterPortManager.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.util;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cluster.ClusterGroup;
-import org.apache.ignite.cluster.ClusterGroupEmptyException;
-import org.apache.ignite.configuration.CacheConfiguration;
-
-import java.io.Serializable;
-import java.net.NetworkInterface;
-import java.util.*;
-import java.util.concurrent.locks.Lock;
-
-/**
- * Cluster port manager that allows to reliably {@link #acquirePort(UUID)} and {@link #releasePort(UUID, int)} on the
- * cluster nodes.
- */
-public class ClusterPortManager {
- /** Ignite instance. */
- private final Ignite ignite;
-
- /** Ignite logger. */
- private final IgniteLogger log;
-
- /** Port manager cache name. */
- private final String portMgrCacheName;
-
- /** Port range from point. */
- private final int from;
-
- /** Port range size. */
- private final int cnt;
-
- /** Port manager cache */
- private final IgniteCache<HostIdentifier, BitSet> cache;
-
- /**
- * Constructs a new instance of cluster port manager.
- *
- * @param poolName Port pool name.
- * @param from Port range from point.
- * @param cnt Port range size.
- */
- public ClusterPortManager(Ignite ignite, String poolName, int from, int cnt) {
- assert ignite != null : "Ignite instance should not be null";
- assert poolName != null : "Pool name should not be null";
- assert cnt >= 0 : "Count should not be negative";
- assert from >= 0 && cnt + from <= 0xFFFF : "Port range should be between 0 and 65535";
-
- this.ignite = ignite;
- this.log = ignite.log().getLogger(ClusterPortManager.class);
-
- this.portMgrCacheName = String.format("PORT_MANAGER_%s_CACHE", poolName);
- this.from = from;
- this.cnt = cnt;
- this.cache = getOrCreateCache();
- }
-
- /**
- * Acquires free port on the specified node.
- *
- * @param nodeId Node identifier.
- * @return Port to be acquired.
- */
- public int acquirePort(UUID nodeId) {
- HostIdentifier hostId = getHostIdentifier(nodeId);
-
- if (hostId == null)
- throw new IllegalStateException("Can't find node [nodeId=" + nodeId + "]");
-
- Lock lock = cache.lock(hostId);
- lock.lock();
-
- try {
- BitSet ports = cache.get(hostId);
-
- if (ports == null)
- ports = new BitSet(cnt);
-
- int free = ports.nextClearBit(0);
-
- if (free >= cnt)
- throw new IllegalStateException("No free ports in range [from=" + from + ", cnt=" + cnt + "]");
-
- ports.set(free);
- log.debug("Port acquired [nodeId=" + nodeId + ", port=" + (from + free) + "]");
-
- cache.put(hostId, ports);
-
- return from + free;
- }
- finally {
- lock.unlock();
- }
- }
-
- /**
- * Releases acquired port on the specified node.
- *
- * @param nodeId Node identifier.
- * @param port Acquired port to be free.
- */
- public void releasePort(UUID nodeId, int port) {
- assert port - from >= 0 && port - from < cnt : "Port not in the range";
-
- HostIdentifier hostId = getHostIdentifier(nodeId);
-
- if (hostId == null)
- return;
-
- Lock lock = cache.lock(hostId);
- lock.lock();
-
- try {
- BitSet ports = cache.get(hostId);
-
- if (ports != null) {
- ports.clear(port - from);
- log.debug("Port released [nodeId=" + nodeId + ", port=" + port + "]");
-
- if (ports.isEmpty())
- cache.remove(hostId);
- else
- cache.put(hostId, ports);
- }
- }
- finally {
- lock.unlock();
- }
- }
-
- /** Destroys port manager and related caches. */
- public void destroy() {
- ignite.destroyCache(portMgrCacheName);
- }
-
- /**
- * Returns existed port pool cache or creates a new one.
- *
- * @return Port pool cache.
- */
- private IgniteCache<HostIdentifier, BitSet> getOrCreateCache() {
- CacheConfiguration<HostIdentifier, BitSet> cacheConfiguration = new CacheConfiguration<>();
- cacheConfiguration.setName(portMgrCacheName);
- cacheConfiguration.setCacheMode(CacheMode.REPLICATED);
- cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
-
- return ignite.getOrCreateCache(cacheConfiguration);
- }
-
- /**
- * Returns host identifier by node identifier.
- *
- * @param nodeId Node identifier.
- * @return Host identifier.
- */
- private HostIdentifier getHostIdentifier(UUID nodeId) {
- try {
- ClusterGroup grp = ignite.cluster().forNodeId(nodeId);
-
- return ignite.compute(grp).call(() -> {
- Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
-
- List<byte[]> macAddrs = new ArrayList<>();
-
- while (interfaces.hasMoreElements()) {
- NetworkInterface netItf = interfaces.nextElement();
- byte[] macAddr = netItf.getHardwareAddress();
- macAddrs.add(macAddr);
- }
-
- return new HostIdentifier(macAddrs.toArray(new byte[macAddrs.size()][]));
- });
- }
- catch (ClusterGroupEmptyException e) {
- return null;
- }
- }
-
- /**
- * Host identifier based on arrays of mac addresses of the host machine.
- */
- private static class HostIdentifier implements Serializable {
- /** */
- private static final long serialVersionUID = -7060231325908935162L;
-
- /** Mac addresses. */
- private final byte[][] macAddrs;
-
- /**
- * Constructs a new instance of host identifier.
- *
- * @param macAddrs Mac addresses.
- */
- public HostIdentifier(byte[][] macAddrs) {
- this.macAddrs = macAddrs;
- }
-
- /** */
- public byte[][] getMacAddrs() {
- return macAddrs;
- }
-
- /** {@inheritDoc} */
- @Override public boolean equals(Object o) {
- if (this == o)
- return true;
- if (o == null || getClass() != o.getClass())
- return false;
-
- HostIdentifier that = (HostIdentifier)o;
- if (macAddrs.length != that.macAddrs.length)
- return false;
-
- for (int i = 0; i < macAddrs.length; i++)
- if (!Arrays.equals(macAddrs[i], that.macAddrs[i]))
- return false;
-
- return true;
- }
-
- /** {@inheritDoc} */
- @Override public int hashCode() {
- return Arrays.hashCode(macAddrs);
- }
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowChiefRunner.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowChiefRunner.java
deleted file mode 100644
index d8640fa..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowChiefRunner.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.util;
-
-import java.util.concurrent.ExecutorService;
-import java.util.function.Consumer;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import org.apache.ignite.tensorflow.cluster.tfrunning.TensorFlowServer;
-import org.apache.ignite.tensorflow.cluster.tfrunning.TensorFlowServerScriptFormatter;
-import org.apache.ignite.tensorflow.core.util.AsyncNativeProcessRunner;
-import org.apache.ignite.tensorflow.core.util.NativeProcessRunner;
-import org.apache.ignite.tensorflow.core.util.PythonProcessBuilderSupplier;
-
-/**
- * Utils class that helps to start and stop chief process.
- */
-public class TensorFlowChiefRunner extends AsyncNativeProcessRunner {
- /** Ignite instance. */
- private final Ignite ignite;
-
- /** TensorFlow cluster specification. */
- private final TensorFlowClusterSpec spec;
-
- /** Output stream data consumer. */
- private final Consumer<String> out;
-
- /** Error stream data consumer. */
- private final Consumer<String> err;
-
- /**
- * Constructs a new instance of TensorFlow chief runner.
- *
- * @param ignite Ignite instance.
- * @param executor Executor to be used in {@link AsyncNativeProcessRunner}.
- * @param spec TensorFlow cluster specification.
- * @param out Output stream data consumer.
- * @param err Error stream data consumer.
- */
- public TensorFlowChiefRunner(Ignite ignite, ExecutorService executor, TensorFlowClusterSpec spec,
- Consumer<String> out, Consumer<String> err) {
- super(ignite, executor);
- this.ignite = ignite;
- this.spec = spec;
- this.out = out;
- this.err = err;
- }
-
- /** {@inheritDoc} */
- @Override public NativeProcessRunner doBefore() {
- TensorFlowServer srv = new TensorFlowServer(spec, TensorFlowClusterResolver.CHIEF_JOB_NAME, 0);
-
- return new NativeProcessRunner(
- new PythonProcessBuilderSupplier(
- true,
- "job:" + srv.getJobName(),
- "task:" + srv.getTaskIdx()
- ).get(),
- new TensorFlowServerScriptFormatter().format(srv, true, ignite),
- out,
- err
- );
- }
-
- /** {@inheritDoc} */
- @Override public void doAfter() {
- // Do nothing.
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowClusterResolver.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowClusterResolver.java
deleted file mode 100644
index 87aafaf..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowClusterResolver.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.util;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowServerAddressSpec;
-
-/**
- * TensorFlow cluster resolver based on Ignite Cache affinity.
- */
-public class TensorFlowClusterResolver {
- /** TensorFlow worker job name. */
- public static final String WORKER_JOB_NAME = "worker";
-
- /** TensorFlow chief job name. */
- public static final String CHIEF_JOB_NAME = "chief";
-
- /** Ignite instance. */
- private final Ignite ignite;
-
- /** Cluster port manager. */
- private final ClusterPortManager portMgr;
-
- /**
- * Constructs a new instance of TensorFlow cluster resolver.
- *
- * @param ignite Ignite instance.
- */
- public TensorFlowClusterResolver(Ignite ignite, String portPoolName, int portFrom, int portCnt) {
- assert ignite != null : "Ignite instance should not be null";
- assert portPoolName != null : "Port pool name should not be null";
- assert portFrom >= 0 : "Port count should not be negative";
- assert portCnt >= 0 && portCnt + portFrom <= 0xFFFF : "Port range should be between 0 and 65535";
-
- this.ignite = ignite;
- this.portMgr = new ClusterPortManager(ignite, portPoolName, portFrom, portCnt);
- }
-
- /**
- * Resolves TensorFlow cluster and acquires required ports.
- *
- * @param upstreamCacheName Upstream cache name.
- * @return TensorFlow cluster specification.
- */
- public TensorFlowClusterSpec resolveAndAcquirePorts(String upstreamCacheName) {
- TensorFlowClusterSpec spec = new TensorFlowClusterSpec();
-
- resolveAndAcquirePortsForWorkers(spec, upstreamCacheName);
- resolveAndAcquirePortsForChief(spec);
-
- return spec;
- }
-
- /**
- * Releases ports acquired for the given cluster specification.
- *
- * @param spec TensorFlow cluster specification.
- */
- public void releasePorts(TensorFlowClusterSpec spec) {
- for (String jobName : spec.getJobs().keySet())
- for (TensorFlowServerAddressSpec address : spec.getJobs().get(jobName))
- portMgr.releasePort(address.getNodeId(), address.getPort());
- }
-
- /** Destroys TensorFlow cluster resolver. */
- public void destroy() {
- portMgr.destroy();
- }
-
- /**
- * Resolves TensorFlow cluster worker jobs and acquires ports.
- *
- * @param spec TensorFlow cluster specification.
- * @param upstreamCacheName Upstream cache name.
- */
- private void resolveAndAcquirePortsForWorkers(TensorFlowClusterSpec spec, String upstreamCacheName) {
- Affinity<?> affinity = ignite.affinity(upstreamCacheName);
- int parts = affinity.partitions();
-
- Set<UUID> distinctNodeIds = new HashSet<>();
- for (int part = 0; part < parts; part++) {
- ClusterNode node = affinity.mapPartitionToNode(part);
- UUID nodeId = node.id();
- distinctNodeIds.add(nodeId);
- }
- List<UUID> nodeIds = new ArrayList<>(distinctNodeIds);
- Collections.sort(nodeIds);
-
- for (UUID nodeId : nodeIds) {
- int port = portMgr.acquirePort(nodeId);
- spec.addTask(WORKER_JOB_NAME, nodeId, port);
- }
- }
-
- /**
- * Resolves TensorFlow cluster chief job and acquires ports.
- *
- * @param spec TensorFlow cluster specification.
- */
- private void resolveAndAcquirePortsForChief(TensorFlowClusterSpec spec) {
- ClusterNode chiefNode = ignite.cluster().localNode();
- UUID chiefNodeId = chiefNode.id();
- int chiefPort = portMgr.acquirePort(chiefNodeId);
-
- spec.addTask(CHIEF_JOB_NAME, chiefNodeId, chiefPort);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowProcessBuilderSupplier.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowProcessBuilderSupplier.java
deleted file mode 100644
index 73f4b4b..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowProcessBuilderSupplier.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.util;
-
-import java.util.Map;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.processors.odbc.ClientListenerProcessor;
-import org.apache.ignite.tensorflow.core.util.PythonProcessBuilderSupplier;
-
-/**
- * Python process builder supplier that is used to create TensorFlow worker process builder.
- */
-public class TensorFlowProcessBuilderSupplier extends PythonProcessBuilderSupplier {
- /** */
- private static final long serialVersionUID = 6866243505446122897L;
-
- /** Prefix for worker environment variables. */
- private static final String ENV_PREFIX = "IGNITE_DATASET_";
-
- /** Upstream cache query local mode. */
- private final Boolean loc;
-
- /**
- * Constructs a new instance of Python process builder supplier.
- *
- * @param interactive Interactive flag (allows to used standard input to pass Python script).
- * @param loc Upstream cache query local mode.
- * @param meta Meta information that adds to script as arguments.
- */
- public TensorFlowProcessBuilderSupplier(boolean interactive, Boolean loc, String... meta) {
- super(interactive, meta);
- this.loc = loc;
- }
-
- /** {@inheritDoc} */
- @Override public ProcessBuilder get() {
- ProcessBuilder pythonProcBuilder = super.get();
-
- Ignite ignite = Ignition.ignite();
- ClusterNode locNode = ignite.cluster().localNode();
-
- Integer port = locNode.attribute(ClientListenerProcessor.CLIENT_LISTENER_PORT);
-
- Map<String, String> env = pythonProcBuilder.environment();
- env.put(ENV_PREFIX + "HOST", "localhost");
-
- if (port != null)
- env.put(ENV_PREFIX + "PORT", String.valueOf(port));
-
- if (loc != null)
- env.put(ENV_PREFIX + "LOCAL", String.valueOf(loc));
-
- return pythonProcBuilder;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowUserScriptRunner.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowUserScriptRunner.java
deleted file mode 100644
index d9ed9b2..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/TensorFlowUserScriptRunner.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.cluster.util;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.util.List;
-import java.util.Map;
-import java.util.StringJoiner;
-import java.util.concurrent.ExecutorService;
-import java.util.function.Consumer;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import org.apache.commons.io.IOUtils;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.tensorflow.cluster.TensorFlowJobArchive;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowClusterSpec;
-import org.apache.ignite.tensorflow.cluster.spec.TensorFlowServerAddressSpec;
-import org.apache.ignite.tensorflow.core.util.AsyncNativeProcessRunner;
-import org.apache.ignite.tensorflow.core.util.NativeProcessRunner;
-
-/**
- * Utils class that helps to start and stop user script process.
- */
-public class TensorFlowUserScriptRunner extends AsyncNativeProcessRunner {
- /** Ignite logger. */
- private final IgniteLogger log;
-
- /** Job archive that will be extracted and used as working directory for the native process. */
- private final TensorFlowJobArchive jobArchive;
-
- /** TensorFlow cluster specification. */
- private final TensorFlowClusterSpec clusterSpec;
-
- /** Output stream data consumer. */
- private final Consumer<String> out;
-
- /** Error stream data consumer. */
- private final Consumer<String> err;
-
- /** Working directory of the user script process. */
- private File workingDir;
-
- /**
- * Constructs a new instance of TensorFlow user script runner.
- *
- * @param ignite Ignite instance.
- * @param executor Executor to be used in {@link AsyncNativeProcessRunner}.
- * @param jobArchive Job archive that will be extracted and used as working directory for the native process.
- * @param clusterSpec TensorFlow cluster specification.
- * @param out Output stream data consumer.
- * @param err Error stream data consumer.
- */
- public TensorFlowUserScriptRunner(Ignite ignite, ExecutorService executor, TensorFlowJobArchive jobArchive,
- TensorFlowClusterSpec clusterSpec, Consumer<String> out, Consumer<String> err) {
- super(ignite, executor);
-
- this.log = ignite.log().getLogger(TensorFlowUserScriptRunner.class);
-
- this.jobArchive = jobArchive;
- this.clusterSpec = clusterSpec;
- this.out = out;
- this.err = err;
- }
-
- /** {@inheritDoc} */
- @Override public NativeProcessRunner doBefore() {
- try {
- workingDir = Files.createTempDirectory("tf_us_").toFile();
- log.debug("Directory has been created [path=" + workingDir.getAbsolutePath() + "]");
-
- unzip(jobArchive.getData(), workingDir);
- log.debug("Job archive has been extracted [path=" + workingDir.getAbsolutePath() + "]");
-
- return prepareNativeProcessRunner();
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- /** {@inheritDoc} */
- @Override public void doAfter() {
- if (workingDir != null) {
- delete(workingDir);
- log.debug("Directory has been deleted [path=" + workingDir.getAbsolutePath() + "]");
- }
- }
-
- /**
- * Prepares process builder and specifies working directory and command to be run.
- *
- * @return Prepared process builder.
- */
- private NativeProcessRunner prepareNativeProcessRunner() {
- if (workingDir == null)
- throw new IllegalStateException("Working directory is not created");
-
- ProcessBuilder procBuilder = new TensorFlowProcessBuilderSupplier(false, null).get();
-
- procBuilder.directory(workingDir);
- procBuilder.command(jobArchive.getCommands());
-
- Map<String, String> env = procBuilder.environment();
- env.put("PYTHONPATH", workingDir.getAbsolutePath());
- env.put("TF_CLUSTER", formatTfClusterVar());
- env.put("TF_WORKERS", formatTfWorkersVar());
- env.put("TF_CHIEF_SERVER", formatTfChiefServerVar());
-
- return new NativeProcessRunner(procBuilder, null, out, err);
- }
-
- /**
- * Formats "TF_CLUSTER" variable to be passed into user script.
- *
- * @return Formatted "TF_CLUSTER" variable to be passed into user script.
- */
- private String formatTfClusterVar() {
- return clusterSpec.format(Ignition.ignite());
- }
-
- /**
- * Formats "TF_WORKERS" variable to be passed into user script.
- *
- * @return Formatted "TF_WORKERS" variable to be passed into user script.
- */
- private String formatTfWorkersVar() {
- StringJoiner joiner = new StringJoiner(", ");
-
- int cnt = clusterSpec.getJobs().get(TensorFlowClusterResolver.WORKER_JOB_NAME).size();
- for (int i = 0; i < cnt; i++)
- joiner.add("\"/job:" + TensorFlowClusterResolver.WORKER_JOB_NAME + "/task:" + i + "\"");
-
- return "[" + joiner + "]";
- }
-
- /**
- * Formats "TF_CHIEF_SERVER" variable to be passed into user script.
- *
- * @return Formatted "TF_CHIEF_SERVER" variable to be passed into user script.
- */
- private String formatTfChiefServerVar() {
- List<TensorFlowServerAddressSpec> tasks = clusterSpec.getJobs().get(TensorFlowClusterResolver.CHIEF_JOB_NAME);
-
- if (tasks == null || tasks.size() != 1)
- throw new IllegalStateException("TensorFlow cluster specification should contain exactly one chief task");
-
- TensorFlowServerAddressSpec addrSpec = tasks.iterator().next();
-
- return "grpc://" + addrSpec.format(Ignition.ignite());
- }
-
- /**
- * Clears given file or directory recursively.
- *
- * @param file File or directory to be cleaned,
- */
- private void delete(File file) {
- if (file.isDirectory()) {
- String[] files = file.list();
-
- if (files != null && files.length != 0)
- for (String fileToBeDeleted : files)
- delete(new File(file, fileToBeDeleted));
-
- if (!file.delete())
- throw new IllegalStateException("Can't delete directory [path=" + file.getAbsolutePath() + "]");
- }
- else {
- if (!file.delete())
- throw new IllegalStateException("Can't delete file [path=" + file.getAbsolutePath() + "]");
- }
- }
-
- /**
- * Extracts specified zip archive into specified directory.
- *
- * @param data Zip archive to be extracted.
- * @param extractTo Target directory.
- */
- private void unzip(byte[] data, File extractTo) {
- try (ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(data))) {
- ZipEntry entry;
- while ((entry = zipStream.getNextEntry()) != null) {
- File file = new File(extractTo, entry.getName());
-
- if (entry.isDirectory() && !file.exists()) {
- boolean created = file.mkdirs();
- if (!created)
- throw new IllegalStateException("Can't create directory [path=" + file.getAbsolutePath() + "]");
- }
- else {
- if (!file.getParentFile().exists()) {
- boolean created = file.getParentFile().mkdirs();
- if (!created)
- throw new IllegalStateException("Can't create directory [path=" +
- file.getParentFile().getAbsolutePath() + "]");
- }
-
- try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file))) {
- IOUtils.copy(zipStream, out);
- }
- }
- }
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/package-info.java
deleted file mode 100644
index f48d20b..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/cluster/util/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Util components that are used in TensorFlow cluster package.
- */
-
-package org.apache.ignite.tensorflow.cluster.util;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/ProcessManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/ProcessManager.java
deleted file mode 100644
index c825448..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/ProcessManager.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core;
-
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-
-/**
- * Process manager that allows to run and maintain processes in the cluster.
- *
- * @param <R> Type of task to be run.
- */
-public interface ProcessManager<R> {
- /**
- * Starts the processes by the given specifications.
- *
- * @param specifications Process specifications.
- * @return Map of node identifier as a key and list of started process identifiers as a value.
- */
- public Map<UUID, List<UUID>> start(List<R> specifications);
-
- /**
- * Pings the given processes.
- *
- * @param procIds Map of node identifier as a key and list of process identifiers as a value.
- * @return Map of node identifier as a key and list of process statuses as a value.
- */
- public Map<UUID, List<LongRunningProcessStatus>> ping(Map<UUID, List<UUID>> procIds);
-
- /**
- * Stops the given processes.
- *
- * @param procIds Map of node identifier as a key and list of process identifiers as a value.
- * @return Map of node identifier as a key and list of process statuses as a value.
- */
- public Map<UUID, List<LongRunningProcessStatus>> stop(Map<UUID, List<UUID>> procIds, boolean clear);
-
- /**
- * Clears metadata of the given processes.
- *
- * @param procIds Map of node identifier as a key and list of process identifiers as a value.
- * @return Map of node identifier as a key and list of process statuses as a value.
- */
- public Map<UUID, List<LongRunningProcessStatus>> clear(Map<UUID, List<UUID>> procIds);
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/ProcessManagerWrapper.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/ProcessManagerWrapper.java
deleted file mode 100644
index 4f10e83..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/ProcessManagerWrapper.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-
-/**
- * Process manager wrapper that allows to define how one type of process specification should be transformed into
- * another type of process specification delegate working with and delegate all operations to this delegate.
- *
- * @param <T> Type of process specification delegate working with.
- * @param <R> Type of accepted process specifications.
- */
-public abstract class ProcessManagerWrapper<T, R> implements ProcessManager<R> {
- /** Delegate. */
- private final ProcessManager<T> delegate;
-
- /**
- * Constructs a new instance of process manager wrapper.
- *
- * @param delegate Delegate.
- */
- public ProcessManagerWrapper(ProcessManager<T> delegate) {
- assert delegate != null : "Delegate should not be null";
-
- this.delegate = delegate;
- }
-
- /**
- * Transforms accepted process specification into process specification delegate working with.
- *
- * @param spec Accepted process specification.
- * @return Process specification delegate working with.
- */
- protected abstract T transformSpecification(R spec);
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<UUID>> start(List<R> specifications) {
- List<T> transformedSpecifications = new ArrayList<>();
-
- for (R spec : specifications)
- transformedSpecifications.add(transformSpecification(spec));
-
- return delegate.start(transformedSpecifications);
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<LongRunningProcessStatus>> ping(Map<UUID, List<UUID>> procIds) {
- return delegate.ping(procIds);
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<LongRunningProcessStatus>> stop(Map<UUID, List<UUID>> procIds, boolean clear) {
- return delegate.stop(procIds, clear);
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<LongRunningProcessStatus>> clear(Map<UUID, List<UUID>> procIds) {
- return delegate.clear(procIds);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcess.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcess.java
deleted file mode 100644
index f11f42a..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcess.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning;
-
-import java.io.Serializable;
-import java.util.UUID;
-import org.apache.ignite.lang.IgniteRunnable;
-
-/**
- * Long running process specification that contains identifier of a node where the process should be running on and the
- * task to be run.
- */
-public class LongRunningProcess implements Serializable {
- /** */
- private static final long serialVersionUID = 6039507725567997183L;
-
- /** Node identifier. */
- private final UUID nodeId;
-
- /** Task to be run. */
- private final IgniteRunnable task;
-
- /**
- * Constructs a new instance of long running process specification.
- *
- * @param nodeId Node identifier.
- * @param task Task to be run.
- */
- public LongRunningProcess(UUID nodeId, IgniteRunnable task) {
- assert nodeId != null : "Node identifier should not be null";
- assert task != null : "Task should not be null";
-
- this.nodeId = nodeId;
- this.task = task;
- }
-
- /** */
- public UUID getNodeId() {
- return nodeId;
- }
-
- /** */
- public IgniteRunnable getTask() {
- return task;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcessManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcessManager.java
deleted file mode 100644
index a25ff97..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcessManager.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cluster.ClusterGroup;
-import org.apache.ignite.cluster.ClusterGroupEmptyException;
-import org.apache.ignite.tensorflow.core.ProcessManager;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessClearTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessPingTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessStartTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessStopTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-
-/**
- * Long running process manager that allows to start, stop and make other actions with long running processes.
- */
-public class LongRunningProcessManager implements ProcessManager<LongRunningProcess> {
- /** Ignite instance. */
- private final Ignite ignite;
-
- /**
- * Constructs a new instance of long running process manager.
- *
- * @param ignite Ignite instance.
- */
- public LongRunningProcessManager(Ignite ignite) {
- assert ignite != null : "Ignite instance should not be null";
-
- this.ignite = ignite;
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<UUID>> start(List<LongRunningProcess> specifications) {
- return call(groupByNodeId(specifications), LongRunningProcessStartTask::new, this::rollbackStartTask, false);
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<LongRunningProcessStatus>> ping(Map<UUID, List<UUID>> procIds) {
- return call(procIds, LongRunningProcessPingTask::new, this::rollbackNothing, false);
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<LongRunningProcessStatus>> stop(Map<UUID, List<UUID>> procIds, boolean clear) {
- return call(procIds, params -> new LongRunningProcessStopTask(params, clear), this::rollbackNothing, true);
- }
-
- /** {@inheritDoc} */
- @Override public Map<UUID, List<LongRunningProcessStatus>> clear(Map<UUID, List<UUID>> procIds) {
- return call(procIds, LongRunningProcessClearTask::new, this::rollbackNothing, true);
- }
-
- /**
- * Sends the specified tasks to the cluster to be executed.
- *
- * @param params Parameters needed to create tasks.
- * @param taskSupplier Supplier that defines how to create tasks.
- * @param rollback Rollback procedure.
- * @param onlyIfNodeExists If node doesn't exist the correspondent task will be ignored.
- * @param <T> Type of params needed to create tasks.
- * @param <E> Type of returned by task value.
- * @return Map of node identifier as a key and list task results as a value.
- */
- private <T, E> Map<UUID, List<E>> call(Map<UUID, List<T>> params,
- Function<List<T>, LongRunningProcessTask<List<E>>> taskSupplier, Consumer<Map<UUID, List<E>>> rollback,
- boolean onlyIfNodeExists) {
- Map<UUID, List<E>> res = new HashMap<>();
-
- try {
- for (UUID nodeId : params.keySet()) {
- List<T> nodeProcesses = params.get(nodeId);
- LongRunningProcessTask<List<E>> task = taskSupplier.apply(nodeProcesses);
-
- ClusterGroup clusterGrp = ignite.cluster().forNodeId(nodeId);
-
- try {
- List<E> nodeRes = ignite.compute(clusterGrp).call(task);
- res.put(nodeId, nodeRes);
- }
- catch (ClusterGroupEmptyException e) {
- if (!onlyIfNodeExists)
- throw e;
- }
- }
- }
- catch (Exception e) {
- // All-or-nothing strategy. In case of exception already processed tasks should be rolled back.
- rollback.accept(res);
-
- throw e;
- }
-
- return res;
- }
-
- /**
- * Groups the given process specifications by node identifier.
- *
- * @param specifications Process specifications.
- * @return Map of node identifier as a key and list of process specifications as a value.
- */
- private Map<UUID, List<LongRunningProcess>> groupByNodeId(List<LongRunningProcess> specifications) {
- Map<UUID, List<LongRunningProcess>> res = new HashMap<>();
-
- for (LongRunningProcess spec : specifications) {
- UUID nodeId = spec.getNodeId();
-
- List<LongRunningProcess> nodeSpecs = res.get(nodeId);
-
- if (nodeSpecs == null) {
- nodeSpecs = new ArrayList<>();
- nodeSpecs.add(spec);
- res.put(nodeId, nodeSpecs);
- }
- else
- nodeSpecs.add(spec);
- }
-
- return res;
- }
-
- /**
- * Rolls back start task successfully applied earlier.
- *
- * @param procIds Process identifiers.
- */
- private void rollbackStartTask(Map<UUID, List<UUID>> procIds) {
- stop(procIds, true);
- }
-
- /**
- * Rolls back nothing. Ping, stop and clear tasks cannot be rolled back, so it's the only one available strategy
- * for these tasks.
- */
- private void rollbackNothing(Map<UUID, List<LongRunningProcessStatus>> processes) {
- // Do nothing.
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/package-info.java
deleted file mode 100644
index d1edf16..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/package-info.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * The part of TensorFlow integration infrastructure that allows to start and maintain abstract long-running processes.
- * As described in {@link org.apache.ignite.tensorflow.core.longrunning.LongRunningProcess} user only needs to specify
- * runnable task and the node identifier the process should be started on and LongRunning Process Manager will make the
- * rest so that the specified runnable will be executed and maintained on the specified node.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessClearTask.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessClearTask.java
deleted file mode 100644
index 2afaaa9..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessClearTask.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Future;
-
-/**
- * Task that clears process metadata on the node where the process has run.
- */
-public class LongRunningProcessClearTask extends LongRunningProcessTask<List<LongRunningProcessStatus>> {
- /** */
- private static final long serialVersionUID = -1840332865137076107L;
-
- /** Process identifiers. */
- private final List<UUID> procIds;
-
- /**
- * Constructs a new instance of clear task.
- *
- * @param procIds Process identifiers.
- */
- public LongRunningProcessClearTask(List<UUID> procIds) {
- assert procIds != null : "Process identifiers should not be null";
-
- this.procIds = procIds;
- }
-
- /** {@inheritDoc} */
- @Override public List<LongRunningProcessStatus> call() {
- ArrayList<LongRunningProcessStatus> res = new ArrayList<>();
-
- for (UUID prodId : procIds)
- res.add(prepareProcessForRemoving(prodId));
-
- // All-or-nothing strategy. Processes will be removed only if all processes can be removed.
- removeProcessesFromMetadataStorage();
-
- return res;
- }
-
- /**
- * Prepares process to be removed. Checks that the process is not running and wraps information about state and
- * exception into a status object.
- *
- * @param procId Process identifier.
- * @return Process status.
- */
- private LongRunningProcessStatus prepareProcessForRemoving(UUID procId) {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- Future<?> fut = metadataStorage.get(procId);
-
- if (fut == null)
- return new LongRunningProcessStatus(LongRunningProcessState.NOT_FOUND);
-
- if (!fut.isDone())
- throw new IllegalStateException("Process is still running [procId=" + procId + "]");
-
- try {
- fut.get();
- return new LongRunningProcessStatus(LongRunningProcessState.DONE);
- }
- catch (Exception e) {
- return new LongRunningProcessStatus(LongRunningProcessState.DONE, e);
- }
- }
-
- /**
- * Removes processes from metadata storage.
- */
- private void removeProcessesFromMetadataStorage() {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- for (UUID procId : procIds)
- metadataStorage.remove(procId);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessPingTask.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessPingTask.java
deleted file mode 100644
index 5d54886..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessPingTask.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Future;
-
-/**
- * Task that pings processes to check their statuses.
- */
-public class LongRunningProcessPingTask extends LongRunningProcessTask<List<LongRunningProcessStatus>> {
- /** */
- private static final long serialVersionUID = 7003289989579770395L;
-
- /** Process identifiers. */
- private final List<UUID> procIds;
-
- /**
- * Constructs a new instance of ping task.
- *
- * @param procIds Process identifiers.
- */
- public LongRunningProcessPingTask(List<UUID> procIds) {
- assert procIds != null : "Process identifiers should not be null";
-
- this.procIds = procIds;
- }
-
- /** {@inheritDoc} */
- @Override public List<LongRunningProcessStatus> call() {
- ArrayList<LongRunningProcessStatus> statuses = new ArrayList<>();
-
- for (UUID procId : procIds)
- statuses.add(getProcessStatus(procId));
-
- return statuses;
- }
-
- /**
- * Extracts the process status.
- *
- * @param procId Process identifier.
- * @return Process status.
- */
- private LongRunningProcessStatus getProcessStatus(UUID procId) {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- Future<?> fut = metadataStorage.get(procId);
-
- if (fut == null)
- return new LongRunningProcessStatus(LongRunningProcessState.NOT_FOUND);
-
- if (!fut.isDone())
- return new LongRunningProcessStatus(LongRunningProcessState.RUNNING);
-
- try {
- fut.get();
- }
- catch (Exception e) {
- return new LongRunningProcessStatus(LongRunningProcessState.DONE, e);
- }
-
- return new LongRunningProcessStatus(LongRunningProcessState.DONE);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStartTask.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStartTask.java
deleted file mode 100644
index 04f90d3..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStartTask.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import org.apache.ignite.tensorflow.core.longrunning.LongRunningProcess;
-import org.apache.ignite.tensorflow.core.util.CustomizableThreadFactory;
-
-/**
- * Task that starts long running processes by their specifications.
- */
-public class LongRunningProcessStartTask extends LongRunningProcessTask<List<UUID>> {
- /** */
- private static final long serialVersionUID = -3934183044853083034L;
-
- /** Process specifications. */
- private final List<LongRunningProcess> processes;
-
- /**
- * Constructs a new instance of start task.
- *
- * @param processes Process specifications.
- */
- public LongRunningProcessStartTask(List<LongRunningProcess> processes) {
- assert processes != null : "Processes should not be null";
-
- this.processes = processes;
- }
-
- /** {@inheritDoc} */
- @Override public List<UUID> call() {
- ArrayList<UUID> res = new ArrayList<>();
-
- try {
- for (LongRunningProcess proc : processes) {
- Future<?> fut = runTask(proc.getTask());
-
- UUID procId = saveProcMetadata(fut);
-
- res.add(procId);
- }
- }
- catch (Exception e) {
- // All-or-nothing strategy. In case of exception already started processes will be stopped.
- stopAllProcessesAndClearMetadata(res);
-
- throw e;
- }
-
- return res;
- }
-
- /**
- * Executes the task in a separate thread.
- *
- * @param task Task to be executed.
- * @return Future that allows to interrupt or get the status of the task.
- */
- private Future<?> runTask(Runnable task) {
- return Executors
- .newSingleThreadExecutor(new CustomizableThreadFactory("tf-long-running", true))
- .submit(task);
- }
-
- /**
- * Saves process metadata into the local metadata storage.
- *
- * @param fut Future that allows to interrupt or get the status of the task.
- * @return Process identifier.
- */
- private UUID saveProcMetadata(Future<?> fut) {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- UUID procId = UUID.randomUUID();
-
- metadataStorage.put(procId, fut);
-
- return procId;
- }
-
- /**
- * Stop all processes by their identifiers and removes them from the metadata storage.
- *
- * @param procIds Process identifiers.
- */
- private void stopAllProcessesAndClearMetadata(List<UUID> procIds) {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- for (UUID procId : procIds) {
- Future<?> fut = metadataStorage.remove(procId);
- fut.cancel(true);
- }
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStopTask.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStopTask.java
deleted file mode 100644
index 56b906b..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStopTask.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.Future;
-
-/**
- * Task that stops long running processes.
- */
-public class LongRunningProcessStopTask extends LongRunningProcessTask<List<LongRunningProcessStatus>> {
- /** */
- private static final long serialVersionUID = -5552468435820611170L;
-
- /** Process identifiers. */
- private final List<UUID> procIds;
-
- /** Flag that defines that metadata should be removed immediately. */
- private final boolean clear;
-
- /**
- * Constructs a new instance of stop task.
- *
- * @param procIds Process identifiers.
- * @param clear Flag that defines that metadata should be removed immediately.
- */
- public LongRunningProcessStopTask(List<UUID> procIds, boolean clear) {
- assert procIds != null : "Process identifiers should not be null";
-
- this.procIds = procIds;
- this.clear = clear;
- }
-
- /** {@inheritDoc} */
- @Override public List<LongRunningProcessStatus> call() {
- ArrayList<LongRunningProcessStatus> res = new ArrayList<>();
-
- for (UUID prodId : procIds)
- res.add(stopProcess(prodId));
-
- // All-or-nothing strategy. Processes will be removed only if all processes can be removed.
- if (clear)
- removeProcessesFromMetadataStorage();
-
- return res;
- }
-
- /**
- * Stop process by process identifier.
- *
- * @param procId Process identifier.
- * @return Process status after stop.
- */
- private LongRunningProcessStatus stopProcess(UUID procId) {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- Future<?> fut = metadataStorage.get(procId);
-
- if (fut == null)
- return new LongRunningProcessStatus(LongRunningProcessState.NOT_FOUND);
-
- try {
- fut.cancel(true);
- fut.get();
- }
- catch (Exception e) {
- return new LongRunningProcessStatus(LongRunningProcessState.DONE, e);
- }
-
- return new LongRunningProcessStatus(LongRunningProcessState.DONE);
- }
-
- /**
- * Removes processes from metadata storage.
- */
- private void removeProcessesFromMetadataStorage() {
- Map<UUID, Future<?>> metadataStorage = getMetadataStorage();
-
- for (UUID procId : procIds)
- metadataStorage.remove(procId);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessTask.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessTask.java
deleted file mode 100644
index 96d2274..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessTask.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Future;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.lang.IgniteCallable;
-import org.apache.ignite.tensorflow.core.longrunning.LongRunningProcessManager;
-
-/**
- * Task that can be executed on a cluster using the {@link LongRunningProcessManager}.
- *
- * @param <T> Type of the result.
- */
-public abstract class LongRunningProcessTask<T> implements IgniteCallable<T> {
- /** */
- private static final long serialVersionUID = 2351380200758417004L;
-
- /** Long running process storage name. */
- private static final String LONG_RUNNING_PROCESS_STORAGE_NAME = "LONG_RUNNING_PROCESS_STORAGE";
-
- /**
- * Returns task metadata storage that is kept by every node in the cluster.
- *
- * @return Task metadata storage that is kept by every node in the cluster.
- */
- ConcurrentHashMap<UUID, Future<?>> getMetadataStorage() {
- Ignite ignite = Ignition.localIgnite();
-
- ConcurrentMap<String, ConcurrentHashMap<UUID, Future<?>>> nodeLocMap = ignite.cluster().nodeLocalMap();
-
- return nodeLocMap.computeIfAbsent(LONG_RUNNING_PROCESS_STORAGE_NAME, k -> new ConcurrentHashMap<>());
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/package-info.java
deleted file mode 100644
index 34ffe72..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains long-running process tasks that encapsulates the logic of starting, pinging and stopping a long-running
- * process.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/LongRunningProcessState.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/LongRunningProcessState.java
deleted file mode 100644
index 7b3c777..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/LongRunningProcessState.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task.util;
-
-/**
- * Long running process state.
- */
-public enum LongRunningProcessState {
- /** Process not found. */ NOT_FOUND,
- /** Process is running. */ RUNNING,
- /** Process is done */ DONE
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/LongRunningProcessStatus.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/LongRunningProcessStatus.java
deleted file mode 100644
index 1ae8e15..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/LongRunningProcessStatus.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task.util;
-
-import java.io.Serializable;
-
-/**
- * Long running process status that includes state and exception if exists.
- */
-public class LongRunningProcessStatus implements Serializable {
- /** */
- private static final long serialVersionUID = -2958316078722079954L;
-
- /** Process state. */
- private final LongRunningProcessState state;
-
- /** Process exception. */
- private final Exception e;
-
- /**
- * Constructs a new instance of long running process status.
- *
- * @param state Process state.
- */
- public LongRunningProcessStatus(LongRunningProcessState state) {
- this(state, null);
- }
-
- /**
- * Constructs a new instance of long running process status.
- *
- * @param state Process state.
- * @param e Process exception.
- */
- public LongRunningProcessStatus(LongRunningProcessState state, Exception e) {
- assert state != null : "Process state should not be null";
-
- this.state = state;
- this.e = e;
- }
-
- /** */
- public LongRunningProcessState getState() {
- return state;
- }
-
- /** */
- public Exception getException() {
- return e;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/package-info.java
deleted file mode 100644
index 645a8ef..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/longrunning/task/util/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Util package that contains util classes used in long-running tasks.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task.util;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/NativeProcess.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/NativeProcess.java
deleted file mode 100644
index 2ad3c9d..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/NativeProcess.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.nativerunning;
-
-import java.io.Serializable;
-import java.util.UUID;
-import java.util.function.Supplier;
-import org.apache.ignite.tensorflow.util.SerializableSupplier;
-
-/**
- * Native process specification.
- */
-public class NativeProcess implements Serializable {
- /** */
- private static final long serialVersionUID = -7056800139746134956L;
-
- /** Process builder supplier. */
- private final SerializableSupplier<ProcessBuilder> procBuilderSupplier;
-
- /** Stdin of the process. */
- private final String stdin;
-
- /** Node identifier. */
- private final UUID nodeId;
-
- /**
- * Constructs a new instance of native process specification.
- *
- * @param procBuilderSupplier Process builder supplier.
- * @param stdin Stdin of the process.
- * @param nodeId Node identifier.
- */
- public NativeProcess(SerializableSupplier<ProcessBuilder> procBuilderSupplier, String stdin, UUID nodeId) {
- assert procBuilderSupplier != null : "Process builder supplier should not be null";
- assert nodeId != null : "Node identifier should not be null";
-
- this.procBuilderSupplier = procBuilderSupplier;
- this.stdin = stdin;
- this.nodeId = nodeId;
- }
-
- /** */
- public Supplier<ProcessBuilder> getProcBuilderSupplier() {
- return procBuilderSupplier;
- }
-
- /** */
- public String getStdin() {
- return stdin;
- }
-
- /** */
- public UUID getNodeId() {
- return nodeId;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/NativeProcessManager.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/NativeProcessManager.java
deleted file mode 100644
index 5accf3d..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/NativeProcessManager.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.nativerunning;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.tensorflow.core.ProcessManager;
-import org.apache.ignite.tensorflow.core.ProcessManagerWrapper;
-import org.apache.ignite.tensorflow.core.longrunning.LongRunningProcess;
-import org.apache.ignite.tensorflow.core.longrunning.LongRunningProcessManager;
-import org.apache.ignite.tensorflow.core.nativerunning.task.NativeProcessStartTask;
-
-/**
- * Native process manager that allows to start, stop and make other actions with native processes.
- */
-public class NativeProcessManager extends ProcessManagerWrapper<LongRunningProcess, NativeProcess> {
- /**
- * Constructs a new native process manager.
- *
- * @param ignite Ignite instance.
- */
- public NativeProcessManager(Ignite ignite) {
- super(new LongRunningProcessManager(ignite));
- }
-
- /**
- * Constructs a new native process manager.
- *
- * @param delegate Delegate.
- */
- public NativeProcessManager(ProcessManager<LongRunningProcess> delegate) {
- super(delegate);
- }
-
- /** {@inheritDoc} */
- @Override protected LongRunningProcess transformSpecification(NativeProcess spec) {
- return new LongRunningProcess(spec.getNodeId(), new NativeProcessStartTask(spec));
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/package-info.java
deleted file mode 100644
index 86b64b3..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/package-info.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * The part of TensorFlow integration infrastructure that allows to start and maintain abstract native processes. As
- * described in {@link org.apache.ignite.tensorflow.core.nativerunning.NativeProcess} user only needs to specify process
- * builder, stdin and node identifier the process should be started on and Native Process Manager will make the rest so
- * that the specified process will be executed and maintained on the specified node.
- */
-
-package org.apache.ignite.tensorflow.core.nativerunning;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/task/NativeProcessStartTask.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/task/NativeProcessStartTask.java
deleted file mode 100644
index ae9e2b9..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/task/NativeProcessStartTask.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.nativerunning.task;
-
-import java.util.function.Supplier;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.lang.IgniteRunnable;
-import org.apache.ignite.tensorflow.core.nativerunning.NativeProcess;
-import org.apache.ignite.tensorflow.core.util.NativeProcessRunner;
-
-/**
- * Task that starts native process by its specification.
- */
-public class NativeProcessStartTask implements IgniteRunnable {
- /** */
- private static final long serialVersionUID = 8421398298283116405L;
-
- /** Native process specification. */
- private final NativeProcess procSpec;
-
- /**
- * Constructs a new instance of native process start task.
- *
- * @param procSpec Native process specification.
- */
- public NativeProcessStartTask(NativeProcess procSpec) {
- assert procSpec != null : "Process specification should not be null";
-
- this.procSpec = procSpec;
- }
-
- /** {@inheritDoc} */
- @Override public void run() {
- Supplier<ProcessBuilder> procBuilderSupplier = procSpec.getProcBuilderSupplier();
- ProcessBuilder procBuilder = procBuilderSupplier.get();
-
- NativeProcessRunner procRunner = new NativeProcessRunner(
- procBuilder,
- procSpec.getStdin(),
- System.out::println,
- System.err::println
- );
-
- IgniteLogger log = Ignition.ignite().log().getLogger(NativeProcessStartTask.class);
-
- try {
- log.debug("Starting native process");
- procRunner.startAndWait();
- log.debug("Native process completed");
- }
- catch (InterruptedException e) {
- log.debug("Native process interrupted");
- }
- catch (Exception e) {
- log.error("Native process failed", e);
- throw e;
- }
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/task/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/task/package-info.java
deleted file mode 100644
index 02222fc..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/nativerunning/task/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains native process task that encapsulates the logic of starting native process.
- */
-
-package org.apache.ignite.tensorflow.core.nativerunning.task;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/package-info.java
deleted file mode 100644
index dc8b314..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/package-info.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * TensorFlow integration core package that provides infrastructure layers that allows TensorFlow cluster to start and
- * be maintained. It provides layer hierarchy. The lowermost layer (long-running process layer) provides API to start
- * and maintain abstract long-running processes. The second layer (native-running processes layer) is built on top of
- * previous layer and allows to start and maintain native processes. And the third layer (python-running processes
- * layer) is responsible for starting and maintaining of Python native processes.
- */
-
-package org.apache.ignite.tensorflow.core;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/AsyncNativeProcessRunner.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/AsyncNativeProcessRunner.java
deleted file mode 100644
index 8bf32e8..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/AsyncNativeProcessRunner.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.util;
-
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteLogger;
-
-/**
- * Asynchronous native process runner.
- */
-public abstract class AsyncNativeProcessRunner {
- /** Ignite logger. */
- private final IgniteLogger log;
-
- /** Executors that is used to start async native process. */
- private final ExecutorService executor;
-
- /** Future of the async process process. */
- private Future<?> fut;
-
- /**
- * Constructs a new asynchronous native process runner.
- *
- * @param ignite Ignite instance.
- * @param executor Executor.
- */
- public AsyncNativeProcessRunner(Ignite ignite, ExecutorService executor) {
- this.log = ignite.log().getLogger(AsyncNativeProcessRunner.class);
- this.executor = executor;
- }
-
- /**
- * Method that should be called before starting the process.
- *
- * @return Prepared native process runner.
- */
- public abstract NativeProcessRunner doBefore();
-
- /**
- * Method that should be called after starting the process.
- */
- public abstract void doAfter();
-
- /**
- * Starts the process in separate thread.
- */
- public synchronized void start() {
- if (fut != null)
- throw new IllegalStateException("Async native process has already been started");
-
- NativeProcessRunner procRunner = doBefore();
-
- fut = executor.submit(() -> {
- try {
- log.debug("Starting native process");
- procRunner.startAndWait();
- log.debug("Native process completed");
- }
- catch (InterruptedException e) {
- log.debug("Native process interrupted");
- }
- catch (Exception e) {
- log.error("Native process failed", e);
- throw e;
- }
- finally {
- doAfter();
- }
- });
- }
-
- /**
- * Stops the process.
- */
- public synchronized void stop() {
- if (fut != null && !fut.isDone())
- fut.cancel(true);
- }
-
- /**
- * Checks if process is already completed.
- *
- * @return {@code true} if process completed, otherwise {@code false}.
- */
- public boolean isCompleted() {
- return fut != null && fut.isDone();
- }
-
- /**
- * Returns an exception that happened during execution or {@code null} if there is no exception.
- *
- * @return Exception that happened during execution or {@code null} if there is no exception.
- */
- public Exception getException() {
- if (!fut.isDone())
- return null;
-
- try {
- fut.get();
- }
- catch (InterruptedException | ExecutionException e) {
- return e;
- }
-
- return null;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/CustomizableThreadFactory.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/CustomizableThreadFactory.java
deleted file mode 100644
index 2de671d..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/CustomizableThreadFactory.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.util;
-
-import java.util.concurrent.ThreadFactory;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Customizable thread factory that allows to specify thread name and daemon flag for the processes created by this
- * factory.
- */
-public class CustomizableThreadFactory implements ThreadFactory {
- /** Thread name. */
- private final String threadName;
-
- /** Is daemon flag. */
- private final boolean isDaemon;
-
- /**
- * Constructs a new instance of customizable thread factory.
- *
- * @param threadName Thread name.
- * @param isDaemon Is daemon flag.
- */
- public CustomizableThreadFactory(String threadName, boolean isDaemon) {
- this.threadName = threadName;
- this.isDaemon = isDaemon;
- }
-
- /** {@inheritDoc} */
- @Override public Thread newThread(@NotNull Runnable r) {
- Thread thread = new Thread(r);
-
- thread.setName(threadName);
- thread.setDaemon(isDaemon);
-
- return thread;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/NativeProcessRunner.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/NativeProcessRunner.java
deleted file mode 100644
index 38af26d..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/NativeProcessRunner.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.util.Scanner;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Consumer;
-
-/**
- * Utils class that helps to start native processes.
- */
-public class NativeProcessRunner {
- /** Thread name to be used by threads that forward streams. */
- private static final String NATIVE_PROCESS_FORWARD_STREAM_THREAD_NAME = "tf-forward-native-output";
-
- /** Process builder. */
- private final ProcessBuilder procBuilder;
-
- /** Standard input of the process. */
- private final String stdin;
-
- /** Output stream data consumer. */
- private final Consumer<String> out;
-
- /** Error stream data consumer. */
- private final Consumer<String> err;
-
- /**
- * Constructs a new instance of native process runner.
- *
- * @param procBuilder Process builder.
- * @param stdin Standard input of the process.
- * @param out Output stream data consumer.
- * @param err Error stream data consumer.
- */
- public NativeProcessRunner(ProcessBuilder procBuilder, String stdin, Consumer<String> out, Consumer<String> err) {
- this.procBuilder = procBuilder;
- this.stdin = stdin;
- this.out = out;
- this.err = err;
- }
-
- /**
- * Starts the native process and waits it to be completed successfully or with exception.
- */
- public void startAndWait() throws InterruptedException {
- Process proc;
- try {
- proc = procBuilder.start();
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- AtomicBoolean shutdown = new AtomicBoolean();
-
- Thread shutdownHook = new Thread(() -> {
- shutdown.set(true);
- proc.destroy();
- });
-
- Runtime.getRuntime().addShutdownHook(shutdownHook);
-
- Future<?> outForward = forwardStream(proc.getInputStream(), out);
- Future<?> errForward = forwardStream(proc.getErrorStream(), err);
-
- try {
- if (stdin != null) {
- PrintWriter writer = new PrintWriter(proc.getOutputStream());
- writer.println(stdin);
- writer.flush();
- }
-
- int status;
- try {
- status = proc.waitFor();
- }
- catch (InterruptedException e) {
- proc.destroy();
- throw e;
- }
-
- if (!shutdown.get()) {
- Runtime.getRuntime().removeShutdownHook(shutdownHook);
-
- if (status != 0)
- throw new IllegalStateException("Native process exit [status=" + status + "]");
- }
- }
- finally {
- outForward.cancel(true);
- errForward.cancel(true);
- }
- }
-
- /**
- * Forwards stream.
- *
- * @param src Source stream.
- * @param dst Destination stream.
- * @return Future that allows to interrupt forwarding.
- */
- private Future<?> forwardStream(InputStream src, Consumer<String> dst) {
- return Executors
- .newSingleThreadExecutor(new CustomizableThreadFactory(NATIVE_PROCESS_FORWARD_STREAM_THREAD_NAME, true))
- .submit(() -> {
- Scanner scanner = new Scanner(src);
-
- while (!Thread.currentThread().isInterrupted() && scanner.hasNextLine())
- dst.accept(scanner.nextLine());
- });
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/PythonProcessBuilderSupplier.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/PythonProcessBuilderSupplier.java
deleted file mode 100644
index f3882e9..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/PythonProcessBuilderSupplier.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.util;
-
-import java.lang.management.ManagementFactory;
-import java.util.Map;
-import org.apache.ignite.tensorflow.util.SerializableSupplier;
-
-/**
- * Python process builder supplier that is used to create Python process builder.
- */
-public class PythonProcessBuilderSupplier implements SerializableSupplier<ProcessBuilder> {
- /** */
- private static final long serialVersionUID = 7181937306294456125L;
-
- /** Python environment variable name. */
- private static final String PYTHON_ENV_NAME = "PYTHON";
-
- /** Interactive flag (allows to used standard input to pass Python script). */
- private final boolean interactive;
-
- /** Meta information that adds to script as arguments. */
- private final String[] meta;
-
- /**
- * Constructs a new instance of Python process builder supplier.
- *
- * @param interactive Interactive flag (allows to used standard input to pass Python script).
- * @param meta Meta information that adds to script as arguments.
- */
- public PythonProcessBuilderSupplier(boolean interactive, String... meta) {
- this.interactive = interactive;
- this.meta = meta;
- }
-
- /** {@inheritDoc} */
- @Override public ProcessBuilder get() {
- String python = System.getenv(PYTHON_ENV_NAME);
-
- if (python == null)
- python = "python3";
-
- ProcessBuilder procBldr;
- if (interactive) {
- String[] cmd = new String[meta.length + 3];
-
- cmd[0] = python;
- cmd[1] = "-i";
- cmd[2] = "-";
-
- System.arraycopy(meta, 0, cmd, 3, meta.length);
-
- procBldr = new ProcessBuilder(cmd);
- }
- else
- procBldr = new ProcessBuilder(python);
-
- Map<String, String> env = procBldr.environment();
- env.put("PPID", String.valueOf(getProcessId()));
-
- return procBldr;
- }
-
- /**
- * Returns current process identifier.
- *
- * @return Process identifier.
- */
- private long getProcessId() {
- String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
-
- return Long.parseLong(pid);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/package-info.java
deleted file mode 100644
index 39119bd..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/core/util/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Util classes used in other {@link org.apache.ignite.tensorflow.core} classes.
- */
-
-package org.apache.ignite.tensorflow.core.util;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/package-info.java
deleted file mode 100644
index 53189de..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/package-info.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * TensorFlow integration that allows to start and maintain TensorFlow cluster on top of Apache Ignite cluster
- * infrastructure. The TensorFlow cluster is built for the specified cache the following way:
- * <ol>
- * <li>The TensorFlow cluster maintainer is created to maintain the cluster associated with the specified cache so
- * that this service works reliable even the node will fail. It's achieved using Ignite Service Grid.</li>
- * <li>TensorFlow cluster maintainer finds out that cluster is not started and begins starting procedure.</li>
- * <li>TensorFlow cluster resolver builds cluster specification based on the specified cache so that every
- * TensorFlow task is associated with partition of the cache and assumed to be started on the node where the
- * partition is kept.</li>
- * <li>Based on the built cluster specification the set of tasks is sent to the nodes on purpose to start TensorFlow
- * servers on the nodes defined in the specification.</li>
- * <li>When this set of tasks is completed successfully the started process identifiers are returned and saved
- * for future using.</li>
- * <li>The starting procedure is completed. In case a server fails the cluster will be turn down and then started
- * again by maintainer.</li>
- * </ol>
- */
-
-package org.apache.ignite.tensorflow;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/JobSubmitter.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/JobSubmitter.java
deleted file mode 100644
index 0a7cae6..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/JobSubmitter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter;
-
-import org.apache.ignite.tensorflow.submitter.command.RootCommand;
-import picocli.CommandLine;
-
-/**
- * Main class of the job submitter application that allows to submit TensorFlow jobs to be run within Ignite cluster.
- */
-public class JobSubmitter {
- /**
- * Main method.
- *
- * @param args Arguments.
- */
- public static void main(String... args) {
- CommandLine.run(new RootCommand(), System.out, args);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/AbstractCommand.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/AbstractCommand.java
deleted file mode 100644
index 4d2fc18..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/AbstractCommand.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.logger.slf4j.Slf4jLogger;
-import picocli.CommandLine;
-
-/**
- * Abstract command that contains options common for all commands.
- */
-public abstract class AbstractCommand implements Runnable {
- /** Ignite node configuration path. */
- @CommandLine.Option(names = { "-c", "--config" }, description = "Apache Ignite client configuration.")
- protected String cfg;
-
- /**
- * Returns Ignite instance based on configuration specified in {@link #cfg} field.
- *
- * @return Ignite instance.
- */
- protected Ignite getIgnite() {
- if (cfg != null)
- return Ignition.start(cfg);
- else {
- IgniteConfiguration igniteCfg = new IgniteConfiguration();
- igniteCfg.setGridLogger(new Slf4jLogger());
- igniteCfg.setClientMode(true);
-
- return Ignition.start(igniteCfg);
- }
- }
-
- /** */
- public void setCfg(String cfg) {
- this.cfg = cfg;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/AttachCommand.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/AttachCommand.java
deleted file mode 100644
index 946aa08..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/AttachCommand.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
-
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.tensorflow.cluster.TensorFlowClusterGatewayManager;
-import picocli.CommandLine;
-
-/**
- * Command "attach" that is used to attach to running TensorFlow cluster and receive output of the user script.
- */
-@CommandLine.Command(
- name = "attach",
- description = "Attaches to running TensorFlow cluster (user script process).",
- mixinStandardHelpOptions = true
-)
-public class AttachCommand extends AbstractCommand {
- /** TensorFlow cluster identifier. */
- @CommandLine.Parameters(paramLabel = "CLUSTER_ID", description = "Cluster identifier.")
- private UUID clusterId;
-
- /** {@inheritDoc} */
- @Override public void run() {
- try (Ignite ignite = getIgnite()) {
- TensorFlowClusterGatewayManager mgr = new TensorFlowClusterGatewayManager(ignite);
-
- mgr.listenToClusterUserScript(clusterId, System.out::println, System.err::println);
- }
- }
-
- /** */
- public void setClusterId(UUID clusterId) {
- this.clusterId = clusterId;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/PsCommand.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/PsCommand.java
deleted file mode 100644
index 0538496..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/PsCommand.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
-
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.tensorflow.cluster.TensorFlowCluster;
-import org.apache.ignite.tensorflow.cluster.TensorFlowClusterManager;
-import picocli.CommandLine;
-
-/**
- * Command "ps" that is used to print identifiers of all running TensorFlow clusters.
- */
-@CommandLine.Command(
- name = "ps",
- description = "Prints identifiers of all running TensorFlow clusters.",
- mixinStandardHelpOptions = true
-)
-public class PsCommand extends AbstractCommand {
- /** {@inheritDoc} */
- @Override public void run() {
- try (Ignite ignite = getIgnite()) {
- TensorFlowClusterManager mgr = new TensorFlowClusterManager(ignite);
-
- Map<UUID, TensorFlowCluster> clusters = mgr.getAllClusters();
-
- for (UUID clusterId : clusters.keySet())
- System.out.println(clusterId);
- }
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/RootCommand.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/RootCommand.java
deleted file mode 100644
index 508ea7b..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/RootCommand.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
-
-import picocli.CommandLine;
-
-/**
- * Root command that aggregates all sub commands.
- */
-@CommandLine.Command(
- name = "ignite-tf",
- description = "Apache Ignite and TensorFlow integration command line tool that allows to start, maintain and" +
- " stop distributed deep learning utilizing Apache Ignite infrastructure and data.",
- subcommands = {
- StartCommand.class,
- StopCommand.class,
- AttachCommand.class,
- PsCommand.class
- },
- mixinStandardHelpOptions = true
-)
-public class RootCommand extends AbstractCommand {
- /** {@inheritDoc} */
- @Override public void run() {
- CommandLine.usage(this, System.out);
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/StartCommand.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/StartCommand.java
deleted file mode 100644
index 0202b8e..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/StartCommand.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.UUID;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-import org.apache.commons.io.IOUtils;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
-import org.apache.ignite.tensorflow.cluster.TensorFlowClusterGatewayManager;
-import org.apache.ignite.tensorflow.cluster.TensorFlowJobArchive;
-import picocli.CommandLine;
-
-/**
- * Command "start" that is used to start a new TensorFlow cluster on top of Apache Ignite.
- */
-@CommandLine.Command(
- name = "start",
- description = "Starts a new TensorFlow cluster and attaches to user script process.",
- mixinStandardHelpOptions = true
-)
-public class StartCommand extends AbstractCommand {
- /** Upstream cache name. */
- @CommandLine.Parameters(index = "0", paramLabel = "CACHE_NAME", description = "Upstream cache name.")
- private String cacheName;
-
- /** Job folder or archive. */
- @CommandLine.Parameters(index = "1", paramLabel = "JOB_DIR", description = "Job folder (or zip archive).")
- private String jobFolder;
-
- /** Job command to be executed in cluster. */
- @CommandLine.Parameters(index = "2", paramLabel = "JOB_CMD", description = "Job command.")
- private String jobCmd;
-
- /** Arguments of a job command to be executed in cluster. */
- @CommandLine.Parameters(index = "3..*", paramLabel = "JOB_ARGS", description = "Job arguments.")
- private String[] jobArguments;
-
- /** {@inheritDoc} */
- @Override public void run() {
- try (Ignite ignite = getIgnite()) {
- UUID clusterId = UUID.randomUUID();
- String[] commands = new String[jobArguments.length + 1];
- commands[0] = jobCmd;
- System.arraycopy(jobArguments, 0, commands, 1, commands.length - 1);
-
- TensorFlowJobArchive jobArchive = new TensorFlowJobArchive(
- cacheName,
- zip(jobFolder),
- commands
- );
-
- TensorFlowClusterGatewayManager mgr = new TensorFlowClusterGatewayManager(ignite);
- mgr.createCluster(clusterId, jobArchive);
-
- mgr.listenToClusterUserScript(clusterId, System.out::println, System.err::println);
- }
- catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Archives specified folder or file into zip archive.
- *
- * @param jobArchivePath Path to folder to be archived.
- * @return Byte array representing zip archive.
- * @throws IOException In case of input/output exception.
- */
- private byte[] zip(String jobArchivePath) throws IOException {
- Path path = Paths.get(jobArchivePath);
- File file = path.toFile();
-
- if (!file.exists())
- throw new IllegalArgumentException("File doesn't exist [name=" + jobArchivePath + "]");
-
- if (file.isDirectory())
- return zipDirectory(file);
- else if (jobArchivePath.endsWith(FilePageStoreManager.ZIP_SUFFIX))
- return zipArchive(file);
- else
- return zipFile(file);
- }
-
- /**
- * Archives specified folder into zip archive.
- *
- * @param dir Directory to be archived.
- * @return Byte array representing zip archive.
- * @throws IOException In case of input/output exception.
- */
- private byte[] zipDirectory(File dir) throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- try (ZipOutputStream zipFile = new ZipOutputStream(baos)) {
- compressDirectoryToZip(dir.getAbsolutePath(), dir.getAbsolutePath(), zipFile);
- }
-
- return baos.toByteArray();
- }
-
- /**
- * Archives specified file into zip archive.
- *
- * @param file File to be archived.
- * @return Byte array representing zip archive.
- * @throws IOException In case of input/output exception.
- */
- private byte[] zipFile(File file) throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- try (ZipOutputStream zos = new ZipOutputStream(baos)) {
- ZipEntry entry = new ZipEntry(file.getName());
- zos.putNextEntry(entry);
-
- try (FileInputStream in = new FileInputStream(file.getAbsolutePath())) {
- IOUtils.copy(in, zos);
- }
- }
-
- return baos.toByteArray();
- }
-
- /**
- * Reads zip archive into byte array and returns this array.
- *
- * @param file Archive to be read.
- * @return Byte array representing zip archive.
- * @throws IOException In case of input/output exception.
- */
- private byte[] zipArchive(File file) throws IOException {
- try (FileInputStream fis = new FileInputStream(file)) {
- return IOUtils.toByteArray(fis);
- }
- }
-
- /**
- * Archives specified folder into zip output stream.
- *
- * @param rootDir Root directory.
- * @param srcDir Source directory.
- * @param out Zip output stream.
- * @throws IOException In case of input/output exception.
- */
- private void compressDirectoryToZip(String rootDir, String srcDir, ZipOutputStream out) throws IOException {
- File[] files = new File(srcDir).listFiles();
-
- if (files != null) {
- for (File file : files) {
- if (file.isDirectory())
- compressDirectoryToZip(rootDir, srcDir + File.separator + file.getName(), out);
- else {
- ZipEntry entry = new ZipEntry(srcDir.replace(rootDir, "")
- + File.separator + file.getName());
- out.putNextEntry(entry);
-
- try (FileInputStream in = new FileInputStream(srcDir + File.separator + file.getName())) {
- IOUtils.copy(in, out);
- }
- }
- }
- }
- }
-
- /** */
- public void setCacheName(String cacheName) {
- this.cacheName = cacheName;
- }
-
- /** */
- public void setJobFolder(String jobFolder) {
- this.jobFolder = jobFolder;
- }
-
- /** */
- public void setJobCmd(String jobCmd) {
- this.jobCmd = jobCmd;
- }
-
- /** */
- public void setJobArguments(String[] jobArguments) {
- this.jobArguments = jobArguments;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/StopCommand.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/StopCommand.java
deleted file mode 100644
index 8890370..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/StopCommand.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
-
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.tensorflow.cluster.TensorFlowClusterGatewayManager;
-import picocli.CommandLine;
-
-/**
- * Command "stop" that is used to stop TensorFlow cluster.
- */
-@CommandLine.Command(
- name = "stop",
- description = "Stops a running TensorFlow cluster.",
- mixinStandardHelpOptions = true
-)
-public class StopCommand extends AbstractCommand {
- /** Cluster identifier. */
- @CommandLine.Parameters(paramLabel = "CLUSTER_ID", description = "Cluster identifier.")
- private UUID clusterId;
-
- /** {@inheritDoc} */
- @Override public void run() {
- try (Ignite ignite = getIgnite()) {
- TensorFlowClusterGatewayManager mgr = new TensorFlowClusterGatewayManager(ignite);
- mgr.stopClusterIfExists(clusterId);
- }
- }
-
- /** */
- public void setClusterId(UUID clusterId) {
- this.clusterId = clusterId;
- }
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/package-info.java
deleted file mode 100644
index 1693887..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/command/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * This package contains commands that command line tool provides. Pico CLI is used to make these commands maintainable.
- */
-
-package org.apache.ignite.tensorflow.submitter.command;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/package-info.java
deleted file mode 100644
index af6e27c..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/submitter/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * This package contains classes that allow to use command line interface to submit jobs into TensorFlow in Apache
- * Ignite infrastructure.
- */
-
-package org.apache.ignite.tensorflow.submitter;
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/SerializableSupplier.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/SerializableSupplier.java
deleted file mode 100644
index 768dbe1..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/SerializableSupplier.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.util;
-
-import java.io.Serializable;
-import java.util.function.Supplier;
-
-/**
- * Serializable supplier.
- *
- * @param <T> The type of results supplied by this supplier.
- */
-public interface SerializableSupplier<T> extends Supplier<T>, Serializable {
-}
diff --git a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/package-info.java b/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/package-info.java
deleted file mode 100644
index 408e16e..0000000
--- a/modules/tensorflow/src/main/java/org/apache/ignite/tensorflow/util/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Util classes used in {@link org.apache.ignite.tensorflow} package.
- */
-
-package org.apache.ignite.tensorflow.util;
diff --git a/modules/tensorflow/src/main/resources/logback.xml b/modules/tensorflow/src/main/resources/logback.xml
deleted file mode 100644
index 816b5e6..0000000
--- a/modules/tensorflow/src/main/resources/logback.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<!--
- Logback configuration file.
--->
-<configuration>
-
- <appender name="FILE" class="ch.qos.logback.core.FileAppender">
- <file>ignite-tf.log</file>
- <append>false</append>
- <encoder>
- <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
- </encoder>
- </appender>
-
- <root level="warn">
- <appender-ref ref="FILE" />
- </root>
-
-</configuration>
\ No newline at end of file
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/TensorFlowTestSuite.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/TensorFlowTestSuite.java
deleted file mode 100644
index 4ad5216..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/TensorFlowTestSuite.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow;
-
-import org.apache.ignite.tensorflow.core.CoreTestSuite;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * Test suite for all module tests.
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- CoreTestSuite.class
-})
-public class TensorFlowTestSuite {
- // No-op.
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/CoreTestSuite.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/CoreTestSuite.java
deleted file mode 100644
index 92b6dbd..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/CoreTestSuite.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core;
-
-import org.apache.ignite.tensorflow.core.longrunning.LongRunningProcessManagerTest;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessClearTaskTest;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessPingTaskTest;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessStartTaskTest;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessStopTaskTest;
-import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-/**
- * Test suite for all tests in core package.
- */
-@RunWith(Suite.class)
-@Suite.SuiteClasses({
- ProcessManagerWrapperTest.class,
- LongRunningProcessClearTaskTest.class,
- LongRunningProcessPingTaskTest.class,
- LongRunningProcessStartTaskTest.class,
- LongRunningProcessStopTaskTest.class,
- LongRunningProcessManagerTest.class
-})
-public class CoreTestSuite {
- // No-op.
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/ProcessManagerWrapperTest.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/ProcessManagerWrapperTest.java
deleted file mode 100644
index e44daac..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/ProcessManagerWrapperTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.verify;
-
-/**
- * Tests for {@link ProcessManagerWrapper}.
- */
-@RunWith(MockitoJUnitRunner.class)
-public class ProcessManagerWrapperTest {
- /** Delegate. */
- @Mock
- private ProcessManager<String> delegate;
-
- /** Process manager wrapper. */
- private ProcessManagerWrapper<String, Integer> wrapper;
-
- /** Initializes tests. */
- @Before
- public void init() {
- wrapper = new TestProcessManagerWrapper(delegate);
- }
-
- /** */
- @Test
- public void testStart() {
- wrapper.start(Arrays.asList(1, 2, 3));
-
- verify(delegate).start(eq(Arrays.asList("1", "2", "3")));
- }
-
- /** */
- @Test
- public void testPing() {
- Map<UUID, List<UUID>> procIds = Collections.emptyMap();
- wrapper.ping(procIds);
-
- verify(delegate).ping(eq(procIds));
- }
-
- /** */
- @Test
- public void testStop() {
- Map<UUID, List<UUID>> procIds = Collections.emptyMap();
- wrapper.stop(procIds, true);
-
- verify(delegate).stop(eq(procIds), eq(true));
- }
-
- /** */
- @Test
- public void testClear() {
- Map<UUID, List<UUID>> procIds = Collections.emptyMap();
- wrapper.clear(procIds);
-
- verify(delegate).clear(eq(procIds));
- }
-
- /**
- * Process manager wrapper to be used in tests.
- */
- private static class TestProcessManagerWrapper extends ProcessManagerWrapper<String, Integer> {
- /** */
- private static final long serialVersionUID = 7562628311662129855L;
-
- /**
- * Constructs a new instance of process manager wrapper.
- *
- * @param delegate Delegate.
- */
- public TestProcessManagerWrapper(ProcessManager<String> delegate) {
- super(delegate);
- }
-
- /** {@inheritDoc} */
- @Override protected String transformSpecification(Integer spec) {
- return spec.toString();
- }
- }
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcessManagerTest.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcessManagerTest.java
deleted file mode 100644
index faa2b6b..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/LongRunningProcessManagerTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCluster;
-import org.apache.ignite.IgniteCompute;
-import org.apache.ignite.cluster.ClusterGroup;
-import org.apache.ignite.lang.IgniteCallable;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessClearTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessPingTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessStartTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.LongRunningProcessStopTask;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * Tests for {@link LongRunningProcessManager}.
- */
-public class LongRunningProcessManagerTest {
- /** */
- @Test
- @SuppressWarnings("unchecked")
- public void testStart() {
- UUID nodeId = UUID.randomUUID();
- UUID procId = UUID.randomUUID();
-
- Ignite ignite = mock(Ignite.class);
- IgniteCluster cluster = mock(IgniteCluster.class);
- ClusterGroup clusterGrp = mock(ClusterGroup.class);
- IgniteCompute igniteCompute = mock(IgniteCompute.class);
- doReturn(cluster).when(ignite).cluster();
- doReturn(igniteCompute).when(ignite).compute(eq(clusterGrp));
- doReturn(clusterGrp).when(cluster).forNodeId(eq(nodeId));
- doReturn(Collections.singletonList(procId)).when(igniteCompute).call(any(IgniteCallable.class));
-
- List<LongRunningProcess> list = Collections.singletonList(new LongRunningProcess(nodeId, () -> {}));
-
- LongRunningProcessManager mgr = new LongRunningProcessManager(ignite);
- Map<UUID, List<UUID>> res = mgr.start(list);
-
- assertEquals(1, res.size());
- assertTrue(res.containsKey(nodeId));
- assertEquals(procId, res.get(nodeId).iterator().next());
-
- verify(igniteCompute).call(any(LongRunningProcessStartTask.class));
- }
-
- /** */
- @Test
- @SuppressWarnings("unchecked")
- public void testPing() {
- UUID nodeId = UUID.randomUUID();
- UUID procId = UUID.randomUUID();
-
- Ignite ignite = mock(Ignite.class);
- IgniteCluster cluster = mock(IgniteCluster.class);
- ClusterGroup clusterGrp = mock(ClusterGroup.class);
- IgniteCompute igniteCompute = mock(IgniteCompute.class);
- doReturn(cluster).when(ignite).cluster();
- doReturn(igniteCompute).when(ignite).compute(eq(clusterGrp));
- doReturn(clusterGrp).when(cluster).forNodeId(eq(nodeId));
- doReturn(Collections.singletonList(new LongRunningProcessStatus(LongRunningProcessState.RUNNING)))
- .when(igniteCompute).call(any(IgniteCallable.class));
-
- Map<UUID, List<UUID>> procIds = new HashMap<>();
- procIds.put(nodeId, Collections.singletonList(procId));
-
- LongRunningProcessManager mgr = new LongRunningProcessManager(ignite);
- Map<UUID, List<LongRunningProcessStatus>> res = mgr.ping(procIds);
-
- assertEquals(1, res.size());
- assertTrue(res.containsKey(nodeId));
- assertEquals(LongRunningProcessState.RUNNING, res.get(nodeId).iterator().next().getState());
-
- verify(igniteCompute).call(any(LongRunningProcessPingTask.class));
- }
-
- /** */
- @Test
- @SuppressWarnings("unchecked")
- public void testStop() {
- UUID nodeId = UUID.randomUUID();
- UUID procId = UUID.randomUUID();
-
- Ignite ignite = mock(Ignite.class);
- IgniteCluster cluster = mock(IgniteCluster.class);
- ClusterGroup clusterGrp = mock(ClusterGroup.class);
- IgniteCompute igniteCompute = mock(IgniteCompute.class);
- doReturn(cluster).when(ignite).cluster();
- doReturn(igniteCompute).when(ignite).compute(eq(clusterGrp));
- doReturn(clusterGrp).when(cluster).forNodeId(eq(nodeId));
- doReturn(Collections.singletonList(new LongRunningProcessStatus(LongRunningProcessState.RUNNING)))
- .when(igniteCompute).call(any(IgniteCallable.class));
-
- Map<UUID, List<UUID>> procIds = new HashMap<>();
- procIds.put(nodeId, Collections.singletonList(procId));
-
- LongRunningProcessManager mgr = new LongRunningProcessManager(ignite);
- Map<UUID, List<LongRunningProcessStatus>> res = mgr.stop(procIds, true);
-
- assertEquals(1, res.size());
- assertTrue(res.containsKey(nodeId));
- assertEquals(LongRunningProcessState.RUNNING, res.get(nodeId).iterator().next().getState());
-
- verify(igniteCompute).call(any(LongRunningProcessStopTask.class));
- }
-
- /** */
- @Test
- @SuppressWarnings("unchecked")
- public void testClear() {
- UUID nodeId = UUID.randomUUID();
- UUID procId = UUID.randomUUID();
-
- Ignite ignite = mock(Ignite.class);
- IgniteCluster cluster = mock(IgniteCluster.class);
- ClusterGroup clusterGrp = mock(ClusterGroup.class);
- IgniteCompute igniteCompute = mock(IgniteCompute.class);
- doReturn(cluster).when(ignite).cluster();
- doReturn(igniteCompute).when(ignite).compute(eq(clusterGrp));
- doReturn(clusterGrp).when(cluster).forNodeId(eq(nodeId));
- doReturn(Collections.singletonList(new LongRunningProcessStatus(LongRunningProcessState.RUNNING)))
- .when(igniteCompute).call(any(IgniteCallable.class));
-
- Map<UUID, List<UUID>> procIds = new HashMap<>();
- procIds.put(nodeId, Collections.singletonList(procId));
-
- LongRunningProcessManager mgr = new LongRunningProcessManager(ignite);
- Map<UUID, List<LongRunningProcessStatus>> res = mgr.clear(procIds);
-
- assertEquals(1, res.size());
- assertTrue(res.containsKey(nodeId));
- assertEquals(LongRunningProcessState.RUNNING, res.get(nodeId).iterator().next().getState());
-
- verify(igniteCompute).call(any(LongRunningProcessClearTask.class));
- }
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessClearTaskTest.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessClearTaskTest.java
deleted file mode 100644
index 268f3e4..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessClearTaskTest.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-
-/**
- * Tests for {@link LongRunningProcessClearTask}.
- */
-public class LongRunningProcessClearTaskTest {
- /** Process metadata storage used instead of Apache Ignite node local storage. */
- private final ConcurrentMap<UUID, Future<?>> metadataStorage = new ConcurrentHashMap<>();
-
- /** Initializes tests. */
- @Before
- public void init() {
- metadataStorage.clear();
- }
-
- /** Tests execution of the task in case process is not found. */
- @Test
- public void testCallProcessNotFound() {
- LongRunningProcessClearTask clearTask = createTask(UUID.randomUUID());
-
- List<LongRunningProcessStatus> statuses = clearTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.NOT_FOUND, status.getState());
- assertNull(status.getException());
-
- assertEquals(0, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is running. */
- @Test(expected = IllegalStateException.class)
- public void testCallProcessIsRunning() {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(false).when(fut).isDone();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessClearTask clearTask = createTask(procId);
-
- clearTask.call();
- }
-
- /** Tests execution of the task in case process is done. */
- @Test
- public void testCallProcessIsDone() {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(true).when(fut).isDone();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessClearTask clearTask = createTask(procId);
-
- List<LongRunningProcessStatus> statuses = clearTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNull(status.getException());
-
- assertEquals(0, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is done with exception. */
- @Test
- public void testCallProcessIsDoneWithException() throws ExecutionException, InterruptedException {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(true).when(fut).isDone();
- doThrow(RuntimeException.class).when(fut).get();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessClearTask clearTask = createTask(procId);
-
- List<LongRunningProcessStatus> statuses = clearTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNotNull(status.getException());
- assertTrue(status.getException() instanceof RuntimeException);
-
- assertEquals(0, metadataStorage.size());
- }
-
- /**
- * Creates clear task.
- *
- * @param procId Process identifier.
- * @return Clear task.
- */
- private LongRunningProcessClearTask createTask(UUID procId) {
- LongRunningProcessClearTask clearTask = new LongRunningProcessClearTask(Collections.singletonList(procId));
-
- clearTask = spy(clearTask);
- doReturn(metadataStorage).when(clearTask).getMetadataStorage();
-
- return clearTask;
- }
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessPingTaskTest.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessPingTaskTest.java
deleted file mode 100644
index 818509a..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessPingTaskTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-
-/**
- * Tests for {@link LongRunningProcessPingTask}.
- */
-public class LongRunningProcessPingTaskTest {
- /** Process metadata storage used instead of Apache Ignite node local storage. */
- private final ConcurrentMap<UUID, Future<?>> metadataStorage = new ConcurrentHashMap<>();
-
- /** Initializes tests. */
- @Before
- public void init() {
- metadataStorage.clear();
- }
-
- /** Tests execution of the task in case process is not found. */
- @Test
- public void testCallProcessNotFound() {
- LongRunningProcessPingTask pingTask = createTask(UUID.randomUUID());
-
- List<LongRunningProcessStatus> statuses = pingTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.NOT_FOUND, status.getState());
- assertNull(status.getException());
-
- assertEquals(0, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is running. */
- @Test
- public void testCallProcessIsRunning() {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(false).when(fut).isDone();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessPingTask pingTask = createTask(procId);
-
- List<LongRunningProcessStatus> statuses = pingTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.RUNNING, status.getState());
- assertNull(status.getException());
-
- assertEquals(1, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is done. */
- @Test
- public void testCallProcessIsDone() {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(true).when(fut).isDone();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessPingTask pingTask = createTask(procId);
-
- List<LongRunningProcessStatus> statuses = pingTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNull(status.getException());
-
- assertEquals(1, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is done with exception. */
- @Test
- public void testCallProcessIsDoneWithException() throws ExecutionException, InterruptedException {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(true).when(fut).isDone();
- doThrow(RuntimeException.class).when(fut).get();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessPingTask pingTask = createTask(procId);
-
- List<LongRunningProcessStatus> statuses = pingTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNotNull(status.getException());
- assertTrue(status.getException() instanceof RuntimeException);
-
- assertEquals(1, metadataStorage.size());
- }
-
- /**
- * Creates ping task.
- *
- * @param procId Process identifier.
- * @return Ping task.
- */
- private LongRunningProcessPingTask createTask(UUID procId) {
- LongRunningProcessPingTask clearTask = new LongRunningProcessPingTask(Collections.singletonList(procId));
-
- clearTask = spy(clearTask);
- doReturn(metadataStorage).when(clearTask).getMetadataStorage();
-
- return clearTask;
- }
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStartTaskTest.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStartTaskTest.java
deleted file mode 100644
index 0d14335..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStartTaskTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.tensorflow.core.longrunning.LongRunningProcess;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-
-/**
- * Tests for {@link LongRunningProcessStartTask}.
- */
-public class LongRunningProcessStartTaskTest {
- /** Process metadata storage used instead of Apache Ignite node local storage. */
- private final ConcurrentMap<UUID, Future<?>> metadataStorage = new ConcurrentHashMap<>();
-
- /** Initializes tests. */
- @Before
- public void init() {
- metadataStorage.clear();
- }
-
- /** */
- @Test
- public void testCall() throws ExecutionException, InterruptedException {
- LongRunningProcess proc = new LongRunningProcess(UUID.randomUUID(), () -> {});
- LongRunningProcessStartTask task = createTask(proc);
- List<UUID> procIds = task.call();
-
- assertEquals(1, procIds.size());
-
- UUID procId = procIds.get(0);
-
- assertNotNull(metadataStorage.get(procId));
-
- Future<?> fut = metadataStorage.get(procId);
- fut.get();
-
- assertEquals(true, fut.isDone());
- }
-
- /** */
- @Test(expected = ExecutionException.class)
- public void testCallWithException() throws ExecutionException, InterruptedException {
- LongRunningProcess proc = new LongRunningProcess(UUID.randomUUID(), () -> {
- throw new RuntimeException();
- });
- LongRunningProcessStartTask task = createTask(proc);
- List<UUID> procIds = task.call();
-
- assertEquals(1, procIds.size());
-
- UUID procId = procIds.get(0);
-
- assertNotNull(metadataStorage.get(procId));
-
- Future<?> fut = metadataStorage.get(procId);
- fut.get();
- }
-
- /**
- * Creates start task.
- *
- * @param proc Long running process.
- * @return Start task.
- */
- private LongRunningProcessStartTask createTask(LongRunningProcess proc) {
- LongRunningProcessStartTask startTask = new LongRunningProcessStartTask(Collections.singletonList(proc));
-
- startTask = spy(startTask);
- doReturn(metadataStorage).when(startTask).getMetadataStorage();
-
- return startTask;
- }
-}
diff --git a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStopTaskTest.java b/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStopTaskTest.java
deleted file mode 100644
index 129f0cb..0000000
--- a/modules/tensorflow/src/test/java/org/apache/ignite/tensorflow/core/longrunning/task/LongRunningProcessStopTaskTest.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tensorflow.core.longrunning.task;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessState;
-import org.apache.ignite.tensorflow.core.longrunning.task.util.LongRunningProcessStatus;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-/**
- * Tests for {@link LongRunningProcessStopTask}.
- */
-public class LongRunningProcessStopTaskTest {
- /** Process metadata storage used instead of Apache Ignite node local storage. */
- private final ConcurrentMap<UUID, Future<?>> metadataStorage = new ConcurrentHashMap<>();
-
- /** Initializes tests. */
- @Before
- public void init() {
- metadataStorage.clear();
- }
-
- /** Tests execution of the task in case process is not found. */
- @Test
- public void testCallProcessNotFound() {
- LongRunningProcessStopTask stopTask = createTask(UUID.randomUUID(), true);
-
- List<LongRunningProcessStatus> statuses = stopTask.call();
-
- assertEquals(1, statuses.size());
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.NOT_FOUND, status.getState());
- assertNull(status.getException());
-
- assertEquals(0, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is running. */
- @Test
- public void testCallProcessIsRunning() {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(false).when(fut).isDone();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessStopTask stopTask = createTask(procId, true);
-
- List<LongRunningProcessStatus> statuses = stopTask.call();
-
- assertEquals(1, statuses.size());
- verify(fut).cancel(eq(true));
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNull(status.getException());
-
- assertEquals(0, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is done. */
- @Test
- public void testCallProcessIsDone() {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(true).when(fut).isDone();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessStopTask stopTask = createTask(procId, true);
-
- List<LongRunningProcessStatus> statuses = stopTask.call();
-
- assertEquals(1, statuses.size());
- verify(fut).cancel(eq(true));
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNull(status.getException());
-
- assertEquals(0, metadataStorage.size());
- }
-
- /** Tests execution of the task in case process is done with exception. */
- @Test
- public void testCallProcessIsDoneWithException() throws ExecutionException, InterruptedException {
- UUID procId = UUID.randomUUID();
-
- Future<?> fut = mock(Future.class);
- doReturn(true).when(fut).isDone();
- doThrow(RuntimeException.class).when(fut).get();
- metadataStorage.put(procId, fut);
-
- LongRunningProcessStopTask stopTask = createTask(procId, true);
-
- List<LongRunningProcessStatus> statuses = stopTask.call();
-
- assertEquals(1, statuses.size());
- verify(fut).cancel(eq(true));
-
- LongRunningProcessStatus status = statuses.get(0);
- assertEquals(LongRunningProcessState.DONE, status.getState());
- assertNotNull(status.getException());
- assertTrue(status.getException() instanceof RuntimeException);
-
- assertEquals(0, metadataStorage.size());
- }
-
- /**
- * Creates stop task.
- *
- * @param procId Process identifier.
- * @return Stop task.
- */
- private LongRunningProcessStopTask createTask(UUID procId, boolean clear) {
- LongRunningProcessStopTask clearTask = new LongRunningProcessStopTask(Collections.singletonList(procId), clear);
-
- clearTask = Mockito.spy(clearTask);
- doReturn(metadataStorage).when(clearTask).getMetadataStorage();
-
- return clearTask;
- }
-}
diff --git a/parent/pom.xml b/parent/pom.xml
index 8b92c5b..f2b883c 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -465,10 +465,6 @@
<packages>org.apache.ignite.ml*</packages>
</group>
<group>
- <title>Ignite TensorFlow</title>
- <packages>org.apache.ignite.tensorflow*</packages>
- </group>
- <group>
<title>Encryption SPI</title>
<packages>org.apache.ignite.spi.encryption*</packages>
</group>
diff --git a/pom.xml b/pom.xml
index 6db5b55..28e0385 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,9 +96,7 @@
<module>modules/ml</module>
<module>modules/ml/spark-model-parser</module>
<module>modules/ml/xgboost-model-parser</module>
- <module>modules/ml/tensorflow-model-parser</module>
<module>modules/ml/h2o-model-parser</module>
- <module>modules/tensorflow</module>
<module>modules/opencensus</module>
</modules>
@@ -122,7 +120,6 @@
<profile>
<id>all-scala</id><!-- used to update project versions and check all modules compilation -->
<modules><!-- sorted alphabetically -->
- <module>modules/ml/mleap-model-parser</module>
<module>modules/scalar-2.10</module>
<module>modules/scalar</module>
<module>modules/spark</module>
@@ -560,7 +557,6 @@
</activation>
<modules>
- <module>modules/ml/mleap-model-parser</module>
<module>modules/scalar</module>
<module>modules/spark</module>
<module>modules/visor-console</module>
@@ -577,7 +573,6 @@
<modules>
<module>modules/spark-2.4</module>
- <module>modules/ml/mleap-model-parser</module>
<module>modules/scalar</module>
</modules>
</profile>