* Bug 16613 fixed: .*. and kron extended to booleans 42/21642/3
Samuel GOUGEON [Fri, 11 Dec 2020 19:52:21 +0000 (20:52 +0100)]
  http://bugzilla.scilab.org/16613
  https://codereview.scilab.org/21641 might be required first

Change-Id: Ic34454d9d61704d443df3d3c5418aa885781bcbc

30 files changed:
scilab/CHANGES.md
scilab/modules/ast/tests/unit_tests/kron.tst
scilab/modules/elementary_functions/help/en_US/matrixoperations/kron.xml
scilab/modules/elementary_functions/help/fr_FR/matrixoperations/kron.xml
scilab/modules/elementary_functions/help/ja_JP/matrixoperations/kron.xml
scilab/modules/elementary_functions/help/pt_BR/matrixoperations/kron.xml
scilab/modules/elementary_functions/help/ru_RU/matrixoperations/kron.xml
scilab/modules/overloading/macros/%b_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_k_i.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_k_p.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_k_r.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_k_s.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_k_sp.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_k_spb.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%b_kron.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%i_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%p_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%p_kron.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%r_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%r_kron.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%rp_k_generic.sci
scilab/modules/overloading/macros/%s_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%s_k_spb.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_k_spb.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%spb_k_b.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%spb_k_s.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%spb_k_sp.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%spb_k_spb.sci [new file with mode: 0644]
scilab/modules/overloading/macros/%spb_kron.sci [new file with mode: 0644]

index 164e6de..a94ef1b 100644 (file)
@@ -201,6 +201,7 @@ Feature changes and additions on 6.1.1
   - It can now sort any sparse 2D matrix, in all `g, r, c, lr, lc` methods, including sparse booleans and in multi-level mode. It was formerly limited to sparse real or complex vectors and only to the `g` mode.
   - Any hypermatrix can be sorted along a dimension > 2.
 * `unique` is enabled for any 2D sparse arrays, in simple, 'c' and 'r' modes.
+<<<<<<< HEAD
 * `%chars` constant added, to easily access to some selected sets of unicode symbols.
 * Lists are displayed in a more compact and comprehensive way.
 * `interp1` is upgraded:
@@ -220,6 +221,9 @@ Feature changes and additions on 6.1.1
 * `setdiff` now supports input booleans and sparse matrices (boolean or numeric).
 * `intersect` is extended to any sparse boolean or numeric arrays, in all simple, 'c' or 'r' modes.
 * `union` now support boolean, sparse boolean, and sparse numerical matrices.
+=======
+* `kron` and `.*.` are extended to boolean arrays.
+>>>>>>> 0e05946c3d7 (* Bug 16613 fixed: .*. and kron extended to booleans)
 
 Help pages:
 -----------
@@ -407,6 +411,7 @@ Bug Fixes
 * [#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.
+* [#16613](https://bugzilla.scilab.org/16613): Neither `.*.` nor `kron()` worked with boolean or sparse boolean 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.
index cbe6213..3d7b3bf 100644 (file)
@@ -1,7 +1,7 @@
 // ============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2012 - DIGITEO - Antoine ELIAS
-// Copyright (C) 2019 - Samuel GOUGEON
+// Copyright (C) 2019 - 2020 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // ============================================================================
@@ -15,50 +15,27 @@ c = 1 + 2*%i;
 C = [1+2*%i,2+4*%i;3+6*%i,4+8*%i];
 
 // double .*. double
-
-//r .*. r
 assert_checkequal(r .*. r, 4);
-//r .*. c
 assert_checkequal(r .*. c, 2+4*%i);
-//c .*. r
 assert_checkequal(c .*. r, 2+4*%i);
-//c .*. c
 assert_checkequal(c .*. c, -3+4*%i);
 
-
 // double .*. DOUBLE
-
-//r .*. R
 assert_checkequal(r .*. R, [2,4;6,8]);
-//r .*. C
 assert_checkequal(r .*. C, [2+4*%i,4+8*%i;6+12*%i,8+16*%i]);
-//c .*. R
 assert_checkequal(c .*. R, [1+2*%i,2+4*%i;3+6*%i,4+8*%i]);
-//c .*. C
 assert_checkequal(c .*. C, [-3+4*%i,-6+8*%i;-9+12*%i,-12+16*%i]);
 
-
 // DOUBLE .*. double
-
-//R .*. r
 assert_checkequal(R .*.r, [2,4;6,8]);
-//R .*. c
 assert_checkequal(R .*.c, [1+2*%i,2+4*%i;3+6*%i,4+8*%i]);
-//C .*. r
 assert_checkequal(C .*.r, [2+4*%i,4+8*%i;6+12*%i,8+16*%i]);
-//C .*. c
 assert_checkequal(C .*.c, [-3+4*%i,-6+8*%i;-9+12*%i,-12+16*%i]);
 
-
 // DOUBLE .*. DOUBLE
-
-//R .*. R
 assert_checkequal(R .*. R, [1,2,2,4;3,4,6,8;3,6,4,8;9,12,12,16]);
-//R .*. C
 assert_checkequal(R .*. C, [1+2*%i,2+4*%i,2+4*%i,4+8*%i;3+6*%i,4+8*%i,6+12*%i,8+16*%i;3+6*%i,6+12*%i,4+8*%i,8+16*%i;9+18*%i,12+24*%i,12+24*%i,16+32*%i]);
-//C .*. R
 assert_checkequal(C .*. R, [1+2*%i,2+4*%i,2+4*%i,4+8*%i;3+6*%i,4+8*%i,6+12*%i,8+16*%i;3+6*%i,6+12*%i,4+8*%i,8+16*%i;9+18*%i,12+24*%i,12+24*%i,16+32*%i]);
-//C .*. C
 assert_checkequal(C .*. C, [-3+4*%i,-6+8*%i,-6+8*%i,-12+16*%i;-9+12*%i,-12+16*%i,-18+24*%i,-24+32*%i;-9+12*%i,-18+24*%i,-12+16*%i,-24+32*%i;-27+36*%i,-36+48*%i,-36+48*%i,-48+64*%i]);
 
 
@@ -79,3 +56,74 @@ assert_checkequal(ones(1,2,2).*.m, cat(3,[1 2 1 2;3 4 3 4],[1 2 1 2;3 4 3 4]));
 assert_checkequal(ones(1,2,2).*.h, cat(3,[1 2 1 2],[3 4 3 4],[1 2 1 2],[3 4 3 4]));
 
 assert_checkequal(size(rand(2,3,4,5).*.rand(3,1,1,1,1,7)), [6 3 4 5 1 7]);
+
+
+// BOOLEANS .*. BOOLEANS
+// ---------------------
+b = [%T %F %T]; spb = sparse([%F %T %T]');
+assert_checkequal(b.*.b', [1 0 1 ; 0 0 0 ; 1 0 1]);
+assert_checkequal(b.*.spb, sparse([0 0 0 ; 1 0 1 ; 1 0 1]));
+assert_checkequal(spb.*.b, sparse([0 0 0 ; 1 0 1 ; 1 0 1]));
+assert_checkequal(spb.*.spb', sparse([0 0 0 ; 0 1 1 ; 0 1 1]));
+
+assert_checkequal(kron(b, b'), [1 0 1 ; 0 0 0 ; 1 0 1]);
+assert_checkequal(kron(b, spb), sparse([0 0 0 ; 1 0 1 ; 1 0 1]));
+assert_checkequal(kron(spb, b), sparse([0 0 0 ; 1 0 1 ; 1 0 1]));
+assert_checkequal(kron(spb, spb'), sparse([0 0 0 ; 0 1 1 ; 0 1 1]));
+
+
+// BOOLEANS .*. DOUBLES
+// --------------------
+b = [%T %F %T]; spb = sparse([%F %T %T]');
+m = [-1 2 %inf]; sp = sparse(m');
+assert_checkequal(b .*. m', [-1 0 -1 ; 2 0 2 ; %inf %nan %inf]);
+assert_checkequal(b .*. sp, sparse([-1 0 -1 ; 2 0 2 ; %inf 0 %inf]));   // 0 instead of %nan
+assert_checkequal(spb .*. m, sparse([0 0 0 ; -1 2 %inf ; -1 2 %inf]));
+assert_checkequal(spb .*. sp', sparse([0 0 0 ; -1 2 %inf ; -1 2 %inf]));
+
+assert_checkequal(kron(b, m'), [-1 0 -1 ; 2 0 2 ; %inf %nan %inf]);
+assert_checkequal(kron(b, sp), sparse([-1 0 -1 ; 2 0 2 ; %inf 0 %inf]));
+assert_checkequal(kron(spb, m), sparse([0 0 0 ; -1 2 %inf ; -1 2 %inf]));
+assert_checkequal(kron(spb, sp'), sparse([0 0 0 ; -1 2 %inf ; -1 2 %inf]));
+
+
+// DOUBLES .*. BOOLEANS
+// --------------------
+b = [%T %F %T]; spb = sparse([%F %T %T]');
+m = [-1 2 %inf]; sp = sparse(m');
+assert_checkequal(m .*. b', [-1 2 %inf ; 0 0 %nan ; -1 2 %inf]);
+assert_checkequal(m .*. spb, sparse([0 0 0 ; -1 2 %inf ; -1 2 %inf]));
+assert_checkequal(sp .*. b, sparse([-1 0 -1 ; 2 0 2 ; %inf 0 %inf]));
+assert_checkequal(sp .*. spb', sparse([0 -1 -1 ; 0 2 2 ; 0 %inf %inf]));
+
+assert_checkequal(kron(m, b'), [-1 2 %inf ; 0 0 %nan ; -1 2 %inf]);
+assert_checkequal(kron(m, spb), sparse([0 0 0 ; -1 2 %inf ; -1 2 %inf]));
+assert_checkequal(kron(sp, b), sparse([-1 0 -1 ; 2 0 2 ; %inf 0 %inf]));
+assert_checkequal(kron(sp, spb'), sparse([0 -1 -1 ; 0 2 2 ; 0 %inf %inf]));
+
+
+// BOOLEANS, INTEGERS
+// ------------------
+b = [%F %T %T]; i = int8([-2 1 3]');
+assert_checkequal(b .*. i, int8([0 -2 -2 ; 0 1 1 ; 0 3 3]));
+assert_checkequal(i' .*. b, int8([0 -2 -2  0  1  1  0  3  3]));
+assert_checkequal(kron(b, i), int8([0 -2 -2 ; 0 1 1 ; 0 3 3]));
+assert_checkequal(kron(i', b), int8([0 -2 -2  0  1  1  0  3  3]));
+
+// BOOLEANS, POLYNOMIALS
+// ---------------------
+s = %s; b = [%T %T %F]'; p = (1-s).^(0:2);
+Ref = [1,1-s,1-2*s+s^2 ; 1,1-s,1-2*s+s^2 ; 0, 0, 0];
+assert_checkequal(b .*. p, Ref);
+assert_checkequal(p .*. b, Ref);
+assert_checkequal(kron(b, p), Ref);
+assert_checkequal(kron(p, b), Ref);
+
+// BOOLEANS, RATIONALS
+// -------------------
+s = %s; b = [%T %F %T]'; r = (1-s).^(0:2)/s;
+Ref = [1,1-s,1-2*s+s^2 ; 0 0 0 ; 1,1-s,1-2*s+s^2]/s;
+assert_checkequal(b .*. r, Ref);
+assert_checkequal(r .*. b, Ref);
+assert_checkequal(kron(b, r), Ref);
+assert_checkequal(kron(r, b), Ref);
index 89baff4..8dbc457 100644 (file)
@@ -3,7 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
- * Copyright (C) 2014, 2019 - Samuel GOUGEON
+ * Copyright (C) 2014, 2019, 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.
@@ -40,8 +40,8 @@
                         can't be an hypermatrix.
                     </para>
                     <para>
-                        Supported encodings and types: integer, real, complex, polynomial, rational,
-                        sparse.
+                        Supported encodings and types: boolean, integer, real, complex, polynomial,
+                        rational, sparse boolean, sparse real, sparse complex.
                     </para>
                 </listitem>
             </varlistentry>
@@ -208,7 +208,13 @@ a.*.b
             <revision>
                 <revnumber>5.5.1</revnumber>
                 <revdescription>
-                    <para>Extension to hypermatrices</para>
+                    Extension to hypermatrices.
+                </revdescription>
+            </revision>
+            <revision>
+                <revnumber>6.1.1</revnumber>
+                <revdescription>
+                    Extension to boolean and sparse boolean arrays.
                 </revdescription>
             </revision>
         </revhistory>
index c289ec5..00e0330 100644 (file)
@@ -3,7 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
- * Copyright (C) 2014, 2019 - Samuel GOUGEON
+ * Copyright (C) 2014, 2019, 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.
@@ -41,8 +41,8 @@
                         ne peut pas être une hypermatrice.
                     </para>
                     <para>
-                        Encodages et types admis : nombres entiers, nombres ou polynômes ou
-                        fractions rationnelles réels ou complexes, matrices creuses.
+                        Encodages et types admis : booléens, nombres entiers, nombres ou polynômes
+                        ou fractions rationnelles réels ou complexes, matrices creuses.
                     </para>
                 </listitem>
             </varlistentry>
@@ -207,7 +207,13 @@ a.*.b
             <revision>
                 <revnumber>5.5.1</revnumber>
                 <revdescription>
-                    <para>Extension aux hypermatrices</para>
+                    Extension aux hypermatrices.
+                </revdescription>
+            </revision>
+            <revision>
+                <revnumber>6.1.1</revnumber>
+                <revdescription>
+                    Extension aux tableaux booléens et booléens creux.
                 </revdescription>
             </revision>
         </revhistory>
index 2ad89a5..66769de 100644 (file)
@@ -3,7 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
- * Copyright (C) 2014, 2019 - Samuel GOUGEON
+ * Copyright (C) 2014, 2019, 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.
@@ -40,8 +40,8 @@
                         can't be an hypermatrix.
                     </para>
                     <para>
-                        Supported encodings and types: integer, real, complex, polynomial, rational,
-                        sparse.
+                        Supported encodings and types: boolean, integer, real, complex, polynomial,
+                        rational, sparse boolean, sparse real, sparse complex.
                     </para>
                 </listitem>
             </varlistentry>
@@ -208,7 +208,13 @@ a.*.b
             <revision>
                 <revnumber>5.5.1</revnumber>
                 <revdescription>
-                    <para>Extension to hypermatrices</para>
+                    Extension to hypermatrices.
+                </revdescription>
+            </revision>
+            <revision>
+                <revnumber>6.1.1</revnumber>
+                <revdescription>
+                    Extension to boolean and sparse boolean arrays.
                 </revdescription>
             </revision>
         </revhistory>
index e72b439..5296785 100644 (file)
@@ -3,7 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
- * Copyright (C) 2014, 2019 - Samuel GOUGEON
+ * Copyright (C) 2014, 2019, 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.
@@ -40,8 +40,8 @@
                         can't be an hypermatrix.
                     </para>
                     <para>
-                        Supported encodings and types: integer, real, complex, polynomial, rational,
-                        sparse.
+                        Supported encodings and types: boolean, integer, real, complex, polynomial,
+                        rational, sparse boolean, sparse real, sparse complex.
                     </para>
                 </listitem>
             </varlistentry>
@@ -208,7 +208,13 @@ a.*.b
             <revision>
                 <revnumber>5.5.1</revnumber>
                 <revdescription>
-                    <para>Extensão ao hypermatrizes</para>
+                    Extensão ao hypermatrizes.
+                </revdescription>
+            </revision>
+            <revision>
+                <revnumber>6.1.1</revnumber>
+                <revdescription>
+                    Extension to boolean and sparse boolean arrays.
                 </revdescription>
             </revision>
         </revhistory>
index 934a3e1..ab028bb 100644 (file)
@@ -3,7 +3,7 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
- * Copyright (C) 2014, 2019 - Samuel GOUGEON
+ * Copyright (C) 2014, 2019, 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.
                     <para>
                         Массивы размером <literal>(a1, a2, ..)</literal> и <literal>(b1, b2, ..)</literal>
                         с любым числом размерности. Если <varname>A</varname> или <varname>B</varname>
-                        являются разрежёнными, то другоо массив не может быть гиперматрицей.
+                        являются разрежёнными, то другой массив не может быть гиперматрицей.
                     </para>
                     <para>
-                        Поддерживаемые кодируемые целые и типы: integer, real, complex, polynomial, rational,
-                        sparse.
+                        Поддерживаемые кодируемые целые и типы: boolean, integer, real, complex,
+                        polynomial, rational, sparse boolean, sparse real, sparse complex.
                     </para>
                 </listitem>
             </varlistentry>
@@ -61,8 +61,8 @@
         <title>Описание</title>
         <para>
             <literal>kron(A,B)</literal> или <literal>A.*.B</literal> возвращает результат
-            Кронекеровского тензорного произведения двух матриц или гиперматрицам <literal>A</literal> и
-            <literal>B</literal>. Матрица результата имеет следующую блочную форму:
+            Кронекеровского тензорного произведения двух матриц или гиперматриц <varname>A</varname> и
+            <varname>B</varname>. Матрица результата имеет следующую блочную форму:
             <latex style="display" alt="
           [ A(1,1).B  ..  A(1,n).B ] \n
 A .✶. B = |   ⋮        ⋮     ⋮      | \n
@@ -75,8 +75,8 @@ A .✶. B = |   ⋮        ⋮     ⋮      | \n
             </latex>
         </para>
         <para>
-            Если матрица <literal>A</literal> имеет размер <literal>m x n</literal>, а матрица
-            <literal>B</literal> имеет размер <literal>p x q x r</literal>, то результат
+            Если матрица <varname>A</varname> имеет размер <literal>m x n</literal>, а матрица
+            <varname>B</varname> имеет размер <literal>p x q x r</literal>, то результат
             <literal>A .*. B</literal> является матрицей размером <literal>(m*p) x (n*q) x (1xr)</literal>.
         </para>
     </refsection>
@@ -205,7 +205,13 @@ a.*.b
             <revision>
                 <revnumber>5.5.1</revnumber>
                 <revdescription>
-                    <para>Расширение до гиперматриц</para>
+                    Расширение до гиперматриц.
+                </revdescription>
+            </revision>
+            <revision>
+                <revnumber>6.1.1</revnumber>
+                <revdescription>
+                    Расширение до логических и разрежённых логических массивов.
                 </revdescription>
             </revision>
         </revhistory>
diff --git a/scilab/modules/overloading/macros/%b_k_b.sci b/scilab/modules/overloading/macros/%b_k_b.sci
new file mode 100644 (file)
index 0000000..6f8a45c
--- /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 = %b_k_b(b1, b2)
+    r = bool2s(b1) .*. bool2s(b2)
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_k_i.sci b/scilab/modules/overloading/macros/%b_k_i.sci
new file mode 100644 (file)
index 0000000..fe2eefb
--- /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 = %b_k_i(b, i)
+    r = bool2s(b) .*. i
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_k_p.sci b/scilab/modules/overloading/macros/%b_k_p.sci
new file mode 100644 (file)
index 0000000..751c7d4
--- /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 = %b_k_p(b, p)
+    r = bool2s(b) .*. p
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_k_r.sci b/scilab/modules/overloading/macros/%b_k_r.sci
new file mode 100644 (file)
index 0000000..98e512c
--- /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 = %b_k_r(b, r)
+    r = bool2s(b) .*. r
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_k_s.sci b/scilab/modules/overloading/macros/%b_k_s.sci
new file mode 100644 (file)
index 0000000..c13ed7a
--- /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 = %b_k_s(b, s)
+    r = bool2s(b) .*. s
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_k_sp.sci b/scilab/modules/overloading/macros/%b_k_sp.sci
new file mode 100644 (file)
index 0000000..a6a03e9
--- /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 = %b_k_sp(b, sp)
+    r = bool2s(b) .*. sp
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_k_spb.sci b/scilab/modules/overloading/macros/%b_k_spb.sci
new file mode 100644 (file)
index 0000000..4ba2e3d
--- /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 = %b_k_spb(b, spb)
+    r = bool2s(b) .*. bool2s(spb)
+endfunction
diff --git a/scilab/modules/overloading/macros/%b_kron.sci b/scilab/modules/overloading/macros/%b_kron.sci
new file mode 100644 (file)
index 0000000..7d63baf
--- /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 = %b_kron(b, op2)
+    r = bool2s(b) .*. op2
+endfunction
diff --git a/scilab/modules/overloading/macros/%i_k_b.sci b/scilab/modules/overloading/macros/%i_k_b.sci
new file mode 100644 (file)
index 0000000..fc243ef
--- /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 = %i_k_b(i, b)
+    r = i .*. bool2s(b)
+endfunction
diff --git a/scilab/modules/overloading/macros/%p_k_b.sci b/scilab/modules/overloading/macros/%p_k_b.sci
new file mode 100644 (file)
index 0000000..2e38945
--- /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 = %p_k_b(p, b)
+    r = p .*. bool2s(b)
+endfunction
diff --git a/scilab/modules/overloading/macros/%p_kron.sci b/scilab/modules/overloading/macros/%p_kron.sci
new file mode 100644 (file)
index 0000000..8793305
--- /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 = %p_kron(p, op2)
+    r = p .*. op2
+endfunction
diff --git a/scilab/modules/overloading/macros/%r_k_b.sci b/scilab/modules/overloading/macros/%r_k_b.sci
new file mode 100644 (file)
index 0000000..0e21607
--- /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 = %r_k_b(r, b)
+    r = r .*. bool2s(b)
+endfunction
diff --git a/scilab/modules/overloading/macros/%r_kron.sci b/scilab/modules/overloading/macros/%r_kron.sci
new file mode 100644 (file)
index 0000000..37d7006
--- /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 = %r_kron(r, op2)
+    r = r .*. op2
+endfunction
index 4c219d9..0c94ebf 100644 (file)
@@ -55,6 +55,9 @@ function res = %rp_k_generic(a,b)
         rib = (ones(a).*.ib);     // replicated indices in b
         //
         res = rlist(anum(ria)(:) .* bnum(rib)(:), aden(ria)(:) .* bden(rib)(:), dt);
+        if simp_mode()
+            res = simp(res)
+        end
     end
 
     // Final formatting
diff --git a/scilab/modules/overloading/macros/%s_k_b.sci b/scilab/modules/overloading/macros/%s_k_b.sci
new file mode 100644 (file)
index 0000000..1182875
--- /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_k_b(s, b)
+    r = s .*. bool2s(b)
+endfunction
diff --git a/scilab/modules/overloading/macros/%s_k_spb.sci b/scilab/modules/overloading/macros/%s_k_spb.sci
new file mode 100644 (file)
index 0000000..ac84da7
--- /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_k_spb(s, spb)
+    r = s .*. bool2s(spb)
+endfunction
diff --git a/scilab/modules/overloading/macros/%sp_k_b.sci b/scilab/modules/overloading/macros/%sp_k_b.sci
new file mode 100644 (file)
index 0000000..04c1423
--- /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_k_b(sp, b)
+    r = sp .*. bool2s(b)
+endfunction
diff --git a/scilab/modules/overloading/macros/%sp_k_spb.sci b/scilab/modules/overloading/macros/%sp_k_spb.sci
new file mode 100644 (file)
index 0000000..6d11da6
--- /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_k_spb(sp, spb)
+    r = sp .*. bool2s(spb)
+endfunction
diff --git a/scilab/modules/overloading/macros/%spb_k_b.sci b/scilab/modules/overloading/macros/%spb_k_b.sci
new file mode 100644 (file)
index 0000000..076e0ec
--- /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 = %spb_k_b(spb, b)
+    r = bool2s(spb) .*. bool2s(b)
+endfunction
diff --git a/scilab/modules/overloading/macros/%spb_k_s.sci b/scilab/modules/overloading/macros/%spb_k_s.sci
new file mode 100644 (file)
index 0000000..5a43c4f
--- /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 = %spb_k_s(spb, s)
+    r = bool2s(spb) .*. s
+endfunction
diff --git a/scilab/modules/overloading/macros/%spb_k_sp.sci b/scilab/modules/overloading/macros/%spb_k_sp.sci
new file mode 100644 (file)
index 0000000..54fc29c
--- /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 = %spb_k_sp(spb, sp)
+    r = bool2s(spb) .*. sp
+endfunction
diff --git a/scilab/modules/overloading/macros/%spb_k_spb.sci b/scilab/modules/overloading/macros/%spb_k_spb.sci
new file mode 100644 (file)
index 0000000..f287f29
--- /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 = %spb_k_spb(spb1, spb2)
+    r = bool2s(spb1) .*. bool2s(spb2)
+endfunction
diff --git a/scilab/modules/overloading/macros/%spb_kron.sci b/scilab/modules/overloading/macros/%spb_kron.sci
new file mode 100644 (file)
index 0000000..6290ed1
--- /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 = %spb_kron(spb, op2)
+    r = bool2s(spb) .*. op2
+endfunction