* Bug #14689 fixed: resize_matrix(mat,[0,3,-1]) with new sizes <=0 01/18401/5
Samuel GOUGEON [Mon, 1 Aug 2016 19:40:53 +0000 (21:40 +0200)]
 * http://bugzilla.scilab.org/14689
 * Any new size set to 0 now returns []
 * Usage of new size==-1 to keep the current size is now documented
 * Unit test extended

 * (ru) and (pt) pages have to be retranslated (not done after (en)
   rewritting in 2013) => Deleted

Change-Id: I57692a2c4e0e41741a8d5c02dfbe062bba321df0

12 files changed:
scilab/CHANGES.md
scilab/modules/elementary_functions/help/en_US/matrixmanipulation/resize_matrix.xml
scilab/modules/elementary_functions/help/fr_FR/matrixmanipulation/resize_matrix.xml
scilab/modules/elementary_functions/help/ja_JP/matrixmanipulation/resize_matrix.xml
scilab/modules/elementary_functions/help/pt_BR/matrixmanipulation/resize_matrix.xml [deleted file]
scilab/modules/elementary_functions/help/ru_RU/matrixmanipulation/resize_matrix.xml [deleted file]
scilab/modules/elementary_functions/locales/fr_FR.po
scilab/modules/elementary_functions/macros/resize_matrix.sci
scilab/modules/elementary_functions/tests/nonreg_tests/bug_14689.dia.ref [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_14689.tst [new file with mode: 0644]
scilab/modules/elementary_functions/tests/unit_tests/resize_matrix.dia.ref
scilab/modules/elementary_functions/tests/unit_tests/resize_matrix.tst

index 0113d5c..c09eb0a 100644 (file)
@@ -398,6 +398,7 @@ Bug Fixes
 * [#14662](http://bugzilla.scilab.org/show_bug.cgi?id=14662): Matrix of strings concatenation with single quote led to a parser error.
 * [#14667](http://bugzilla.scilab.org/show_bug.cgi?id=14667): Multi line string without final quote generated a non terminal parser state.
 * [#14681](http://bugzilla.scilab.org/show_bug.cgi?id=14681): Short-circuited AND operation was not possible with double matrices in if and while clauses
+* [#14689](http://bugzilla.scilab.org/show_bug.cgi?id=14689): fixed - `resize_matrix(rand(2,3),[0 2])` did not return []. Usage of new sizes <0 to keep them unchanged was not documented.
 * [#14690](http://bugzilla.scilab.org/show_bug.cgi?id=14690): The user's startup files set in the working directory were not executed. When `SCIHOME` is not the working directory, `SCIHOME\scilab.ini` was executed twice.
 * [#14692](http://bugzilla.scilab.org/show_bug.cgi?id=14692): isequal() was always returning true for builtin functions
 * [#14694](http://bugzilla.scilab.org/show_bug.cgi?id=14694): The list of named colors was misaligned and poorly rendered in `help color_list`
index ba5dfbd..7c53cf9 100644 (file)
@@ -2,7 +2,7 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Jean-Baptiste SILVY
- * Copyright (C) 2013 - Samuel GOUGEON (5.5.0)
+ * Copyright (C) 2013, 2016 - Samuel GOUGEON
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  * along with this program.
  *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="resize_matrix" xml:lang="en">
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
+xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
+xmlns:scilab="http://www.scilab.org" xml:id="resize_matrix" xml:lang="en">
     <refnamediv>
         <refname>resize_matrix</refname>
         <refpurpose>trim or/and extend (and cast) a matrix or hypermatrix</refpurpose>
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
-                     resize_matrix   // demo
+            resize_matrix   // demo
+            
             resMat = resize_matrix(mat, nbRows, nbCols)
-
             resMat = resize_matrix(mat, nbRows, nbCols, resType)
             resMat = resize_matrix(mat, nbRows, nbCols, resType, padding)
             resMat = resize_matrix(mat, nbRows, nbCols,    ""  , padding)
-
+            
             resMat = resize_matrix(mat, newSizes)
             resMat = resize_matrix(mat, newSizes, resType)
             resMat = resize_matrix(mat, newSizes, resType, padding)
             <varlistentry>
                 <term>mat</term>
                 <listitem>
-                    <para>input matrix or hypermatrix. booleans, encoded integers, decimals (real or complexes), polynomials, or text are supported.
+                    <para>input matrix or hypermatrix. booleans, encoded integers,
+                        decimal-encoded numbers (real or complex), polynomials,
+                        or text are supported.
                     </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>nbRows</term>
                 <listitem>
-                    <para>new number of rows of the resized matrix. Exceeding rows are trimmed. Missing rows are padded</para>
+                    <para>new number of rows of the resized matrix.
+                        Exceeding rows are trimmed. Missing rows are added by padding.
+                        Setting <literal>nbRows &lt; 0</literal> keeps the current
+                        number of rows.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>nbCols</term>
                 <listitem>
-                    <para>new number of columns of the resized matrix. Exceeding columns are trimmed. Missing columns are padded</para>
+                    <para>new number of columns of the resized matrix.
+                        Exceeding columns are trimmed. Missing columns are added by padding.
+                        Setting <literal>nbCols &lt; 0</literal> keeps the current
+                        number of columns.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <listitem>
                     <para>
                         vector specifying the new sizes along each dimension of <varname>mat</varname>.
+                        To keep a new size equal to the current one, just set it to -1.
                     </para>
                     <para>
-                        If it is shorter than <literal>size(mat)</literal>, it is padded with ones. Example: if <varname>mat</varname> with <literal>size(mat)==[ 4 3 3 2]</literal> is provided and <literal>newSizes=[6 2]</literal> is specified, <literal>newSizes = [6 2 1 1]</literal> is considered.
+                        If the vector <literal>newSizes</literal> is shorter than
+                        <literal>size(mat)</literal>, it is padded with ones.
+                        Example: if <varname>mat</varname> with
+                        <literal>size(mat)==[ 4 3 3 2]</literal> is provided and
+                        <literal>newSizes=[6 2]</literal> is specified,
+                        <literal>newSizes = [6 2 1 1]</literal> is considered.
                     </para>
                     <para>
-                        If <varname>newSizes</varname> is longer than <literal>size(mat)</literal>, new dimensions are added to <varname>mat</varname> and padded. Example: if <varname>mat</varname> such that <literal>size(mat)==[ 4 3 ]</literal> is provided and <literal>newSizes=[6 2 2]</literal> is specified, the result will be an hypermatrix with 2 pages, the second one being fully padded.
+                        Conversely, if <varname>newSizes</varname> is longer than
+                        <literal>size(mat)</literal>, new dimensions are added to
+                        <varname>mat</varname> and padded. Example:
+                        if <varname>mat</varname> such that <literal>size(mat)==[ 4 3 ]</literal>
+                        is provided and <literal>newSizes=[6 2 2]</literal> is
+                        specified, the result will be an hypermatrix with 2 pages,
+                        the second one being fully padded.
                     </para>
                     <para>
-                        <literal>newSizes = [nbRows, nbCols]</literal> may be used for a matrix.
+                        <literal>newSizes = [nbRows, nbCols]</literal> may be
+                        used for a matrix.
                     </para>
                 </listitem>
             </varlistentry>
         <para>
             Creates a matrix of sizes <literal>[nbRows, nbCols]</literal> or <literal>newSizes</literal>, or an hypermatrix of sizes <literal>newSizes</literal>.
             If for a dimension the new size is smaller than the initial one, the matrix is cropped. If the size is increased, the matrix/hypermatrix is padded.
-            The number of dimensions can be increased. Respectively, Scilab automatically squeezes highest dimensions with size kept or set to 1 (singletons).
+            The number of dimensions can be increased. Conversely, Scilab automatically squeezes highest dimensions with size kept or set to 1 (singletons).
         </para>
         <para>
             The type of the result may be changed by specifying the <literal>resType</literal> argument, with restrictions given above.
 // Embedded examples, including with polynomials:
 resize_matrix
 
-// Numerical matrix:
+// Resizing a numerical matrix:
 M = grand(4, 3, "uin", -9, 9)
+resize_matrix(M, -1, 5)  //  use -1 to keep a size unchanged
+resize_matrix(M, 2, -1)
 resize_matrix(M, 3, 4)
+ ]]></programlisting>
+        <screen><![CDATA[--> M = grand(4, 3, "uin", -9, 9)
+ M  =
+  -8.  -5.  -2.
+  -9.   0.  -1.
+   4.  -1.   6.
+   5.   1.   8.
+
+--> resize_matrix(M, -1, 5)  //  use -1 to keep a size unchanged
+ ans  =
+  -8.  -5.  -2.   0.   0.
+  -9.   0.  -1.   0.   0.
+   4.  -1.   6.   0.   0.
+   5.   1.   8.   0.   0.
+
+--> resize_matrix(M, 2, -1)
+ ans  =
+  -8.  -5.  -2.
+  -9.   0.  -1.
+
+--> resize_matrix(M, 3, 4)
+ ans  =
+  -8.  -5.  -2.   0.
+  -9.   0.  -1.   0.
+   4.  -1.   6.   0.
+]]></screen>
+        <programlisting role="example"><![CDATA[
 resize_matrix(M, [3 4 2])
 resize_matrix(M, [3 4 2], "", %i)
 resize_matrix(M, [3 4 2], "string", %i)
@@ -169,7 +224,7 @@ resize_matrix(P, [3 3 2], "", %z)
                 <link linkend="strtod">strtod</link>
             </member>
             <member>
-                <link linkend="strtod">string</link>
+                <link linkend="string">string</link>
             </member>
         </simplelist>
     </refsection>
index d81f978..b665223 100644 (file)
@@ -2,7 +2,7 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA - Jean-Baptiste SILVY
- * Copyright (C) 2013 - Samuel GOUGEON (5.5.0)
+ * Copyright (C) 2013, 2016 - Samuel GOUGEON
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  * along with this program.
  *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="resize_matrix" xml:lang="fr">
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+          xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
+          xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
+          xmlns:scilab="http://www.scilab.org" xml:id="resize_matrix" xml:lang="fr">
     <refnamediv>
         <refname>resize_matrix</refname>
         <refpurpose>élague et/ou étend (et convertit) une matrice ou une hypermatrice</refpurpose>
             <varlistentry>
                 <term>nbRows</term>
                 <listitem>
-                    <para>nouveau nombre de lignes de la matrice retaillée. Les lignes en trop sont supprimées. Les lignes manquantes sont créées.</para>
+                    <para>nouveau nombre de lignes de la matrice retaillée. Les lignes en trop sont
+                      supprimées. Les lignes manquantes sont créées.
+                     Spécifier <literal>nbRows &lt; 0</literal> pour conserver le nombre de
+                      lignes courant.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>nbCols</term>
                 <listitem>
-                    <para>nouveau nombre de colonnes de la matrice retaillée. Les colonnes en trop sont supprimées. Les colonnes manquantes sont créées.</para>
+                    <para>nouveau nombre de colonnes de la matrice retaillée. Les colonnes en trop
+                      sont supprimées. Les colonnes manquantes sont créées.
+                     Spécifier <literal>nbCols &lt; 0</literal> pour conserver le nombre de
+                      colonnes courant.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>newSizes</term>
                 <listitem>
                     <para>
-                        vecteur spécifiant la nouvelle taille de <literal>mat</literal> selon chacune de ses dimensions.
+                        vecteur spécifiant les nouvelles tailles de <literal>mat</literal> selon
+                        ses différentes dimensions.
+                        Pour conserver une taille à la taille actuelle, indiquer -1.
                     </para>
                     <para>
                         S'il est plus court que <literal>size(mat)</literal>, il est complété avec des 1. Exemple: si <varname>mat</varname> telle que <literal>size(mat)==[ 4 3 3 2]</literal> est fournie, et <literal>newSizes=[6 2]</literal> est spécifié, <literal>newSizes = [6 2 1 1]</literal> sera utilisé.
             Le nombre de dimensions peut être augmenté.
         </para>
         <para>
-            Le type du retour peut être modifié en spécifiant l'argument <literal>resType</literal>, avec les restrictions mentionnées ci-dessus.
+            Le type du résultat peut être modifié en spécifiant l'argument <literal>resType</literal>,
+            avec les restrictions mentionnées ci-dessus.
         </para>
     </refsection>
     <refsection role="examples">
 // Exemples de démonstration, dont avec des polynômes :
 resize_matrix
 
-// Matrice numérique
+// Retaillage d'une matrice numérique
 M = grand(4, 3, "uin", -9, 9)
+resize_matrix(M, -1, 5)  //  Indiquer -1 pour conserver la taille courante
+resize_matrix(M, 2, -1)
 resize_matrix(M, 3, 4)
+ ]]></programlisting>
+    <screen><![CDATA[--> M = grand(4, 3, "uin", -9, 9)
+ M  =
+  -8.  -5.  -2.
+  -9.   0.  -1.
+   4.  -1.   6.
+   5.   1.   8.
+
+--> resize_matrix(M, -1, 5)  //  Indiquer -1 pour conserver la taille courante
+ ans  =
+  -8.  -5.  -2.   0.   0.
+  -9.   0.  -1.   0.   0.
+   4.  -1.   6.   0.   0.
+   5.   1.   8.   0.   0.
+
+--> resize_matrix(M, 2, -1)
+ ans  =
+  -8.  -5.  -2.
+  -9.   0.  -1.
+
+--> resize_matrix(M, 3, 4)
+ ans  =
+  -8.  -5.  -2.   0.
+  -9.   0.  -1.   0.
+   4.  -1.   6.   0.
+]]></screen>
+        <programlisting role="example"><![CDATA[
 resize_matrix(M, [3 4 2])
 resize_matrix(M, [3 4 2], "", %i)
 resize_matrix(M, [3 4 2], "string", %i)
@@ -169,7 +212,7 @@ resize_matrix(P, [3 3 2], "", %z)
                 <link linkend="strtod">strtod</link>
             </member>
             <member>
-                <link linkend="strtod">string</link>
+                <link linkend="string">string</link>
             </member>
         </simplelist>
     </refsection>
index 500e622..a8c99df 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - INRIA - Jean-Baptiste SILVY
+ * Copyright (C) 2008 - INRIA - Jean-Baptiste SILVY 
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
         <title>呼び出し手順</title>
         <synopsis>
                      resize_matrix      // Demo
+
             resMat = resize_matrix(mat, nbRows, nbCols)
             resMat = resize_matrix(mat, nbRows, nbCols, resType)
             resMat = resize_matrix(mat, nbRows, nbCols, resType, padding)
             resMat = resize_matrix(mat, nbRows, nbCols,    ""  , padding)
+
             resMat = resize_matrix(mat, newSizes)
             resMat = resize_matrix(mat, newSizes, resType)
             resMat = resize_matrix(mat, newSizes, resType, padding)
@@ -52,6 +54,8 @@
                     <para>
                         大きさ変更後の行列の行数. 超過した行はトリムされます.
                         足りない行は拡張されます.
+                        Setting <literal>nbRows &lt; 0</literal> keeps the current
+                        number of rows.
                     </para>
                 </listitem>
             </varlistentry>
@@ -61,6 +65,8 @@
                     <para>
                         大きさ変更後の行列の列数. 超過した列はトリムされます.
                         足りない列は拡張されます.
+                        Setting <literal>nbCols &lt; 0</literal> keeps the current
+                        number of columns.
                     </para>
                 </listitem>
             </varlistentry>
@@ -69,6 +75,7 @@
                 <listitem>
                     <para>
                         <varname>mat</varname>の各次元方向の新しい大きさを指定するベクトル.
+                        To keep a new size equal to the current one, just set it to -1.
                     </para>
                     <para>
                         <literal>size(mat)</literal>より短い場合, 1でパディングされます.
@@ -149,7 +156,36 @@ resize_matrix
 
 // 数値行列:
 M = grand(4, 3, "uin", -9, 9)
+resize_matrix(M, -1, 5)  //  use -1 to keep a size unchanged
+resize_matrix(M, 2, -1)
 resize_matrix(M, 3, 4)
+ ]]></programlisting>
+    <screen><![CDATA[--> M = grand(4, 3, "uin", -9, 9)
+ M  =
+  -8.  -5.  -2.
+  -9.   0.  -1.
+   4.  -1.   6.
+   5.   1.   8.
+
+--> resize_matrix(M, -1, 5)  //  use -1 to keep a size unchanged
+ ans  =
+  -8.  -5.  -2.   0.   0.
+  -9.   0.  -1.   0.   0.
+   4.  -1.   6.   0.   0.
+   5.   1.   8.   0.   0.
+
+--> resize_matrix(M, 2, -1)
+ ans  =
+  -8.  -5.  -2.
+  -9.   0.  -1.
+
+--> resize_matrix(M, 3, 4)
+ ans  =
+  -8.  -5.  -2.   0.
+  -9.   0.  -1.   0.
+   4.  -1.   6.   0.
+]]></screen>
+        <programlisting role="example"><![CDATA[
 resize_matrix(M, [3 4 2])
 resize_matrix(M, [3 4 2], "", %i)
 resize_matrix(M, [3 4 2], "string", %i)
@@ -196,7 +232,7 @@ resize_matrix(P, [3 3 2], "", %z)
                 <link linkend="strtod">strtod</link>
             </member>
             <member>
-                <link linkend="strtod">string</link>
+                <link linkend="string">string</link>
             </member>
         </simplelist>
     </refsection>
diff --git a/scilab/modules/elementary_functions/help/pt_BR/matrixmanipulation/resize_matrix.xml b/scilab/modules/elementary_functions/help/pt_BR/matrixmanipulation/resize_matrix.xml
deleted file mode 100644 (file)
index e2c87aa..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - INRIA - Jean-Baptiste SILVY
- *
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * 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.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="resize_matrix" xml:lang="pt">
-    <refnamediv>
-        <refname>resize_matrix</refname>
-        <refpurpose>cria uma nova matriz com tamanho diferente</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Seqüência de Chamamento</title>
-        <synopsis>resMat = resize_matrix(mat,nbRow,nbCol,[typeOfMat])</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Parâmetros</title>
-        <variablelist>
-            <varlistentry>
-                <term>mat</term>
-                <listitem>
-                    <para>matriz de entrada da qual a matriz redimensionada será
-                        criada
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>nbRow</term>
-                <listitem>
-                    <para>número de linhas da matriz redimensionada</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>nbCol</term>
-                <listitem>
-                    <para>número de colunas da matriz redimensionada</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>typeOfMat</term>
-                <listitem>
-                    <para>string, nome do tipo da matriz redimensionada</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>resMat</term>
-                <listitem>
-                    <para>matriz redimensionada</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Descrição</title>
-        <para>
-            Cria uma matriz de tamanho <literal>nbRow</literal> x
-            <literal>nbCol</literal> e cujos elementos <literal>(i,j)</literal> são
-            <literal>mat(i,j)</literal> se <literal>(i,j)</literal> está ao alcance da
-            matriz de entrada. De outro modo, <literal>(i,j)</literal> são
-            <literal>0</literal> para matrizes de reais ou de inteiros,
-            <literal>%f</literal> para matrizes de booleanos e um string vazio para
-            matrizes de strings.
-        </para>
-        <para>O tipo da matriz de saída pode ser modificado especificando-se o
-            argumento <literal>typeOfMat</literal>. Neste caso, esteja certo de que o
-            tipo da matriz de entrada é compatível com este.
-        </para>
-        <para>Por enquanto, apenas matrizes de reais, inteiros, booleanos, e
-            strings são suportadas. Isto significa que <literal>typeOfMat</literal>
-            deve ser escolhido dentre: 'constant', 'boolean', 'string' ou qualquer
-            tipo inteiro ('int8', 'int16',...).
-        </para>
-    </refsection>
-    <refsection>
-        <title>Exemplos</title>
-        <programlisting role="example"><![CDATA[
-  // matriz de números
-  myMat = 5 * rand( 3, 4 )
-  myMat = resize_matrix( myMat, 3, 3 ) // reduzindo tamanho da matriz
-  myMatInteger = resize_matrix( myMat, 4, 4, 'int32' ) // criando uma matriz de inteiros
-  myMatBoolean = resize_matrix( myMat, 2, 2, 'boolean' )
-  myMatBoolean = resize_matrix( myMatBoolean, 3, 5 )
-
-  // Matriz de strings
-  myMatString = ["Scilab","the";"Open Source","Scientific";"Software","Package"]
-  myMatString = resize_matrix( myMatString, 3, 1 )
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Ver Também</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="matrix">matrix</link>
-            </member>
-            <member>
-                <link linkend="size">size</link>
-            </member>
-            <member>
-                <link linkend="typeof">typeof</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/ru_RU/matrixmanipulation/resize_matrix.xml b/scilab/modules/elementary_functions/help/ru_RU/matrixmanipulation/resize_matrix.xml
deleted file mode 100644 (file)
index 1d38301..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - INRIA - Jean-Baptiste SILVY
- *
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * 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.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="resize_matrix" xml:lang="ru">
-    <refnamediv>
-        <refname>resize_matrix</refname>
-        <refpurpose>создание новой матрицы иного размера</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Синтаксис</title>
-        <synopsis>resMat = resize_matrix(mat,nbRow,nbCol,[typeOfMat])</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Аргументы</title>
-        <variablelist>
-            <varlistentry>
-                <term>mat</term>
-                <listitem>
-                    <para>
-                        входная матрица которую необходимо преобразовать в новую матрицу других размеров.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>nbRow</term>
-                <listitem>
-                    <para>количество строк новой матрицы.</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>nbCol</term>
-                <listitem>
-                    <para>количество столбцов новой матрицы.</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>typeOfMat</term>
-                <listitem>
-                    <para>символьная строка, название типа новой матрицы.</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>resMat</term>
-                <listitem>
-                    <para>новая матрица.</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Описание</title>
-        <para>
-            Создание матрицы размером <literal>nbRow</literal> на <literal>nbCol</literal>
-            чьи элементы <literal>(i,j)</literal> являются элементами <literal>mat(i,j)</literal>,
-            если <literal>(i,j)</literal> находятся в диапазоне входной матрицы. В противном случае
-            элементы <literal>(i,j)</literal> равны <literal>0</literal> для вещественных или
-            целочисленных матриц, <literal>%f</literal> для матриц с логическими значениями и
-            пустой строкой для строковых матриц.
-        </para>
-        <para>
-            Тип выходной матрицы может быть изменён указанием аргумента
-            <literal>typeOfMat</literal>. В этом случае убедитесь, что тип входной матрицы
-            совместим с одним из следующих типов.
-        </para>
-        <para>
-            На данный момент поддерживаются только матрицы вещественных, целочисленных,
-            логических и строковых значений. Это означает, что <literal>typeOfMat</literal>
-            должен быть выбран из: 'constant', 'boolean', 'string' или любой целочисленный
-            тип ('int8', 'int16',...).
-        </para>
-    </refsection>
-    <refsection>
-        <title>Примеры</title>
-        <programlisting role="example"><![CDATA[
-// матрица чисел
-myMat = 5 * rand( 3, 4 )
-myMat = resize_matrix( myMat, 3, 3 ) // уменьшаем размер матрицы
-myMatInteger = resize_matrix( myMat, 4, 4, 'int32' ) // создаём матрицу целых чисел
-myMatBoolean = resize_matrix( myMat, 2, 2, 'boolean' )
-myMatBoolean = resize_matrix( myMatBoolean, 3, 5 )
-
-// матрица строк
-myMatString = ["Scilab","the";"Open Source","Scientific";"Software","Package"]
-myMatString = resize_matrix( myMatString, 3, 1 )
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Смотрите также</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="matrix">matrix</link>
-            </member>
-            <member>
-                <link linkend="size">size</link>
-            </member>
-            <member>
-                <link linkend="typeof">typeof</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
index 2e13321..790d399 100644 (file)
@@ -867,7 +867,7 @@ msgstr ""
 "%s : Dimension erronée de l'argument d'entrée n°%d : Un vecteur attendu.\n"
 
 msgid "RESIZING a matrix of DECIMALS:"
-msgstr "Redimensionnement d'une matrice de décimales :"
+msgstr "Retaillage d'une matrice de nombres décimaux :"
 
 msgid "Type <Enter> to see an example with polynomials:"
 msgstr "Tapez <Entrée> pour voir un exemple avec des polynômes :"
index 1051179..9c10a63 100644 (file)
@@ -1,8 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2013 - Samuel GOUGEON : resize_matrix rewritten.
-//                                       Hypermatrix, polynomials and
-//                                       custom padding are now supported.
-//                                       Inline examples added.
+// Copyright (C) 2013, 2016 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -192,6 +189,10 @@ function mat = resize_matrix(mat, varargin)
 
     // TRIMMING
     // --------
+    if or(newsizes==0) then
+        mat = []
+        return
+    end
     k = (newsizes>0 & newsizes<oldsizes)
     if or(k) then
         strcommand = ""
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14689.dia.ref b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14689.dia.ref
new file mode 100644 (file)
index 0000000..1dddc4e
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14689 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14689
+//
+// <-- Short Description -->
+//    resize_matrix(mat,[0 3]) does not return []
+assert_checkequal(resize_matrix(rand(2,4), [1 0]), []);
+assert_checkequal(resize_matrix(rand(2,4), [0 3]), []);
+assert_checkequal(resize_matrix(rand(2,4), [0 0]), []);
+assert_checkequal(resize_matrix(rand(4,3,2), [0 2 3]), []);
+assert_checkequal(resize_matrix(rand(4,3,2), [5 0 1]), []);
+assert_checkequal(resize_matrix(rand(4,3,2), [4 4 0]), []);
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14689.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14689.tst
new file mode 100644 (file)
index 0000000..d59b662
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14689 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14689
+//
+// <-- Short Description -->
+//    resize_matrix(mat,[0 3]) does not return []
+
+assert_checkequal(resize_matrix(rand(2,4), [1 0]), []);
+assert_checkequal(resize_matrix(rand(2,4), [0 3]), []);
+assert_checkequal(resize_matrix(rand(2,4), [0 0]), []);
+assert_checkequal(resize_matrix(rand(4,3,2), [0 2 3]), []);
+assert_checkequal(resize_matrix(rand(4,3,2), [5 0 1]), []);
+assert_checkequal(resize_matrix(rand(4,3,2), [4 4 0]), []);
index d240d78..6ba3cdf 100644 (file)
@@ -1,18 +1,54 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2012 - Scilab Enterprises - Sylvestre Ledru
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- CLI SHELL MODE -->
+// When one or several new sizes are 0, [] is returned:
+m = grand(3,4,"uin",0,100);
+assert_checkequal(resize_matrix(m, [0 2]), []);
+assert_checkequal(resize_matrix(m, [0 5]), []);
+assert_checkequal(resize_matrix(m, [0 -1]), []);
+assert_checkequal(resize_matrix(m, [2 0]), []);
+assert_checkequal(resize_matrix(m, [4 0]), []);
+assert_checkequal(resize_matrix(m, [-1 0]), []);
+assert_checkequal(resize_matrix(m, [0 0]), []);
+m = grand(3,4,2,"uin",0,100);
+assert_checkequal(resize_matrix(m, [0 2 3]), []);
+assert_checkequal(resize_matrix(m, [5 0 1]), []);
+assert_checkequal(resize_matrix(m, [4 4 0]), []);
+assert_checkequal(resize_matrix(m, [0 4 0]), []);
+assert_checkequal(resize_matrix(m, [0 0 0]), []);
+// Every new size <0 is kept as is:
+m = grand(3,4,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 2])), [3 2]);
+assert_checkequal(size(resize_matrix(m, [-1 5])), [3 5]);
+assert_checkequal(size(resize_matrix(m, [-1 5 2])), [3 5 2]);
+assert_checkequal(size(resize_matrix(m, [2 -1])), [2 4]);
+assert_checkequal(size(resize_matrix(m, [5 -1])), [5 4]);
+assert_checkequal(size(resize_matrix(m, [2 -1 2])), [2 4 2]);
+assert_checkequal(size(resize_matrix(m, [-1 -1 2])), [3 4 2]);
+m = grand(3,4,2,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 5 3])), [3 5 3]);
+assert_checkequal(size(resize_matrix(m, [2 -1 3])), [2 4 3]);
+assert_checkequal(size(resize_matrix(m, [2 5 -1])), [2 5 2]);
+assert_checkequal(size(resize_matrix(m, [-1 -1 3])), [3 4 3]);
+assert_checkequal(size(resize_matrix(m, [-1 3 -1])), [3 3 2]);
+assert_checkequal(size(resize_matrix(m, [2 -1 -1])), [2 4 2]);
+assert_checkequal(size(resize_matrix(m, [-1 3 -1])), [3 3 2]);
+m = grand(3,4,2,2,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 3 3 -1])), [3 3 3 2]);
+// Trailing singletons at dims>2 are removed:
+m = grand(3,4,2,2,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 3 3 1])), [3 3 3]);
+assert_checkequal(size(resize_matrix(m, [-1 3 1 1])), [3 3]);
+// -----------
 myMat =[     0.6029980    4.2470508    3.2442814    3.7427533
 1.4276821    2.6285304    4.9615955    2.0520295
 4.3037573    4.9656049    0.2502099    3.0422632  ];
-myMat = resize_matrix( myMat, 3, 3 ) // reduce the matrix size
- myMat  = 
-   0.602998    4.2470508   3.2442814
-   1.4276821   2.6285304   4.9615955
-   4.3037573   4.9656049   0.2502099
+myMat = resize_matrix( myMat, 3, 3 ); // reduce the matrix size
 refMat=[0.602998,4.2470508,3.2442814;
 1.4276821,2.6285304,4.9615955;
 4.3037573,4.9656049,0.2502099];
@@ -22,12 +58,7 @@ refMat=int32([0,4,3,0;
 1,2,4,0;
 4,4,0,0;
 0,0,0,0]);
-myMatInteger = resize_matrix( myMat, 4, 4, "int32" ) // create an integer matrix
- myMatInteger  = 
-  0  4  3  0
-  1  2  4  0
-  4  4  0  0
-  0  0  0  0
+myMatInteger = resize_matrix( myMat, 4, 4, "int32" ); // create an integer matrix
 assert_checkequal(myMatInteger, refMat);
 booleanMat=resize_matrix( refMat, 3, 5 , "boolean");
 assert_checkequal(booleanMat, [%f %t %t %f %f; %t %t %t %f %f; %t %t %f %f %f]);
index 6ac3da2..0626517 100644 (file)
@@ -1,16 +1,60 @@
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2012 - Scilab Enterprises - Sylvestre Ledru
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- CLI SHELL MODE -->
 
+// When one or several new sizes are 0, [] is returned:
+m = grand(3,4,"uin",0,100);
+assert_checkequal(resize_matrix(m, [0 2]), []);
+assert_checkequal(resize_matrix(m, [0 5]), []);
+assert_checkequal(resize_matrix(m, [0 -1]), []);
+assert_checkequal(resize_matrix(m, [2 0]), []);
+assert_checkequal(resize_matrix(m, [4 0]), []);
+assert_checkequal(resize_matrix(m, [-1 0]), []);
+assert_checkequal(resize_matrix(m, [0 0]), []);
+
+m = grand(3,4,2,"uin",0,100);
+assert_checkequal(resize_matrix(m, [0 2 3]), []);
+assert_checkequal(resize_matrix(m, [5 0 1]), []);
+assert_checkequal(resize_matrix(m, [4 4 0]), []);
+assert_checkequal(resize_matrix(m, [0 4 0]), []);
+assert_checkequal(resize_matrix(m, [0 0 0]), []);
+
+// Every new size <0 is kept as is:
+m = grand(3,4,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 2])), [3 2]);
+assert_checkequal(size(resize_matrix(m, [-1 5])), [3 5]);
+assert_checkequal(size(resize_matrix(m, [-1 5 2])), [3 5 2]);
+assert_checkequal(size(resize_matrix(m, [2 -1])), [2 4]);
+assert_checkequal(size(resize_matrix(m, [5 -1])), [5 4]);
+assert_checkequal(size(resize_matrix(m, [2 -1 2])), [2 4 2]);
+assert_checkequal(size(resize_matrix(m, [-1 -1 2])), [3 4 2]);
+m = grand(3,4,2,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 5 3])), [3 5 3]);
+assert_checkequal(size(resize_matrix(m, [2 -1 3])), [2 4 3]);
+assert_checkequal(size(resize_matrix(m, [2 5 -1])), [2 5 2]);
+assert_checkequal(size(resize_matrix(m, [-1 -1 3])), [3 4 3]);
+assert_checkequal(size(resize_matrix(m, [-1 3 -1])), [3 3 2]);
+assert_checkequal(size(resize_matrix(m, [2 -1 -1])), [2 4 2]);
+assert_checkequal(size(resize_matrix(m, [-1 3 -1])), [3 3 2]);
+m = grand(3,4,2,2,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 3 3 -1])), [3 3 3 2]);
+
+// Trailing singletons at dims>2 are removed:
+m = grand(3,4,2,2,"uin",0,100);
+assert_checkequal(size(resize_matrix(m, [-1 3 3 1])), [3 3 3]);
+assert_checkequal(size(resize_matrix(m, [-1 3 1 1])), [3 3]);
+
+// -----------
 myMat =[     0.6029980    4.2470508    3.2442814    3.7427533
 1.4276821    2.6285304    4.9615955    2.0520295
 4.3037573    4.9656049    0.2502099    3.0422632  ];
 
-myMat = resize_matrix( myMat, 3, 3 ) // reduce the matrix size
+myMat = resize_matrix( myMat, 3, 3 ); // reduce the matrix size
 refMat=[0.602998,4.2470508,3.2442814;
 1.4276821,2.6285304,4.9615955;
 4.3037573,4.9656049,0.2502099];
@@ -24,7 +68,7 @@ refMat=int32([0,4,3,0;
 4,4,0,0;
 0,0,0,0]);
 
-myMatInteger = resize_matrix( myMat, 4, 4, "int32" ) // create an integer matrix
+myMatInteger = resize_matrix( myMat, 4, 4, "int32" ); // create an integer matrix
 assert_checkequal(myMatInteger, refMat);
 booleanMat=resize_matrix( refMat, 3, 5 , "boolean");
 assert_checkequal(booleanMat, [%f %t %t %f %f; %t %t %t %f %f; %t %t %f %f %f]);