statistics: Bug #7377: thrownan failed on empty matrix 24/2824/2
Michael Baudin [Tue, 21 Dec 2010 17:21:06 +0000 (18:21 +0100)]
Change-Id: Id4abb0b568e13b1a6a1f34924fcb0fc59c5f2dd0

scilab/CHANGES_5.3.X
scilab/modules/statistics/help/en_US/labostat.xml [deleted file]
scilab/modules/statistics/help/en_US/thrownan.xml
scilab/modules/statistics/macros/thrownan.sci
scilab/modules/statistics/tests/nonreg_tests/bug_7377.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/nonreg_tests/bug_7377.tst [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/thrownan.dia.ref [new file with mode: 0644]
scilab/modules/statistics/tests/unit_tests/thrownan.tst [new file with mode: 0644]

index 525689b..c9ac4c2 100644 (file)
@@ -129,6 +129,8 @@ Bug fixes:
 * bug 5551 fixed - With the function dir(), add a trailing filesep() for each
                    directory.
 
+* bug 7377 fixed - Thrownan failed on empty matrix.
+
 * bug 7691 fixed - Giving complex arguments to inverse degree trigonometric
                    functions produced inconsistent results.
 
diff --git a/scilab/modules/statistics/help/en_US/labostat.xml b/scilab/modules/statistics/help/en_US/labostat.xml
deleted file mode 100644 (file)
index c8f0ff5..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2000 - INRIA - Carlos Klimann
- * 
- * This file must be used under the terms of the CeCILL.
- * This source file is licensed as described in the file COPYING, which
- * you should have received as part of this distribution.  The terms
- * are also available at    
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:lang="en" xml:id="labostat">
-  <info>
-    <pubdate>$LastChangedDate$</pubdate>
-  </info>
-  <refnamediv>
-    <refname>labostat</refname>
-    <refpurpose>    Statistical toolbox for Scilab</refpurpose>
-  </refnamediv>
-  <refsection>
-    <title>Contents</title>
-    <programlisting role = ""><![CDATA[ 
-centre: centering variables
-centrered: centering and reducing variables
-cmoment: central moments of all orders
-correl: correlation
-covar: covariance
-ftest: fischer test and his p-value
-geomean: geometric mean
-harmean: harmonic mean
-iqr: interquartile range
-mad: mean absolute deviation
-meanf:  arithmetic mean of a vector or matrix with a table of frequences
-median: 50th percentile of a sample
-mn: arithmetic mean of a vector or matrix
-moment: moments of all orders
-msd:  mean squared  deviation
-mvvacov : multivariable matrix of variance-covariance
-nand2mean: estimate of the difference of means of two independent samples
-nanmax:  maximum ignoring NaNs
-nanmean: mean ignoring NaNs
-nanmeanf:  mean with frequency table ignoring NaNs
-nanmedian: 50th percentile of a sample ignoring NaNs
-nanmin: minimum ignoring NANs
-nanstdev:  standard deviation ignoring NaNs
-nanstdevf: standard deviation with frequency table ignoring NaNs
-nansum: sum ignoring NaNs
-nfreq: frequency of the values of a sample
-pca: principal component analysys
-pctl: vector of  percentiles of a sample in decreasing order
-perctl: vector of  percentiles of a sample in decreasing order
-quart: quartils
-stdev: standard deviation
-stdevf: standard deviation with frequences 
-strange: distance between largest and smallest value
-tabul: frequences of values
-var: variance
-varf: variance with frequence table
- ]]></programlisting>
-  </refsection>
-  <refsection>
-    <title>References</title>
-    <para>
-     Wonacott, T.H. &amp; Wonacott, R.J.; Introductory Statistics, 5th edition, J.Wiley &amp; Sons, 1990.</para>
-    <para>
-     Saporta,  Gilbert, Probabilites, Analyse  des Donnees  et Statistique, Editions Technip, Paris, 1990.</para>
-  </refsection>
-</refentry>
index c62cabd..a7b3efa 100644 (file)
@@ -2,6 +2,7 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2000 - INRIA - Carlos Klimann
+ * Copyright (C) 2010 - DIGITEO - Michael Baudin
  * 
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:lang="en" xml:id="thrownan">
+<refentry
+  xmlns="http://docbook.org/ns/docbook"
+  xmlns:xlink="http://www.w3.org/1999/xlink"
+  xmlns:svg="http://www.w3.org/2000/svg"
+  xmlns:mml="http://www.w3.org/1998/Math/MathML"
+  xmlns:db="http://docbook.org/ns/docbook"
+  version="5.0-subset Scilab"
+  xml:lang="en"
+  xml:id="thrownan">
   <info>
     <pubdate>$LastChangedDate$</pubdate>
   </info>
   <refnamediv>
     <refname>thrownan</refname>
-    <refpurpose> eliminates nan values</refpurpose>
+    <refpurpose>Eliminates nan values</refpurpose>
   </refnamediv>
   <refsynopsisdiv>
     <title>Calling Sequence</title>
       <varlistentry>
         <term>x</term>
         <listitem>
-          <para>real or complex vector or matrix</para>
+          <para>
+            a m-by-n real or complex matrix of doubles.
+            If the number of columns in <literal>x</literal> is different from 1,
+            then the column-by-column matrix <literal>x</literal> is considered.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>nonan</term>
+        <listitem>
+          <para>
+            a (m*n)-by-1 real or complex matrix of doubles, without any %nan entries.
+          </para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term>numb</term>
+        <listitem>
+          <para>
+            a (m*n)-by-1 real or complex matrix of floating point integers, the
+            indices <literal>k</literal> in <literal>x</literal> where <literal>x(k)</literal>
+            is non-nan.
+          </para>
         </listitem>
       </varlistentry>
     </variablelist>
   <refsection>
     <title>Description</title>
     <para>
-    This function returns  in vector <literal>nonan</literal> the values
-    (ignoring the  NANs) of a vector or  matrix <literal>x</literal> and
-    in  the corresponding places  of vector  <literal>numb</literal> the
-    indexes of the value.</para>
-    <para>
-    For      a      vector      or     matrix      <literal>x</literal>,
-    <literal>[nonan,numb]=thrownan(x)</literal>    considers    <literal>x</literal>,
-    whatever  his dimensions  are, like  a  vector (columns
-    first).</para>
-    <para>
-    In  Labostat, NAN  values stand  for missing  values in
-    tables.</para>
+      This function returns  in vector <literal>nonan</literal> the values
+      (ignoring the <literal>%nan</literal> entries) of a matrix <literal>x</literal> and
+      in  the corresponding places of vector  <literal>numb</literal> the
+      indexes of the value.
+    </para>
   </refsection>
   <refsection>
     <title>Examples</title>
-    <programlisting role="example"><![CDATA[ 
+    <programlisting role="example">
+      <![CDATA[ 
 x=[0.2113249 %nan 0.6653811;0.7560439 0.3303271 0.6283918]
 [nonan numb]=thrownan(x)
- ]]></programlisting>
+and(x(numb)==nonan) // Must be %t
+ ]]>
+    </programlisting>
   </refsection>
   <refsection>
     <title>Authors</title>
-    <para> Carlos Klimann</para>
+    <para>Copyright (C) 2000 - INRIA - Carlos Klimann</para>
+    <para>Copyright (C) 2010 - DIGITEO - Michael Baudin</para>
   </refsection>
 </refentry>
index a0944d9..93f1102 100644 (file)
@@ -1,6 +1,6 @@
-
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2000 - INRIA - Carlos Klimann
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
 // 
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // 
 
 function [nonan,numb]=thrownan(x)
-//
-//
-//This  function  returns  in  vector  nonan  the  values
-//(ignoring the NANs) of a  vector or matrix x and in the
-//corresponding places of vector  numb the indexes of the
-//value.
-//
-//For  a  vector  or matrix  x,  [nonan,numb]=thrownan(x)
-//considers x, whatever his dimensions are, like a linear
-//vector (columns  first).
-//
-//
-  [lhs,rhs]=argn(0)
-  if rhs<>1 then error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"thrownan",1)), end
-  if x==[] then s=[], return,end
-  numb=find(bool2s(~isnan(x)))
-  nonan=x(~isnan(x))
+    //
+    //
+    //This  function  returns  in  vector  nonan  the  values
+    //(ignoring the NANs) of a  vector or matrix x and in the
+    //corresponding places of vector  numb the indexes of the
+    //value.
+    //
+    //For  a  vector  or matrix  x,  [nonan,numb]=thrownan(x)
+    //considers x, whatever his dimensions are, like a linear
+    //vector (columns  first).
+    //
+    //
+    [lhs,rhs]=argn(0)
+    if ( rhs<>1 ) then 
+        error(msprintf(gettext("%s: Wrong number of input argument: %d expected.\n"),"thrownan",1))
+    end
+    tf = ~isnan(x)
+    numb=find(bool2s(tf))
+    nonan=x(tf)
 
 endfunction
+
diff --git a/scilab/modules/statistics/tests/nonreg_tests/bug_7377.dia.ref b/scilab/modules/statistics/tests/nonreg_tests/bug_7377.dia.ref
new file mode 100644 (file)
index 0000000..501f554
--- /dev/null
@@ -0,0 +1,32 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - INRIA - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 7377 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7377
+//
+// <-- Short Description -->
+//    thrownan failed on empty matrix
+//
+// assert_equal --
+//   Returns 1 if the two real matrices computed and expected are equal.
+// Arguments
+//   computed, expected : the two matrices to compare
+//   epsilon : a small number
+//
+function flag = assert_equal ( computed , expected )
+  if computed==expected then
+    flag = 1;
+  else
+    flag = 0;
+  end
+  if flag <> 1 then bugmes();quit;end
+endfunction
+//
+[nonan,numb]=thrownan([]);
+assert_equal ( nonan , [] );
+assert_equal ( numb , [] );
diff --git a/scilab/modules/statistics/tests/nonreg_tests/bug_7377.tst b/scilab/modules/statistics/tests/nonreg_tests/bug_7377.tst
new file mode 100644 (file)
index 0000000..5e52be0
--- /dev/null
@@ -0,0 +1,36 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - INRIA - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 7377 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7377
+//
+// <-- Short Description -->
+//    thrownan failed on empty matrix
+
+//
+// assert_equal --
+//   Returns 1 if the two real matrices computed and expected are equal.
+// Arguments
+//   computed, expected : the two matrices to compare
+//   epsilon : a small number
+//
+function flag = assert_equal ( computed , expected )
+  if computed==expected then
+    flag = 1;
+  else
+    flag = 0;
+  end
+  if flag <> 1 then pause,end
+endfunction
+
+//
+[nonan,numb]=thrownan([]);
+assert_equal ( nonan , [] );
+assert_equal ( numb , [] );
+
diff --git a/scilab/modules/statistics/tests/unit_tests/thrownan.dia.ref b/scilab/modules/statistics/tests/unit_tests/thrownan.dia.ref
new file mode 100644 (file)
index 0000000..a6715f7
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// assert_equal --
+//   Returns 1 if the two real matrices computed and expected are equal.
+// Arguments
+//   computed, expected : the two matrices to compare
+//   epsilon : a small number
+//
+function flag = assert_equal ( computed , expected )
+  if computed==expected then
+    flag = 1;
+  else
+    flag = 0;
+  end
+  if flag <> 1 then bugmes();quit;end
+endfunction
+x=[0.2113249 %nan 0.6653811 %nan;0.7560439 0.3303271 0.6283918 %nan];
+[nonan,numb]=thrownan(x);
+expected = [0.2113249;0.7560439;0.3303271;0.6653811;0.6283918];
+assert_equal ( nonan , expected );
+assert_equal ( numb , [1,2,4,5,6] );
+//
+[nonan,numb]=thrownan([]);
+assert_equal ( nonan , [] );
+assert_equal ( numb , [] );
diff --git a/scilab/modules/statistics/tests/unit_tests/thrownan.tst b/scilab/modules/statistics/tests/unit_tests/thrownan.tst
new file mode 100644 (file)
index 0000000..ccfa7b1
--- /dev/null
@@ -0,0 +1,33 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2010 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+//
+// assert_equal --
+//   Returns 1 if the two real matrices computed and expected are equal.
+// Arguments
+//   computed, expected : the two matrices to compare
+//   epsilon : a small number
+//
+function flag = assert_equal ( computed , expected )
+  if computed==expected then
+    flag = 1;
+  else
+    flag = 0;
+  end
+  if flag <> 1 then pause,end
+endfunction
+
+x=[0.2113249 %nan 0.6653811 %nan;0.7560439 0.3303271 0.6283918 %nan];
+[nonan,numb]=thrownan(x);
+expected = [0.2113249;0.7560439;0.3303271;0.6653811;0.6283918];
+assert_equal ( nonan , expected );
+assert_equal ( numb , [1,2,4,5,6] );
+//
+[nonan,numb]=thrownan([]);
+assert_equal ( nonan , [] );
+assert_equal ( numb , [] );
+