Baunsgaard commented on a change in pull request #1275:
URL: https://github.com/apache/systemds/pull/1275#discussion_r632705658
##########
File path: src/test/java/org/apache/sysds/test/TestUtils.java
##########
@@ -37,19 +37,8 @@
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.text.NumberFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
+import java.util.*;
Review comment:
we try to avoid wildcard imports.
##########
File path:
src/test/resources/org/apache/sysds/test/functions/builtin/ImageTransformInput
##########
@@ -0,0 +1,135 @@
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0
Review comment:
also a file ending describing the format would be nice. Is this png?
##########
File path:
src/test/java/org/apache/sysds/test/functions/builtin/BuiltinImageRotateTest.java
##########
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sysds.test.functions.builtin;
+
+import org.apache.sysds.common.Types.ExecMode;
+import org.apache.sysds.lops.LopProperties.ExecType;
+import org.apache.sysds.runtime.matrix.data.MatrixValue;
+import org.apache.sysds.test.AutomatedTestBase;
+import org.apache.sysds.test.TestConfiguration;
+import org.apache.sysds.test.TestUtils;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.util.HashMap;
+
+public class BuiltinImageRotateTest extends AutomatedTestBase {
+ private final static String TEST_NAME = "image_rotate";
+ private final static String TEST_DIR = "functions/builtin/";
+ private final static String TEST_CLASS_DIR = TEST_DIR +
BuiltinImageRotateTest.class.getSimpleName() + "/";
+
+ private final static double eps = 1e-10;
+ private final static int rows = 135;
+ private final static int cols = 500;
+ private final static double angle = 42 * (Math.PI / 180);
+
+ @Override public void setUp() {
+ addTestConfiguration(TEST_NAME, new
TestConfiguration(TEST_CLASS_DIR, TEST_NAME, new String[] {"B"}));
+ }
+
+ @Test public void testImageRotateZero() throws Exception {
+ loadTestConfiguration(getTestConfiguration(TEST_NAME));
+ final int w = 500, h = 135;
+ final double fill_value = 128.0;
+ double[][] input =
TestUtils.readMatrixFromFile(this.getClass().getResource("ImageTransformInput"),
h, w);
+ double[][] reference = input;
+ String HOME = SCRIPT_DIR + TEST_DIR;
+ fullDMLScriptName = HOME + TEST_NAME + ".dml";
+ programArgs = new String[] {"-nvargs", "in_file=" + input("A"),
"out_file=" + output("B"), "width=" + cols,
+ "height=" + rows, "angle=" + 0, "fill_value=" +
fill_value};
+ writeInputMatrixWithMTD("A", input, true);
+ runTest(true, false, null, -1);
+
+ HashMap<MatrixValue.CellIndex, Double> dmlfile =
readDMLMatrixFromOutputDir("B");
+ double[][] dml_res = TestUtils.convertMatrix(dmlfile, h, w);
+ TestUtils.compareMatrices(reference, dml_res, eps, "Input vs.
DML");
+ }
+
+ @Test public void testImageRotateComplete() throws Exception {
+ loadTestConfiguration(getTestConfiguration(TEST_NAME));
+ final int w = 500, h = 135;
+ final double fill_value = 128.0;
+ double[][] input =
TestUtils.readMatrixFromFile(this.getClass().getResource("ImageTransformInput"),
h, w);
+ double[][] reference = input;
+ String HOME = SCRIPT_DIR + TEST_DIR;
+ fullDMLScriptName = HOME + TEST_NAME + ".dml";
+ programArgs = new String[] {"-nvargs", "in_file=" + input("A"),
"out_file=" + output("B"), "width=" + cols,
+ "height=" + rows, "angle=" + (2 * Math.PI),
"fill_value=" + fill_value};
+ writeInputMatrixWithMTD("A", input, true);
+ runTest(true, false, null, -1);
+
+ HashMap<MatrixValue.CellIndex, Double> dmlfile =
readDMLMatrixFromOutputDir("B");
+ double[][] dml_res = TestUtils.convertMatrix(dmlfile, h, w);
+ TestUtils.compareMatrices(reference, dml_res, eps, "Input vs.
DML");
+ }
+
+ @Test public void testImageRotatePillow() throws Exception {
+ loadTestConfiguration(getTestConfiguration(TEST_NAME));
+ final int w = 500, h = 135;
+ final double fill_value = 128.0;
+ double[][] input =
TestUtils.readMatrixFromFile(this.getClass().getResource("ImageTransformInput"),
h, w);
+ double[][] reference =
TestUtils.readMatrixFromFile(this.getClass().getResource("ImageTransformRotated"),
h, w);
+ String HOME = SCRIPT_DIR + TEST_DIR;
+ fullDMLScriptName = HOME + TEST_NAME + ".dml";
+ programArgs = new String[] {"-nvargs", "in_file=" + input("A"),
"out_file=" + output("B"), "width=" + cols,
+ "height=" + rows, "angle=" + angle,
"fill_value=" + fill_value};
+ writeInputMatrixWithMTD("A", input, true);
+ runTest(true, false, null, -1);
+
+ HashMap<MatrixValue.CellIndex, Double> dmlfile =
readDMLMatrixFromOutputDir("B");
+ double[][] dml_res = TestUtils.convertMatrix(dmlfile, h, w);
+ TestUtils.compareMatrices(reference, dml_res, eps, "Pillow vs.
DML");
+ // The error here seems to be in the pillow implementation. It
calculates that the source coordinates of
+ // (339, 14) are (351, 87) using fixed point arithmetic, while
the floating point implementation returns
+ // (351.975384 88.000514) rounded down to (351, 88). (All
indices here start at 0)
Review comment:
this difference sounds large, could it be possible to test with some
other framework, or write the calculation in java?
##########
File path:
src/test/resources/org/apache/sysds/test/functions/builtin/ImageTransformInput
##########
@@ -0,0 +1,135 @@
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
255 255 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0
Review comment:
if possible it would be nice if these files were moved to the resources
folder and maybe reduced in size.
##########
File path: src/test/java/org/apache/sysds/test/TestUtils.java
##########
@@ -3073,4 +3059,46 @@ public static int isGPUAvailable() {
final int[] deviceCount = new int[1];
return JCuda.cudaGetDeviceCount(deviceCount);
}
+
+ public static double[][] convertMatrix(HashMap<MatrixValue.CellIndex,
Double> m, int rows, int cols) {
+ double[][] res = new double[rows][cols];
+ m.forEach((k, v) -> res[k.row - 1][k.column - 1] = v);
+ return res;
+ }
+
+ public static HashMap<MatrixValue.CellIndex, Double>
convertMatrix(double[][] m) {
+ HashMap<MatrixValue.CellIndex, Double> res = new
HashMap<MatrixValue.CellIndex, Double>();
+ for (int r = 0; r < m.length; ++r) {
+ double[] row = m[r];
+ for (int c = 0; c < row.length; ++c) {
+ res.put(new CellIndex(r + 1, c + 1), row[c]);
+ }
+ }
+
+ return res;
+ }
+
+ /**
+ * Reads a matrix from a text file. Rows are separated by newline,
Values are separated by space.
+ * Take from
https://www.tutorialspoint.com/How-to-read-a-2d-array-from-a-file-in-java
+ * @param url URL to the resource file obtained by Class.getResource()
+ * @param rows The expected number of rows
+ * @param cols The expected number of columns
+ * @return The matrix
+ * @throws Exception
Review comment:
would this not be an IOException.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]