You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/04/19 08:46:10 UTC
[29/50] [abbrv] ignite git commit: IGNITE-5000 Rename Ignite Math
module to Ignite ML module added missed licenses renamed packages fixed wrong
ml profile activation
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/Functions.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/Functions.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/Functions.java
deleted file mode 100644
index 7100908..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/Functions.java
+++ /dev/null
@@ -1,136 +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.math.functions;
-
-/**
- * Compatibility with Apache Mahout.
- */
-public final class Functions {
- /** Function that returns {@code Math.abs(a)}. */
- public static final IgniteDoubleFunction<Double> ABS = Math::abs;
-
- /** Function that returns its argument. */
- public static final IgniteDoubleFunction<Double> IDENTITY = (a) -> a;
-
- /** Function that returns {@code Math.log(a) / Math.log(2)}. */
- public static final IgniteDoubleFunction<Double> LOG2 = (a) -> Math.log(a) * 1.4426950408889634;
-
- /** Function that returns {@code -a}. */
- public static final IgniteDoubleFunction<Double> NEGATE = (a) -> -a;
-
- /** Function that returns {@code a < 0 ? -1 : a > 0 ? 1 : 0 }. */
- public static final IgniteDoubleFunction<Double> SIGN = (a) -> a < 0.0 ? -1.0 : a > 0.0 ? 1.0 : 0.0;
-
- /** Function that returns {@code a * a}. */
- public static final IgniteDoubleFunction<Double> SQUARE = (a) -> a * a;
-
- /** Function that returns {@code 1 / (1 + exp(-a) } */
- public static final IgniteDoubleFunction<Double> SIGMOID = (a) -> 1.0 / (1.0 + Math.exp(-a));
-
- /** Function that returns {@code 1 / a } */
- public static final IgniteDoubleFunction<Double> INV = (a) -> 1.0 / a;
-
- /** Function that returns {@code a * (1-a) } */
- public static final IgniteDoubleFunction<Double> SIGMOIDGRADIENT = (a) -> a * (1.0 - a);
-
- /** Function that returns {@code a % b}. */
- public static final IgniteBiFunction<Double, Double, Double> MOD = (a, b) -> a % b;
-
- /** Function that returns {@code a * b}. */
- public static final IgniteBiFunction<Double, Double, Double> MULT = (a, b) -> a * b;
-
- /** Function that returns {@code Math.log(a) / Math.log(b)}. */
- public static final IgniteBiFunction<Double, Double, Double> LG = (a, b) -> Math.log(a) / Math.log(b);
-
- /** Function that returns {@code a + b}. */
- public static final IgniteBiFunction<Double, Double, Double> PLUS = (a, b) -> a + b;
-
- /** Function that returns {@code a - b}. */
- public static final IgniteBiFunction<Double, Double, Double> MINUS = (a, b) -> a - b;
-
- /** Function that returns {@code abs(a - b)}. */
- public static final IgniteBiFunction<Double, Double, Double> MINUS_ABS = (a, b) -> Math.abs(a - b);
-
- /** Function that returns {@code max(abs(a), abs(b))}. */
- public static final IgniteBiFunction<Double, Double, Double> MAX_ABS = (a, b) -> Math.max(Math.abs(a), Math.abs(b));
-
- /** Function that returns {@code min(abs(a), abs(b))}. */
- public static final IgniteBiFunction<Double, Double, Double> MIN_ABS = (a, b) -> Math.min(Math.abs(a), Math.abs(b));
-
- /** Function that returns {@code Math.abs(a) + Math.abs(b)}. */
- public static final IgniteBiFunction<Double, Double, Double> PLUS_ABS = (a, b) -> Math.abs(a) + Math.abs(b);
-
- /** Function that returns {@code (a - b) * (a - b)} */
- public static final IgniteBiFunction<Double, Double, Double> MINUS_SQUARED = (a, b) -> (a - b) * (a - b);
-
- /**
- * Function that returns {@code a < b ? -1 : a > b ? 1 : 0}.
- */
- public static final IgniteBiFunction<Double, Double, Double> COMPARE = (a, b) -> a < b ? -1.0 : a > b ? 1.0 : 0.0;
-
- /**
- * Function that returns {@code a + b}. {@code a} is a variable, {@code b} is fixed.
- *
- * @param b
- */
- public static IgniteDoubleFunction<Double> plus(final double b) {
- return (a) -> a + b;
- }
-
- /**
- * Function that returns {@code a * b}. {@code a} is a variable, {@code b} is fixed.
- *
- * @param b
- */
- public static IgniteDoubleFunction<Double> mult(final double b) {
- return (a) -> a * b;
- }
-
- /** Function that returns {@code a / b}. {@code a} is a variable, {@code b} is fixed. */
- public static IgniteDoubleFunction<Double> div(double b) {
- return mult(1 / b);
- }
-
- /**
- * Function that returns {@code a + b*constant}. {@code a} and {@code b} are variables,
- * {@code constant} is fixed.
- */
- public static IgniteBiFunction<Double, Double, Double> plusMult(double constant) {
- return (a, b) -> a + b * constant;
- }
-
- /**
- * Function that returns {@code a - b*constant}. {@code a} and {@code b} are variables,
- * {@code constant} is fixed.
- */
- public static IgniteBiFunction<Double, Double, Double> minusMult(double constant) {
- return (a, b) -> a - b * constant;
- }
-
- /**
- * @param b
- */
- public static IgniteDoubleFunction<Double> pow(final double b) {
- return (a) -> {
- if (b == 2)
- return a * a;
- else
- return Math.pow(a, b);
- };
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiConsumer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiConsumer.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiConsumer.java
deleted file mode 100644
index 22e8274..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiConsumer.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.apache.ignite.math.functions;
-
-import java.io.Serializable;
-import java.util.function.BiConsumer;
-
-/**
- * Serializable binary consumer.
- *
- * @see java.util.function.BiConsumer
- */
-public interface IgniteBiConsumer<T, U> extends BiConsumer<T, U>, Serializable {
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiFunction.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiFunction.java
deleted file mode 100644
index 9d9c147..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteBiFunction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.functions;
-
-import java.io.Serializable;
-import java.util.function.BiFunction;
-
-/**
- * Serializable binary function.
- *
- * @see java.util.function.BiFunction
- */
-public interface IgniteBiFunction<A, B, T> extends BiFunction<A, B, T>, Serializable {
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteConsumer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteConsumer.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteConsumer.java
deleted file mode 100644
index 1f7ca07..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteConsumer.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.functions;
-
-import java.io.Serializable;
-import java.util.function.Consumer;
-
-/**
- * Serializable consumer.
- *
- * @see java.util.function.Consumer
- */
-public interface IgniteConsumer<T> extends Consumer<T>, Serializable {
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteDoubleFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteDoubleFunction.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteDoubleFunction.java
deleted file mode 100644
index 7a23d50..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteDoubleFunction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.functions;
-
-import java.io.Serializable;
-import java.util.function.DoubleFunction;
-
-/**
- * Serializable double function.
- *
- * @see java.util.function.DoubleFunction
- */
-public interface IgniteDoubleFunction<Double> extends DoubleFunction<Double>, Serializable {
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteFunction.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteFunction.java
deleted file mode 100644
index cfe89a4..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IgniteFunction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.functions;
-
-import java.io.Serializable;
-import java.util.function.Function;
-
-/**
- * Serializable function.
- *
- * @see java.util.function.Function
- */
-public interface IgniteFunction<T, R> extends Function<T, R>, Serializable {
-
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntDoubleToVoidFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntDoubleToVoidFunction.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IntDoubleToVoidFunction.java
deleted file mode 100644
index e5d69c7..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntDoubleToVoidFunction.java
+++ /dev/null
@@ -1,25 +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.math.functions;
-
-/**
- * Setter function for the vector.
- */
-public interface IntDoubleToVoidFunction extends IgniteBiConsumer<Integer, Double> {
-
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntDoubleToVoidFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntDoubleToVoidFunction.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntDoubleToVoidFunction.java
deleted file mode 100644
index cad8c3c..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntDoubleToVoidFunction.java
+++ /dev/null
@@ -1,28 +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.math.functions;
-
-import java.io.Serializable;
-
-/**
- * Setter function for matrices.
- */
-public interface IntIntDoubleToVoidFunction extends Serializable {
- /** */
- public void apply(int x, int y, double v);
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntToDoubleFunction.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntToDoubleFunction.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntToDoubleFunction.java
deleted file mode 100644
index b31d9f9..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/IntIntToDoubleFunction.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.functions;
-
-/**
- * Getters functions for matrices.
- */
-public interface IntIntToDoubleFunction extends IgniteBiFunction<Integer, Integer, Double> {
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/functions/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/functions/package-info.java b/modules/ml/src/main/java/org/apache/ignite/math/functions/package-info.java
deleted file mode 100644
index 133e62c..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/functions/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * <!-- Package description. -->
- * Contains serializable functions for distributed code algebra.
- */
-package org.apache.ignite.math.functions;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/CacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/CacheUtils.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/CacheUtils.java
deleted file mode 100644
index df33895..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/impls/CacheUtils.java
+++ /dev/null
@@ -1,356 +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.math.impls;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import javax.cache.Cache;
-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.cache.query.ScanQuery;
-import org.apache.ignite.cluster.ClusterGroup;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.lang.IgniteCallable;
-import org.apache.ignite.lang.IgniteRunnable;
-import org.apache.ignite.math.KeyMapper;
-import org.apache.ignite.math.ValueMapper;
-import org.apache.ignite.math.functions.IgniteBiFunction;
-import org.apache.ignite.math.functions.IgniteConsumer;
-import org.apache.ignite.math.functions.IgniteFunction;
-
-/**
- * Distribution-related misc. support.
- */
-public class CacheUtils {
- /**
- * Cache entry support.
- *
- * @param <K>
- * @param <V>
- */
- public static class CacheEntry<K, V> {
- /** */
- private Cache.Entry<K, V> entry;
- /** */
- private IgniteCache<K, V> cache;
-
- /**
- * @param entry Original cache entry.
- * @param cache Cache instance.
- */
- CacheEntry(Cache.Entry<K, V> entry, IgniteCache<K, V> cache) {
- this.entry = entry;
- this.cache = cache;
- }
-
- /**
- *
- *
- */
- public Cache.Entry<K, V> entry() {
- return entry;
- }
-
- /**
- *
- *
- */
- public IgniteCache<K, V> cache() {
- return cache;
- }
- }
-
- /**
- * Gets local Ignite instance.
- */
- public static Ignite ignite() {
- return Ignition.localIgnite();
- }
-
- /**
- * @param cacheName Cache name.
- * @param k Key into the cache.
- * @param <K> Key type.
- * @return Cluster group for given key.
- */
- public static <K> ClusterGroup groupForKey(String cacheName, K k) {
- return ignite().cluster().forNode(ignite().affinity(cacheName).mapKeyToNode(k));
- }
-
- /**
- * @param cacheName Cache name.
- * @param keyMapper {@link KeyMapper} to validate cache key.
- * @param valMapper {@link ValueMapper} to obtain double value for given cache key.
- * @param <K> Cache key object type.
- * @param <V> Cache value object type.
- * @return Sum of the values obtained for valid keys.
- */
- public static <K, V> double sum(String cacheName, KeyMapper<K> keyMapper, ValueMapper<V> valMapper) {
- Collection<Double> subSums = fold(cacheName, (CacheEntry<K, V> ce, Double acc) -> {
- if (keyMapper.isValid(ce.entry().getKey())) {
- double v = valMapper.toDouble(ce.entry().getValue());
-
- return acc == null ? v : acc + v;
- }
- else
- return acc;
- });
-
- return sum(subSums);
- }
-
- /**
- * @param cacheName Cache name.
- * @return Sum obtained using sparse logic.
- */
- public static <K, V> double sparseSum(String cacheName) {
- Collection<Double> subSums = fold(cacheName, (CacheEntry<Integer, Map<Integer, Double>> ce, Double acc) -> {
- Map<Integer, Double> map = ce.entry().getValue();
-
- double sum = sum(map.values());
-
- return acc == null ? sum : acc + sum;
- });
-
- return sum(subSums);
- }
-
- /**
- * @param c {@link Collection} of double values to sum.
- * @return Sum of the values.
- */
- private static double sum(Collection<Double> c) {
- double sum = 0.0;
-
- for (double d : c)
- sum += d;
-
- return sum;
- }
-
- /**
- * @param cacheName Cache name.
- * @param keyMapper {@link KeyMapper} to validate cache key.
- * @param valMapper {@link ValueMapper} to obtain double value for given cache key.
- * @param <K> Cache key object type.
- * @param <V> Cache value object type.
- * @return Minimum value for valid keys.
- */
- public static <K, V> double min(String cacheName, KeyMapper<K> keyMapper, ValueMapper<V> valMapper) {
- Collection<Double> mins = fold(cacheName, (CacheEntry<K, V> ce, Double acc) -> {
- if (keyMapper.isValid(ce.entry().getKey())) {
- double v = valMapper.toDouble(ce.entry().getValue());
-
- if (acc == null)
- return v;
- else
- return Math.min(acc, v);
- }
- else
- return acc;
- });
-
- return Collections.min(mins);
- }
-
- /**
- * @param cacheName Cache name.
- * @return Minimum value obtained using sparse logic.
- */
- public static <K, V> double sparseMin(String cacheName) {
- Collection<Double> mins = fold(cacheName, (CacheEntry<Integer, Map<Integer, Double>> ce, Double acc) -> {
- Map<Integer, Double> map = ce.entry().getValue();
-
- double min = Collections.min(map.values());
-
- if (acc == null)
- return min;
- else
- return Math.min(acc, min);
- });
-
- return Collections.min(mins);
- }
-
- /**
- * @param cacheName Cache name.
- * @return Maximum value obtained using sparse logic.
- */
- public static <K, V> double sparseMax(String cacheName) {
- Collection<Double> maxes = fold(cacheName, (CacheEntry<Integer, Map<Integer, Double>> ce, Double acc) -> {
- Map<Integer, Double> map = ce.entry().getValue();
-
- double max = Collections.max(map.values());
-
- if (acc == null)
- return max;
- else
- return Math.max(acc, max);
- });
-
- return Collections.max(maxes);
- }
-
- /**
- * @param cacheName Cache name.
- * @param keyMapper {@link KeyMapper} to validate cache key.
- * @param valMapper {@link ValueMapper} to obtain double value for given cache key.
- * @param <K> Cache key object type.
- * @param <V> Cache value object type.
- * @return Maximum value for valid keys.
- */
- public static <K, V> double max(String cacheName, KeyMapper<K> keyMapper, ValueMapper<V> valMapper) {
- Collection<Double> maxes = fold(cacheName, (CacheEntry<K, V> ce, Double acc) -> {
- if (keyMapper.isValid(ce.entry().getKey())) {
- double v = valMapper.toDouble(ce.entry().getValue());
-
- if (acc == null)
- return v;
- else
- return Math.max(acc, v);
- }
- else
- return acc;
- });
-
- return Collections.max(maxes);
- }
-
- /**
- * @param cacheName Cache name.
- * @param keyMapper {@link KeyMapper} to validate cache key.
- * @param valMapper {@link ValueMapper} to obtain double value for given cache key.
- * @param mapper Mapping {@link IgniteFunction}.
- * @param <K> Cache key object type.
- * @param <V> Cache value object type.
- */
- public static <K, V> void map(String cacheName, KeyMapper<K> keyMapper, ValueMapper<V> valMapper,
- IgniteFunction<Double, Double> mapper) {
- foreach(cacheName, (CacheEntry<K, V> ce) -> {
- K k = ce.entry().getKey();
-
- if (keyMapper.isValid(k))
- // Actual assignment.
- ce.cache().put(k, valMapper.fromDouble(mapper.apply(valMapper.toDouble(ce.entry().getValue()))));
- });
- }
-
- /**
- * @param cacheName Cache name.
- * @param mapper Mapping {@link IgniteFunction}.
- */
- public static <K, V> void sparseMap(String cacheName, IgniteFunction<Double, Double> mapper) {
- foreach(cacheName, (CacheEntry<Integer, Map<Integer, Double>> ce) -> {
- Integer k = ce.entry().getKey();
- Map<Integer, Double> v = ce.entry().getValue();
-
- for (Map.Entry<Integer, Double> e : v.entrySet())
- e.setValue(mapper.apply(e.getValue()));
-
- ce.cache().put(k, v);
- });
- }
-
- /**
- * @param cacheName Cache name.
- * @param fun An operation that accepts a cache entry and processes it.
- * @param <K> Cache key object type.
- * @param <V> Cache value object type.
- */
- public static <K, V> void foreach(String cacheName, IgniteConsumer<CacheEntry<K, V>> fun) {
- bcast(cacheName, () -> {
- Ignite ignite = Ignition.localIgnite();
- IgniteCache<K, V> cache = ignite.getOrCreateCache(cacheName);
-
- int partsCnt = ignite.affinity(cacheName).partitions();
-
- // Use affinity in filter for scan query. Otherwise we accept consumer in each node which is wrong.
- Affinity affinity = ignite.affinity(cacheName);
- ClusterNode locNode = ignite.cluster().localNode();
-
- // Iterate over all partitions. Some of them will be stored on that local node.
- for (int part = 0; part < partsCnt; part++) {
- int p = part;
-
- // Iterate over given partition.
- // Query returns an empty cursor if this partition is not stored on this node.
- for (Cache.Entry<K, V> entry : cache.query(new ScanQuery<K, V>(part,
- (k, v) -> affinity.mapPartitionToNode(p) == locNode)))
- fun.accept(new CacheEntry<>(entry, cache));
- }
- });
- }
-
- /**
- * <b>Currently fold supports only commutative operations.<b/>
- *
- * @param cacheName Cache name.
- * @param folder Fold function operating over cache entries.
- * @param <K> Cache key object type.
- * @param <V> Cache value object type.
- * @param <A> Fold result type.
- * @return Fold operation result.
- */
- public static <K, V, A> Collection<A> fold(String cacheName, IgniteBiFunction<CacheEntry<K, V>, A, A> folder) {
- return bcast(cacheName, () -> {
- Ignite ignite = Ignition.localIgnite();
- IgniteCache<K, V> cache = ignite.getOrCreateCache(cacheName);
-
- int partsCnt = ignite.affinity(cacheName).partitions();
-
- // Use affinity in filter for ScanQuery. Otherwise we accept consumer in each node which is wrong.
- Affinity affinity = ignite.affinity(cacheName);
- ClusterNode locNode = ignite.cluster().localNode();
-
- A a = null;
-
- // Iterate over all partitions. Some of them will be stored on that local node.
- for (int part = 0; part < partsCnt; part++) {
- int p = part;
-
- // Iterate over given partition.
- // Query returns an empty cursor if this partition is not stored on this node.
- for (Cache.Entry<K, V> entry : cache.query(new ScanQuery<K, V>(part,
- (k, v) -> affinity.mapPartitionToNode(p) == locNode)))
- a = folder.apply(new CacheEntry<>(entry, cache), a);
- }
-
- return a;
- });
- }
-
- /**
- * @param cacheName Cache name.
- * @param run {@link Runnable} to broadcast to cache nodes for given cache name.
- */
- public static void bcast(String cacheName, IgniteRunnable run) {
- ignite().compute(ignite().cluster().forCacheNodes(cacheName)).broadcast(run);
- }
-
- /**
- * @param cacheName Cache name.
- * @param call {@link IgniteCallable} to broadcast to cache nodes for given cache name.
- * @param <A> Type returned by the callable.
- */
- public static <A> Collection<A> bcast(String cacheName, IgniteCallable<A> call) {
- return ignite().compute(ignite().cluster().forCacheNodes(cacheName)).broadcast(call);
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/AbstractMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/AbstractMatrix.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/AbstractMatrix.java
deleted file mode 100644
index ca11e81..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/AbstractMatrix.java
+++ /dev/null
@@ -1,880 +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.math.impls.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.MatrixStorage;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.decompositions.LUDecomposition;
-import org.apache.ignite.math.exceptions.CardinalityException;
-import org.apache.ignite.math.exceptions.ColumnIndexException;
-import org.apache.ignite.math.exceptions.RowIndexException;
-import org.apache.ignite.math.functions.Functions;
-import org.apache.ignite.math.functions.IgniteBiFunction;
-import org.apache.ignite.math.functions.IgniteDoubleFunction;
-import org.apache.ignite.math.functions.IgniteFunction;
-import org.apache.ignite.math.functions.IntIntToDoubleFunction;
-import org.apache.ignite.math.impls.vector.MatrixVectorView;
-
-/**
- * This class provides a helper implementation of the {@link Matrix}
- * interface to minimize the effort required to implement it.
- * Subclasses may override some of the implemented methods if a more
- * specific or optimized implementation is desirable.
- *
- * TODO: add row/column optimization.
- */
-public abstract class AbstractMatrix implements Matrix {
- // Stochastic sparsity analysis.
- /** */
- private static final double Z95 = 1.959964;
- /** */
- private static final double Z80 = 1.281552;
- /** */
- private static final int MAX_SAMPLES = 500;
- /** */
- private static final int MIN_SAMPLES = 15;
-
- /** Cached minimum element. */
- private Element minElm;
- /** Cached maximum element. */
- private Element maxElm = null;
-
- /** Matrix storage implementation. */
- private MatrixStorage sto;
-
- /** Meta attributes storage. */
- private Map<String, Object> meta = new HashMap<>();
-
- /** Matrix's GUID. */
- private IgniteUuid guid = IgniteUuid.randomUuid();
-
- /**
- * @param sto Backing {@link MatrixStorage}.
- */
- public AbstractMatrix(MatrixStorage sto) {
- this.sto = sto;
- }
-
- /**
- *
- */
- public AbstractMatrix() {
- // No-op.
- }
-
- /**
- * @param sto Backing {@link MatrixStorage}.
- */
- protected void setStorage(MatrixStorage sto) {
- assert sto != null;
-
- this.sto = sto;
- }
-
- /**
- * @param row Row index in the matrix.
- * @param col Column index in the matrix.
- * @param v Value to set.
- */
- protected void storageSet(int row, int col, double v) {
- sto.set(row, col, v);
-
- // Reset cached values.
- minElm = maxElm = null;
- }
-
- /**
- * @param row Row index in the matrix.
- * @param col Column index in the matrix.
- */
- protected double storageGet(int row, int col) {
- return sto.get(row, col);
- }
-
- /** {@inheritDoc} */
- @Override public Element maxElement() {
- if (maxElm == null) {
- double max = Double.NEGATIVE_INFINITY;
- int row = 0, col = 0;
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++) {
- double d = storageGet(x, y);
-
- if (d > max) {
- max = d;
- row = x;
- col = y;
- }
- }
-
- maxElm = mkElement(row, col);
- }
-
- return maxElm;
- }
-
- /** {@inheritDoc} */
- @Override public Element minElement() {
- if (minElm == null) {
- double min = Double.MAX_VALUE;
- int row = 0, col = 0;
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++) {
- double d = storageGet(x, y);
-
- if (d < min) {
- min = d;
- row = x;
- col = y;
- }
- }
-
- minElm = mkElement(row, col);
- }
-
- return minElm;
- }
-
- /** {@inheritDoc} */
- @Override public double maxValue() {
- return maxElement().get();
- }
-
- /** {@inheritDoc} */
- @Override public double minValue() {
- return minElement().get();
- }
-
- /**
- * @param row Row index in the matrix.
- * @param col Column index in the matrix.
- */
- private Element mkElement(int row, int col) {
- return new Element() {
- /** {@inheritDoc} */
- @Override public double get() {
- return storageGet(row, col);
- }
-
- /** {@inheritDoc} */
- @Override public int row() {
- return row;
- }
-
- /** {@inheritDoc} */
- @Override public int column() {
- return col;
- }
-
- /** {@inheritDoc} */
- @Override public void set(double d) {
- storageSet(row, col, d);
- }
- };
- }
-
- /** {@inheritDoc} */
- @Override public Element getElement(int row, int col) {
- return mkElement(row, col);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix swapRows(int row1, int row2) {
- checkRowIndex(row1);
- checkRowIndex(row2);
-
- int cols = columnSize();
-
- for (int y = 0; y < cols; y++) {
- double v = getX(row1, y);
-
- setX(row1, y, getX(row2, y));
- setX(row2, y, v);
- }
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix swapColumns(int col1, int col2) {
- checkColumnIndex(col1);
- checkColumnIndex(col2);
-
- int rows = rowSize();
-
- for (int x = 0; x < rows; x++) {
- double v = getX(x, col1);
-
- setX(x, col1, getX(x, col2));
- setX(x, col2, v);
- }
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public MatrixStorage getStorage() {
- return sto;
- }
-
- /** {@inheritDoc} */
- @Override public boolean isSequentialAccess() {
- return sto.isSequentialAccess();
- }
-
- /** {@inheritDoc} */
- @Override public boolean isDense() {
- return sto.isDense();
- }
-
- /** {@inheritDoc} */
- @Override public boolean isRandomAccess() {
- return sto.isRandomAccess();
- }
-
- /** {@inheritDoc} */
- @Override public boolean isDistributed() {
- return sto.isDistributed();
- }
-
- /** {@inheritDoc} */
- @Override public boolean isArrayBased() {
- return sto.isArrayBased();
- }
-
- /**
- * Check row index bounds.
- *
- * @param row Row index.
- */
- private void checkRowIndex(int row) {
- if (row < 0 || row >= rowSize())
- throw new RowIndexException(row);
- }
-
- /**
- * Check column index bounds.
- *
- * @param col Column index.
- */
- private void checkColumnIndex(int col) {
- if (col < 0 || col >= columnSize())
- throw new ColumnIndexException(col);
- }
-
- /**
- * Check column and row index bounds.
- *
- * @param row Row index.
- * @param col Column index.
- */
- protected void checkIndex(int row, int col) {
- checkRowIndex(row);
- checkColumnIndex(col);
- }
-
- /** {@inheritDoc} */
- @Override public void writeExternal(ObjectOutput out) throws IOException {
- out.writeObject(sto);
- out.writeObject(meta);
- out.writeObject(guid);
- }
-
- /** {@inheritDoc} */
- @Override public Map<String, Object> getMetaStorage() {
- return meta;
- }
-
- /** {@inheritDoc} */
- @SuppressWarnings("unchecked")
- @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- sto = (MatrixStorage)in.readObject();
- meta = (Map<String, Object>)in.readObject();
- guid = (IgniteUuid)in.readObject();
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assign(double val) {
- if (sto.isArrayBased())
- for (double[] column : sto.data())
- Arrays.fill(column, val);
- else {
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- storageSet(x, y, val);
- }
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assign(IntIntToDoubleFunction fun) {
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- storageSet(x, y, fun.apply(x, y));
-
- return this;
- }
-
- /** */
- private void checkCardinality(Matrix mtx) {
- checkCardinality(mtx.rowSize(), mtx.columnSize());
- }
-
- /** */
- private void checkCardinality(int rows, int cols) {
- if (rows != rowSize())
- throw new CardinalityException(rowSize(), rows);
-
- if (cols != columnSize())
- throw new CardinalityException(columnSize(), cols);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assign(double[][] vals) {
- checkCardinality(vals.length, vals[0].length);
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- storageSet(x, y, vals[x][y]);
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assign(Matrix mtx) {
- checkCardinality(mtx);
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- storageSet(x, y, mtx.getX(x, y));
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix map(IgniteDoubleFunction<Double> fun) {
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- storageSet(x, y, fun.apply(storageGet(x, y)));
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix map(Matrix mtx, IgniteBiFunction<Double, Double, Double> fun) {
- checkCardinality(mtx);
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- storageSet(x, y, fun.apply(storageGet(x, y), mtx.getX(x, y)));
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assignColumn(int col, org.apache.ignite.math.Vector vec) {
- checkColumnIndex(col);
-
- int rows = rowSize();
-
- for (int x = 0; x < rows; x++)
- storageSet(x, col, vec.getX(x));
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assignRow(int row, Vector vec) {
- checkRowIndex(row);
-
- int cols = columnSize();
-
- if (cols != vec.size())
- throw new CardinalityException(cols, vec.size());
-
- if (sto.isArrayBased() && vec.getStorage().isArrayBased())
- System.arraycopy(vec.getStorage().data(), 0, sto.data()[row], 0, cols);
- else
- for (int y = 0; y < cols; y++)
- storageSet(row, y, vec.getX(y));
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Vector foldRows(IgniteFunction<Vector, Double> fun) {
- int rows = rowSize();
-
- Vector vec = likeVector(rows);
-
- for (int i = 0; i < rows; i++)
- vec.setX(i, fun.apply(viewRow(i)));
-
- return vec;
- }
-
- /** {@inheritDoc} */
- @Override public Vector foldColumns(IgniteFunction<Vector, Double> fun) {
- int cols = columnSize();
-
- Vector vec = likeVector(cols);
-
- for (int i = 0; i < cols; i++)
- vec.setX(i, fun.apply(viewColumn(i)));
-
- return vec;
- }
-
- /** {@inheritDoc} */
- @Override public <T> T foldMap(IgniteBiFunction<T, Double, T> foldFun, IgniteDoubleFunction<Double> mapFun,
- T zeroVal) {
- T res = zeroVal;
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- res = foldFun.apply(res, mapFun.apply(storageGet(x, y)));
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public int columnSize() {
- return sto.columnSize();
- }
-
- /** {@inheritDoc} */
- @Override public int rowSize() {
- return sto.rowSize();
- }
-
- /** {@inheritDoc} */
- @Override public double determinant() {
- //TODO: This decomposition should be cached
- LUDecomposition dec = new LUDecomposition(this);
- double res = dec.determinant();
- dec.destroy();
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix inverse() {
- if (rowSize() != columnSize())
- throw new CardinalityException(rowSize(), columnSize());
-
- //TODO: This decomposition should be cached
- LUDecomposition dec = new LUDecomposition(this);
-
- Matrix res = dec.solve(likeIdentity());
- dec.destroy();
-
- return res;
- }
-
- /** */
- protected Matrix likeIdentity() {
- int n = rowSize();
- Matrix res = like(n, n);
-
- for (int i = 0; i < n; i++)
- res.setX(i, i, 1.0);
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix divide(double d) {
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- setX(x, y, getX(x, y) / d);
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public double get(int row, int col) {
- checkIndex(row, col);
-
- return storageGet(row, col);
- }
-
- /** {@inheritDoc} */
- @Override public double getX(int row, int col) {
- return storageGet(row, col);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix minus(Matrix mtx) {
- int rows = rowSize();
- int cols = columnSize();
-
- checkCardinality(rows, cols);
-
- Matrix res = like(rows, cols);
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- res.setX(x, y, getX(x, y) - mtx.getX(x, y));
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix plus(double x) {
- Matrix cp = copy();
-
- cp.map(Functions.plus(x));
-
- return cp;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix plus(Matrix mtx) {
- int rows = rowSize();
- int cols = columnSize();
-
- checkCardinality(rows, cols);
-
- Matrix res = like(rows, cols);
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- res.setX(x, y, getX(x, y) + mtx.getX(x, y));
-
- return res;
-
- }
-
- /** {@inheritDoc} */
- @Override public IgniteUuid guid() {
- return guid;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix set(int row, int col, double val) {
- checkIndex(row, col);
-
- storageSet(row, col, val);
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix setRow(int row, double[] data) {
- checkRowIndex(row);
-
- int cols = columnSize();
-
- if (cols != data.length)
- throw new CardinalityException(cols, data.length);
-
- if (sto.isArrayBased())
- System.arraycopy(data, 0, sto.data()[row], 0, cols);
- else
- for (int y = 0; y < cols; y++)
- setX(row, y, data[y]);
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix setColumn(int col, double[] data) {
- checkColumnIndex(col);
-
- int rows = rowSize();
-
- if (rows != data.length)
- throw new CardinalityException(rows, data.length);
-
- for (int x = 0; x < rows; x++)
- setX(x, col, data[x]);
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix setX(int row, int col, double val) {
- storageSet(row, col, val);
-
- return this;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix times(double x) {
- Matrix cp = copy();
-
- cp.map(Functions.mult(x));
-
- return cp;
- }
-
- /** {@inheritDoc} */
- @Override public double maxAbsRowSumNorm() {
- double max = 0.0;
-
- int rows = rowSize();
- int cols = columnSize();
-
- for (int x = 0; x < rows; x++) {
- double sum = 0;
-
- for (int y = 0; y < cols; y++)
- sum += Math.abs(getX(x, y));
-
- if (sum > max)
- max = sum;
- }
-
- return max;
- }
-
- /** {@inheritDoc} */
- @Override public Vector times(Vector vec) {
- int cols = columnSize();
-
- if (cols != vec.size())
- throw new CardinalityException(cols, vec.size());
-
- int rows = rowSize();
-
- Vector res = likeVector(rows);
-
- for (int x = 0; x < rows; x++)
- res.setX(x, vec.dot(viewRow(x)));
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix times(Matrix mtx) {
- int cols = columnSize();
-
- if (cols != mtx.rowSize())
- throw new CardinalityException(cols, mtx.rowSize());
-
- int rows = rowSize();
-
- int mtxCols = mtx.columnSize();
-
- Matrix res = like(rows, mtxCols);
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < mtxCols; y++) {
- double sum = 0.0;
-
- for (int k = 0; k < cols; k++)
- sum += getX(x, k) * mtx.getX(k, y);
-
- res.setX(x, y, sum);
- }
-
- return res;
- }
-
- /** {@inheritDoc} */
- @Override public double sum() {
- int rows = rowSize();
- int cols = columnSize();
-
- double sum = 0.0;
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- sum += getX(x, y);
-
- return sum;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix transpose() {
- int rows = rowSize();
- int cols = columnSize();
-
- Matrix mtx = like(cols, rows);
-
- for (int x = 0; x < rows; x++)
- for (int y = 0; y < cols; y++)
- mtx.setX(y, x, getX(x, y));
-
- return mtx;
- }
-
- /** {@inheritDoc} */
- @Override public boolean density(double threshold) {
- assert threshold >= 0.0 && threshold <= 1.0;
-
- int n = MIN_SAMPLES;
- int rows = rowSize();
- int cols = columnSize();
-
- double mean = 0.0;
- double pq = threshold * (1 - threshold);
-
- Random rnd = new Random();
-
- for (int i = 0; i < MIN_SAMPLES; i++)
- if (getX(rnd.nextInt(rows), rnd.nextInt(cols)) != 0.0)
- mean++;
-
- mean /= MIN_SAMPLES;
-
- double iv = Z80 * Math.sqrt(pq / n);
-
- if (mean < threshold - iv)
- return false; // Sparse.
- else if (mean > threshold + iv)
- return true; // Dense.
-
- while (n < MAX_SAMPLES) {
- // Determine upper bound we may need for 'n' to likely relinquish the uncertainty.
- // Here, we use confidence interval formula but solved for 'n'.
- double ivX = Math.max(Math.abs(threshold - mean), 1e-11);
-
- double stdErr = ivX / Z80;
- double nX = Math.min(Math.max((int)Math.ceil(pq / (stdErr * stdErr)), n), MAX_SAMPLES) - n;
-
- if (nX < 1.0) // IMPL NOTE this can happen with threshold 1.0
- nX = 1.0;
-
- double meanNext = 0.0;
-
- for (int i = 0; i < nX; i++)
- if (getX(rnd.nextInt(rows), rnd.nextInt(cols)) != 0.0)
- meanNext++;
-
- mean = (n * mean + meanNext) / (n + nX);
-
- n += nX;
-
- // Are we good now?
- iv = Z80 * Math.sqrt(pq / n);
-
- if (mean < threshold - iv)
- return false; // Sparse.
- else if (mean > threshold + iv)
- return true; // Dense.
- }
-
- return mean > threshold; // Dense if mean > threshold.
- }
-
- /** {@inheritDoc} */
- @Override public Matrix viewPart(int[] off, int[] size) {
- return new MatrixView(this, off[0], off[1], size[0], size[1]);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix viewPart(int rowOff, int rows, int colOff, int cols) {
- return viewPart(new int[] {rowOff, colOff}, new int[] {rows, cols});
- }
-
- /** {@inheritDoc} */
- @Override public Vector viewRow(int row) {
- return new MatrixVectorView(this, row, 0, 0, 1);
- }
-
- /** {@inheritDoc} */
- @Override public Vector viewColumn(int col) {
- return new MatrixVectorView(this, 0, col, 1, 0);
- }
-
- /** {@inheritDoc} */
- @Override public Vector viewDiagonal() {
- return new MatrixVectorView(this, 0, 0, 1, 1);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix copy() {
- Matrix cp = like(rowSize(), columnSize());
-
- cp.assign(this);
-
- return cp;
- }
-
- /** {@inheritDoc} */
- @Override public int hashCode() {
- int res = 1;
-
- res = res * 37 + guid.hashCode();
- res = res * 37 + sto.hashCode();
- res = res * 37 + meta.hashCode();
-
- return res;
- }
-
- /**
- * {@inheritDoc}
- *
- * We ignore guid's for comparisons.
- */
- @Override public boolean equals(Object o) {
- if (this == o)
- return true;
-
- if (o == null || getClass() != o.getClass())
- return false;
-
- AbstractMatrix that = (AbstractMatrix)o;
-
- MatrixStorage sto = getStorage();
-
- return (sto != null ? sto.equals(that.getStorage()) : that.getStorage() == null);
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/CacheMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/CacheMatrix.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/CacheMatrix.java
deleted file mode 100644
index 8ce1192..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/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.math.impls.matrix;
-
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.MatrixKeyMapper;
-import org.apache.ignite.math.ValueMapper;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.math.functions.IgniteDoubleFunction;
-import org.apache.ignite.math.functions.IgniteFunction;
-import org.apache.ignite.math.impls.CacheUtils;
-import org.apache.ignite.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
- * @param cols
- * @param cache
- * @param keyMapper
- * @param valMapper
- */
- 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
- */
- @Override public Matrix divide(double d) {
- return mapOverValues((Double v) -> v / d);
- }
-
- /**
- * Return the same matrix with updates values (broken contract).
- *
- * @param x
- */
- @Override public Matrix plus(double x) {
- return mapOverValues((Double v) -> v + x);
- }
-
- /**
- * Return the same matrix with updates values (broken contract).
- *
- * @param x
- */
- @Override public Matrix times(double x) {
- return mapOverValues((Double v) -> v * x);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix assign(double val) {
- return mapOverValues((Double 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
- */
- 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/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOffHeapMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOffHeapMatrix.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOffHeapMatrix.java
deleted file mode 100644
index d5f8eca..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOffHeapMatrix.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.impls.matrix;
-
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.impls.storage.matrix.DenseOffHeapMatrixStorage;
-import org.apache.ignite.math.impls.vector.DenseLocalOffHeapVector;
-
-/**
- * Dense local off-heap implementation of the {@link Matrix} interface.
- */
-public class DenseLocalOffHeapMatrix extends AbstractMatrix {
- /** */
- public DenseLocalOffHeapMatrix() {
- // No-op.
- }
-
- /**
- * @param data Backing data array.
- */
- public DenseLocalOffHeapMatrix(double[][] data) {
- assert data != null;
-
- setStorage(new DenseOffHeapMatrixStorage(data));
- }
-
- /**
- * @param rows Amount of rows in matrix.
- * @param cols Amount of columns in matrix.
- */
- public DenseLocalOffHeapMatrix(int rows, int cols) {
- assert rows > 0;
- assert cols > 0;
-
- setStorage(new DenseOffHeapMatrixStorage(rows, cols));
- }
-
- /** {@inheritDoc} */
- @Override public Matrix copy() {
- DenseLocalOffHeapMatrix cp = new DenseLocalOffHeapMatrix(getStorage().rowSize(), getStorage().columnSize());
-
- cp.assign(this);
-
- return cp;
- }
-
- /** {@inheritDoc} */
- @Override public Matrix like(int rows, int cols) {
- return new DenseLocalOffHeapMatrix(rows, cols);
- }
-
- /** {@inheritDoc} */
- @Override public Vector likeVector(int crd) {
- return new DenseLocalOffHeapVector(crd);
- }
-
- /** {@inheritDoc} */
- @Override public void destroy() {
- getStorage().destroy();
- }
-
- /** {@inheritDoc} */
- @Override protected Matrix likeIdentity() {
- int n = rowSize();
- Matrix res = like(n, n);
-
- // IMPL NOTE as opposed to on-heap matrices this one isn't initialized with zeroes
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- res.setX(i, j, i == j ? 1.0 : 0.0);
-
- return res;
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOnHeapMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOnHeapMatrix.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOnHeapMatrix.java
deleted file mode 100644
index 3cc3e4f..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DenseLocalOnHeapMatrix.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.math.impls.matrix;
-
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.impls.storage.matrix.ArrayMatrixStorage;
-import org.apache.ignite.math.impls.vector.DenseLocalOnHeapVector;
-
-/**
- * Basic implementation for matrix.
- *
- * This is a trivial implementation for matrix assuming dense logic, local on-heap JVM storage
- * based on <code>double[][]</code> array. It is only suitable for data sets where
- * local, non-distributed execution is satisfactory and on-heap JVM storage is enough
- * to keep the entire data set.
- */
-public class DenseLocalOnHeapMatrix extends AbstractMatrix {
- /**
- *
- */
- public DenseLocalOnHeapMatrix() {
- // No-op.
- }
-
- /**
- * @param rows Amount of rows in matrix.
- * @param cols Amount of columns in matrix.
- */
- public DenseLocalOnHeapMatrix(int rows, int cols) {
- assert rows > 0;
- assert cols > 0;
-
- setStorage(new ArrayMatrixStorage(rows, cols));
- }
-
- /**
- * @param mtx Backing data array.
- */
- public DenseLocalOnHeapMatrix(double[][] mtx) {
- assert mtx != null;
-
- setStorage(new ArrayMatrixStorage(mtx));
- }
-
- /**
- * @param orig Original matrix.
- */
- private DenseLocalOnHeapMatrix(DenseLocalOnHeapMatrix orig) {
- assert orig != null;
-
- setStorage(new ArrayMatrixStorage(orig.rowSize(), orig.columnSize()));
-
- assign(orig);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix copy() {
- return new DenseLocalOnHeapMatrix(this);
- }
-
- /** {@inheritDoc} */
- @Override public Matrix like(int rows, int cols) {
- return new DenseLocalOnHeapMatrix(rows, cols);
- }
-
- /** {@inheritDoc} */
- @Override public Vector likeVector(int crd) {
- return new DenseLocalOnHeapVector(crd);
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DiagonalMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DiagonalMatrix.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/DiagonalMatrix.java
deleted file mode 100644
index 0b1f97e..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/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.math.impls.matrix;
-
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.impls.storage.matrix.DiagonalMatrixStorage;
-import org.apache.ignite.math.impls.vector.ConstantVector;
-import org.apache.ignite.math.impls.vector.DenseLocalOnHeapVector;
-import org.apache.ignite.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/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/FunctionMatrix.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/FunctionMatrix.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/FunctionMatrix.java
deleted file mode 100644
index b180b5b..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/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.math.impls.matrix;
-
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.math.functions.IntIntDoubleToVoidFunction;
-import org.apache.ignite.math.functions.IntIntToDoubleFunction;
-import org.apache.ignite.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/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/MatrixView.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/MatrixView.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/MatrixView.java
deleted file mode 100644
index 7b04dde..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/MatrixView.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.math.impls.matrix;
-
-import java.io.Externalizable;
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.MatrixStorage;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.math.impls.storage.matrix.MatrixDelegateStorage;
-
-/**
- * Implements the rectangular view into the parent {@link Matrix}.
- */
-public class MatrixView extends AbstractMatrix {
- /**
- * Constructor for {@link Externalizable} interface.
- */
- public MatrixView() {
- // No-op.
- }
-
- /**
- * @param parent Backing parent {@link Matrix}.
- * @param rowOff Row offset to parent matrix.
- * @param colOff Column offset to parent matrix.
- * @param rows Amount of rows in the view.
- * @param cols Amount of columns in the view.
- */
- public MatrixView(Matrix parent, int rowOff, int colOff, int rows, int cols) {
- this(parent == null ? null : parent.getStorage(), rowOff, colOff, rows, cols);
- }
-
- /**
- * @param sto Backing parent {@link MatrixStorage}.
- * @param rowOff Row offset to parent storage.
- * @param colOff Column offset to parent storage.
- * @param rows Amount of rows in the view.
- * @param cols Amount of columns in the view.
- */
- public MatrixView(MatrixStorage sto, int rowOff, int colOff, int rows, int cols) {
- super(new MatrixDelegateStorage(sto, rowOff, colOff, rows, cols));
- }
-
- /**
- *
- *
- */
- private MatrixDelegateStorage storage() {
- return (MatrixDelegateStorage)getStorage();
- }
-
- /** {@inheritDoc} */
- @Override public Matrix copy() {
- MatrixDelegateStorage sto = storage();
-
- return new MatrixView(sto.delegate(), sto.rowOffset(), sto.columnOffset(), sto.rowSize(), sto.columnSize());
- }
-
- /** {@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/d78e071a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/PivotedMatrixView.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/PivotedMatrixView.java b/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/PivotedMatrixView.java
deleted file mode 100644
index 1f7b008..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/math/impls/matrix/PivotedMatrixView.java
+++ /dev/null
@@ -1,243 +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.math.impls.matrix;
-
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import org.apache.ignite.math.Matrix;
-import org.apache.ignite.math.MatrixStorage;
-import org.apache.ignite.math.Vector;
-import org.apache.ignite.math.exceptions.IndexException;
-import org.apache.ignite.math.exceptions.UnsupportedOperationException;
-import org.apache.ignite.math.impls.storage.matrix.PivotedMatrixStorage;
-import org.apache.ignite.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
- * @param rowPivot
- * @param colPivot
- */
- public PivotedMatrixView(Matrix mtx, int[] rowPivot, int[] colPivot) {
- super(new PivotedMatrixStorage(mtx == null ? null : mtx.getStorage(), rowPivot, colPivot));
-
- this.mtx = mtx;
- }
-
- /**
- * @param mtx
- */
- public PivotedMatrixView(Matrix mtx) {
- super(new PivotedMatrixStorage(mtx == null ? null : mtx.getStorage()));
-
- this.mtx = mtx;
- }
-
- /**
- * @param mtx
- * @param pivot
- */
- 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()
- );
- }
-
- /**
- *
- *
- */
- public Matrix getBaseMatrix() {
- return mtx;
- }
-
- /**
- *
- *
- */
- public int[] rowPivot() {
- return storage().rowPivot();
- }
-
- /**
- *
- *
- */
- public int[] columnPivot() {
- return storage().columnPivot();
- }
-
- /**
- * @param i
- */
- public int rowPivot(int i) {
- return storage().rowPivot()[i];
- }
-
- /**
- * @param i
- */
- public int columnPivot(int i) {
- return storage().columnPivot()[i];
- }
-
- /**
- * @param i
- */
- public int rowUnpivot(int i) {
- return storage().rowUnpivot()[i];
- }
-
- /**
- * @param i
- */
- 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());
- }
-}