* Bug 7305 fixed: issparse() returned 0|1 instead of %F|%T 14/20614/3
Samuel GOUGEON [Sun, 11 Nov 2018 11:19:12 +0000 (12:19 +0100)]
  http://bugzilla.scilab.org/7305

Change-Id: I5cf80dba3f09aef40c10c9d33aaae3bba32002cf

scilab/CHANGES.md
scilab/modules/arnoldi/macros/eigs.sci
scilab/modules/sparse/help/en_US/matrixmanip/issparse.xml
scilab/modules/sparse/help/ja_JP/matrixmanip/issparse.xml
scilab/modules/sparse/macros/issparse.sci

index fcd5d29..aabd52f 100644 (file)
@@ -415,6 +415,7 @@ Known issues
 * [#7215](http://bugzilla.scilab.org/show_bug.cgi?id=7215): Some Matlab-Scilab equivalences were missing/outdated (A,B,C chapters).
 * [#7221](http://bugzilla.scilab.org/show_bug.cgi?id=7221): `modulo` was not indicated as the equivalent of Matlab's rem().
 * [#7277](http://bugzilla.scilab.org/show_bug.cgi?id=7277): SciNotes `File>Open recent` menu was not updated after 5 items were added.
+* [#7305](http://bugzilla.scilab.org/show_bug.cgi?id=7305): `issparse` returned 0 or 1 instead of %F or %T.
 * [#7362](http://bugzilla.scilab.org/show_bug.cgi?id=7362): There were 10 unused macros in the scicos_blocks hydraulic directory.
 * [#7641](http://bugzilla.scilab.org/show_bug.cgi?id=7641): `uint8(1):uint16(4)` produced an error instead of being parsed as `uint8(1):1:uint16(4)`, that passes.
 * [#7659](http://bugzilla.scilab.org/show_bug.cgi?id=7659): The `error` page was not up-to-date for Scilab 6.
index c06ce9b..3d07b20 100644 (file)
@@ -52,16 +52,16 @@ function [d, v] = eigs(varargin)
     B = [];
     sigma = "LM";
     if(rhs == 1)
-        if(~issparse(varargin(1)))
+        if ~issparse(varargin(1))
             info = int32(0);
         end
     else
-        if(~issparse(varargin(1)) & ~issparse(varargin(2)))
+        if ~issparse(varargin(1)) & ~issparse(varargin(2))
             info = int32(0);
         end
     end
 
-    if(typeof(varargin(1)) <> "function")
+    if (typeof(varargin(1)) <> "function")
         if isequal(A, A')   // A is real symmetric
             nev = min(size(A, "r") - 1, 6);
         else
@@ -101,13 +101,13 @@ function [d, v] = eigs(varargin)
             end
             if(isfield(opts, "resid"))
                 resid = opts.resid;
-                if(issparse(varargin(1)) | issparse(varargin(2)))
+                if issparse(varargin(1)) | issparse(varargin(2))
                     info = 1;
                 else
                     info = int32(1);
                 end
                 if(and(resid==0))
-                    if(issparse(varargin(1)) | issparse(varargin(2)))
+                    if issparse(varargin(1)) | issparse(varargin(2))
                         info = 0;
                     else
                         info = int32(0);
@@ -121,13 +121,13 @@ function [d, v] = eigs(varargin)
 
         select lhs
         case 1
-            if(issparse(A) | issparse(B))
+            if issparse(A) | issparse(B)
                 d = speigs(A, B, nev, sigma, maxiter, tol, ncv, cholB, resid, info);
             else
                 d = %_eigs(A, B, nev, sigma, maxiter, tol, ncv, cholB, resid, info);
             end
         case 2
-            if(issparse(A) | issparse(B))
+            if issparse(A) | issparse(B)
                 [d, v] = speigs(A, B, nev, sigma, maxiter, tol, ncv, cholB, resid, info);
             else
                 [d, v] = %_eigs(A, B, nev, sigma, maxiter, tol, ncv, cholB, resid, info);
@@ -421,7 +421,7 @@ function [res_d, res_v] = speigs(A, %_B, nev, which, maxiter, tol, ncv, cholB, r
         if(or(triu(%_B) <> %_B))
             error(msprintf(gettext("%s: Wrong type for input argument #%d: if opts.cholB is true, B must be upper triangular.\n"), "eigs", 2));
         end
-        if(issparse(%_B)) //sparse cholesky decomposition is reversed...
+        if issparse(%_B) //sparse cholesky decomposition is reversed...
             Rprime = %_B;
             R = Rprime';
         else
@@ -431,10 +431,10 @@ function [res_d, res_v] = speigs(A, %_B, nev, which, maxiter, tol, ncv, cholB, r
     end
 
     if(~cholB & matB & iparam(7) == 1)
-        if(issparse(%_B) & ~Breal)
+        if issparse(%_B) & ~Breal
             error(msprintf(gettext("%s: Impossible to use the Cholesky factorization with complex sparse matrices.\n"), "eigs"));
         else
-            if(issparse(%_B))
+            if issparse(%_B)
                 [R, P] = spchol(%_B);
                 perm = spget(P);
                 perm = perm(:,2);
@@ -446,7 +446,7 @@ function [res_d, res_v] = speigs(A, %_B, nev, which, maxiter, tol, ncv, cholB, r
             end
         end
     end
-    if(matB & issparse(%_B) & iparam(7) ==1)
+    if matB & issparse(%_B) & iparam(7) ==1
         Rfact = umf_lufact(R);
         Rprimefact = umf_lufact(R');
     end
@@ -526,7 +526,7 @@ function [res_d, res_v] = speigs(A, %_B, nev, which, maxiter, tol, ncv, cholB, r
                     if(matB == 0)
                         workd(ipntr(2):ipntr(2)+nA-1) = A * workd(ipntr(1):ipntr(1)+nA-1);
                     else
-                        if(issparse(%_B))
+                        if issparse(%_B)
                             y = umf_lusolve(Rprimefact, workd(ipntr(1):ipntr(1)+nA-1));
                             if(~cholB)
                                 y = A * y(perm);
@@ -877,7 +877,7 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
         if(or(triu(%_B) <> %_B))
             error(msprintf(gettext("%s: Wrong type for input argument #%d: if opts.cholB is true, B must be upper triangular.\n"), "eigs", 2));
         end
-        if(issparse(%_B)) //sparse cholesky decomposition is reversed...
+        if issparse(%_B) //sparse cholesky decomposition is reversed...
             Rprime = %_B;
             R = Rprime;
         else
@@ -886,10 +886,10 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
         end
     end
     if(~cholB & matB & iparam(7) == 1)
-        if(issparse(%_B) & ~Breal)
+        if issparse(%_B) & ~Breal
             error(msprintf(gettext("%s: Impossible to use the Cholesky factorization with complex sparse matrices.\n"), "eigs"));
         else
-            if(issparse(%_B))
+            if issparse(%_B)
                 [R,P] = spchol(%_B);
                 perm = spget(P);
                 perm = perm(:,2);
@@ -901,7 +901,7 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
             end
         end
     end
-    if(matB & issparse(%_B) & iparam(7) == 1)
+    if matB & issparse(%_B) & iparam(7)==1
         Rfact = umf_lufact(R);
         Rprimefact = umf_lufact(R');
     end
@@ -971,7 +971,7 @@ function [res_d, res_v] = feigs(A_fun, nA, %_B, nev, which, maxiter, tol, ncv, c
                             break;
                         end
                     else
-                        if(issparse(%_B))
+                        if issparse(%_B)
                             y = umf_lusolve(Rprimefact, workd(ipntr(1):ipntr(1)+nA-1));
                             if(~cholB)
                                 ierr = execstr("workd(ipntr(2):ipntr(2)+nA-1) = A_fun( y(perm) )", "errcatch");
index 3683996..68d9ee8 100644 (file)
@@ -37,7 +37,7 @@
             <varlistentry>
                 <term>res</term>
                 <listitem>
-                    <para>1 if the matrix is a sparse, and 0 otherwise/</para>
+                    <para>boolean: %T if the matrix is a sparse, and %F otherwise/</para>
                 </listitem>
             </varlistentry>
         </variablelist>
     <refsection>
         <title>Description</title>
         <para>
-            <literal>res = issparse(S)</literal> returns 1 if S is a sparse
-            boolean or numerical matrix, and 0 otherwise.
+            <literal>res = issparse(S)</literal> returns %T (true) if S is a sparse
+            boolean or numerical matrix, and %F (false) otherwise.
         </para>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
 sp = sprand(10, 20, 0.1);
-if issparse(sp) == 1 then
+if issparse(sp) then
    mprintf("Number of non-zero components: %d", nnz(sp));
 end
 
-A = %T;
-if issparse(A) == 0 then
+A = %pi;
+if ~issparse(A) then
     disp("A is not a sparse matrix");
 end
 
-spb = sp~=0 & sp&lt;0.5;
+spb = sp~=0 & sp < 0.5;
 issparse(spb)
 nnz(spb)
     ]]></programlisting>
@@ -90,7 +90,14 @@ nnz(spb)
             <revision>
                 <revnumber>6.0.2</revnumber>
                 <revdescription>
-                    issparse() now returns 1 instead of 0 for sparse booleans.
+                    <itemizedlist>
+                        <listitem>
+                            issparse() now returns a boolean %T or %F instead of 1 or 0.
+                        </listitem>
+                        <listitem>
+                            issparse() is now true as well for sparse booleans.
+                        </listitem>
+                    </itemizedlist>
                 </revdescription>
             </revision>
         </revhistory>
index e05fe89..22d1152 100644 (file)
@@ -37,7 +37,7 @@
             <varlistentry>
                 <term>res</term>
                 <listitem>
-                    <para>1: 行列は疎行列, 0: その他</para>
+                    <para>%T: 行列は疎行列, %F: その他</para>
                 </listitem>
             </varlistentry>
         </variablelist>
     <refsection>
         <title>説明</title>
         <para>
-            <literal>res = issparse(S)</literal> は、S が疎行列の時に1,
-            それ以外の時に0を返します.
+            <literal>res = issparse(S)</literal> は、S が疎行列の時に %T,
+            それ以外の時に %F を返します.
         </para>
     </refsection>
     <refsection>
         <title>例</title>
         <programlisting role="example"><![CDATA[
 sp = sprand(10, 20, 0.1);
-if issparse(sp) == 1 then
+if issparse(sp) then
    mprintf("Number of non-zero components: %d", nnz(sp));
 end
 
-A = %T;
-if issparse(A) == 0 then
+A = %pi;
+if ~issparse(A) then
     disp("A is not a sparse matrix");
 end
 
-spb = sp~=0 & sp&lt;0.5;
+spb = sp~=0 & sp < 0.5;
 issparse(spb)
 nnz(spb)
     ]]></programlisting>
@@ -90,7 +90,14 @@ nnz(spb)
             <revision>
                 <revnumber>6.0.2</revnumber>
                 <revdescription>
-                    issparse() now returns 1 instead of 0 for sparse booleans.
+                    <itemizedlist>
+                        <listitem>
+                            issparse() now returns a boolean %T or %F instead of 1 or 0.
+                        </listitem>
+                        <listitem>
+                            issparse() is now true as well for sparse booleans.
+                        </listitem>
+                    </itemizedlist>
                 </revdescription>
             </revision>
         </revhistory>
index fb07f1c..2472811 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) XXXX-2008 - INRIA
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2018 - 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.
@@ -12,8 +12,5 @@
 
 
 function r = issparse(x)
-    r = 0;
-    if or(type(x)==[5 6 7]) then
-        r = 1
-    end
+    r = or(type(x)==[5 6 7])
 endfunction