* Bug 15183 fixed: ndgrid(x) expected a mandatory argin#2 82/19282/6
Simon Marchetto [Wed, 4 Oct 2017 16:07:29 +0000 (18:07 +0200)]
  * http://bugzilla.scilab.org/15183
  * ndgrid.xml (ja_JP) actually in english => deleted

Change-Id: I9f44d56f0b29812c9095894dbbaea294ae00593f

scilab/CHANGES.md
scilab/modules/elementary_functions/help/en_US/elementarymatrices/ndgrid.xml
scilab/modules/elementary_functions/help/fr_FR/elementarymatrices/ndgrid.xml
scilab/modules/elementary_functions/help/ja_JP/elementarymatrices/ndgrid.xml [deleted file]
scilab/modules/elementary_functions/help/pt_BR/elementarymatrices/ndgrid.xml
scilab/modules/elementary_functions/help/ru_RU/elementarymatrices/ndgrid.xml
scilab/modules/elementary_functions/macros/ndgrid.sci
scilab/modules/elementary_functions/tests/nonreg_tests/bug_15183.tst [new file with mode: 0644]

index 608ee37..81d70c2 100644 (file)
@@ -227,6 +227,7 @@ bounds selected out of the axes areas is now restored, after the Scilab 5.4 regr
 * `evstr` now support inputs including `ascii(10)`, `ascii(13)`, only a comment or/and
    spaces or/and `"[]"`, only spaces, being `""`, or instructions returning nothing.
 * `mgetl` speed have been improved for files with a lot of lines.
+* `ndgrid(x)` now accepts only one input `x`, with by default `y=x`.
 
 Help pages:
 -----------
@@ -423,6 +424,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15139](http://bugzilla.scilab.org/show_bug.cgi?id=15139): Fix return in try/catch expression
 * [#15144](http://bugzilla.scilab.org/show_bug.cgi?id=15144): `mean` and `stdev` could not be overloaded.
 * [#15170](http://bugzilla.scilab.org/show_bug.cgi?id=15170): `getd` created and returned a variable `k` that could overwrite a loaded one.
+* [#15183](http://bugzilla.scilab.org/show_bug.cgi?id=15183): `ndgrid(x)` with by default `y=x` was not accepted.
 * [#15184](http://bugzilla.scilab.org/show_bug.cgi?id=15184): error management when calling operator overload fixed.
 * [#15185](http://bugzilla.scilab.org/show_bug.cgi?id=15185): "Region to Superblock" did not restore broken links.
 * [#15188](http://bugzilla.scilab.org/show_bug.cgi?id=15188): Failed to load hdf5_is_file function.
index 426c884..35a5e80 100644 (file)
@@ -8,6 +8,7 @@
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
+               [X, Y] = ndgrid(x)
                [X, Y] = ndgrid(x,y)
             [X, Y, Z] = ndgrid(x,y,z)
          [X, Y, Z, T] = ndgrid(x,y,z,t)
@@ -20,7 +21,7 @@
             <varlistentry>
                 <term>x, y, z, ...</term>
                 <listitem>
-                    <para>vectors of any data types. They may have distinct data types.</para>
+                    <para>vectors of any data types. They may have distinct data types. By default, <literal>y=x</literal>.</para>
                 </listitem>
             </varlistentry>
             <varlistentry>
@@ -210,8 +211,17 @@ c1+c2
         <title>History</title>
         <revhistory>
             <revision>
-                <revnumber>6.0</revnumber>
-                <revdescription>Extension to all homogeneous datatypes ([], booleans, encoded integers, polynomials, rationals, strings). Revision of the help page.</revdescription>
+                <revnumber>6.0.0</revnumber>
+                <revdescription>
+                    Extension to all homogeneous datatypes ([], booleans, encoded integers,
+                    polynomials, rationals, strings). Revision of the help page.
+                </revdescription>
+            </revision>
+            <revision>
+                <revnumber>6.0.1</revnumber>
+                <revdescription>
+                    <literal>ndgrid(x)</literal> is now accepted: Default <literal>y=x</literal>.
+                </revdescription>
             </revision>
         </revhistory>
     </refsection>
index b4bbcc5..19fc75d 100644 (file)
@@ -23,7 +23,7 @@
                     <para>vecteurs de types simples quelconques possiblement
                         distincts (booléens,
                         entiers encodés, décimaux, complexes, polynômes, rationnels,
-                        textes).
+                        textes). Par défaut, <literal>y=x</literal>.
                     </para>
                 </listitem>
             </varlistentry>
@@ -252,8 +252,16 @@ c1+c2
     <title>Historique</title>
     <revhistory>
         <revision>
-            <revnumber>6.0</revnumber>
-            <revdescription>Extension à tous les types de données uniformes ([], booleans, encoded integers, polynomials, rationals, strings). Révision de la page d'aide.
+            <revnumber>6.0.0</revnumber>
+            <revdescription>
+                Extension à tous les types de données uniformes ([], booléens, entiers encodés,
+                polynomes, fractions rationelles, texte). Révision de la page d'aide.
+            </revdescription>
+        </revision>
+        <revision>
+            <revnumber>6.0.1</revnumber>
+            <revdescription>
+                <literal>ndgrid(x)</literal> est désormais accepté (<literal>y=x</literal>).
             </revdescription>
         </revision>
     </revhistory>
diff --git a/scilab/modules/elementary_functions/help/ja_JP/elementarymatrices/ndgrid.xml b/scilab/modules/elementary_functions/help/ja_JP/elementarymatrices/ndgrid.xml
deleted file mode 100644 (file)
index 95dee01..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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="ndgrid" xml:lang="ja">
-<refnamediv>
-    <refname>ndgrid</refname>
-    <refpurpose>与えられたベクトルを複製することによって、行列またはN次元配列を作成
-    </refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-    <title>呼び出し手順</title>
-    <synopsis>
-        [X, Y] = ndgrid(x,y)
-        [X, Y, Z] = ndgrid(x,y,z)
-        [X, Y, Z, T] = ndgrid(x,y,z,t)
-        [X1, X2, ..., Xm] = ndgrid(x1,x2,...,xm)
-    </synopsis>
-</refsynopsisdiv>
-<refsection role="arguments">
-    <title>引数</title>
-    <variablelist>
-        <varlistentry>
-            <term>x, y, z, ...</term>
-            <listitem>
-                <para>vectors of any data types. They may have distinct data types.</para>
-            </listitem>
-        </varlistentry>
-        <varlistentry>
-            <term>X, Y, Z, ...</term>
-                <listitem>
-                    <para>Matrices in case of 2 input arguments, or hypermatrices otherwise.
-                        They all have the same sizes: size(x,"*") rows, size(y,"*") columns,
-                        size(z,"*") layers, etc.
-                  </para>
-                  <para>
-                        They have the datatypes of respective input vectors:
-                        <literal>typeof(X)==typeof(x)</literal>,
-                        <literal>typeof(Y)==typeof(y)</literal>, etc.
-                    </para>
-                </listitem>
-        </varlistentry>
-    </variablelist>
-</refsection>
-<refsection role="description">
-    <title>説明</title>
-    <para>
-        The first application of <function>ndgrid</function> is to build
-        a grid of nodes meshing the 2D or 3D or N-D space according to 2, 3,
-        or more sets
-        <literal>x</literal>, <literal> y</literal>, etc.. of
-        "template" coordinates sampled along each direction/dimension of the
-        space that you want to mesh.
-    </para>
-    <para>
-        Hence, the matrix or hypermatrix <literal>X</literal> is made
-        by replicating the vector <literal>x</literal> as all its columns;
-        the matrix or hypermatrix <literal>Y</literal> is made
-        by replicating the vector <literal>y</literal> as all its rows;
-        <literal>Z</literal> is made of replicating the vector
-        <literal>z</literal> along all its local thicknesses (3rd dimension);
-        etc
-    </para>
-    <screen><![CDATA[--> [X, Y] = ndgrid([1 3 4], [0 2 4 6])
- X  =
-   1.   1.   1.   1.
-   3.   3.   3.   3.
-   4.   4.   4.   4.
-
- Y  =
-   0.   2.   4.   6.
-   0.   2.   4.   6.
-   0.   2.   4.   6.
-]]></screen>
-    <para>
-        Then, the coordinates of the node(i,j) in the 2D space
-        will be
-        simply <literal>[x(i), y(j)]</literal> equal to
-        <literal>[X(i,j), Y(i,j)]</literal>. As well, the coordinates of a
-        <literal>node(i,j,k)</literal> of a 3D grid will be
-        <literal>[x(i), y(j), z(k)]</literal> equal to
-        <literal>[X(i,j,k), Y(i,j,k), Z(i,j,k)]</literal>.
-    </para>
-    <para>
-        This replication scheme can be generalized to any number of dimensions,
-        as well to any type of uniform data. Let's for instance consider 2
-        attributes:
-        <orderedlist>
-            <listitem>The first is a number, to be chosen from the vector say
-                <literal>n = [ 3 7 ]</literal>
-            </listitem>
-            <listitem>The second is a letter, to be chosen from the vector
-                say <literal>c = ["a" "e" "i" "o" "u" "y"]</literal>
-            </listitem>
-        </orderedlist>
-        Then we want to build the set of all {n,c} possible pairs. It will
-        just be the 2D grid:
-    </para>
-    <screen><![CDATA[--> [N, C] = ndgrid([3 7],["a" "e" "i" "o" "u" "y"])
- C  =
-!a  e  i  o  u  y  !
-!a  e  i  o  u  y  !
-
- N  =
-   3.   3.   3.   3.   3.   3.
-   7.   7.   7.   7.   7.   7.
-]]></screen>
-    <para>Then, the object(i,j) will have the properties
-        <literal>{n(i) c(j)}</literal> that now can be addressed with
-        <literal>{N(i,j) C(i,j)}</literal>.
-        This kind of grid may be useful to initialize an array of structures.
-    </para>
-    <para>
-        Following examples show how to use <varname>X, Y, Z</varname> in
-        most frequent applications.
-    </para>
-</refsection>
-<refsection role="examples">
-    <title>例</title>
-    <para>
-        <emphasis role="bold">Example #1:</emphasis>
-    </para>
-    <programlisting role="example"><![CDATA[
-// Create a simple 2D grid
-x = linspace(-10,2,40);
-y = linspace(-5,5,40);
-[X,Y] = ndgrid(x,y);
-
-// Compute ordinates Z(X,Y) on the {X, Y} grid and plot Z(X,Y)
-Z = X - 3*X.*sin(X).*cos(Y-4) ;
-
-clf()
-plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()
- ]]></programlisting>
-    <scilab:image>
-        x = linspace(-10,2,40);
-        y = linspace(-5,5,40);
-        [X,Y] = ndgrid(x,y);
-        Z = X - 3*X.*sin(X).*cos(Y-4) ;
-        clf()
-        plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()
-    </scilab:image>
-    <para>
-        <emphasis role="bold">Example #2:</emphasis>
-    </para>
-    <programlisting role="example"><![CDATA[
-// 簡単な3次元グリッドを作成
-nx = 10; ny = 6; nz = 4;
-x = linspace(0,2,nx);
-y = linspace(0,1,ny);
-z = linspace(0,0.5,nz);
-[X,Y,Z] = ndgrid(x,y,z);
-
-// 3次元グリッドを表示する ...
-XF=[]; YF=[]; ZF=[];
-for k=1:nz
-   [xf,yf,zf] = nf3d(X(:,:,k),Y(:,:,k),Z(:,:,k));
-   XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
-end
-for j=1:ny
-   [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),...
-                     matrix(Y(:,j,:),[nx,nz]),...
-                     matrix(Z(:,j,:),[nx,nz]));
-   XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
-end
-
-clf()
-plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z")
-xtitle("A 3d grid !"); show_window()
- ]]></programlisting>
-    <scilab:image>
-        nx = 10; ny = 6; nz = 4;
-        x = linspace(0,2,nx);
-        y = linspace(0,1,ny);
-        z = linspace(0,0.5,nz);
-        [X,Y,Z] = ndgrid(x,y,z);
-        XF=[]; YF=[]; ZF=[];
-        for k=1:nz
-        [xf,yf,zf] = nf3d(X(:,:,k),Y(:,:,k),Z(:,:,k));
-        XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
-        end
-        for j=1:ny
-        [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),...
-        matrix(Y(:,j,:),[nx,nz]),...
-        matrix(Z(:,j,:),[nx,nz]));
-        XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
-        end
-        plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z")
-        xtitle("A 3d grid !");
-    </scilab:image>
-    <para>
-        <emphasis role="bold">Example #3: Create a table of digrams:</emphasis>
-    </para>
-    <programlisting role="example"><![CDATA[
-[c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])
-c1+c2
- ]]></programlisting>
-    <screen><![CDATA[--> [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])
- c2  =
-!a  b  c  d  e  f  g  h  !
-!a  b  c  d  e  f  g  h  !
-!a  b  c  d  e  f  g  h  !
-
- c1  =
-!a  a  a  a  a  a  a  a  !
-!b  b  b  b  b  b  b  b  !
-!c  c  c  c  c  c  c  c  !
-
---> c1+c2
- ans  =
-!aa  ab  ac  ad  ae  af  ag  ah  !
-!ba  bb  bc  bd  be  bf  bg  bh  !
-!ca  cb  cc  cd  ce  cf  cg  ch  !
-]]></screen>
-</refsection>
-<refsection role="see also">
-    <title>参照</title>
-    <simplelist type="inline">
-        <member>
-            <link linkend="meshgrid">meshgrid</link>
-        </member>
-        <member>
-            <link linkend="kron">kron</link>
-        </member>
-        <member>
-            <link linkend="feval">feval</link>
-        </member>
-        <member>
-            <link linkend="nf3d">nf3d</link>
-        </member>
-    </simplelist>
-</refsection>
-<refsection role="history">
-    <title>履歴</title>
-    <revhistory>
-        <revision>
-            <revnumber>6.0</revnumber>
-            <revdescription>Extension to all homogeneous datatypes ([], booleans, encoded integers, polynomials, rationals, strings). Revision of the help page.
-            </revdescription>
-        </revision>
-    </revhistory>
-</refsection>
-</refentry>
index 1388849..d42e865 100644 (file)
@@ -21,7 +21,7 @@
             <term>x, y, z, ...</term>
             <listitem>
                 <para>vetores de quaisquer tipos de dados.
-                    Eles podem ter tipos de dados distintos.
+                    Eles podem ter tipos de dados distintos. Por padrão, <literal>y=x</literal>.
                 </para>
             </listitem>
         </varlistentry>
@@ -231,9 +231,16 @@ c1+c2
     <title>Histórico</title>
     <revhistory>
         <revision>
-            <revnumber>6.0</revnumber>
-            <revdescription>Extension to all homogeneous datatypes ([], booleans, encoded integers,
-              polynomials, rationals, strings). Revision of the help page.
+            <revnumber>6.0.0</revnumber>
+            <revdescription>
+                Extension to all homogeneous datatypes ([], booleans, encoded integers,
+                polynomials, rationals, strings). Revision of the help page.
+            </revdescription>
+        </revision>
+        <revision>
+            <revnumber>6.0.1</revnumber>
+            <revdescription>
+                <literal>ndgrid(x)</literal> is now accepted: Default <literal>y=x</literal>.
             </revdescription>
         </revision>
     </revhistory>
index a17b089..937298f 100644 (file)
         <varlistentry>
             <term>x, y, z, ...</term>
             <listitem>
-                <para>векторы любых типов данных. Они могут иметь различные типы данных.</para>
+                <para>векторы любых типов данных. Они могут иметь различные типы данных.
+                По умолчанию <literal>y=x</literal>.</para>
             </listitem>
         </varlistentry>
         <varlistentry>
             <term>X, Y, Z, ...</term>
                 <listitem>
                     <para>
-                       В случае двух входных аргументов это матрицы, в противном случае это гиперматрицы.
+                        В случае двух входных аргументов это матрицы, в противном случае это гиперматрицы.
                         Все они имеют одинаковые размеры: <literal>size(x,"*")</literal> строк, <literal>size(y,"*")</literal>
-                       столбцов, <literal>size(z,"*")</literal> слоёв и так далее.
+                        столбцов, <literal>size(z,"*")</literal> слоёв и так далее.
                   </para>
                   <para>
                         Они имеют одинаковые типы данных соответствющих входных векторов:
     <title>Описание</title>
     <para>
         Первое применение функции <function>ndgrid</function> заключается в построении сетки
-       узлов, формирующих двумерное, трёхмерное или N-мерное пространство в соответствии с
-       2, 3  и более наборами <varname>x</varname>, <varname>y</varname> и т.д. координат
+        узлов, формирующих двумерное, трёхмерное или N-мерное пространство в соответствии с
+        2, 3  и более наборами <varname>x</varname>, <varname>y</varname> и т.д. координат
         "шаблона" продискретизированных вдоль каждого направления/размерности пространства,
         которое вы желаете сформировать.
     </para>
     <para>
         Следовательно, матрица или гиперматрица <varname>X</varname> сделана через копирование
         вектора <varname>x</varname> по столбцам; матрица или гиперматрица <varname>Y</varname>
-       сделана через копирование вектора <varname>y</varname> по строкам; матрица <varname>Z</varname>
-       сделана через копирование вектора <varname>z</varname> по всем слоям (третье измерение);
-       и т.д
+        сделана через копирование вектора <varname>y</varname> по строкам; матрица <varname>Z</varname>
+        сделана через копирование вектора <varname>z</varname> по всем слоям (третье измерение);
+        и т.д
    </para>
     <screen><![CDATA[--> [X, Y] = ndgrid([1 3 4], [0 2 4 6])
  X  =
@@ -69,7 +70,7 @@
 ]]></screen>
     <para>
         Эта схема копирования может быть обобщена к любому числу измерений, а также
-       к любому типу универсальных данных. Давайте, например, возьмём 2 атрибута:
+        к любому типу универсальных данных. Давайте, например, возьмём 2 атрибута:
         <orderedlist>
             <listitem>Первый - это число, которое нужно выбрать из вектора, скажем
                 <literal>n = [ 3 7 ]</literal>
@@ -78,8 +79,8 @@
                 <literal>c = ["a" "e" "i" "o" "u" "y"]</literal>
             </listitem>
         </orderedlist>
-       Тогда мы хотим построить множество всех <literal>{n,c}</literal> возможных пар.
-       Это будет просто двумерная сетка:
+        Тогда мы хотим построить множество всех <literal>{n,c}</literal> возможных пар.
+        Это будет просто двумерная сетка:
     </para>
     <screen><![CDATA[--> [N, C] = ndgrid([3 7],["a" "e" "i" "o" "u" "y"])
  C  =
    7.   7.   7.   7.   7.   7.
 ]]></screen>
     <para>
-       Тогда <literal>object(i,j)</literal> будет иметь свойства <literal>{n(i) c(j)}</literal>,
-       которые темер могут быть адресованы как <literal>{N(i,j) C(i,j)}</literal>.
-       Такой вид сетки может быть полезен для инициализации массива структур.
+        Тогда <literal>object(i,j)</literal> будет иметь свойства <literal>{n(i) c(j)}</literal>,
+        которые темер могут быть адресованы как <literal>{N(i,j) C(i,j)}</literal>.
+        Такой вид сетки может быть полезен для инициализации массива структур.
     </para>
     <para>
-       Следующие примеры показывают как использовать <varname>X, Y, Z</varname> в
-       наиболее распространёных приложениях
+        Следующие примеры показывают как использовать <varname>X, Y, Z</varname> в
+        наиболее распространёных приложениях
     </para>
 </refsection>
 <refsection role="examples">
@@ -223,12 +224,18 @@ c1+c2
     <title>История</title>
     <revhistory>
         <revision>
-            <revnumber>6.0</revnumber>
+            <revnumber>6.0.0</revnumber>
             <revdescription>
               Расширение до всех однородных типов данных ([], логические, закодированные целые числа,
               многочлены, дроби, строковые значения). Пересмотр  этой странички справки.
             </revdescription>
         </revision>
+        <revision>
+            <revnumber>6.0.1</revnumber>
+            <revdescription>
+                <literal>ndgrid(x)</literal> теперь принимает по умолчанию <literal>y=x</literal>.
+            </revdescription>
+        </revision>
     </revhistory>
 </refsection>
 </refentry>
index c0f4383..6ef21ef 100644 (file)
@@ -1,6 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) Bruno Pincon
-// Copyright (C) 2015 - Samuel GOUGEON
+// Copyright (C) 2015, 2017 - Samuel GOUGEON
+//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
 
 function [varargout] = ndgrid(varargin)
     nbdim = length(varargin)
-    if nbdim < 2 then
+    if nbdim < 1 then
         msg = _("%s: Wrong number of input arguments: At least %d expected.\n")
-        error(msprintf(msg, "ndgrid", 2))
+        error(msprintf(msg, "ndgrid", 1))
+    end
+    if nbdim==1 then
+        varargin(2) = varargin(1)
+        nbdim = 2
     end
 
     dim = zeros(1,nbdim)
@@ -42,7 +47,7 @@ function [varargout] = ndgrid(varargin)
     for k = 1:nbdim
         tmp = varargin(k)
         ind = ones(1,prod(dim(k+1:$))) .*. (1:size(tmp,"*")) ..
-        .*. ones(1,prod(dim(1:k-1)))
+                .*. ones(1,prod(dim(1:k-1)))
         if typeof(tmp)~="rational"
             varargout(k) = matrix( tmp(ind) , dim )
         else
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_15183.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_15183.tst
new file mode 100644 (file)
index 0000000..065a6b2
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15183 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15183
+//
+// <-- Short Description -->
+//  Contrarily to meshgrid(x) with y=x, ndgrid(x) was not accepted
+
+[X, Y] = ndgrid(1:4);
+assert_checkequal(Y, X.');