http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
new file mode 100644
index 0000000..7efa29c
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/ConsoleLogger.java
@@ -0,0 +1,102 @@
+/*
+ * 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.environment.logging;
+
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.Tracer;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * Simple logger printing to STD-out.
+ */
+public class ConsoleLogger implements MLLogger {
+    /** Maximum Verbose level. */
+    private final VerboseLevel maxVerboseLevel;
+    /** Class name. */
+    private final String className;
+
+    /**
+     * Creates an instance of ConsoleLogger.
+     *
+     * @param maxVerboseLevel Max verbose level.
+     * @param clsName Class name.
+     */
+    private ConsoleLogger(VerboseLevel maxVerboseLevel, String clsName) {
+        this.className = clsName;
+        this.maxVerboseLevel = maxVerboseLevel;
+    }
+
+    /**
+     * Returns an instance of ConsoleLogger factory.
+     *
+     * @param maxVerboseLevel Max verbose level.
+     */
+    public static Factory factory(VerboseLevel maxVerboseLevel) {
+        return new Factory(maxVerboseLevel);
+    }
+
+    /** {@inheritDoc} */
+    @Override public Vector log(Vector vector) {
+        Tracer.showAscii(vector);
+        return vector;
+    }
+
+    /** {@inheritDoc} */
+    @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, 
Model<K, V> mdl) {
+        print(verboseLevel, mdl.toString(true));
+        return mdl;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void log(VerboseLevel verboseLevel, String fmtStr, 
Object... params) {
+        print(verboseLevel, String.format(fmtStr, params));
+    }
+
+    /**
+     * Prints log line to STD-out.
+     *
+     * @param verboseLevel Verbose level.
+     * @param line Line.
+     */
+    private void print(VerboseLevel verboseLevel, String line) {
+        if (this.maxVerboseLevel.compareTo(verboseLevel) >= 0)
+            System.out.println(String.format("%s [%s] %s", className, 
verboseLevel.name(), line));
+    }
+
+    /**
+     * ConsoleLogger factory.
+     */
+    private static class Factory implements MLLogger.Factory {
+        /** Max Verbose level. */
+        private final VerboseLevel maxVerboseLevel;
+
+        /**
+         * Creates an instance of ConsoleLogger factory.
+         *
+         * @param maxVerboseLevel Max verbose level.
+         */
+        private Factory(VerboseLevel maxVerboseLevel) {
+            this.maxVerboseLevel = maxVerboseLevel;
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> MLLogger create(Class<T> targetCls) {
+            return new ConsoleLogger(maxVerboseLevel, targetCls.getName());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
new file mode 100644
index 0000000..65bc4cb
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/CustomMLLogger.java
@@ -0,0 +1,105 @@
+/*
+ * 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.environment.logging;
+
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.Tracer;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * MLLogger implementation based on IgniteLogger.
+ */
+public class CustomMLLogger implements MLLogger {
+    /** Ignite logger instance. */
+    private final IgniteLogger logger;
+
+    /**
+     * Creates an instance of CustomMLLogger.
+     *
+     * @param logger Basic Logger.
+     */
+    private CustomMLLogger(IgniteLogger logger) {
+        this.logger = logger;
+    }
+
+    /**
+     * Returns factory for OnIgniteLogger instantiating.
+     *
+     * @param rootLogger Root logger.
+     */
+    public static Factory factory(IgniteLogger rootLogger) {
+        return new Factory(rootLogger);
+    }
+
+    /** {@inheritDoc} */
+    @Override public Vector log(Vector vector) {
+        Tracer.showAscii(vector, logger);
+        return vector;
+    }
+
+    /** {@inheritDoc} */
+    @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, 
Model<K, V> mdl) {
+        log(verboseLevel, mdl.toString(true));
+        return mdl;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void log(VerboseLevel verboseLevel, String fmtStr, 
Object... params) {
+        log(verboseLevel, String.format(fmtStr, params));
+    }
+
+    /**
+     * Log line.
+     *
+     * @param verboseLevel Verbose level.
+     * @param line Line.
+     */
+    private void log(VerboseLevel verboseLevel, String line) {
+        switch (verboseLevel) {
+            case LOW:
+                logger.info(line);
+                break;
+            case HIGH:
+                logger.debug(line);
+                break;
+        }
+    }
+
+    /**
+     * CustomMLLogger factory.
+     */
+    private static class Factory implements MLLogger.Factory {
+        /** Root logger. */
+        private IgniteLogger rootLogger;
+
+        /**
+         * Creates an instance of factory.
+         *
+         * @param rootLogger Root logger.
+         */
+        public Factory(IgniteLogger rootLogger) {
+            this.rootLogger = rootLogger;
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> MLLogger create(Class<T> targetCls) {
+            return new CustomMLLogger(rootLogger.getLogger(targetCls));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
new file mode 100644
index 0000000..872b947
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/MLLogger.java
@@ -0,0 +1,69 @@
+/*
+ * 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.environment.logging;
+
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * Helper for ML-specific objects logging.
+ */
+public interface MLLogger {
+    /**
+     * Logging verbose level.
+     */
+    enum VerboseLevel {
+        OFF, LOW, HIGH
+    }
+
+    /**
+     * Log vector.
+     *
+     * @param vector Vector.
+     */
+    public Vector log(Vector vector);
+
+    /**
+     * Log model according to toString method.
+     *
+     * @param verboseLevel Verbose level.
+     * @param mdl Model.
+     */
+    public <K, V> Model<K,V> log(VerboseLevel verboseLevel, Model<K, V> mdl);
+
+    /**
+     * Log line with formatting.
+     *
+     * @param verboseLevel Verbose level.
+     * @param fmtStr Format string.
+     * @param params Params.
+     */
+    public void log(VerboseLevel verboseLevel, String fmtStr, Object... 
params);
+
+    /**
+     * MLLogger factory interface.
+     */
+    public static interface Factory {
+        /**
+         * Creates an instance of MLLogger for target class.
+         *
+         * @param targetCls For class.
+         */
+        public <T> MLLogger create(Class<T> targetCls);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
new file mode 100644
index 0000000..67b48f5
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/NoOpLogger.java
@@ -0,0 +1,64 @@
+/*
+ * 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.environment.logging;
+
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * MLLogger implementation skipping all logs.
+ */
+public class NoOpLogger implements MLLogger {
+    /** Factory. */
+    private static final Factory FACTORY = new Factory();
+
+    /**
+     * Returns NoOpLogger factory.
+     */
+    public static Factory factory() {
+        return FACTORY;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Vector log(Vector vector) {
+        return vector;
+    }
+
+    /** {@inheritDoc} */
+    @Override public <K, V> Model<K, V> log(VerboseLevel verboseLevel, 
Model<K, V> mdl) {
+        return mdl;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void log(VerboseLevel verboseLevel, String fmtStr, 
Object... params) {
+
+    }
+
+    /**
+     * NoOpLogger factory.
+     */
+    private static class Factory implements MLLogger.Factory {
+        /** NoOpLogger instance. */
+        private final static NoOpLogger NO_OP_LOGGER = new NoOpLogger();
+
+        /** {@inheritDoc} */
+        @Override public <T> MLLogger create(Class<T> targetCls) {
+            return NO_OP_LOGGER;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
new file mode 100644
index 0000000..303f006
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/logging/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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 contains several logging strategy realisations.
+ */
+package org.apache.ignite.ml.environment.logging;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java
new file mode 100644
index 0000000..0f58d13
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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 contains environment utils for ML algorithms.
+ */
+package org.apache.ignite.ml.environment;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
new file mode 100644
index 0000000..ce2ca50
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/DefaultParallelismStrategy.java
@@ -0,0 +1,85 @@
+/*
+ * 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.environment.parallelism;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.apache.ignite.ml.math.functions.IgniteSupplier;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * All task should be processed by default thread pool.
+ */
+public class DefaultParallelismStrategy implements ParallelismStrategy {
+    /** Strategy Pool. */
+    private ExecutorService pool = Executors.newWorkStealingPool(4);
+
+    /** {@inheritDoc} */
+    @Override public <T> Promise<T> submit(IgniteSupplier<T> task) {
+        return new FutureWrapper<>(pool.submit(task::get));
+    }
+
+    /**
+     * Wrapper for future class.
+     *
+     * @param <T>
+     */
+    public static class FutureWrapper<T> implements Promise<T> {
+        private final Future<T> f;
+
+        /**
+         * Create an instance of FutureWrapper.
+         *
+         * @param f Future.
+         */
+        public FutureWrapper(Future<T> f) {
+            this.f = f;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean cancel(boolean mayInterruptIfRunning) {
+            return f.cancel(mayInterruptIfRunning);
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean isCancelled() {
+            return f.isCancelled();
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean isDone() {
+            return f.isDone();
+        }
+
+        /** {@inheritDoc} */
+        @Override public T get() throws InterruptedException, 
ExecutionException {
+            return f.get();
+        }
+
+        /** {@inheritDoc} */
+        @Override public T get(long timeout,
+            @NotNull TimeUnit unit) throws InterruptedException, 
ExecutionException, TimeoutException {
+
+            return f.get(timeout, unit);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
new file mode 100644
index 0000000..5f605a7
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/NoParallelismStrategy.java
@@ -0,0 +1,87 @@
+/*
+ * 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.environment.parallelism;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.apache.ignite.ml.math.functions.IgniteSupplier;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * All tasks should be processed in one thread.
+ */
+public class NoParallelismStrategy implements ParallelismStrategy {
+    /** Instance. */
+    public static final ParallelismStrategy INSTANCE = new 
NoParallelismStrategy();
+
+    /** */
+    private NoParallelismStrategy() {
+
+    }
+
+    /** {@inheritDoc} */
+    @Override public <T>  Promise<T> submit(IgniteSupplier<T> task) {
+        return new Stub<>(task.get());
+    }
+
+    /**
+     * Stub for Future interface implementation.
+     *
+     * @param <T> Type of result.
+     */
+    public static class Stub<T> implements Promise<T> {
+        private T result;
+
+        /**
+         * Create an instance of Stub
+         *
+         * @param result Execution result.
+         */
+        public Stub(T result) {
+            this.result = result;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean cancel(boolean mayInterruptIfRunning) {
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean isCancelled() {
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean isDone() {
+            return true;
+        }
+
+        /** {@inheritDoc} */
+        @Override public T get() throws InterruptedException, 
ExecutionException {
+            return result;
+        }
+
+        /** {@inheritDoc} */
+        @Override public T get(long timeout,
+            @NotNull TimeUnit unit) throws InterruptedException, 
ExecutionException, TimeoutException {
+
+            return result;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
new file mode 100644
index 0000000..cdf2d50
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/ParallelismStrategy.java
@@ -0,0 +1,47 @@
+/*
+ * 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.environment.parallelism;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.ignite.ml.math.functions.IgniteSupplier;
+
+/**
+ * Specifies the behaviour of processes in ML-algorithms that can may be 
parallelized such as parallel learning in
+ * bagging, learning submodels for One-vs-All model, Cross-Validation etc.
+ */
+public interface ParallelismStrategy {
+    public enum Type {
+        NO_PARALLELISM,
+        ON_DEFAULT_POOL
+    }
+
+    /**
+     * Submit task.
+     *
+     * @param task Task.
+     */
+    public <T> Promise<T> submit(IgniteSupplier<T> task);
+
+    public default <T> List<Promise<T>> submit(List<IgniteSupplier<T>> tasks) {
+        List<Promise<T>> results = new ArrayList<>();
+        for(IgniteSupplier<T> task : tasks)
+            results.add(submit(task));
+        return results;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
new file mode 100644
index 0000000..dec3f43
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/Promise.java
@@ -0,0 +1,53 @@
+/*
+ * 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.environment.parallelism;
+
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * Future interface extension for lambda-friendly interface.
+ *
+ * @param <T> Type of result.
+ */
+public interface Promise<T> extends Future<T> {
+    /**
+     * Await result of Future and return it.
+     * Wrap exceptions from Future to RuntimeException.
+     */
+    public default T unsafeGet() {
+        try {
+            return get();
+        } catch (InterruptedException | ExecutionException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Wrap result of Future to Optional-object.
+     * If Future throws an exception then it returns Optional.empty.
+     */
+    public default Optional<T> getOpt() {
+        try {
+            return Optional.of(get());
+        } catch (InterruptedException | ExecutionException e) {
+            return Optional.empty();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
new file mode 100644
index 0000000..22fe9af
--- /dev/null
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/environment/parallelism/package-info.java
@@ -0,0 +1,21 @@
+/*
+ * 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 contains realisations of parallelism strategies for multi-thread 
algorithms.
+ */
+package org.apache.ignite.ml.environment.parallelism;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverJob.java
----------------------------------------------------------------------
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
index d262efe..2f213b5 100644
--- 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
@@ -19,18 +19,16 @@ 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;
 
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
 /**
  * Responsible for performing 'crossover' genetic operation for 2 X 'parent' 
chromosomes.
  *

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/CrossOverTask.java
----------------------------------------------------------------------
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
index 02d90be..9daa57a 100644
--- 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
@@ -21,7 +21,6 @@ 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;
@@ -30,10 +29,9 @@ 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.resources.IgniteInstanceResource;
-
 import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
 import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
 
 /**
  * Responsible for assigning 2 X 'parent' chromosomes to produce 2 X 'child' 
chromosomes.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessJob.java
----------------------------------------------------------------------
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
index c11490a..0bde403 100644
--- 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
@@ -19,18 +19,16 @@ 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;
 
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
 /**
  * Responsible for performing fitness evaluation on an individual chromosome
  */

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/FitnessTask.java
----------------------------------------------------------------------
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
index cfae767..66fd795 100644
--- 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
@@ -20,7 +20,6 @@ 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;
@@ -29,10 +28,9 @@ 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.resources.IgniteInstanceResource;
-
 import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
 import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
 
 /**
  * Responsible for fitness operation

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/GAGrid.java
----------------------------------------------------------------------
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
index 4133adf..92eab5e 100644
--- 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
@@ -20,16 +20,13 @@ package org.apache.ignite.ml.genetic;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
-
 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;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/Gene.java
----------------------------------------------------------------------
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
index f15d988..af1af3c 100644
--- 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
@@ -18,7 +18,6 @@
 package org.apache.ignite.ml.genetic;
 
 import java.util.concurrent.atomic.AtomicLong;
-
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/MutateTask.java
----------------------------------------------------------------------
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
index 704cf00..9fd9147 100644
--- 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
@@ -22,9 +22,7 @@ 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;
@@ -36,10 +34,9 @@ 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.resources.IgniteInstanceResource;
-
 import org.apache.ignite.ml.genetic.parameter.GAConfiguration;
 import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
 
 /**
  * Responsible for applying mutation on respective chromosomes.  <br/>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionJob.java
----------------------------------------------------------------------
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
index e657ca0..19f22c6 100644
--- 
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
@@ -22,11 +22,10 @@ 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;
 
-import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
-
 /**
  * Responsible for performing truncate selection
  */

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/TruncateSelectionTask.java
----------------------------------------------------------------------
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
index 09f17cb..00d00c1 100644
--- 
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
@@ -21,9 +21,7 @@ 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;
@@ -35,8 +33,8 @@ 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.resources.IgniteInstanceResource;
 import org.apache.ignite.ml.genetic.parameter.GAGridConstants;
+import org.apache.ignite.resources.IgniteInstanceResource;
 
 /**
  * Responsible for performing truncate selection.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/functions/GAGridFunction.java
----------------------------------------------------------------------
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
index 9911eea..2dddf4b 100644
--- 
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
@@ -20,15 +20,13 @@ 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.h2.tools.SimpleResultSet;
-
 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.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/parameter/GAConfiguration.java
----------------------------------------------------------------------
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
index ccacda6..619f56d 100644
--- 
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
@@ -19,7 +19,6 @@ 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;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/genetic/utils/GAGridUtils.java
----------------------------------------------------------------------
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
index 76c292d..45056e1 100644
--- 
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
@@ -19,14 +19,11 @@ 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;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
index 6c27ab7..b5a0cdb 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/knn/KNNUtils.java
@@ -21,8 +21,8 @@ import org.apache.ignite.ml.dataset.Dataset;
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.dataset.PartitionDataBuilder;
 import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.structures.LabeledDataset;
 import org.apache.ignite.ml.structures.LabeledVector;
 import 
org.apache.ignite.ml.structures.partition.LabeledDatasetPartitionDataBuilderOnHeap;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
index 22b6832..c2c1c43 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationModel.java
@@ -33,11 +33,12 @@ import org.apache.ignite.ml.Exporter;
 import org.apache.ignite.ml.Model;
 import org.apache.ignite.ml.dataset.Dataset;
 import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.distances.DistanceMeasure;
 import org.apache.ignite.ml.math.distances.EuclideanDistance;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.structures.LabeledDataset;
 import org.apache.ignite.ml.structures.LabeledVector;
+import org.apache.ignite.ml.util.ModelTrace;
 import org.jetbrains.annotations.NotNull;
 
 /**
@@ -270,4 +271,18 @@ public class KNNClassificationModel implements 
Model<Vector, Double>, Exportable
 
         return k == that.k && distanceMeasure.equals(that.distanceMeasure) && 
stgy.equals(that.stgy);
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return toString(false);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString(boolean pretty) {
+        return ModelTrace.builder("KNNClassificationModel", pretty)
+            .addField("k", String.valueOf(k))
+            .addField("measure", distanceMeasure.getClass().getSimpleName())
+            .addField("strategy", stgy.name())
+            .toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
index 99b70ab..e0a81f9 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/classification/KNNClassificationTrainer.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ml.knn.classification;
 
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.knn.KNNUtils;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.trainers.SingleLabelDatasetTrainer;
 
 /**
  * kNN algorithm trainer to solve multi-class classification task.
  */
-public class KNNClassificationTrainer implements 
SingleLabelDatasetTrainer<KNNClassificationModel> {
+public class KNNClassificationTrainer extends 
SingleLabelDatasetTrainer<KNNClassificationModel> {
     /**
      * Trains model based on the specified data.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
index 5db2a30..16dcd8a 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionModel.java
@@ -20,10 +20,11 @@ import java.util.List;
 import org.apache.ignite.ml.dataset.Dataset;
 import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
 import org.apache.ignite.ml.knn.classification.KNNClassificationModel;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.structures.LabeledDataset;
 import org.apache.ignite.ml.structures.LabeledVector;
+import org.apache.ignite.ml.util.ModelTrace;
 
 /**
  * This class provides kNN Multiple Linear Regression or Locally [weighted] 
regression (Simple and Weighted versions).
@@ -86,4 +87,18 @@ public class KNNRegressionModel extends 
KNNClassificationModel {
             sum += neighbor.label();
         return sum / (double)k;
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return toString(false);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString(boolean pretty) {
+        return ModelTrace.builder("KNNClassificationModel", pretty)
+            .addField("k", String.valueOf(k))
+            .addField("measure", distanceMeasure.getClass().getSimpleName())
+            .addField("strategy", stgy.name())
+            .toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
index 5f1b349..395ce61 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/knn/regression/KNNRegressionTrainer.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ml.knn.regression;
 
 import org.apache.ignite.ml.dataset.DatasetBuilder;
 import org.apache.ignite.ml.knn.KNNUtils;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.trainers.SingleLabelDatasetTrainer;
 
 /**
  * kNN algorithm trainer to solve regression task.
  */
-public class KNNRegressionTrainer implements 
SingleLabelDatasetTrainer<KNNRegressionModel> {
+public class KNNRegressionTrainer extends 
SingleLabelDatasetTrainer<KNNRegressionModel> {
     /**
      * Trains model based on the specified data.
      *

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
index 18aea1a..a22ec06 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/Blas.java
@@ -26,9 +26,9 @@ import 
org.apache.ignite.ml.math.exceptions.NonSquareMatrixException;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
 import org.apache.ignite.ml.math.primitives.vector.impl.SparseVector;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.util.MatrixUtil;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
index eacf0b8..d01b150 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/Tracer.java
@@ -117,7 +117,22 @@ public class Tracer {
     public static void showAscii(Vector vec, String fmt) {
         String cls = vec.getClass().getSimpleName();
 
-        System.out.println(String.format(LOCALE, "%s(%d) [%s]", cls, 
vec.size(), mkString(vec, fmt)));
+        System.out.println(asAscii(vec, fmt, true));
+    }
+
+    /**
+     * @param vec Vector to show as plain text.
+     * @param fmt Format string for vector elements.
+     * @param showMeta Show vector type and size.
+     */
+    public static String asAscii(Vector vec, String fmt, boolean showMeta) {
+        String cls = vec.getClass().getSimpleName();
+        String vectorStr = mkString(vec, fmt);
+
+        if(showMeta)
+            return String.format(LOCALE, "%s(%d) [%s]", cls, vec.size(), 
vectorStr);
+        else
+            return String.format(LOCALE, "[%s]", vectorStr);
     }
 
     /**
@@ -159,15 +174,26 @@ public class Tracer {
      * @param fmt Format string for matrix rows.
      */
     public static void showAscii(Matrix mtx, String fmt) {
+        System.out.println(asAscii(mtx, fmt));
+    }
+
+
+    /**
+     * @param mtx {@link Matrix} object to show as a plain text.
+     * @param fmt Format string for matrix rows.
+     */
+    public static String asAscii(Matrix mtx, String fmt) {
+        StringBuilder builder = new StringBuilder();
         String cls = mtx.getClass().getSimpleName();
 
         int rows = mtx.rowSize();
         int cols = mtx.columnSize();
 
-        System.out.println(String.format(LOCALE, "%s(%dx%d)", cls, rows, 
cols));
+        builder.append(String.format(LOCALE, "%s(%dx%d)\n", cls, rows, cols));
 
         for (int row = 0; row < rows; row++)
-            System.out.println(rowStr(mtx, row, fmt));
+            builder.append(rowStr(mtx, row, fmt)).append(row != rows - 1 ? 
"\n" : "");
+        return builder.toString();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
index 50324c1..88e9a41 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/DistanceMeasure.java
@@ -17,8 +17,8 @@
 package org.apache.ignite.ml.math.distances;
 
 import java.io.Externalizable;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * This class is based on the corresponding class from Apache Common Math lib.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
index 935e19b..fa5c21c 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/EuclideanDistance.java
@@ -19,8 +19,8 @@ package org.apache.ignite.ml.math.distances;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.util.MatrixUtil;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
index f08ff7b..ef50a69 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/HammingDistance.java
@@ -19,10 +19,10 @@ package org.apache.ignite.ml.math.distances;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
 import org.apache.ignite.ml.math.functions.Functions;
 import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.util.MatrixUtil;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
index d298e3c..bd3df14 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/distances/ManhattanDistance.java
@@ -19,8 +19,8 @@ package org.apache.ignite.ml.math.distances;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.util.MatrixUtil;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
index bed32de..161b336 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/AbstractMatrix.java
@@ -28,7 +28,6 @@ import java.util.Spliterator;
 import java.util.function.Consumer;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.ml.math.Blas;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
 import org.apache.ignite.ml.math.exceptions.ColumnIndexException;
 import org.apache.ignite.ml.math.exceptions.RowIndexException;
@@ -38,6 +37,7 @@ import 
org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
 import org.apache.ignite.ml.math.functions.IgniteTriFunction;
 import org.apache.ignite.ml.math.functions.IntIntToDoubleFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
 import org.apache.ignite.ml.math.primitives.vector.impl.VectorizedViewMatrix;
 import org.apache.ignite.ml.math.util.MatrixUtil;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
index e4792ee..6dce522 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/DenseMatrix.java
@@ -17,13 +17,13 @@
 
 package org.apache.ignite.ml.math.primitives.matrix.impl;
 
+import org.apache.ignite.ml.math.StorageConstants;
+import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.OrderedMatrix;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
 import org.apache.ignite.ml.math.primitives.matrix.storage.DenseMatrixStorage;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
+import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
 
 /**
  * Basic implementation for matrix.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
index 119bb8d..0c4f500 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/SparseMatrix.java
@@ -20,13 +20,13 @@ package org.apache.ignite.ml.math.primitives.matrix.impl;
 import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
 import it.unimi.dsi.fastutil.ints.IntIterator;
 import it.unimi.dsi.fastutil.ints.IntSet;
+import org.apache.ignite.ml.math.StorageConstants;
+import org.apache.ignite.ml.math.functions.IgniteTriFunction;
+import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
-import org.apache.ignite.ml.math.StorageConstants;
 import org.apache.ignite.ml.math.primitives.matrix.storage.SparseMatrixStorage;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.math.functions.IgniteTriFunction;
-import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
 import org.apache.ignite.ml.math.primitives.vector.impl.SparseVector;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
index df769c7..592064c 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/impl/ViewMatrix.java
@@ -18,12 +18,12 @@
 package org.apache.ignite.ml.math.primitives.matrix.impl;
 
 import java.io.Externalizable;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
 import org.apache.ignite.ml.math.primitives.matrix.AbstractMatrix;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
 import org.apache.ignite.ml.math.primitives.matrix.storage.ViewMatrixStorage;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Implements the rectangular view into the parent {@link Matrix}.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
index dcdaf4f..d21d8c6 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/DenseMatrixStorage.java
@@ -22,9 +22,9 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.Arrays;
 import org.apache.ignite.ml.math.Blas;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
 import org.apache.ignite.ml.math.StorageConstants;
 import org.apache.ignite.ml.math.functions.IgniteIntIntToIntBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
 import org.apache.ignite.ml.math.util.MatrixUtil;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
index fb2f3d9..4a1355c 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/matrix/storage/SparseMatrixStorage.java
@@ -26,9 +26,9 @@ import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
 import org.apache.ignite.ml.math.StorageConstants;
 import org.apache.ignite.ml.math.functions.IgniteTriFunction;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
 
 /**
  * Storage for sparse, local, on-heap matrix.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
index 01b630e..343ebf1 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/AbstractVector.java
@@ -29,7 +29,6 @@ import java.util.Spliterator;
 import java.util.function.Consumer;
 import java.util.function.IntToDoubleFunction;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
 import org.apache.ignite.ml.math.exceptions.IndexException;
 import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
@@ -37,6 +36,7 @@ import org.apache.ignite.ml.math.functions.Functions;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix;
 import org.apache.ignite.ml.math.primitives.vector.impl.VectorView;
 import org.jetbrains.annotations.NotNull;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
index 41ce988..f544405 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/Vector.java
@@ -22,7 +22,6 @@ import java.util.Spliterator;
 import java.util.function.IntToDoubleFunction;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.ml.math.Destroyable;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.MetaAttributes;
 import org.apache.ignite.ml.math.StorageOpsMetrics;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
@@ -31,6 +30,7 @@ import 
org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 
 /**
  * A vector interface.
@@ -513,6 +513,7 @@ public interface Vector extends MetaAttributes, 
Externalizable, StorageOpsMetric
 
     /**
      * Returns array of doubles corresponds to vector components.
+     *
      * @return Array of doubles.
      */
     public default double[] asArray() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
index b31f6fb..3a44373 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DelegatingVector.java
@@ -25,12 +25,12 @@ import java.util.Map;
 import java.util.Spliterator;
 import java.util.function.IntToDoubleFunction;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteIntDoubleToDoubleBiFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
 
 /**
  * Convenient class that can be used to add decorations to an existing vector. 
Subclasses

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
index 48b9212..bed39e3 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/DenseVector.java
@@ -18,13 +18,13 @@
 package org.apache.ignite.ml.math.primitives.vector.impl;
 
 import java.util.Map;
+import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.storage.DenseVectorStorage;
 import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
+import org.apache.ignite.ml.math.primitives.vector.storage.DenseVectorStorage;
 
 /**
  * Basic implementation for vector.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
index 8b3a274..673ad79 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/SparseVector.java
@@ -22,11 +22,11 @@ import java.util.Map;
 import java.util.Set;
 import java.util.Spliterator;
 import java.util.function.Consumer;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.StorageConstants;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.storage.SparseVectorStorage;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
index 5342a22..c5d689e 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorView.java
@@ -18,11 +18,11 @@
 package org.apache.ignite.ml.math.primitives.vector.impl;
 
 import java.io.Externalizable;
+import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
 import org.apache.ignite.ml.math.primitives.vector.storage.VectorViewStorage;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
index 26f7b03..5990567 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/impl/VectorizedViewMatrix.java
@@ -20,10 +20,10 @@ package org.apache.ignite.ml.math.primitives.vector.impl;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.IndexException;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.vector.AbstractVector;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import 
org.apache.ignite.ml.math.primitives.vector.storage.VectorizedViewMatrixStorage;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
index 919301f..970e30b 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/primitives/vector/storage/VectorizedViewMatrixStorage.java
@@ -20,9 +20,9 @@ package org.apache.ignite.ml.math.primitives.vector.storage;
 import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
+import org.apache.ignite.ml.math.exceptions.IndexException;
 import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.vector.VectorStorage;
-import org.apache.ignite.ml.math.exceptions.IndexException;
 
 /**
  * Row, column or diagonal vector-based view of the matrix

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
index 0fd3cc6..e4554e9 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/math/util/MatrixUtil.java
@@ -19,14 +19,14 @@ package org.apache.ignite.ml.math.util;
 
 import java.util.List;
 import org.apache.ignite.internal.util.GridArgumentCheck;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.functions.IgniteTriFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
-import org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.SparseMatrix;
+import org.apache.ignite.ml.math.primitives.matrix.impl.ViewMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
index 6588059..6727ba9 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MLPTrainer.java
@@ -27,12 +27,12 @@ import 
org.apache.ignite.ml.dataset.primitive.builder.context.EmptyContextBuilde
 import 
org.apache.ignite.ml.dataset.primitive.builder.data.SimpleLabeledDatasetDataBuilder;
 import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
 import org.apache.ignite.ml.dataset.primitive.data.SimpleLabeledDatasetData;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import 
org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.nn.architecture.MLPArchitecture;
 import org.apache.ignite.ml.nn.initializers.RandomInitializer;
 import 
org.apache.ignite.ml.optimization.updatecalculators.ParameterUpdateCalculator;
@@ -44,7 +44,7 @@ import org.apache.ignite.ml.util.Utils;
  *
  * @param <P> Type of model update used in this trainer.
  */
-public class MLPTrainer<P extends Serializable> implements 
MultiLabelDatasetTrainer<MultilayerPerceptron> {
+public class MLPTrainer<P extends Serializable> extends 
MultiLabelDatasetTrainer<MultilayerPerceptron> {
     /** Multilayer perceptron architecture supplier that defines layers and 
activators. */
     private final IgniteFunction<Dataset<EmptyContext, 
SimpleLabeledDatasetData>, MLPArchitecture> archSupplier;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
index a2c2c6e..639bb44 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/nn/MultilayerPerceptron.java
@@ -24,12 +24,13 @@ import java.util.List;
 import java.util.Random;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.ml.Model;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.math.Tracer;
 import 
org.apache.ignite.ml.math.functions.IgniteDifferentiableDoubleToDoubleFunction;
 import 
org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
 import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.impl.DenseVector;
 import org.apache.ignite.ml.nn.architecture.MLPArchitecture;
 import org.apache.ignite.ml.nn.architecture.TransformationLayerArchitecture;
@@ -560,4 +561,28 @@ public class MultilayerPerceptron implements Model<Matrix, 
Matrix>, SmoothParame
 
         return diff;
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return toString(false);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString(boolean pretty) {
+        StringBuilder builder = new StringBuilder("MultilayerPerceptron [\n");
+        if(below != null)
+            builder.append("below = 
\n").append(below.toString(pretty)).append("\n\n");
+        builder.append("layers = [").append(pretty ? "\n" : "");
+        for(int i = 0; i < layers.size(); i++) {
+            MLPLayer layer = layers.get(i);
+            builder.append("\tlayer").append(i).append(" = [\n");
+            if(layer.biases != null)
+                builder.append("\t\tbias = 
").append(Tracer.asAscii(layer.biases, "%.4f", false)).append("\n");
+            String matrix = Tracer.asAscii(layer.weights, 
"%.4f").replaceAll("\n", "\n\t\t\t");
+            builder.append("\t\tweights = 
[\n\t\t\t").append(matrix).append("\n\t\t]");
+            builder.append("\n\t]\n");
+        }
+        builder.append("]");
+        return builder.toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
index 533bc74..2aa0437 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/nn/ReplicatedVectorMatrix.java
@@ -23,9 +23,6 @@ import java.io.ObjectOutput;
 import java.util.Map;
 import java.util.Spliterator;
 import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.exceptions.CardinalityException;
 import org.apache.ignite.ml.math.functions.IgniteBiConsumer;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
@@ -33,7 +30,10 @@ import 
org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
 import org.apache.ignite.ml.math.functions.IgniteTriFunction;
 import org.apache.ignite.ml.math.functions.IntIntToDoubleFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.matrix.MatrixStorage;
 import org.apache.ignite.ml.math.primitives.matrix.impl.DenseMatrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Convenient way to create matrix of replicated columns or rows from vector.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java 
b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
index d328d63..741337e 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/LossFunctions.java
@@ -17,9 +17,9 @@
 
 package org.apache.ignite.ml.optimization;
 
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import 
org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Class containing popular loss functions.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
index 0611215..5eb8722 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/SmoothParametrized.java
@@ -18,10 +18,10 @@
 package org.apache.ignite.ml.optimization;
 
 import org.apache.ignite.ml.Model;
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import 
org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 
 /**
  * Interface for models which are smooth functions of their parameters.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9f5dd09b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
----------------------------------------------------------------------
diff --git 
a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
 
b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
index 0868d69..eb5c310 100644
--- 
a/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
+++ 
b/modules/ml/src/main/java/org/apache/ignite/ml/optimization/updatecalculators/NesterovUpdateCalculator.java
@@ -17,10 +17,10 @@
 
 package org.apache.ignite.ml.optimization.updatecalculators;
 
-import org.apache.ignite.ml.math.primitives.matrix.Matrix;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
 import 
org.apache.ignite.ml.math.functions.IgniteDifferentiableVectorToDoubleFunction;
 import org.apache.ignite.ml.math.functions.IgniteFunction;
+import org.apache.ignite.ml.math.primitives.matrix.Matrix;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.optimization.SmoothParametrized;
 
 /**

Reply via email to