Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 79792200C6A for ; Wed, 19 Apr 2017 10:15:51 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 77FC7160BB8; Wed, 19 Apr 2017 08:15:51 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 524C7160B94 for ; Wed, 19 Apr 2017 10:15:49 +0200 (CEST) Received: (qmail 7093 invoked by uid 500); 19 Apr 2017 08:15:48 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 6117 invoked by uid 99); 19 Apr 2017 08:15:45 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 19 Apr 2017 08:15:45 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 42947E7153; Wed, 19 Apr 2017 08:15:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.apache.org Date: Wed, 19 Apr 2017 08:16:06 -0000 Message-Id: <614d66c9685b44d398cbbb3d067cc35f@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [23/43] ignite git commit: IGNITE-5000 Rename Ignite Math module to Ignite ML module added missed licenses renamed packages fixed wrong ml profile activation archived-at: Wed, 19 Apr 2017 08:15:51 -0000 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 ABS = Math::abs; - - /** Function that returns its argument. */ - public static final IgniteDoubleFunction IDENTITY = (a) -> a; - - /** Function that returns {@code Math.log(a) / Math.log(2)}. */ - public static final IgniteDoubleFunction LOG2 = (a) -> Math.log(a) * 1.4426950408889634; - - /** Function that returns {@code -a}. */ - public static final IgniteDoubleFunction NEGATE = (a) -> -a; - - /** Function that returns {@code a < 0 ? -1 : a > 0 ? 1 : 0 }. */ - public static final IgniteDoubleFunction SIGN = (a) -> a < 0.0 ? -1.0 : a > 0.0 ? 1.0 : 0.0; - - /** Function that returns {@code a * a}. */ - public static final IgniteDoubleFunction SQUARE = (a) -> a * a; - - /** Function that returns {@code 1 / (1 + exp(-a) } */ - public static final IgniteDoubleFunction SIGMOID = (a) -> 1.0 / (1.0 + Math.exp(-a)); - - /** Function that returns {@code 1 / a } */ - public static final IgniteDoubleFunction INV = (a) -> 1.0 / a; - - /** Function that returns {@code a * (1-a) } */ - public static final IgniteDoubleFunction SIGMOIDGRADIENT = (a) -> a * (1.0 - a); - - /** Function that returns {@code a % b}. */ - public static final IgniteBiFunction MOD = (a, b) -> a % b; - - /** Function that returns {@code a * b}. */ - public static final IgniteBiFunction MULT = (a, b) -> a * b; - - /** Function that returns {@code Math.log(a) / Math.log(b)}. */ - public static final IgniteBiFunction LG = (a, b) -> Math.log(a) / Math.log(b); - - /** Function that returns {@code a + b}. */ - public static final IgniteBiFunction PLUS = (a, b) -> a + b; - - /** Function that returns {@code a - b}. */ - public static final IgniteBiFunction MINUS = (a, b) -> a - b; - - /** Function that returns {@code abs(a - b)}. */ - public static final IgniteBiFunction MINUS_ABS = (a, b) -> Math.abs(a - b); - - /** Function that returns {@code max(abs(a), abs(b))}. */ - public static final IgniteBiFunction 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 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 PLUS_ABS = (a, b) -> Math.abs(a) + Math.abs(b); - - /** Function that returns {@code (a - b) * (a - b)} */ - public static final IgniteBiFunction MINUS_SQUARED = (a, b) -> (a - b) * (a - b); - - /** - * Function that returns {@code a < b ? -1 : a > b ? 1 : 0}. - */ - public static final IgniteBiFunction 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 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 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 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 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 minusMult(double constant) { - return (a, b) -> a - b * constant; - } - - /** - * @param b - */ - public static IgniteDoubleFunction 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 extends BiConsumer, 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 extends BiFunction, 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 extends Consumer, 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 extends DoubleFunction, 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 extends Function, 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 { - -} 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 { -} 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. - */ - -/** - * - * 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 - * @param - */ - public static class CacheEntry { - /** */ - private Cache.Entry entry; - /** */ - private IgniteCache cache; - - /** - * @param entry Original cache entry. - * @param cache Cache instance. - */ - CacheEntry(Cache.Entry entry, IgniteCache cache) { - this.entry = entry; - this.cache = cache; - } - - /** - * - * - */ - public Cache.Entry entry() { - return entry; - } - - /** - * - * - */ - public IgniteCache 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 Key type. - * @return Cluster group for given key. - */ - public static 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 Cache key object type. - * @param Cache value object type. - * @return Sum of the values obtained for valid keys. - */ - public static double sum(String cacheName, KeyMapper keyMapper, ValueMapper valMapper) { - Collection subSums = fold(cacheName, (CacheEntry 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 double sparseSum(String cacheName) { - Collection subSums = fold(cacheName, (CacheEntry> ce, Double acc) -> { - Map 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 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 Cache key object type. - * @param Cache value object type. - * @return Minimum value for valid keys. - */ - public static double min(String cacheName, KeyMapper keyMapper, ValueMapper valMapper) { - Collection mins = fold(cacheName, (CacheEntry 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 double sparseMin(String cacheName) { - Collection mins = fold(cacheName, (CacheEntry> ce, Double acc) -> { - Map 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 double sparseMax(String cacheName) { - Collection maxes = fold(cacheName, (CacheEntry> ce, Double acc) -> { - Map 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 Cache key object type. - * @param Cache value object type. - * @return Maximum value for valid keys. - */ - public static double max(String cacheName, KeyMapper keyMapper, ValueMapper valMapper) { - Collection maxes = fold(cacheName, (CacheEntry 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 Cache key object type. - * @param Cache value object type. - */ - public static void map(String cacheName, KeyMapper keyMapper, ValueMapper valMapper, - IgniteFunction mapper) { - foreach(cacheName, (CacheEntry 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 void sparseMap(String cacheName, IgniteFunction mapper) { - foreach(cacheName, (CacheEntry> ce) -> { - Integer k = ce.entry().getKey(); - Map v = ce.entry().getValue(); - - for (Map.Entry 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 Cache key object type. - * @param Cache value object type. - */ - public static void foreach(String cacheName, IgniteConsumer> fun) { - bcast(cacheName, () -> { - Ignite ignite = Ignition.localIgnite(); - IgniteCache 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 entry : cache.query(new ScanQuery(part, - (k, v) -> affinity.mapPartitionToNode(p) == locNode))) - fun.accept(new CacheEntry<>(entry, cache)); - } - }); - } - - /** - * Currently fold supports only commutative operations. - * - * @param cacheName Cache name. - * @param folder Fold function operating over cache entries. - * @param Cache key object type. - * @param Cache value object type. - * @param Fold result type. - * @return Fold operation result. - */ - public static Collection fold(String cacheName, IgniteBiFunction, A, A> folder) { - return bcast(cacheName, () -> { - Ignite ignite = Ignition.localIgnite(); - IgniteCache 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 entry : cache.query(new ScanQuery(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 Type returned by the callable. - */ - public static Collection bcast(String cacheName, IgniteCallable 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 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 getMetaStorage() { - return meta; - } - - /** {@inheritDoc} */ - @SuppressWarnings("unchecked") - @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - sto = (MatrixStorage)in.readObject(); - meta = (Map)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 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 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 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 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 foldMap(IgniteBiFunction foldFun, IgniteDoubleFunction 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 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 cache, - MatrixKeyMapper keyMapper, - ValueMapper 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 storage() { - return (CacheMatrixStorage)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 fun) { - return mapOverValues(fun::apply); - } - - /** {@inheritDoc} */ - @Override public double sum() { - CacheMatrixStorage sto = storage(); - - return CacheUtils.sum(sto.cache().getName(), sto.keyMapper(), sto.valueMapper()); - } - - /** {@inheritDoc} */ - @Override public double maxValue() { - CacheMatrixStorage sto = storage(); - - return CacheUtils.max(sto.cache().getName(), sto.keyMapper(), sto.valueMapper()); - } - - /** {@inheritDoc} */ - @Override public double minValue() { - CacheMatrixStorage sto = storage(); - - return CacheUtils.min(sto.cache().getName(), sto.keyMapper(), sto.valueMapper()); - } - - /** - * @param mapper - */ - private Matrix mapOverValues(IgniteFunction mapper) { - CacheMatrixStorage 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 double[][] 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}. - * - *

See also: Wikipedia article.

- */ -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()); - } -}