You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ch...@apache.org on 2018/05/16 12:37:02 UTC

[6/9] ignite git commit: IGNITE-8450: [ML] Cleanup the ML package: remove unused vector/matrix classes.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/CacheMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/CacheMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/CacheMatrix.java
deleted file mode 100644
index 1f832bc..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/CacheMatrix.java
+++ /dev/null
@@ -1,158 +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.math.impls.matrix;
-
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.distributed.CacheUtils;
-import org.apache.ignite.ml.math.distributed.MatrixKeyMapper;
-import org.apache.ignite.ml.math.distributed.ValueMapper;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
-import org.apache.ignite.ml.math.functions.IgniteFunction;
-import org.apache.ignite.ml.math.impls.storage.matrix.CacheMatrixStorage;
-
-/**
- * Matrix based on existing cache and key and value mapping functions.
- */
-public class CacheMatrix<K, V> extends AbstractMatrix {
-    /**
-     *
-     */
-    public CacheMatrix() {
-        // No-op.
-    }
-
-    /**
-     * Creates new matrix over existing cache.
-     *
-     * @param rows Amount of rows in matrix.
-     * @param cols Amount of columns in matrix.
-     * @param cache Ignite cache.
-     * @param keyMapper {@link MatrixKeyMapper} to validate cache key.
-     * @param valMapper {@link ValueMapper} to obtain value for given cache key.
-     */
-    public CacheMatrix(
-        int rows,
-        int cols,
-        IgniteCache<K, V> cache,
-        MatrixKeyMapper<K> keyMapper,
-        ValueMapper<V> valMapper) {
-        assert rows > 0;
-        assert cols > 0;
-        assert cache != null;
-        assert keyMapper != null;
-        assert valMapper != null;
-
-        setStorage(new CacheMatrixStorage<>(rows, cols, cache, keyMapper, valMapper));
-    }
-
-    /**
-     *
-     */
-    @SuppressWarnings({"unchecked"})
-    private CacheMatrixStorage<K, V> storage() {
-        return (CacheMatrixStorage<K, V>)getStorage();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param d Value to divide to.
-     */
-    @Override public Matrix divide(double d) {
-        return mapOverValues(v -> v / d);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param x Value to add.
-     */
-    @Override public Matrix plus(double x) {
-        return mapOverValues(v -> v + x);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param x Value to multiply to.
-     */
-    @Override public Matrix times(double x) {
-        return mapOverValues(v -> v * x);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix assign(double val) {
-        return mapOverValues(v -> val);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix map(IgniteDoubleFunction<Double> fun) {
-        return mapOverValues(fun::apply);
-    }
-
-    /** {@inheritDoc} */
-    @Override public double sum() {
-        CacheMatrixStorage<K, V> sto = storage();
-
-        return CacheUtils.sum(sto.cache().getName(), sto.keyMapper(), sto.valueMapper());
-    }
-
-    /** {@inheritDoc} */
-    @Override public double maxValue() {
-        CacheMatrixStorage<K, V> sto = storage();
-
-        return CacheUtils.max(sto.cache().getName(), sto.keyMapper(), sto.valueMapper());
-    }
-
-    /** {@inheritDoc} */
-    @Override public double minValue() {
-        CacheMatrixStorage<K, V> sto = storage();
-
-        return CacheUtils.min(sto.cache().getName(), sto.keyMapper(), sto.valueMapper());
-    }
-
-    /**
-     * @param mapper Mapping function.
-     * @return Matrix with mapped values.
-     */
-    private Matrix mapOverValues(IgniteFunction<Double, Double> mapper) {
-        CacheMatrixStorage<K, V> sto = storage();
-
-        CacheUtils.map(sto.cache().getName(), sto.keyMapper(), sto.valueMapper(), mapper);
-
-        return this;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/DiagonalMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/DiagonalMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/DiagonalMatrix.java
deleted file mode 100644
index bd9a4a1..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/DiagonalMatrix.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.ml.math.impls.matrix;
-
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.impls.storage.matrix.DiagonalMatrixStorage;
-import org.apache.ignite.ml.math.impls.vector.ConstantVector;
-import org.apache.ignite.ml.math.impls.vector.DenseLocalOnHeapVector;
-import org.apache.ignite.ml.math.impls.vector.SingleElementVectorView;
-
-/**
- * Implementation of diagonal view of the {@link Matrix}.
- *
- * <p>See also: <a href="https://en.wikipedia.org/wiki/Diagonal_matrix">Wikipedia article</a>.</p>
- */
-public class DiagonalMatrix extends AbstractMatrix {
-    /**
-     *
-     */
-    public DiagonalMatrix() {
-        // No-op.
-    }
-
-    /**
-     * @param diagonal Backing {@link Vector}.
-     */
-    public DiagonalMatrix(Vector diagonal) {
-        super(new DiagonalMatrixStorage(diagonal));
-    }
-
-    /**
-     * @param mtx Backing {@link Matrix}.
-     */
-    public DiagonalMatrix(Matrix mtx) {
-        super(new DiagonalMatrixStorage(mtx == null ? null : mtx.viewDiagonal()));
-    }
-
-    /**
-     * @param vals Backing array of values at diagonal.
-     */
-    public DiagonalMatrix(double[] vals) {
-        super(new DiagonalMatrixStorage(new DenseLocalOnHeapVector(vals)));
-    }
-
-    /**
-     *
-     *
-     */
-    private DiagonalMatrixStorage storage() {
-        return (DiagonalMatrixStorage)getStorage();
-    }
-
-    /**
-     * @param size Size of diagonal.
-     * @param val Constant value at diagonal.
-     */
-    public DiagonalMatrix(int size, double val) {
-        super(new DiagonalMatrixStorage(new ConstantVector(size, val)));
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector viewRow(int row) {
-        return new SingleElementVectorView(storage().diagonal(), row);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector viewColumn(int col) {
-        return new SingleElementVectorView(storage().diagonal(), col);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        return new DiagonalMatrix(storage().diagonal());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        return storage().diagonal().likeMatrix(rows, cols);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        return storage().diagonal().like(crd);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/FunctionMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/FunctionMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/FunctionMatrix.java
deleted file mode 100644
index 020d50a..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/FunctionMatrix.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.ml.math.impls.matrix;
-
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.functions.IntIntDoubleToVoidFunction;
-import org.apache.ignite.ml.math.functions.IntIntToDoubleFunction;
-import org.apache.ignite.ml.math.impls.storage.matrix.FunctionMatrixStorage;
-
-/**
- * Implementation of {@link Matrix} that maps row and column index to {@link java.util.function} interfaces.
- */
-public class FunctionMatrix extends AbstractMatrix {
-    /**
-     *
-     */
-    public FunctionMatrix() {
-        // No-op.
-    }
-
-    /**
-     * Creates read-write or read-only function matrix.
-     *
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     * @param getFunc Function that returns value corresponding to given row and column index.
-     * @param setFunc Set function. If {@code null} - this will be a read-only matrix.
-     */
-    public FunctionMatrix(int rows, int cols, IntIntToDoubleFunction getFunc, IntIntDoubleToVoidFunction setFunc) {
-        assert rows > 0;
-        assert cols > 0;
-        assert getFunc != null;
-
-        setStorage(new FunctionMatrixStorage(rows, cols, getFunc, setFunc));
-    }
-
-    /**
-     * Creates read-only function matrix.
-     *
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     * @param getFunc Function that returns value corresponding to given row and column index.
-     */
-    public FunctionMatrix(int rows, int cols, IntIntToDoubleFunction getFunc) {
-        assert rows > 0;
-        assert cols > 0;
-        assert getFunc != null;
-
-        setStorage(new FunctionMatrixStorage(rows, cols, getFunc));
-    }
-
-    /**
-     *
-     *
-     */
-    private FunctionMatrixStorage storage() {
-        return (FunctionMatrixStorage)getStorage();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        FunctionMatrixStorage sto = storage();
-
-        return new FunctionMatrix(sto.rowSize(), sto.columnSize(), sto.getFunction(), sto.setFunction());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        FunctionMatrixStorage sto = storage();
-
-        return new FunctionMatrix(rows, cols, sto.getFunction(), sto.setFunction());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        throw new UnsupportedOperationException();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/MatrixBlockEntry.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/MatrixBlockEntry.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/MatrixBlockEntry.java
deleted file mode 100644
index a2d13a1..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/MatrixBlockEntry.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.math.impls.matrix;
-
-import org.apache.ignite.ml.math.Matrix;
-
-/**
- * Block for {@link SparseBlockDistributedMatrix}.
- */
-public final class MatrixBlockEntry extends SparseLocalOnHeapMatrix {
-    /** Max block size. */
-    public static final int MAX_BLOCK_SIZE = 32;
-
-    /** */
-    public MatrixBlockEntry() {
-        // No-op.
-    }
-
-    /** */
-    public MatrixBlockEntry(int row, int col) {
-        super(row, col);
-
-        assert col <= MAX_BLOCK_SIZE;
-        assert row <= MAX_BLOCK_SIZE;
-    }
-
-    /** */
-    public MatrixBlockEntry(Matrix mtx) {
-        assert mtx.columnSize() <= MAX_BLOCK_SIZE;
-        assert mtx.rowSize() <= MAX_BLOCK_SIZE;
-
-        setStorage(mtx.getStorage());
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/PivotedMatrixView.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/PivotedMatrixView.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/PivotedMatrixView.java
deleted file mode 100644
index 361bee5..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/PivotedMatrixView.java
+++ /dev/null
@@ -1,241 +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.math.impls.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.MatrixStorage;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.exceptions.IndexException;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.impls.storage.matrix.PivotedMatrixStorage;
-import org.apache.ignite.ml.math.impls.vector.PivotedVectorView;
-
-/**
- * Pivoted (index mapped) view over another matrix implementation.
- */
-public class PivotedMatrixView extends AbstractMatrix {
-    /** Pivoted matrix. */
-    private Matrix mtx;
-
-    /**
-     *
-     */
-    public PivotedMatrixView() {
-        // No-op.
-    }
-
-    /**
-     * @param mtx Parent matrix.
-     * @param rowPivot Pivot array for rows.
-     * @param colPivot Pivot array for columns.
-     */
-    public PivotedMatrixView(Matrix mtx, int[] rowPivot, int[] colPivot) {
-        super(new PivotedMatrixStorage(mtx == null ? null : mtx.getStorage(), rowPivot, colPivot));
-
-        this.mtx = mtx;
-    }
-
-    /**
-     * @param mtx Parent matrix.
-     */
-    public PivotedMatrixView(Matrix mtx) {
-        super(new PivotedMatrixStorage(mtx == null ? null : mtx.getStorage()));
-
-        this.mtx = mtx;
-    }
-
-    /**
-     * @param mtx Parent matrix.
-     * @param pivot Pivot array for rows and columns.
-     */
-    public PivotedMatrixView(Matrix mtx, int[] pivot) {
-        super(new PivotedMatrixStorage(mtx == null ? null : mtx.getStorage(), pivot));
-
-        this.mtx = mtx;
-    }
-
-    /**
-     * Swaps indexes {@code i} and {@code j} for both both row and column.
-     *
-     * @param i First index to swap.
-     * @param j Second index to swap.
-     */
-    public Matrix swap(int i, int j) {
-        swapRows(i, j);
-        swapColumns(i, j);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix swapRows(int i, int j) {
-        if (i < 0 || i >= storage().rowPivot().length)
-            throw new IndexException(i);
-        if (j < 0 || j >= storage().rowPivot().length)
-            throw new IndexException(j);
-
-        storage().swapRows(i, j);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix swapColumns(int i, int j) {
-        if (i < 0 || i >= storage().columnPivot().length)
-            throw new IndexException(i);
-        if (j < 0 || j >= storage().columnPivot().length)
-            throw new IndexException(j);
-
-        storage().swapColumns(i, j);
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector viewRow(int row) {
-        return new PivotedVectorView(
-            mtx.viewRow(storage().rowPivot()[row]),
-            storage().columnPivot(),
-            storage().columnUnpivot()
-        );
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector viewColumn(int col) {
-        return new PivotedVectorView(
-            mtx.viewColumn(storage().columnPivot()[col]),
-            storage().rowPivot(),
-            storage().rowUnpivot()
-        );
-    }
-
-    /**
-     * @return Parent matrix.
-     */
-    public Matrix getBaseMatrix() {
-        return mtx;
-    }
-
-    /**
-     * @return Pivot array for rows.
-     */
-    public int[] rowPivot() {
-        return storage().rowPivot();
-    }
-
-    /**
-     * @return Pivot array for columns.
-     */
-    public int[] columnPivot() {
-        return storage().columnPivot();
-    }
-
-    /**
-     * @param i Index for row pivot.
-     * @return Row pivot for given index.
-     */
-    public int rowPivot(int i) {
-        return storage().rowPivot()[i];
-    }
-
-    /**
-     * @param i Index for column pivot.
-     * @return Column pivot for given index.
-     */
-    public int columnPivot(int i) {
-        return storage().columnPivot()[i];
-    }
-
-    /**
-     * @param i Index for row unpivot.
-     * @return Row unpivot for given index.
-     */
-    public int rowUnpivot(int i) {
-        return storage().rowUnpivot()[i];
-    }
-
-    /**
-     * @param i Index for column unpivot.
-     * @return Column unpivot for given index.
-     */
-    public int columnUnpivot(int i) {
-        return storage().columnUnpivot()[i];
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal(out);
-
-        out.writeObject(mtx);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        super.readExternal(in);
-
-        mtx = (Matrix)in.readObject();
-    }
-
-    /** */
-    private PivotedMatrixStorage storage() {
-        return (PivotedMatrixStorage)getStorage();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        return new PivotedMatrixView(mtx, storage().rowPivot(), storage().columnPivot());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = 1;
-
-        res = res * 37 + mtx.hashCode();
-        res = res * 37 + getStorage().hashCode();
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-
-        if (o == null || getClass() != o.getClass())
-            return false;
-
-        PivotedMatrixView that = (PivotedMatrixView)o;
-
-        MatrixStorage sto = storage();
-
-        return mtx.equals(that.mtx) && sto.equals(that.storage());
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/RandomMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/RandomMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/RandomMatrix.java
deleted file mode 100644
index ece4ca9..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/RandomMatrix.java
+++ /dev/null
@@ -1,97 +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.math.impls.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.MatrixStorage;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.impls.storage.matrix.RandomMatrixStorage;
-import org.apache.ignite.ml.math.impls.vector.RandomVector;
-
-/**
- * Implementation of {@link Matrix} with random values in the elements.
- */
-public class RandomMatrix extends AbstractMatrix {
-    /** Whether fast hash is used, see {@link RandomMatrixStorage}. */
-    private boolean fastHash;
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     * @param fastHash Whether fast hash is used.
-     */
-    private MatrixStorage mkStorage(int rows, int cols, boolean fastHash) {
-        this.fastHash = fastHash;
-
-        return new RandomMatrixStorage(rows, cols, fastHash);
-    }
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     * @param fastHash Whether fast hash is used.
-     */
-    public RandomMatrix(int rows, int cols, boolean fastHash) {
-        setStorage(mkStorage(rows, cols, fastHash));
-    }
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     */
-    public RandomMatrix(int rows, int cols) {
-        this(rows, cols, true);
-    }
-
-    /** */
-    public RandomMatrix() {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        return new RandomMatrix(rowSize(), columnSize(), fastHash);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        return new RandomMatrix(rows, cols);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        return new RandomVector(crd);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal(out);
-
-        out.writeBoolean(fastHash);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        super.readExternal(in);
-
-        fastHash = in.readBoolean();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseBlockDistributedMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseBlockDistributedMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseBlockDistributedMatrix.java
deleted file mode 100644
index d387d21..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseBlockDistributedMatrix.java
+++ /dev/null
@@ -1,314 +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.math.impls.matrix;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.util.lang.IgnitePair;
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.distributed.CacheUtils;
-import org.apache.ignite.ml.math.distributed.keys.impl.MatrixBlockKey;
-import org.apache.ignite.ml.math.distributed.keys.impl.VectorBlockKey;
-import org.apache.ignite.ml.math.exceptions.CardinalityException;
-import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
-import org.apache.ignite.ml.math.impls.storage.matrix.BlockMatrixStorage;
-import org.apache.ignite.ml.math.impls.storage.matrix.BlockVectorStorage;
-import org.apache.ignite.ml.math.impls.vector.SparseBlockDistributedVector;
-import org.apache.ignite.ml.math.impls.vector.VectorBlockEntry;
-
-/**
- * Sparse block distributed matrix. This matrix represented by blocks 32x32 {@link MatrixBlockEntry}.
- *
- * Using separate cache with keys {@link MatrixBlockKey} and values {@link MatrixBlockEntry}.
- */
-public class SparseBlockDistributedMatrix extends AbstractMatrix implements StorageConstants {
-    /**
-     *
-     */
-    public SparseBlockDistributedMatrix() {
-        // No-op.
-    }
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     */
-    public SparseBlockDistributedMatrix(int rows, int cols) {
-        assert rows > 0;
-        assert cols > 0;
-
-        setStorage(new BlockMatrixStorage(rows, cols));
-    }
-
-    /**
-     * @param data Data to fill the matrix
-     */
-    public SparseBlockDistributedMatrix(double[][] data) {
-        assert data.length > 0;
-
-        setStorage(new BlockMatrixStorage(data.length, getMaxAmountOfColumns(data)));
-
-        for (int i = 0; i < data.length; i++)
-            for (int j = 0; j < data[i].length; j++)
-                storage().set(i, j, data[i][j]);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param d Value to divide to.
-     */
-    @Override public Matrix divide(double d) {
-        return mapOverValues(v -> v / d);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param x Value to add.
-     */
-    @Override public Matrix plus(double x) {
-        return mapOverValues(v -> v + x);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param x Value to multiply.
-     */
-    @Override public Matrix times(double x) {
-        return mapOverValues(v -> v * x);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings({"unchecked"})
-    @Override public Matrix times(final Matrix mtx) {
-        if (mtx == null)
-            throw new IllegalArgumentException("The matrix should be not null.");
-
-        if (columnSize() != mtx.rowSize())
-            throw new CardinalityException(columnSize(), mtx.rowSize());
-
-        SparseBlockDistributedMatrix matrixA = this;
-        SparseBlockDistributedMatrix matrixB = (SparseBlockDistributedMatrix)mtx;
-
-        String cacheName = this.storage().cacheName();
-        SparseBlockDistributedMatrix matrixC = new SparseBlockDistributedMatrix(matrixA.rowSize(), matrixB.columnSize());
-
-        CacheUtils.bcast(cacheName, () -> {
-            Ignite ignite = Ignition.localIgnite();
-            Affinity<MatrixBlockKey> affinity = ignite.affinity(cacheName);
-
-            IgniteCache<MatrixBlockKey, MatrixBlockEntry> cache = ignite.getOrCreateCache(cacheName);
-            ClusterNode locNode = ignite.cluster().localNode();
-
-            BlockMatrixStorage storageC = matrixC.storage();
-
-            Map<ClusterNode, Collection<MatrixBlockKey>> keysCToNodes = affinity.mapKeysToNodes(storageC.getAllKeys());
-            Collection<MatrixBlockKey> locKeys = keysCToNodes.get(locNode);
-
-            if (locKeys == null)
-                return;
-
-            // compute Cij locally on each node
-            // TODO: IGNITE:5114, exec in parallel
-            locKeys.forEach(key -> {
-                long newBlockIdRow = key.blockRowId();
-                long newBlockIdCol = key.blockColId();
-
-                IgnitePair<Long> newBlockId = new IgnitePair<>(newBlockIdRow, newBlockIdCol);
-
-                MatrixBlockEntry blockC = null;
-
-                List<MatrixBlockEntry> aRow = matrixA.storage().getRowForBlock(newBlockId);
-                List<MatrixBlockEntry> bCol = matrixB.storage().getColForBlock(newBlockId);
-
-                for (int i = 0; i < aRow.size(); i++) {
-                    MatrixBlockEntry blockA = aRow.get(i);
-                    MatrixBlockEntry blockB = bCol.get(i);
-
-                    MatrixBlockEntry tmpBlock = new MatrixBlockEntry(blockA.times(blockB));
-
-                    blockC = blockC == null ? tmpBlock : new MatrixBlockEntry(blockC.plus(tmpBlock));
-                }
-
-                cache.put(storageC.getCacheKey(newBlockIdRow, newBlockIdCol), blockC);
-            });
-        });
-
-        return matrixC;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @SuppressWarnings({"unchecked"})
-    @Override public Vector times(final Vector vec) {
-        if (vec == null)
-            throw new IllegalArgumentException("The vector should be not null.");
-
-        if (columnSize() != vec.size())
-            throw new CardinalityException(columnSize(), vec.size());
-
-        SparseBlockDistributedMatrix matrixA = this;
-        SparseBlockDistributedVector vectorB = (SparseBlockDistributedVector)vec;
-
-        String cacheName = this.storage().cacheName();
-        SparseBlockDistributedVector vectorC = new SparseBlockDistributedVector(matrixA.rowSize());
-
-        CacheUtils.bcast(cacheName, () -> {
-            Ignite ignite = Ignition.localIgnite();
-            Affinity<VectorBlockKey> affinity = ignite.affinity(cacheName);
-
-            IgniteCache<VectorBlockKey, VectorBlockEntry> cache = ignite.getOrCreateCache(cacheName);
-            ClusterNode locNode = ignite.cluster().localNode();
-
-            BlockVectorStorage storageC = vectorC.storage();
-
-            Map<ClusterNode, Collection<VectorBlockKey>> keysCToNodes = affinity.mapKeysToNodes(storageC.getAllKeys());
-            Collection<VectorBlockKey> locKeys = keysCToNodes.get(locNode);
-
-            if (locKeys == null)
-                return;
-
-            // compute Cij locally on each node
-            // TODO: IGNITE:5114, exec in parallel
-            locKeys.forEach(key -> {
-                long newBlockId = key.blockId();
-
-                IgnitePair<Long> newBlockIdForMtx = new IgnitePair<>(newBlockId, 0L);
-
-                VectorBlockEntry blockC = null;
-
-                List<MatrixBlockEntry> aRow = matrixA.storage().getRowForBlock(newBlockIdForMtx);
-                List<VectorBlockEntry> bCol = vectorB.storage().getColForBlock(newBlockId);
-
-                for (int i = 0; i < aRow.size(); i++) {
-                    MatrixBlockEntry blockA = aRow.get(i);
-                    VectorBlockEntry blockB = bCol.get(i);
-
-                    VectorBlockEntry tmpBlock = new VectorBlockEntry(blockA.times(blockB));
-
-                    blockC = blockC == null ? tmpBlock : new VectorBlockEntry(blockC.plus(tmpBlock));
-                }
-
-                cache.put(storageC.getCacheKey(newBlockId), blockC);
-            });
-        });
-        return vectorC;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector getCol(int col) {
-        checkColumnIndex(col);
-
-        Vector res = new SparseBlockDistributedVector(rowSize());
-
-        for (int i = 0; i < rowSize(); i++)
-            res.setX(i, getX(i, col));
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector getRow(int row) {
-        checkRowIndex(row);
-
-        Vector res = new SparseBlockDistributedVector(columnSize());
-
-        for (int i = 0; i < columnSize(); i++)
-            res.setX(i, getX(row, i));
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix assign(double val) {
-        return mapOverValues(v -> val);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix map(IgniteDoubleFunction<Double> fun) {
-        return mapOverValues(fun);
-    }
-
-    /** {@inheritDoc} */
-    @Override public double sum() {
-        return CacheUtils.sparseSum(getUUID(), this.storage().cacheName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public double maxValue() {
-        return CacheUtils.sparseMax(getUUID(), this.storage().cacheName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public double minValue() {
-        return CacheUtils.sparseMin(getUUID(), this.storage().cacheName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        Matrix cp = like(rowSize(), columnSize());
-
-        cp.assign(this);
-
-        return cp;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        return new SparseBlockDistributedMatrix(rows, cols);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        return new SparseBlockDistributedVector(crd);
-    }
-
-    /** */
-    private UUID getUUID() {
-        return ((BlockMatrixStorage)getStorage()).getUUID();
-    }
-
-    /**
-     * @param mapper Mapping function.
-     * @return Matrix with mapped values.
-     */
-    private Matrix mapOverValues(IgniteDoubleFunction<Double> mapper) {
-        CacheUtils.sparseMap(getUUID(), mapper, this.storage().cacheName());
-
-        return this;
-    }
-
-    /**
-     *
-     */
-    private BlockMatrixStorage storage() {
-        return (BlockMatrixStorage)getStorage();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseDistributedMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseDistributedMatrix.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseDistributedMatrix.java
deleted file mode 100644
index 026138b..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/SparseDistributedMatrix.java
+++ /dev/null
@@ -1,290 +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.math.impls.matrix;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.affinity.Affinity;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.distributed.CacheUtils;
-import org.apache.ignite.ml.math.distributed.keys.RowColMatrixKey;
-import org.apache.ignite.ml.math.exceptions.CardinalityException;
-import org.apache.ignite.ml.math.functions.IgniteDoubleFunction;
-import org.apache.ignite.ml.math.impls.storage.matrix.SparseDistributedMatrixStorage;
-import org.apache.ignite.ml.math.impls.storage.vector.SparseDistributedVectorStorage;
-import org.apache.ignite.ml.math.impls.vector.SparseDistributedVector;
-
-/**
- * Sparse distributed matrix implementation based on data grid.
- * <p>
- * Unlike {@link CacheMatrix} that is based on existing cache, this implementation creates distributed
- * cache internally and doesn't rely on pre-existing cache.</p>
- * <p>
- * You also need to call {@link #destroy()} to remove the underlying cache when you no longer need this
- * matrix.</p>
- * <p>
- * This class is not intended for fast calculations (for example, matrix multiplication). If better performance
- * is needed, {@link SparseBlockDistributedMatrix} should be used instead.</p>
- * <p>
- * <b>Currently fold supports only commutative operations.<b/></p>
- */
-public class SparseDistributedMatrix extends AbstractMatrix implements StorageConstants {
-    /**
-     *
-     */
-    public SparseDistributedMatrix() {
-        // No-op.
-    }
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     * @param stoMode Matrix storage mode.
-     * @param acsMode Matrix elements access mode.
-     */
-    public SparseDistributedMatrix(int rows, int cols, int stoMode, int acsMode) {
-        assert rows > 0;
-        assert cols > 0;
-        assertAccessMode(acsMode);
-        assertStorageMode(stoMode);
-
-        setStorage(new SparseDistributedMatrixStorage(rows, cols, stoMode, acsMode));
-
-    }
-
-    /**
-     * @param data Data to fill the matrix
-     */
-    public SparseDistributedMatrix(double[][] data) {
-        assert data.length > 0;
-        setStorage(new SparseDistributedMatrixStorage(data.length, getMaxAmountOfColumns(data), StorageConstants.ROW_STORAGE_MODE, StorageConstants.RANDOM_ACCESS_MODE));
-
-        for (int i = 0; i < data.length; i++)
-            for (int j = 0; j < data[i].length; j++)
-                storage().set(i, j, data[i][j]);
-    }
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     */
-    public SparseDistributedMatrix(int rows, int cols) {
-        this(rows, cols, StorageConstants.ROW_STORAGE_MODE, StorageConstants.RANDOM_ACCESS_MODE);
-    }
-
-    /** */
-    private SparseDistributedMatrixStorage storage() {
-        return (SparseDistributedMatrixStorage)getStorage();
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param d Value to divide to.
-     */
-    @Override public Matrix divide(double d) {
-        return mapOverValues(v -> v / d);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param x Value to add.
-     */
-    @Override public Matrix plus(double x) {
-        return mapOverValues(v -> v + x);
-    }
-
-    /**
-     * Return the same matrix with updates values (broken contract).
-     *
-     * @param x Value to multiply.
-     */
-    @Override public Matrix times(double x) {
-        return mapOverValues(v -> v * x);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix times(Matrix mtx) {
-        if (mtx == null)
-            throw new IllegalArgumentException("The matrix should be not null.");
-
-        if (columnSize() != mtx.rowSize())
-            throw new CardinalityException(columnSize(), mtx.rowSize());
-
-        SparseDistributedMatrix matrixA = this;
-        SparseDistributedMatrix matrixB = (SparseDistributedMatrix)mtx;
-
-        String cacheName = storage().cacheName();
-        SparseDistributedMatrix matrixC = new SparseDistributedMatrix(matrixA.rowSize(), matrixB.columnSize()
-            , getStorage().storageMode(), getStorage().isRandomAccess() ? RANDOM_ACCESS_MODE : SEQUENTIAL_ACCESS_MODE);
-
-        CacheUtils.bcast(cacheName, () -> {
-            Ignite ignite = Ignition.localIgnite();
-            Affinity<RowColMatrixKey> affinity = ignite.affinity(cacheName);
-
-            ClusterNode locNode = ignite.cluster().localNode();
-
-            SparseDistributedMatrixStorage storageC = matrixC.storage();
-
-            Map<ClusterNode, Collection<RowColMatrixKey>> keysCToNodes = affinity.mapKeysToNodes(storageC.getAllKeys());
-            Collection<RowColMatrixKey> locKeys = keysCToNodes.get(locNode);
-
-            boolean isRowMode = storageC.storageMode() == ROW_STORAGE_MODE;
-
-            if (locKeys == null)
-                return;
-
-            // compute Cij locally on each node
-            // TODO: IGNITE:5114, exec in parallel
-            locKeys.forEach(key -> {
-                int idx = key.index();
-
-                if (isRowMode) {
-                    Vector Aik = matrixA.getRow(idx);
-
-                    for (int i = 0; i < matrixB.columnSize(); i++) {
-                        Vector Bkj = matrixB.getCol(i);
-                        matrixC.set(idx, i, Aik.times(Bkj).sum());
-                    }
-                }
-                else {
-                    Vector Bkj = matrixB.getCol(idx);
-
-                    for (int i = 0; i < matrixA.rowSize(); i++) {
-                        Vector Aik = matrixA.getRow(i);
-                        matrixC.set(idx, i, Aik.times(Bkj).sum());
-                    }
-                }
-            });
-        });
-
-        return matrixC;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector times(Vector vec) {
-        if (vec == null)
-            throw new IllegalArgumentException("The vector should be not null.");
-
-        if (columnSize() != vec.size())
-            throw new CardinalityException(columnSize(), vec.size());
-
-        SparseDistributedMatrix matrixA = this;
-        SparseDistributedVector vectorB = (SparseDistributedVector)vec;
-
-        String cacheName = storage().cacheName();
-        int rows = this.rowSize();
-
-        SparseDistributedVector vectorC = (SparseDistributedVector)likeVector(rows);
-
-        CacheUtils.bcast(cacheName, () -> {
-            Ignite ignite = Ignition.localIgnite();
-            Affinity<RowColMatrixKey> affinity = ignite.affinity(cacheName);
-
-            ClusterNode locNode = ignite.cluster().localNode();
-
-            SparseDistributedVectorStorage storageC = vectorC.storage();
-
-            Map<ClusterNode, Collection<RowColMatrixKey>> keysCToNodes = affinity.mapKeysToNodes(storageC.getAllKeys());
-            Collection<RowColMatrixKey> locKeys = keysCToNodes.get(locNode);
-
-            if (locKeys == null)
-                return;
-
-            // compute Cij locally on each node
-            // TODO: IGNITE:5114, exec in parallel
-            locKeys.forEach(key -> {
-                int idx = key.index();
-                Vector Aik = matrixA.getRow(idx);
-                vectorC.set(idx, Aik.times(vectorB).sum());
-            });
-        });
-
-        return vectorC;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix assign(double val) {
-        return mapOverValues(v -> val);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix map(IgniteDoubleFunction<Double> fun) {
-        return mapOverValues(fun);
-    }
-
-    /**
-     * @param mapper Mapping function.
-     * @return Matrix with mapped values.
-     */
-    private Matrix mapOverValues(IgniteDoubleFunction<Double> mapper) {
-        CacheUtils.sparseMap(getUUID(), mapper, storage().cacheName());
-
-        return this;
-    }
-
-    /** {@inheritDoc} */
-    @Override public double sum() {
-        return CacheUtils.sparseSum(getUUID(), storage().cacheName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public double maxValue() {
-        return CacheUtils.sparseMax(getUUID(), storage().cacheName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public double minValue() {
-        return CacheUtils.sparseMin(getUUID(), storage().cacheName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        Matrix cp = like(rowSize(), columnSize());
-
-        cp.assign(this);
-
-        return cp;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        if (storage() == null)
-            return new SparseDistributedMatrix(rows, cols);
-        else
-            return new SparseDistributedMatrix(rows, cols, storage().storageMode(), storage().accessMode());
-
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        return new SparseDistributedVector(crd, StorageConstants.RANDOM_ACCESS_MODE);
-    }
-
-    /** */
-    public UUID getUUID() {
-        return ((SparseDistributedMatrixStorage)getStorage()).getUUID();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/TransposedMatrixView.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/TransposedMatrixView.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/TransposedMatrixView.java
deleted file mode 100644
index 309570b..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/matrix/TransposedMatrixView.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.ml.math.impls.matrix;
-
-import org.apache.ignite.ml.math.Matrix;
-import org.apache.ignite.ml.math.MatrixStorage;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.ml.math.impls.storage.matrix.MatrixDelegateStorage;
-
-/**
- * Implements transposed view of the parent {@link Matrix}.
- */
-public class TransposedMatrixView extends AbstractMatrix {
-    /** */
-    public TransposedMatrixView() {
-        //No-op.
-    }
-
-    /**
-     * @param mtx Parent matrix.
-     */
-    public TransposedMatrixView(Matrix mtx) {
-        this(mtx == null ? null : mtx.getStorage());
-    }
-
-    /** */
-    private TransposedMatrixView(MatrixStorage sto) {
-        super(new MatrixDelegateStorage(sto, 0, 0,
-            sto == null ? 0 : sto.rowSize(), sto == null ? 0 : sto.columnSize()));
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void storageSet(int row, int col, double v) {
-        super.storageSet(col, row, v);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected double storageGet(int row, int col) {
-        return super.storageGet(col, row);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int rowSize() {
-        return getStorage().columnSize();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int columnSize() {
-        return getStorage().rowSize();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix copy() {
-        MatrixDelegateStorage sto = (MatrixDelegateStorage)getStorage();
-
-        return new TransposedMatrixView(sto.delegate());
-    }
-
-    /** {@inheritDoc} */
-    @Override public Matrix like(int rows, int cols) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public Vector likeVector(int crd) {
-        throw new UnsupportedOperationException();
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockMatrixStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockMatrixStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockMatrixStorage.java
deleted file mode 100644
index e73ef22..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockMatrixStorage.java
+++ /dev/null
@@ -1,434 +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.math.impls.storage.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.CachePeekMode;
-import org.apache.ignite.cache.CacheWriteSynchronizationMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.util.lang.IgnitePair;
-import org.apache.ignite.ml.math.MatrixStorage;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.distributed.CacheUtils;
-import org.apache.ignite.ml.math.distributed.DistributedStorage;
-import org.apache.ignite.ml.math.distributed.keys.impl.MatrixBlockKey;
-import org.apache.ignite.ml.math.impls.matrix.MatrixBlockEntry;
-import org.apache.ignite.ml.math.impls.matrix.SparseBlockDistributedMatrix;
-
-import static org.apache.ignite.ml.math.impls.matrix.MatrixBlockEntry.MAX_BLOCK_SIZE;
-
-/**
- * Storage for {@link SparseBlockDistributedMatrix}.
- */
-public class BlockMatrixStorage extends CacheUtils implements MatrixStorage, StorageConstants, DistributedStorage<MatrixBlockKey> {
-    /** Cache name used for all instances of {@link BlockMatrixStorage}. */
-    private static final String CACHE_NAME = "ML_BLOCK_SPARSE_MATRICES_CONTAINER";
-
-    /** */
-    private int blocksInCol;
-
-    /** */
-    private int blocksInRow;
-
-    /** Amount of rows in the matrix. */
-    private int rows;
-
-    /** Amount of columns in the matrix. */
-    private int cols;
-
-    /** Matrix uuid. */
-    private UUID uuid;
-
-    /** Block size about 8 KB of data. */
-    private int maxBlockEdge = MAX_BLOCK_SIZE;
-
-    /** Actual distributed storage. */
-    private IgniteCache<
-        MatrixBlockKey /* Matrix block number with uuid. */,
-        MatrixBlockEntry /* Block of matrix, local sparse matrix. */
-        > cache = null;
-
-    /** */
-    public BlockMatrixStorage() {
-        // No-op.
-    }
-
-    /**
-     * @param rows Amount of rows in the matrix.
-     * @param cols Amount of columns in the matrix.
-     */
-    public BlockMatrixStorage(int rows, int cols) {
-        assert rows > 0;
-        assert cols > 0;
-
-        this.rows = rows;
-        this.cols = cols;
-
-        this.blocksInRow = rows % maxBlockEdge == 0 ? rows / maxBlockEdge : rows / maxBlockEdge + 1;
-        this.blocksInCol = cols % maxBlockEdge == 0 ? cols / maxBlockEdge : cols / maxBlockEdge + 1;
-
-        cache = newCache();
-
-        uuid = UUID.randomUUID();
-    }
-
-    /** */
-    public IgniteCache<MatrixBlockKey, MatrixBlockEntry> cache() {
-        return cache;
-    }
-
-    /** {@inheritDoc} */
-    @Override public double get(int x, int y) {
-        return matrixGet(x, y);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void set(int x, int y, double v) {
-        matrixSet(x, y, v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int columnSize() {
-        return cols;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int rowSize() {
-        return rows;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int storageMode() {
-        return UNKNOWN_STORAGE_MODE;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int accessMode() {
-        return RANDOM_ACCESS_MODE;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeInt(rows);
-        out.writeInt(cols);
-        out.writeInt(blocksInRow);
-        out.writeInt(blocksInCol);
-        out.writeObject(uuid);
-        out.writeUTF(cache.getName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        rows = in.readInt();
-        cols = in.readInt();
-        blocksInRow = in.readInt();
-        blocksInCol = in.readInt();
-        uuid = (UUID)in.readObject();
-        cache = ignite().getOrCreateCache(in.readUTF());
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isSequentialAccess() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDense() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isRandomAccess() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDistributed() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isArrayBased() {
-        return false;
-    }
-
-    /** Delete all data from cache. */
-    @Override public void destroy() {
-        cache.clearAll(getAllKeys());
-    }
-
-    /**
-     * Get storage UUID.
-     *
-     * @return storage UUID.
-     */
-    public UUID getUUID() {
-        return uuid;
-    }
-
-    /**
-     * Build the cache key for the given blocks id.
-     *
-     * NB: NOT cell indices.
-     */
-    public MatrixBlockKey getCacheKey(long blockIdRow, long blockIdCol) {
-        return new MatrixBlockKey(blockIdRow, blockIdCol, uuid, getAffinityKey(blockIdRow, blockIdCol));
-    }
-
-    /**
-     * Build the cache key for the given blocks id.
-     *
-     * NB: NOT cell indices.
-     */
-    private MatrixBlockKey getCacheKey(IgnitePair<Long> blockId) {
-        return new MatrixBlockKey(blockId.get1(), blockId.get2(), uuid, getAffinityKey(blockId.get1(), blockId.get2()));
-    }
-
-    /** {@inheritDoc} */
-    @Override public Set<MatrixBlockKey> getAllKeys() {
-        int maxRowIdx = rows - 1;
-        int maxColIdx = cols - 1;
-        IgnitePair<Long> maxBlockId = getBlockId(maxRowIdx, maxColIdx);
-
-        Set<MatrixBlockKey> keyset = new HashSet<>();
-
-        for (int i = 0; i <= maxBlockId.get1(); i++)
-            for (int j = 0; j <= maxBlockId.get2(); j++)
-                keyset.add(getCacheKey(i, j));
-
-        return keyset;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String cacheName() {
-        return CACHE_NAME;
-    }
-
-    /**
-     * Get rows for current block.
-     *
-     * @param blockId block id.
-     * @return The list of block entries.
-     */
-    public List<MatrixBlockEntry> getRowForBlock(IgnitePair<Long> blockId) {
-        List<MatrixBlockEntry> res = new LinkedList<>();
-
-        for (int i = 0; i < blocksInCol; i++)
-            res.add(getEntryById(new IgnitePair<>(blockId.get1(), (long)i)));
-
-        return res;
-    }
-
-    /**
-     * Get cols for current block.
-     *
-     * @param blockId block id.
-     * @return The list of block entries.
-     */
-    public List<MatrixBlockEntry> getColForBlock(IgnitePair<Long> blockId) {
-        List<MatrixBlockEntry> res = new LinkedList<>();
-
-        for (int i = 0; i < blocksInRow; i++)
-            res.add(getEntryById(new IgnitePair<>((long)i, blockId.get2())));
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = blocksInCol;
-
-        res = 31 * res + blocksInRow;
-        res = 31 * res + rows;
-        res = 31 * res + cols;
-        res = 31 * res + uuid.hashCode();
-        res = 31 * res + maxBlockEdge;
-        res = 31 * res + cache.getName().hashCode();
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        if (o == null || getClass() != o.getClass())
-            return false;
-
-        BlockMatrixStorage that = (BlockMatrixStorage)o;
-
-        return blocksInCol == that.blocksInCol && blocksInRow == that.blocksInRow && rows == that.rows
-            && cols == that.cols && maxBlockEdge == that.maxBlockEdge && uuid.equals(that.uuid)
-            && cache.getName().equals(that.cache.getName());
-
-    }
-
-    /**
-     * Returns cached or new BlockEntry by given blockId.
-     *
-     * @param blockId blockId
-     * @return BlockEntry
-     */
-    private MatrixBlockEntry getEntryById(IgnitePair<Long> blockId) {
-        MatrixBlockKey key = getCacheKey(blockId.get1(), blockId.get2());
-
-        MatrixBlockEntry entry = cache.localPeek(key, CachePeekMode.PRIMARY);
-        entry = entry != null ? entry : cache.get(key);
-
-        if (entry == null)
-            entry = getEmptyBlockEntry(blockId);
-
-        return entry;
-    }
-
-    /**
-     * Builds empty BlockEntry with sizes based on blockId and BlockMatrixStorage fields' values.
-     *
-     * @param blockId blockId
-     * @return Empty BlockEntry
-     */
-    private MatrixBlockEntry getEmptyBlockEntry(IgnitePair<Long> blockId) {
-        MatrixBlockEntry entry;
-        int rowMod = rows % maxBlockEdge;
-        int colMod = cols % maxBlockEdge;
-
-        int rowSize;
-
-        if (rowMod == 0)
-            rowSize = maxBlockEdge;
-        else
-            rowSize = blockId.get1() != (blocksInRow - 1) ? maxBlockEdge : rowMod;
-
-        int colSize;
-
-        if (colMod == 0)
-            colSize = maxBlockEdge;
-        else
-            colSize = blockId.get2() != (blocksInCol - 1) ? maxBlockEdge : colMod;
-
-        entry = new MatrixBlockEntry(rowSize, colSize);
-        return entry;
-    }
-
-    /**
-     * TODO: IGNITE-5646, WIP
-     *
-     * Get affinity key for the given id.
-     */
-    private UUID getAffinityKey(long blockIdRow, long blockIdCol) {
-        return null;
-    }
-
-    /**
-     * Distributed matrix set.
-     *
-     * @param a Row or column index.
-     * @param b Row or column index.
-     * @param v New value to set.
-     */
-    private void matrixSet(int a, int b, double v) {
-        IgnitePair<Long> blockId = getBlockId(a, b);
-        // Remote set on the primary node (where given row or column is stored locally).
-        ignite().compute(getClusterGroupForGivenKey(CACHE_NAME, blockId)).run(() -> {
-            IgniteCache<MatrixBlockKey, MatrixBlockEntry> cache = Ignition.localIgnite().getOrCreateCache(CACHE_NAME);
-
-            MatrixBlockKey key = getCacheKey(blockId.get1(), blockId.get2());
-
-            // Local get.
-            MatrixBlockEntry block = getEntryById(blockId);
-
-            block.set(a % block.rowSize(), b % block.columnSize(), v);
-
-            // Local put.
-            cache.put(key, block);
-        });
-    }
-
-    /**
-     * Calculates blockId for given cell's coordinates.
-     *
-     * @param x x1 attribute in (x1,x2) coordinates
-     * @param y x2 attribute in (x1, x2) coordinates
-     * @return blockId as an IgnitePair
-     */
-    private IgnitePair<Long> getBlockId(int x, int y) {
-        return new IgnitePair<>((long)x / maxBlockEdge, (long)y / maxBlockEdge);
-    }
-
-    /**
-     * Distributed matrix get.
-     *
-     * @param a Row or column index.
-     * @param b Row or column index.
-     * @return Matrix value at (a, b) index.
-     */
-    private double matrixGet(int a, int b) {
-        // Remote get from the primary node (where given row or column is stored locally).
-        return ignite().compute(getClusterGroupForGivenKey(CACHE_NAME, getBlockId(a, b))).call(() -> {
-            IgniteCache<MatrixBlockKey, MatrixBlockEntry> cache = Ignition.localIgnite().getOrCreateCache(CACHE_NAME);
-
-            MatrixBlockKey key = getCacheKey(getBlockId(a, b));
-
-            // Local get.
-            MatrixBlockEntry block = cache.localPeek(key, CachePeekMode.PRIMARY);
-
-            if (block == null)
-                block = cache.get(key);
-
-            return block == null ? 0.0 : block.get(a % block.rowSize(), b % block.columnSize());
-        });
-    }
-
-    /**
-     * Create new ML cache if needed.
-     */
-    private IgniteCache<MatrixBlockKey, MatrixBlockEntry> newCache() {
-        CacheConfiguration<MatrixBlockKey, MatrixBlockEntry> cfg = new CacheConfiguration<>();
-
-        // Write to primary.
-        cfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.PRIMARY_SYNC);
-
-        // Atomic transactions only.
-        cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
-
-        // No eviction.
-        cfg.setEvictionPolicy(null);
-
-        // No copying of values.
-        cfg.setCopyOnRead(false);
-
-        // Cache is partitioned.
-        cfg.setCacheMode(CacheMode.PARTITIONED);
-
-        // Random cache name.
-        cfg.setName(CACHE_NAME);
-
-        return Ignition.localIgnite().getOrCreateCache(cfg);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockVectorStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockVectorStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockVectorStorage.java
deleted file mode 100644
index 6400b4d..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/BlockVectorStorage.java
+++ /dev/null
@@ -1,368 +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.math.impls.storage.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.CachePeekMode;
-import org.apache.ignite.cache.CacheWriteSynchronizationMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.VectorStorage;
-import org.apache.ignite.ml.math.distributed.CacheUtils;
-import org.apache.ignite.ml.math.distributed.DistributedStorage;
-import org.apache.ignite.ml.math.distributed.keys.impl.VectorBlockKey;
-import org.apache.ignite.ml.math.impls.vector.SparseBlockDistributedVector;
-import org.apache.ignite.ml.math.impls.vector.VectorBlockEntry;
-import org.jetbrains.annotations.NotNull;
-
-import static org.apache.ignite.ml.math.impls.matrix.MatrixBlockEntry.MAX_BLOCK_SIZE;
-
-/**
- * Storage for {@link SparseBlockDistributedVector}.
- */
-public class BlockVectorStorage extends CacheUtils implements VectorStorage, StorageConstants, DistributedStorage<VectorBlockKey> {
-    /** Cache name used for all instances of {@link BlockVectorStorage}. */
-    private static final String CACHE_NAME = "ML_BLOCK_SPARSE_MATRICES_CONTAINER";
-
-    /** */
-    private int blocks;
-
-    /** Amount of columns in the vector. */
-    private int size;
-
-    /** Matrix uuid. */
-    private UUID uuid;
-
-    /** Block size about 8 KB of data. */
-    private int maxBlockEdge = MAX_BLOCK_SIZE;
-
-    /** Actual distributed storage. */
-    private IgniteCache<
-        VectorBlockKey /* Matrix block number with uuid. */,
-        VectorBlockEntry /* Block of matrix, local sparse matrix. */
-        > cache = null;
-
-    /**
-     *
-     */
-    public BlockVectorStorage() {
-        // No-op.
-    }
-
-    /**
-     * @param size Amount of columns in the vector.
-     */
-    public BlockVectorStorage(int size) {
-
-        assert size > 0;
-
-        this.size = size;
-        this.blocks = size % maxBlockEdge == 0 ? size / maxBlockEdge : size / maxBlockEdge + 1;
-
-        cache = newCache();
-        uuid = UUID.randomUUID();
-    }
-
-    /** */
-    public IgniteCache<VectorBlockKey, VectorBlockEntry> cache() {
-        return cache;
-    }
-
-    /** {@inheritDoc} */
-    @Override public double get(int x) {
-        return matrixGet(x);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void set(int x, double v) {
-        matrixSet(x, v);
-    }
-
-    /** {@inheritDoc} */
-    @Override public int size() {
-        return size;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeInt(size);
-        out.writeInt(blocks);
-        out.writeObject(uuid);
-        out.writeUTF(cache.getName());
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        size = in.readInt();
-        blocks = in.readInt();
-        uuid = (UUID)in.readObject();
-
-        cache = ignite().getOrCreateCache(in.readUTF());
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isSequentialAccess() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDense() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isRandomAccess() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDistributed() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isArrayBased() {
-        return false;
-    }
-
-    /** Delete all data from cache. */
-    @Override public void destroy() {
-        cache.clearAll(getAllKeys());
-    }
-
-    /**
-     * Get storage UUID.
-     *
-     * @return storage UUID.
-     */
-    public UUID getUUID() {
-        return uuid;
-    }
-
-    /**
-     * Build the cache key for the given blocks id.
-     *
-     * NB: NOT cell indices.
-     */
-    public VectorBlockKey getCacheKey(long blockId) {
-        return new VectorBlockKey(blockId, uuid, getAffinityKey(blockId));
-    }
-
-    /** {@inheritDoc} */
-    @Override public Set<VectorBlockKey> getAllKeys() {
-        int maxIdx = size - 1;
-        long maxBlockId = getBlockId(maxIdx);
-
-        Set<VectorBlockKey> keyset = new HashSet<>();
-
-        for (int i = 0; i <= maxBlockId; i++)
-            keyset.add(getCacheKey(i));
-
-        return keyset;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String cacheName() {
-        return CACHE_NAME;
-    }
-
-    /**
-     * Get column for current block.
-     *
-     * @param blockId block id.
-     * @return The list of block entries.
-     */
-    public List<VectorBlockEntry> getColForBlock(long blockId) {
-        List<VectorBlockEntry> res = new LinkedList<>();
-
-        for (int i = 0; i < blocks; i++)
-            res.add(getEntryById(i));
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = 1;
-
-        res = res * 37 + size;
-        res = res * 37 + uuid.hashCode();
-        res = res * 37 + cache.hashCode();
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object obj) {
-        if (this == obj)
-            return true;
-
-        if (obj == null || getClass() != obj.getClass())
-            return false;
-
-        BlockVectorStorage that = (BlockVectorStorage)obj;
-
-        return size == that.size && uuid.equals(that.uuid)
-            && (cache != null ? cache.equals(that.cache) : that.cache == null);
-    }
-
-    /**
-     *
-     */
-    private VectorBlockEntry getEntryById(long blockId) {
-        VectorBlockKey key = getCacheKey(blockId);
-
-        VectorBlockEntry entry = cache.localPeek(key, CachePeekMode.PRIMARY);
-        entry = entry != null ? entry : cache.get(key);
-
-        if (entry == null)
-            entry = getEmptyBlockEntry(blockId);
-
-        return entry;
-    }
-
-    /**
-     * Get empty block entry by the given block id.
-     */
-    @NotNull
-    private VectorBlockEntry getEmptyBlockEntry(long blockId) {
-        VectorBlockEntry entry;
-        int colMod = size % maxBlockEdge;
-
-        int colSize;
-
-        if (colMod == 0)
-            colSize = maxBlockEdge;
-        else
-            colSize = blockId != (blocks - 1) ? maxBlockEdge : colMod;
-
-        entry = new VectorBlockEntry(colSize);
-        return entry;
-    }
-
-    /**
-     * TODO: IGNITE-5646, WIP
-     *
-     * Get affinity key for the given id.
-     */
-    private UUID getAffinityKey(long blockId) {
-        return null;
-    }
-
-    /**
-     * Distributed matrix set.
-     *
-     * @param idx Row or column index.
-     * @param v New value to set.
-     */
-    private void matrixSet(int idx, double v) {
-        long blockId = getBlockId(idx);
-        // Remote set on the primary node (where given row or column is stored locally).
-        ignite().compute(getClusterGroupForGivenKey(CACHE_NAME, blockId)).run(() -> {
-            IgniteCache<VectorBlockKey, VectorBlockEntry> cache = Ignition.localIgnite().getOrCreateCache(CACHE_NAME);
-
-            VectorBlockKey key = getCacheKey(blockId);
-
-            // Local get.
-            VectorBlockEntry block = getEntryById(blockId);
-
-            block.set(idx % block.size(), v);
-
-            // Local put.
-            cache.put(key, block);
-        });
-    }
-
-    /** */
-    private long getBlockId(int x) {
-        return (long)x / maxBlockEdge;
-    }
-
-    /**
-     * Distributed vector get.
-     *
-     * @param idx index.
-     * @return Vector value at (idx) index.
-     */
-    private double matrixGet(int idx) {
-        // Remote get from the primary node (where given row or column is stored locally).
-        return ignite().compute(getClusterGroupForGivenKey(CACHE_NAME, getBlockId(idx))).call(() -> {
-            IgniteCache<VectorBlockKey, VectorBlockEntry> cache = Ignition.localIgnite().getOrCreateCache(CACHE_NAME);
-
-            VectorBlockKey key = getCacheKey(getBlockId(idx));
-
-            // Local get.
-            VectorBlockEntry block = cache.localPeek(key, CachePeekMode.PRIMARY);
-
-            if (block == null)
-                block = cache.get(key);
-
-            return block == null ? 0.0 : block.get(idx % block.size());
-        });
-    }
-
-    /**
-     * Create new ML cache if needed.
-     */
-    private IgniteCache<VectorBlockKey, VectorBlockEntry> newCache() {
-        CacheConfiguration<VectorBlockKey, VectorBlockEntry> cfg = new CacheConfiguration<>();
-
-        // Write to primary.
-        cfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.PRIMARY_SYNC);
-
-        // Atomic transactions only.
-        cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
-
-        // No eviction.
-        cfg.setEvictionPolicy(null);
-
-        // No copying of values.
-        cfg.setCopyOnRead(false);
-
-        // Cache is partitioned.
-        cfg.setCacheMode(CacheMode.PARTITIONED);
-
-        // Random cache name.
-        cfg.setName(CACHE_NAME);
-
-        return Ignition.localIgnite().getOrCreateCache(cfg);
-    }
-
-    /**
-     * Avoid this method for large vectors
-     *
-     * @return data presented as array
-     */
-    @Override public double[] data() {
-        double[] res = new double[this.size];
-        for (int i = 0; i < this.size; i++)
-            res[i] = this.get(i);
-        return res;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/CacheMatrixStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/CacheMatrixStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/CacheMatrixStorage.java
deleted file mode 100644
index fbad957..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/CacheMatrixStorage.java
+++ /dev/null
@@ -1,196 +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.math.impls.storage.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.ml.math.MatrixStorage;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.distributed.MatrixKeyMapper;
-import org.apache.ignite.ml.math.distributed.ValueMapper;
-
-/**
- * Matrix storage based on arbitrary cache and key and value mapping functions.
- */
-public class CacheMatrixStorage<K, V> implements MatrixStorage {
-    /** */
-    private int rows;
-    /** */
-    private int cols;
-    /** */
-    private IgniteCache<K, V> cache;
-    /** */
-    private MatrixKeyMapper<K> keyMapper;
-    /** */
-    private ValueMapper<V> valMapper;
-
-    /**
-     *
-     */
-    public CacheMatrixStorage() {
-        // No-op.
-    }
-
-    /**
-     * @param rows Amount of rows in matrix.
-     * @param cols Amount of columns in matrix.
-     * @param cache Ignite cache.
-     * @param keyMapper {@link MatrixKeyMapper} to validate cache key.
-     * @param valMapper {@link ValueMapper} to obtain value for given cache key.
-     */
-    public CacheMatrixStorage(int rows, int cols, IgniteCache<K, V> cache, MatrixKeyMapper<K> keyMapper,
-        ValueMapper<V> valMapper) {
-        assert rows > 0;
-        assert cols > 0;
-        assert cache != null;
-        assert keyMapper != null;
-        assert valMapper != null;
-
-        this.rows = rows;
-        this.cols = cols;
-        this.cache = cache;
-        this.keyMapper = keyMapper;
-        this.valMapper = valMapper;
-    }
-
-    /**
-     * @return Ignite cache.
-     */
-    public IgniteCache<K, V> cache() {
-        return cache;
-    }
-
-    /**
-     * @return Key mapper.
-     */
-    public MatrixKeyMapper<K> keyMapper() {
-        return keyMapper;
-    }
-
-    /**
-     * @return Value mapper.
-     */
-    public ValueMapper<V> valueMapper() {
-        return valMapper;
-    }
-
-    /** {@inheritDoc} */
-    @Override public double get(int x, int y) {
-        return valMapper.toDouble(cache.get(keyMapper.apply(x, y)));
-    }
-
-    /** {@inheritDoc} */
-    @Override public void set(int x, int y, double v) {
-        cache.put(keyMapper.apply(x, y), valMapper.fromDouble(v));
-    }
-
-    /** {@inheritDoc} */
-    @Override public int columnSize() {
-        return cols;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int rowSize() {
-        return rows;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int storageMode() {
-        return StorageConstants.ROW_STORAGE_MODE;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int accessMode() {
-        return StorageConstants.RANDOM_ACCESS_MODE;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeInt(rows);
-        out.writeInt(cols);
-        out.writeUTF(cache.getName());
-        out.writeObject(keyMapper);
-        out.writeObject(valMapper);
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        rows = in.readInt();
-        cols = in.readInt();
-        cache = Ignition.localIgnite().getOrCreateCache(in.readUTF());
-        keyMapper = (MatrixKeyMapper<K>)in.readObject();
-        valMapper = (ValueMapper<V>)in.readObject();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isSequentialAccess() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDense() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isRandomAccess() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDistributed() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isArrayBased() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = 1;
-
-        res = res * 37 + rows;
-        res = res * 37 + cols;
-        res = res * 37 + cache.hashCode();
-        res = res * 37 + keyMapper.hashCode();
-        res = res * 37 + valMapper.hashCode();
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-
-        if (o == null || getClass() != o.getClass())
-            return false;
-
-        CacheMatrixStorage that = (CacheMatrixStorage)o;
-
-        return (cache != null ? cache.equals(that.cache) : that.cache == null) &&
-            (keyMapper != null ? keyMapper.equals(that.keyMapper) : that.keyMapper == null) &&
-            (valMapper != null ? valMapper.equals(that.valMapper) : that.valMapper == null);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dccb3db/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/DiagonalMatrixStorage.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/DiagonalMatrixStorage.java b/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/DiagonalMatrixStorage.java
deleted file mode 100644
index a0f102a..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/math/impls/storage/matrix/DiagonalMatrixStorage.java
+++ /dev/null
@@ -1,158 +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.math.impls.storage.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.ml.math.MatrixStorage;
-import org.apache.ignite.ml.math.StorageConstants;
-import org.apache.ignite.ml.math.Vector;
-import org.apache.ignite.ml.math.exceptions.UnsupportedOperationException;
-
-/**
- * {@link MatrixStorage} implementation for diagonal Matrix view.
- */
-public class DiagonalMatrixStorage implements MatrixStorage {
-    /** Backing vector for matrix diagonal. */
-    private Vector diagonal;
-
-    /**
-     *
-     */
-    public DiagonalMatrixStorage() {
-        // No-op.
-    }
-
-    /**
-     * @param diagonal Backing {@link Vector} for matrix diagonal.
-     */
-    public DiagonalMatrixStorage(Vector diagonal) {
-        assert diagonal != null;
-
-        this.diagonal = diagonal;
-    }
-
-    /**
-     *
-     */
-    public Vector diagonal() {
-        return diagonal;
-    }
-
-    /** {@inheritDoc} */
-    @Override public double get(int x, int y) {
-        return x == y ? diagonal.get(x) : 0.0;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void set(int x, int y, double v) {
-        if (x == y)
-            diagonal.set(x, v);
-        else
-            throw new UnsupportedOperationException("Can't set off-diagonal element.");
-    }
-
-    /** {@inheritDoc} */
-    @Override public int columnSize() {
-        return diagonal.size();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int rowSize() {
-        return diagonal.size();
-    }
-
-    /** {@inheritDoc} */
-    @Override public int storageMode() {
-        return StorageConstants.UNKNOWN_STORAGE_MODE;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int accessMode() {
-        return StorageConstants.RANDOM_ACCESS_MODE;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void writeExternal(ObjectOutput out) throws IOException {
-        out.writeObject(diagonal);
-    }
-
-    /** {@inheritDoc} */
-    @Override public double[] data() {
-        int size = diagonal.size();
-        double[] res = new double[size * size];
-
-        for (int i = 0; i < size; i++)
-            res[i * size + i % size] = diagonal.getX(i);
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
-        diagonal = (Vector)in.readObject();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isSequentialAccess() {
-        return diagonal.isSequentialAccess();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDense() {
-        return diagonal.isDense();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isRandomAccess() {
-        return diagonal.isRandomAccess();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isDistributed() {
-        return diagonal.isDistributed();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isArrayBased() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = 1;
-
-        res = res * 37 + diagonal.hashCode();
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-
-        if (o == null || getClass() != o.getClass())
-            return false;
-
-        DiagonalMatrixStorage that = (DiagonalMatrixStorage)o;
-
-        return diagonal.equals(that.diagonal);
-    }
-}