* Bug 16612 fixed: kron() now maps .*. for sparse numeric 41/21641/3
Samuel GOUGEON [Fri, 11 Dec 2020 16:03:41 +0000 (17:03 +0100)]
  http://bugzilla.scilab.org/16612

Change-Id: Ifd5ccd88157d9f5852661129760811e602da5e6c

scilab/CHANGES.md
scilab/modules/overloading/macros/%s_kron.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_kron.sci [new file with mode: 0644]
scilab/modules/sparse/tests/nonreg_tests/bug_16612.tst [new file with mode: 0644]

index 54cc114..164e6de 100644 (file)
@@ -406,6 +406,7 @@ Bug Fixes
 * [#16596](https://bugzilla.scilab.org/16596): Concatenating encoded integers with sparse numeric data was not possible. 
 * [#16608](https://bugzilla.scilab.org/16608): `union` did not support input boolean, sparse boolean, nor sparse numerical matrices. The result of `union(complexA, complexB)` was wrongly conjugate.
 * [#16609](https://bugzilla.scilab.org/16609): `bitcmp` needed to be upgraded for Scilab 6.
+* [#16612](https://bugzilla.scilab.org/16612): Unlike the `.*.` operator, `kron()` was not defined for sparse numeric matrices.
 * [#16622](https://bugzilla.scilab.org/16622): `inv` could no longer be overloaded for hypermatrices of decimal or complex numbers.
 * [#16623](https://bugzilla.scilab.org/16623): `rand(2,2,2)^2` yielded a wrong result instead of trying to call the `%s_p_s` overload for input hypermatrices.
 * [#16629](https://bugzilla.scilab.org/16629): `interp1`'s documentation did not tell the spline edges conditions ; extrapolation modes were poorly explained. ; the description of the result's size was completely wrong ; x as an option was not documented. A wrong extrapolation value could silently return a wrong result. There was some dead code like `if varargin(5)==%nan`. A bugged error message yielded its own error. When x is implicit, the argument index in error messages could be wrong. `periodic` and `edgevalue` extrapolation modes were not available. `linear` extrapolation was not available for splines. When `xp` is an hypermatrix with `size(xp,1)==1`, the size of the result was irregular/wrong.
diff --git a/scilab/modules/overloading/macros/%s_kron.sci b/scilab/modules/overloading/macros/%s_kron.sci
new file mode 100644 (file)
index 0000000..3ee1c77
--- /dev/null
@@ -0,0 +1,13 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function r = %s_kron(s, op2)
+    r = s .*. op2
+endfunction
diff --git a/scilab/modules/overloading/macros/%sp_kron.sci b/scilab/modules/overloading/macros/%sp_kron.sci
new file mode 100644 (file)
index 0000000..9daa94f
--- /dev/null
@@ -0,0 +1,13 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function r = %sp_kron(sp, op2)
+    r = sp .*. op2
+endfunction
diff --git a/scilab/modules/sparse/tests/nonreg_tests/bug_16612.tst b/scilab/modules/sparse/tests/nonreg_tests/bug_16612.tst
new file mode 100644 (file)
index 0000000..06438bc
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 16612 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16612
+//
+// <-- Short Description -->
+// kron() did not map .*. for sparse numeric argins
+
+m = 0:2;
+sp = sparse(m);
+assert_checkequal(kron(sp, m), sp .*. m);
+assert_checkequal(kron(sp, sp), sp .*. sp);
+assert_checkequal(kron(m, sp), m .*. sp);