* Bugs 15998 + 16000 fixed [m2sci]: atan() & acoth() conversion issues 97/20897/11
Samuel GOUGEON [Sat, 9 Mar 2019 22:41:11 +0000 (23:41 +0100)]
  http://bugzilla.scilab.org/15998
  http://bugzilla.scilab.org/16000

Change-Id: I5423a8886093c1082abd6826a9b605cacd77be1d

13 files changed:
scilab/CHANGES.md
scilab/modules/m2sci/help/en_US/m2sci_equivalents/a/acoth.xml
scilab/modules/m2sci/help/en_US/m2sci_equivalents/a/atan.xml
scilab/modules/m2sci/macros/sci_files/Makeproto
scilab/modules/m2sci/macros/sci_files/sci_PROTO5.g
scilab/modules/m2sci/macros/sci_files/sci_acoth.sci
scilab/modules/m2sci/macros/sci_files/sci_asin.sci
scilab/modules/m2sci/macros/sci_files/sci_atan.sci
scilab/modules/m2sci/macros/sci_files/sci_atanh.sci
scilab/modules/m2sci/tests/nonreg_tests/bug_15998.tst [new file with mode: 0644]
scilab/modules/m2sci/tests/nonreg_tests/bug_16000.tst [new file with mode: 0644]
scilab/modules/m2sci/tests/unit_tests/conversion/ACOTH.dia.ref
scilab/modules/m2sci/tests/unit_tests/conversion/ATAN.dia.ref

index 9657361..3ecc7fa 100644 (file)
@@ -248,18 +248,13 @@ Bug Fixes
 * [#15392](http://bugzilla.scilab.org/show_bug.cgi?id=15392): `comet` and `comet3d` did not allow specifying colors with colors names.
 * [#15393](http://bugzilla.scilab.org/show_bug.cgi?id=15393): In a new figure, `nicholschart` plotted nothing. The default frame color was a flashy cyan. The position of gain labels could be puzzling. It was not possible to specify colors by their names. Postprocessing the frames and the set of labels was not easy.
 * [#15425](http://bugzilla.scilab.org/show_bug.cgi?id=15425): The Kronecker product `a.*.b` failed when `a` or `b` or both are hypermatrices, with one or both being polynomials or rationals.
-<<<<<<< HEAD
 * [#15431](http://bugzilla.scilab.org/show_bug.cgi?id=15431): The empty matrix `[]` and its non-convertibility were poorly documented.
 * [#15451](http://bugzilla.scilab.org/show_bug.cgi?id=15451): The code was not adapted to use `lucene 4.10` in Debian.
 * [#15514](http://bugzilla.scilab.org/show_bug.cgi?id=15514): The `set()` documentation page needed to be overhauled.
 * [#15522](http://bugzilla.scilab.org/show_bug.cgi?id=15522): `unique()` was not able to consider all Nan values as the same value. A `uniqueNan` option now allows it.
 * [#15523](http://bugzilla.scilab.org/show_bug.cgi?id=15523): `%ODEOPTIONS(1)=2` didn't work with solvers 'rk' and 'rkf'
-=======
-* [#15523](http://bugzilla.scilab.org/show_bug.cgi?id=15523): `%ODEOPTIONS(1)=2` didn't work with solvers 'rk' and 'rkf' 
 * [#15534](http://bugzilla.scilab.org/show_bug.cgi?id=15534): Booleans and encoded integers could not be concatenated together.
->>>>>>> 7115870ad73... * Bug 15534 fixed: [%t int8(-5)] was refused
 * [#15577](http://bugzilla.scilab.org/show_bug.cgi?id=15577): `edit` did not accept a line number as text, as with `edit linspace 21`.
-<<<<<<< HEAD
 * [#15580](http://bugzilla.scilab.org/show_bug.cgi?id=15580): `det(sparse([],[]))` yielded an error.
 * [#15981](http://bugzilla.scilab.org/show_bug.cgi?id=15981): `wavread()` kept the wav file open and locked when returning on errors. It weakly managed the input file name. It claimed for invalid data formats instead of unsupported ones, with poor information about the current format vs the supported ones. Several error messages refered to a wrong function.
 * [#15595](http://bugzilla.scilab.org/show_bug.cgi?id=15595): `unique()` was not able to return distinct values in their original order, without sorting them. A `keepOrder` option now allows it.
@@ -284,6 +279,8 @@ Bug Fixes
 * [#15983](http://bugzilla.scilab.org/show_bug.cgi?id=15983): `group` regressed in 5.5.2 due to a too intrusive fix.
 * [#15984](http://bugzilla.scilab.org/show_bug.cgi?id=15984): display scale was wrong with Retina dispplays on OSX..
 * [#15995](http://bugzilla.scilab.org/show_bug.cgi?id=15995): patch was missing in surface plot (regression)
+* [#15998](http://bugzilla.scilab.org/show_bug.cgi?id=15998): `mfile2sci()` yielded an unsuitable warning when converting `atan()`.
+* [#16000](http://bugzilla.scilab.org/show_bug.cgi?id=16000): `mfile2sci()` converted `acoth()` using `atanh()` and yielding a wrong warning message.
 * [#16003](http://bugzilla.scilab.org/show_bug.cgi?id=16003): Zoom with mouse scroll wheel was broken on simple surfaces.
 * [#16005](http://bugzilla.scilab.org/show_bug.cgi?id=16005): The `intdec` example was biased and not robust when changing sampling frequencies.
 * [#16007](http://bugzilla.scilab.org/show_bug.cgi?id=16007): Non-integer index in sparse makes Scilab crash.
@@ -359,5 +356,3 @@ Bug Fixes
 * [#16293](http://bugzilla.scilab.org/show_bug.cgi?id=16293): Some demos run in step-by-step console mode(4) did not focus user's attention to the console to proceed.
 * [#16299](http://bugzilla.scilab.org/show_bug.cgi?id=16299): After `graypolarplot`, `colorbar` displayed an empty ungraduated color bar.
 * [#16303](http://bugzilla.scilab.org/show_bug.cgi?id=16303): log10(x) had wrong dimensions when x is an hypermatrix.
-=======
-
index 2c85106..238ecbf 100644 (file)
  * 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:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="m2sci_acoth">
+<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" xmlns:scilab="http://www.scilab.org"
+          xml:id="m2sci_acoth">
     <refnamediv>
         <refname>acoth (Matlab function)</refname>
         <refpurpose>Inverse hyperbolic cotangent</refpurpose>
             </tr>
             <tr>
                 <td>
-                    <programlisting role="example"><![CDATA[
+                    <programlisting role="no-scilab-exec"><![CDATA[
 acoth(A)
 ]]></programlisting>
                 </td>
                 <td>
-                    <programlisting role="example"><![CDATA[
+                    <programlisting role="no-scilab-exec"><![CDATA[
 acoth(A)
 ]]></programlisting>
                 </td>
@@ -46,8 +49,8 @@ acoth(A)
     <refsection>
         <title>Particular cases</title>
         <para>
-            For <literal>x</literal> real in <literal>]-1,1[</literal>, <literal>imag(acoth(x))</literal>
-            is +?/2 in Matlab and -?/2 in Scilab.
+            For <literal>x</literal> real in <literal>[0,1[</literal>, <literal>imag(acoth(x))</literal>
+            is +π/2 in Matlab, and -π/2 in Scilab.
         </para>
     </refsection>
 </refentry>
index fd93182..d2a2255 100644 (file)
@@ -13,7 +13,9 @@
  * 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:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="m2sci_atan">
+<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" xmlns:scilab="http://www.scilab.org" xml:id="m2sci_atan">
     <refnamediv>
         <refname>atan (Matlab function)</refname>
         <refpurpose>Two-quadrant inverse tangent</refpurpose>
@@ -43,4 +45,20 @@ atan
             </tr>
         </informaltable>
     </refsection>
+    <refsection>
+        <title>Particular cases</title>
+          <para>
+            When the input <literal>x</literal> is imaginary and <literal>abs(x)>=1</literal>,
+            the real part of the result differs from Scilab vs Matlab or Octave:
+          </para>
+          <para>
+          <table border="0">
+            <tr><td></td>         <th>Scilab</th>    <th>Octave</th>    <th>Matlab</th>   </tr>
+            <tr><th>atan(-2i)</th><td>-π/2 - B.i</td><td>-π/2 - B.i</td><td>π/2 - B.i</td></tr>
+            <tr><th>atan(-i)</th> <td>Nan - Inf</td> <td>0 - Inf</td>   <td>0 - Inf</td>  </tr>
+            <tr><th>atan(i)</th>  <td>Nan + Inf</td> <td>0 + Inf</td>   <td>0 + Inf</td>  </tr>
+            <tr><th>atan(2i)</th> <td>π/2 + B.i</td> <td>π/2 + B.i</td><td>-π/2 + B.i</td></tr>
+          </table>
+        </para>
+    </refsection>
 </refentry>
index 9cfe1ef..8919fac 100644 (file)
@@ -1,6 +1,6 @@
 # Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 # Copyright (C) ???? - INRIA - Scilab
-# 
+#
 # This file is distributed under the same license as the Scilab package.
 
 # This Makefile is used to build sci_funname.sci files from PROTOx.g
@@ -8,19 +8,19 @@
 PROTO0 = sci_abs.sci sci_cos.sci sci_cosh.sci sci_erf.sci sci_erfc.sci\
         sci_erfcx.sci sci_gamma.sci sci_gammaln.sci sci_imag.sci sci_real.sci
 PROTO1 = sci_max.sci sci_min.sci
-PROTO2 = sci_cumprod.sci sci_cumsum.sci 
-PROTO3 = sci_eye.sci sci_false.sci sci_ones.sci sci_rand.sci sci_randn.sci sci_true.sci sci_zeros.sci 
+PROTO2 = sci_cumprod.sci sci_cumsum.sci
+PROTO3 = sci_eye.sci sci_false.sci sci_ones.sci sci_rand.sci sci_randn.sci sci_true.sci sci_zeros.sci
 PROTO4 = sci_acosh.sci sci_asinh.sci sci_conj.sci sci_cot.sci sci_coth.sci sci_double.sci sci_exp.sci sci_expm.sci sci_inv.sci sci_log.sci sci_log10.sci sci_sign.sci sci_sin.sci sci_sinh.sci sci_sqrt.sci sci_tan.sci sci_tanh.sci
-PROTO5 = sci_asin.sci sci_atan.sci
+PROTO5 = sci_asin.sci sci_atanh.sci sci_atan.sci sci_acoth.sci
 PROTO6 = sci_ceil.sci sci_fix.sci sci_floor.sci sci_round.sci
-PROTO7 = sci_tril.sci sci_triu.sci 
+PROTO7 = sci_tril.sci sci_triu.sci
 PROTO8 = sci_prod.sci sci_sum.sci
 PROTO9 = sci_int8.sci sci_int16.sci sci_int32.sci sci_uint8.sci sci_uint16.sci sci_uint32.sci
 PROTO10 = sci_lower.sci sci_upper.sci
 PROTO11 = sci_dos.sci sci_unix.sci
 PROTO12 = sci_who.sci sci_whos.sci
 PROTO13 = sci_all.sci sci_any.sci
-PROTO14 = sci_acos.sci 
+PROTO14 = sci_acos.sci
 PROTO15 = sci_nargin.sci sci_nargout.sci
 
 # Files generated from file : sci_PROTO0.g
@@ -116,6 +116,8 @@ sci_atan.sci: sci_PROTO5.g
        @./GEN $? atan atan > $@
 sci_atanh.sci: sci_PROTO5.g
        @./GEN $? atanh atanh > $@
+sci_acoth.sci: sci_PROTO5.g
+       @./GEN $? acoth acoth > $@
 
 # Files generated from file : sci_PROTO6.g
 sci_ceil.sci: sci_PROTO6.g
index c780e57..4d83814 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2002-2004 - INRIA - Vincent COUVERT 
-// 
+// Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2019 - 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.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_MFUN(tree)
-// Prototype for: atanh asin atan
+function tree = sci_MFUN(tree)
+// Prototype for: atanh asin atan acoth
 // M2SCI function
 // Conversion function for Matlab MFUN()
 // Input: tree = Matlab funcall tree
 // Output: tree = Scilab equivalent for tree
 
-A=getrhs(tree)
-A=convert2double(A)
-tree.rhs=Rhs_tlist(A)
+    A = getrhs(tree)
+    A = convert2double(A)
+    tree.rhs = Rhs_tlist(A)
 
-if tree.name=="atan" then
-  set_infos(msprintf(gettext("If %s is outside [-1,1]\n   real part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
-else
-  set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
-end
-
-tree.lhs(1).dims=A.dims
-tree.lhs(1).type=Type(Double,Unknown)
+    if tree.name=="atan" then
+        set_infos(msprintf(gettext("If %s is imaginary and its module is > 1\n      the real part of %s is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="acoth" then
+        set_infos(msprintf(gettext("If %s is in [0,1)\n  imag(%s) is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="asin" then
+        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    else
+               set_infos(msprintf(gettext("If %s < -1, complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+       end
+    tree.lhs(1).dims = A.dims
+    // Property unknown because result can be complex for real input
+    tree.lhs(1).type = Type(Double,Unknown)
 endfunction
index 6ce463b..c34382d 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2019 - 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.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function tree=sci_acoth(tree)
+function tree = sci_acoth(tree)
+    // File generated from sci_PROTO5.g: PLEASE DO NOT EDIT !
     // M2SCI function
     // Conversion function for Matlab acoth()
     // Input: tree = Matlab funcall tree
-    // Ouput: tree = Scilab equivalent for tree
-
-    X=getrhs(tree)
-    X=convert2double(X)
-
-    set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(X), ""), strcat(expression2code(tree), "")),2)
+    // Output: tree = Scilab equivalent for tree
 
-    tree.name="atanh"
-    Op=Operation("./",list(Cste(1),X),list())
-    tree.rhs=Rhs_tlist(Op)
+    A = getrhs(tree)
+    A = convert2double(A)
+    tree.rhs = Rhs_tlist(A)
 
-    tree.lhs(1).dims=X.dims
+    if tree.name=="atan" then
+        set_infos(msprintf(gettext("If %s is imaginary and its module is > 1\n      the real part of %s is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="acoth" then
+        set_infos(msprintf(gettext("If %s is in [0,1)\n  imag(%s) is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="asin" then
+        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    else
+               set_infos(msprintf(gettext("If %s < -1, complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+       end
+    tree.lhs(1).dims = A.dims
     // Property unknown because result can be complex for real input
-    tree.lhs(1).type=Type(X.vtype,Unknown)
+    tree.lhs(1).type = Type(Double,Unknown)
 endfunction
index 76eba92..92a2bec 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2019 - 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.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_asin(tree)
+function tree = sci_asin(tree)
     // File generated from sci_PROTO5.g: PLEASE DO NOT EDIT !
     // M2SCI function
     // Conversion function for Matlab asin()
     // Input: tree = Matlab funcall tree
     // Output: tree = Scilab equivalent for tree
 
-    A=getrhs(tree)
-    A=convert2double(A)
-    tree.rhs=Rhs_tlist(A)
+    A = getrhs(tree)
+    A = convert2double(A)
+    tree.rhs = Rhs_tlist(A)
 
     if tree.name=="atan" then
-        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   real part of output of %s will be the opposite of Matlab one."),strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+        set_infos(msprintf(gettext("If %s is imaginary and its module is > 1\n      the real part of %s is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="acoth" then
+        set_infos(msprintf(gettext("If %s is in [0,1)\n  imag(%s) is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="asin" then
+        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
     else
-        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."),strcat(expression2code(A), ""),strcat(expression2code(tree), "")),2)
-    end
-
-    tree.lhs(1).dims=A.dims
-    tree.lhs(1).type=Type(Double,Unknown)
+               set_infos(msprintf(gettext("If %s < -1, complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+       end
+    tree.lhs(1).dims = A.dims
+    // Property unknown because result can be complex for real input
+    tree.lhs(1).type = Type(Double,Unknown)
 endfunction
index 4af93e0..ec057f7 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2019 - 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.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_atan(tree)
+function tree = sci_atan(tree)
     // File generated from sci_PROTO5.g: PLEASE DO NOT EDIT !
     // M2SCI function
     // Conversion function for Matlab atan()
     // Input: tree = Matlab funcall tree
     // Output: tree = Scilab equivalent for tree
 
-    A=getrhs(tree)
-    A=convert2double(A)
-    tree.rhs=Rhs_tlist(A)
+    A = getrhs(tree)
+    A = convert2double(A)
+    tree.rhs = Rhs_tlist(A)
 
     if tree.name=="atan" then
-        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   real part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
-    else
+        set_infos(msprintf(gettext("If %s is imaginary and its module is > 1\n      the real part of %s is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="acoth" then
+        set_infos(msprintf(gettext("If %s is in [0,1)\n  imag(%s) is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="asin" then
         set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
-    end
-
-    tree.lhs(1).dims=A.dims
-    tree.lhs(1).type=Type(Double,Unknown)
+    else
+               set_infos(msprintf(gettext("If %s < -1, complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+       end
+    tree.lhs(1).dims = A.dims
+    // Property unknown because result can be complex for real input
+    tree.lhs(1).type = Type(Double,Unknown)
 endfunction
index 4cedcd6..c1fc550 100644 (file)
@@ -1,7 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2002-2004 - INRIA - Vincent COUVERT
-//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
+// Copyright (C) 2019 - 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.
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function [tree]=sci_atanh(tree)
+function tree = sci_atanh(tree)
+    // File generated from sci_PROTO5.g: PLEASE DO NOT EDIT !
     // M2SCI function
     // Conversion function for Matlab atanh()
     // Input: tree = Matlab funcall tree
     // Output: tree = Scilab equivalent for tree
 
-    A=getrhs(tree)
-    A=convert2double(A)
-    tree.rhs=Rhs_tlist(A)
-
-    set_infos(msprintf(gettext("If %s < -1, complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    A = getrhs(tree)
+    A = convert2double(A)
+    tree.rhs = Rhs_tlist(A)
 
-    tree.lhs(1).dims=A.dims
-    tree.lhs(1).type=Type(Double,Unknown)
+       if tree.name=="atan" then
+        set_infos(msprintf(gettext("If %s is imaginary and its module is > 1\n      the real part of %s is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="acoth" then
+        set_infos(msprintf(gettext("If %s is in [0,1)\n  imag(%s) is -π/2 in Scilab instead of +π/2 in Matlab."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    elseif tree.name=="asin" then
+        set_infos(msprintf(gettext("If %s is outside [-1,1]\n   complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+    else
+               set_infos(msprintf(gettext("If %s < -1, complex part of output of %s will be the opposite of Matlab one."), strcat(expression2code(A), ""), strcat(expression2code(tree), "")),2)
+       end
+    tree.lhs(1).dims = A.dims
+    // Property unknown because result can be complex for real input
+    tree.lhs(1).type = Type(Double,Unknown)
 endfunction
diff --git a/scilab/modules/m2sci/tests/nonreg_tests/bug_15998.tst b/scilab/modules/m2sci/tests/nonreg_tests/bug_15998.tst
new file mode 100644 (file)
index 0000000..ed55833
--- /dev/null
@@ -0,0 +1,30 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- ENGLISH IMPOSED -->
+// <-- NO CHECK REF -->
+// <-- Non-regression test for bug 15998 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15998
+//
+// <-- Short Description -->
+// mfile2sci() and translatepaths() yielded an inconvenient warning when
+// converting atan()
+
+File = TMPDIR + "/bug_15998_atan";
+mputl(["x = 4;" "y = atan(x);"], File + ".m");
+mfile2sci(File + ".m", TMPDIR)
+t = mgetl(File + ".sci");
+tref = ["x = 4;"
+        "// !! L.2: If x is imaginary and its module is > 1"
+        "// !!       the real part of atan(x) is -π/2 in Scilab instead of +π/2 in Matlab."
+        "y = atan(x);"
+        ];
+assert_checkequal(t($-3:$), tref);
+deletefile(File + [".m" ".sci"]);
diff --git a/scilab/modules/m2sci/tests/nonreg_tests/bug_16000.tst b/scilab/modules/m2sci/tests/nonreg_tests/bug_16000.tst
new file mode 100644 (file)
index 0000000..0051486
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - 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 16000 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16000
+//
+// <-- Short Description -->
+// mfile2sci() and translatepaths() converted acoth() using atanh() and yielding
+// a wrong warning message.
+
+File = TMPDIR + "/bug_16000_acoth";
+mputl(["x = 4;" "y = acoth(x);"], File + ".m");
+mfile2sci(File + ".m", TMPDIR)
+t = mgetl(File + ".sci");
+ref = ["// !! L.2: If x is in [0,1)"
+       "// !!   imag(acoth(x)) is -π/2 in Scilab instead of +π/2 in Matlab."
+       "y = acoth(x);"
+       ];
+assert_checkequal(t($-2:$), ref);
+deletefile(File+[".m" ".sci"]);
index 7a03e68..6687356 100644 (file)
@@ -23,126 +23,126 @@ if ~m2sciTestConversion("ACOTH") then bugmes();quit;end
   Syntax modification: Done
   Macro to tree conversion...
   Conversion of M-tree...
-  !! L.5: If [] is outside [-1,1]
-  !!    complex part of output of acoth([]) will be the opposite of Matlab one.
-  !! L.7: If mtlb_double(m2sciUnknownType([])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([])) will be the opposite of Matlab one.
-  !! L.9: If m2sciUnknownDims([]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([])) will be the opposite of Matlab one.
-  !! L.11: If 1 is outside [-1,1]
-  !!    complex part of output of acoth(1) will be the opposite of Matlab one.
-  !! L.13: If [1,2,3] is outside [-1,1]
-  !!    complex part of output of acoth([1,2,3]) will be the opposite of Matlab one.
-  !! L.15: If [1;2;3] is outside [-1,1]
-  !!    complex part of output of acoth([1;2;3]) will be the opposite of Matlab one.
-  !! L.17: If [1,2,3;4,5,6] is outside [-1,1]
-  !!    complex part of output of acoth([1,2,3;4,5,6]) will be the opposite of Matlab one.
-  !! L.19: If mtlb_double(m2sciUnknownType(1)) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType(1)) will be the opposite of Matlab one.
-  !! L.21: If mtlb_double(m2sciUnknownType([1,2,3])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([1,2,3])) will be the opposite of Matlab one.
-  !! L.23: If mtlb_double(m2sciUnknownType([1;2;3])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([1;2;3])) will be the opposite of Matlab one.
-  !! L.25: If mtlb_double(m2sciUnknownType([1,2,3;4,5,6])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([1,2,3;4,5,6])) will be the opposite of Matlab one.
-  !! L.27: If m2sciUnknownDims(1) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims(1)) will be the opposite of Matlab one.
-  !! L.29: If m2sciUnknownDims([1,2,3]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([1,2,3])) will be the opposite of Matlab one.
-  !! L.31: If m2sciUnknownDims([1;2;3]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([1;2;3])) will be the opposite of Matlab one.
-  !! L.33: If m2sciUnknownDims([1,2,3;4,5,6]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([1,2,3;4,5,6])) will be the opposite of Matlab one.
+  !! L.5: If [] is in [0,1)
+  !!   imag(acoth([])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.7: If mtlb_double(m2sciUnknownType([])) is in [0,1)
+  !!   imag(acoth(mtlb_double(m2sciUnknownType([])))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.9: If m2sciUnknownDims([]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.11: If 1 is in [0,1)
+  !!   imag(acoth(1)) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.13: If [1,2,3] is in [0,1)
+  !!   imag(acoth([1,2,3])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.15: If [1;2;3] is in [0,1)
+  !!   imag(acoth([1;2;3])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.17: If [1,2,3;4,5,6] is in [0,1)
+  !!   imag(acoth([1,2,3;4,5,6])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.19: If mtlb_double(m2sciUnknownType(1)) is in [0,1)
+  !!   imag(acoth(mtlb_double(m2sciUnknownType(1)))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.21: If mtlb_double(m2sciUnknownType([1,2,3])) is in [0,1)
+  !!   imag(acoth(mtlb_double(m2sciUnknownType([1,2,3])))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.23: If mtlb_double(m2sciUnknownType([1;2;3])) is in [0,1)
+  !!   imag(acoth(mtlb_double(m2sciUnknownType([1;2;3])))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.25: If mtlb_double(m2sciUnknownType([1,2,3;4,5,6])) is in [0,1)
+  !!   imag(acoth(mtlb_double(m2sciUnknownType([1,2,3;4,5,6])))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.27: If m2sciUnknownDims(1) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims(1))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.29: If m2sciUnknownDims([1,2,3]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([1,2,3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.31: If m2sciUnknownDims([1;2;3]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([1;2;3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.33: If m2sciUnknownDims([1,2,3;4,5,6]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([1,2,3;4,5,6]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.35: If %%i is outside [-1,1]
-  !!    complex part of output of acoth(%%i) will be the opposite of Matlab one.
+  !! L.35: If %%i is in [0,1)
+  !!   imag(acoth(%%i)) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.37: If [%%i,2*%%i,3*%%i] is outside [-1,1]
-  !!    complex part of output of acoth([%%i,2*%%i,3*%%i]) will be the opposite of Matlab one.
+  !! L.37: If [%%i,2*%%i,3*%%i] is in [0,1)
+  !!   imag(acoth([%%i,2*%%i,3*%%i])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.39: If [%%i;2*%%i;3*%%i] is outside [-1,1]
-  !!    complex part of output of acoth([%%i;2*%%i;3*%%i]) will be the opposite of Matlab one.
+  !! L.39: If [%%i;2*%%i;3*%%i] is in [0,1)
+  !!   imag(acoth([%%i;2*%%i;3*%%i])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.41: If [%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i] is outside [-1,1]
-  !!    complex part of output of acoth([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) will be the opposite of Matlab one.
+  !! L.41: If [%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i] is in [0,1)
+  !!   imag(acoth([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.43: If mtlb_double(m2sciUnknownType(%%i)) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType(%%i)) will be the opposite of Matlab one.
+  !! L.43: If mtlb_double(m2sciUnknownType(%%i)) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType(%%i))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.45: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([%%i,2*%%i,3*%%i])) will be the opposite of Matlab one.
+  !! L.45: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType([%%i,2*%%i,3*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.47: If mtlb_double(m2sciUnknownType([%%i;2*%%i;3*%%i])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([%%i;2*%%i;3*%%i])) will be the opposite of Matlab one.
+  !! L.47: If mtlb_double(m2sciUnknownType([%%i;2*%%i;3*%%i])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType([%%i;2*%%i;3*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.49: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) will be the opposite of Matlab one.
+  !! L.49: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.51: If m2sciUnknownDims(%%i) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims(%%i)) will be the opposite of Matlab one.
+  !! L.51: If m2sciUnknownDims(%%i) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims(%%i))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.53: If m2sciUnknownDims([%%i,2*%%i,3*%%i]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([%%i,2*%%i,3*%%i])) will be the opposite of Matlab one.
+  !! L.53: If m2sciUnknownDims([%%i,2*%%i,3*%%i]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([%%i,2*%%i,3*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.55: If m2sciUnknownDims([%%i;2*%%i;3*%%i]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([%%i;2*%%i;3*%%i])) will be the opposite of Matlab one.
+  !! L.55: If m2sciUnknownDims([%%i;2*%%i;3*%%i]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([%%i;2*%%i;3*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.57: If m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) will be the opposite of Matlab one.
-  !! L.59: If asciimat("s") is outside [-1,1]
-  !!    complex part of output of acoth("s") will be the opposite of Matlab one.
-  !! L.61: If asciimat("str1") is outside [-1,1]
-  !!    complex part of output of acoth("str1") will be the opposite of Matlab one.
-  !! L.63: If asciimat("str1"+"str2"+"str3") is outside [-1,1]
-  !!    complex part of output of acoth("str1"+"str2"+"str3") will be the opposite of Matlab one.
-  !! L.65: If asciimat(["str1";"str2";"str3"]) is outside [-1,1]
-  !!    complex part of output of acoth(["str1";"str2";"str3"]) will be the opposite of Matlab one.
-  !! L.67: If asciimat(["str1"+"str2"+"str3";"str4"+"str5"+"str6"]) is outside [-1,1]
-  !!    complex part of output of acoth(["str1"+"str2"+"str3";"str4"+"str5"+"str6"]) will be the opposite of Matlab one.
-  !! L.69: If mtlb_double(m2sciUnknownType("s")) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType("s")) will be the opposite of Matlab one.
-  !! L.71: If mtlb_double(m2sciUnknownType("str1")) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType("str1")) will be the opposite of Matlab one.
-  !! L.73: If mtlb_double(m2sciUnknownType("str1"+"str2"+"str3")) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType("str1"+"str2"+"str3")) will be the opposite of Matlab one.
-  !! L.75: If mtlb_double(m2sciUnknownType(["str1";"str2";"str3"])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType(["str1";"str2";"str3"])) will be the opposite of Matlab one.
-  !! L.77: If mtlb_double(m2sciUnknownType(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) will be the opposite of Matlab one.
-  !! L.79: If asciimat(m2sciUnknownDims("s")) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims("s")) will be the opposite of Matlab one.
-  !! L.81: If asciimat(m2sciUnknownDims("str1")) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims("str1")) will be the opposite of Matlab one.
-  !! L.83: If asciimat(m2sciUnknownDims("str1"+"str2"+"str3")) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims("str1"+"str2"+"str3")) will be the opposite of Matlab one.
-  !! L.85: If asciimat(m2sciUnknownDims(["str1";"str2";"str3"])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims(["str1";"str2";"str3"])) will be the opposite of Matlab one.
-  !! L.87: If asciimat(m2sciUnknownDims(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) will be the opposite of Matlab one.
-  !! L.89: If bool2s(1==1) is outside [-1,1]
-  !!    complex part of output of acoth(1==1) will be the opposite of Matlab one.
-  !! L.91: If bool2s([1,2,3]==[1,0,3]) is outside [-1,1]
-  !!    complex part of output of acoth([1,2,3]==[1,0,3]) will be the opposite of Matlab one.
-  !! L.93: If bool2s([1;2;3]==[1;0;3]) is outside [-1,1]
-  !!    complex part of output of acoth([1;2;3]==[1;0;3]) will be the opposite of Matlab one.
-  !! L.95: If bool2s([1,2,3;4,5,6]==[1,0,3;4,5,0]) is outside [-1,1]
-  !!    complex part of output of acoth([1,2,3;4,5,6]==[1,0,3;4,5,0]) will be the opposite of Matlab one.
-  !! L.97: If mtlb_double(m2sciUnknownType(1==1)) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType(1==1)) will be the opposite of Matlab one.
-  !! L.99: If mtlb_double(m2sciUnknownType([1,2,3]==[1,0,3])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([1,2,3]==[1,0,3])) will be the opposite of Matlab one.
-  !! L.101: If mtlb_double(m2sciUnknownType([1;2;3]==[1;0;3])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([1;2;3]==[1;0;3])) will be the opposite of Matlab one.
-  !! L.103: If mtlb_double(m2sciUnknownType([1,2,3;4,5,6]==[1,0,3;4,5,0])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownType([1,2,3;4,5,6]==[1,0,3;4,5,0])) will be the opposite of Matlab one.
-  !! L.105: If bool2s(m2sciUnknownDims(1==1)) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims(1==1)) will be the opposite of Matlab one.
-  !! L.107: If bool2s(m2sciUnknownDims([1,2,3]==[1,0,3])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([1,2,3]==[1,0,3])) will be the opposite of Matlab one.
-  !! L.109: If bool2s(m2sciUnknownDims([1;2;3]==[1;0;3])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([1;2;3]==[1;0;3])) will be the opposite of Matlab one.
-  !! L.111: If bool2s(m2sciUnknownDims([1,2,3;4,5,6]==[1,0,3;4,5,0])) is outside [-1,1]
-  !!    complex part of output of acoth(m2sciUnknownDims([1,2,3;4,5,6]==[1,0,3;4,5,0])) will be the opposite of Matlab one.
+  !! L.57: If m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.59: If asciimat("s") is in [0,1)
+  !!   imag(acoth("s")) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.61: If asciimat("str1") is in [0,1)
+  !!   imag(acoth("str1")) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.63: If asciimat("str1"+"str2"+"str3") is in [0,1)
+  !!   imag(acoth("str1"+"str2"+"str3")) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.65: If asciimat(["str1";"str2";"str3"]) is in [0,1)
+  !!   imag(acoth(["str1";"str2";"str3"])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.67: If asciimat(["str1"+"str2"+"str3";"str4"+"str5"+"str6"]) is in [0,1)
+  !!   imag(acoth(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.69: If mtlb_double(m2sciUnknownType("s")) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType("s"))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.71: If mtlb_double(m2sciUnknownType("str1")) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType("str1"))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.73: If mtlb_double(m2sciUnknownType("str1"+"str2"+"str3")) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType("str1"+"str2"+"str3"))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.75: If mtlb_double(m2sciUnknownType(["str1";"str2";"str3"])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType(["str1";"str2";"str3"]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.77: If mtlb_double(m2sciUnknownType(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType(["str1"+"str2"+"str3";"str4"+"str5"+"str6"]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.79: If asciimat(m2sciUnknownDims("s")) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims("s"))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.81: If asciimat(m2sciUnknownDims("str1")) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims("str1"))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.83: If asciimat(m2sciUnknownDims("str1"+"str2"+"str3")) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims("str1"+"str2"+"str3"))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.85: If asciimat(m2sciUnknownDims(["str1";"str2";"str3"])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims(["str1";"str2";"str3"]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.87: If asciimat(m2sciUnknownDims(["str1"+"str2"+"str3";"str4"+"str5"+"str6"])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims(["str1"+"str2"+"str3";"str4"+"str5"+"str6"]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.89: If bool2s(1==1) is in [0,1)
+  !!   imag(acoth(1==1)) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.91: If bool2s([1,2,3]==[1,0,3]) is in [0,1)
+  !!   imag(acoth([1,2,3]==[1,0,3])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.93: If bool2s([1;2;3]==[1;0;3]) is in [0,1)
+  !!   imag(acoth([1;2;3]==[1;0;3])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.95: If bool2s([1,2,3;4,5,6]==[1,0,3;4,5,0]) is in [0,1)
+  !!   imag(acoth([1,2,3;4,5,6]==[1,0,3;4,5,0])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.97: If mtlb_double(m2sciUnknownType(1==1)) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType(1==1))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.99: If mtlb_double(m2sciUnknownType([1,2,3]==[1,0,3])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType([1,2,3]==[1,0,3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.101: If mtlb_double(m2sciUnknownType([1;2;3]==[1;0;3])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType([1;2;3]==[1;0;3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.103: If mtlb_double(m2sciUnknownType([1,2,3;4,5,6]==[1,0,3;4,5,0])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownType([1,2,3;4,5,6]==[1,0,3;4,5,0]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.105: If bool2s(m2sciUnknownDims(1==1)) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims(1==1))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.107: If bool2s(m2sciUnknownDims([1,2,3]==[1,0,3])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([1,2,3]==[1,0,3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.109: If bool2s(m2sciUnknownDims([1;2;3]==[1;0;3])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([1;2;3]==[1;0;3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.111: If bool2s(m2sciUnknownDims([1,2,3;4,5,6]==[1,0,3;4,5,0])) is in [0,1)
+  !!   imag(acoth(m2sciUnknownDims([1,2,3;4,5,6]==[1,0,3;4,5,0]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Conversion of M-tree: Done
 TESTING M2SCI: creating varslist file...
   Macro to tree conversion: Done
index 465a873..056f126 100644 (file)
@@ -23,72 +23,72 @@ if ~m2sciTestConversion("ATAN") then bugmes();quit;end
   Syntax modification: Done
   Macro to tree conversion...
   Conversion of M-tree...
-  !! L.5: If [] is outside [-1,1]
-  !!    real part of output of atan([]) will be the opposite of Matlab one.
-  !! L.7: If mtlb_double(m2sciUnknownType([])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([]))) will be the opposite of Matlab one.
-  !! L.9: If m2sciUnknownDims([]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([])) will be the opposite of Matlab one.
-  !! L.11: If 1 is outside [-1,1]
-  !!    real part of output of atan(1) will be the opposite of Matlab one.
-  !! L.13: If [1,2,3] is outside [-1,1]
-  !!    real part of output of atan([1,2,3]) will be the opposite of Matlab one.
-  !! L.15: If [1;2;3] is outside [-1,1]
-  !!    real part of output of atan([1;2;3]) will be the opposite of Matlab one.
-  !! L.17: If [1,2,3;4,5,6] is outside [-1,1]
-  !!    real part of output of atan([1,2,3;4,5,6]) will be the opposite of Matlab one.
-  !! L.19: If mtlb_double(m2sciUnknownType(1)) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType(1))) will be the opposite of Matlab one.
-  !! L.21: If mtlb_double(m2sciUnknownType([1,2,3])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([1,2,3]))) will be the opposite of Matlab one.
-  !! L.23: If mtlb_double(m2sciUnknownType([1;2;3])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([1;2;3]))) will be the opposite of Matlab one.
-  !! L.25: If mtlb_double(m2sciUnknownType([1,2,3;4,5,6])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([1,2,3;4,5,6]))) will be the opposite of Matlab one.
-  !! L.27: If m2sciUnknownDims(1) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims(1)) will be the opposite of Matlab one.
-  !! L.29: If m2sciUnknownDims([1,2,3]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([1,2,3])) will be the opposite of Matlab one.
-  !! L.31: If m2sciUnknownDims([1;2;3]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([1;2;3])) will be the opposite of Matlab one.
-  !! L.33: If m2sciUnknownDims([1,2,3;4,5,6]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([1,2,3;4,5,6])) will be the opposite of Matlab one.
+  !! L.5: If [] is imaginary and its module is > 1
+  !!       the real part of atan([]) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.7: If mtlb_double(m2sciUnknownType([])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.9: If m2sciUnknownDims([]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.11: If 1 is imaginary and its module is > 1
+  !!       the real part of atan(1) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.13: If [1,2,3] is imaginary and its module is > 1
+  !!       the real part of atan([1,2,3]) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.15: If [1;2;3] is imaginary and its module is > 1
+  !!       the real part of atan([1;2;3]) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.17: If [1,2,3;4,5,6] is imaginary and its module is > 1
+  !!       the real part of atan([1,2,3;4,5,6]) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.19: If mtlb_double(m2sciUnknownType(1)) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType(1))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.21: If mtlb_double(m2sciUnknownType([1,2,3])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([1,2,3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.23: If mtlb_double(m2sciUnknownType([1;2;3])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([1;2;3]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.25: If mtlb_double(m2sciUnknownType([1,2,3;4,5,6])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([1,2,3;4,5,6]))) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.27: If m2sciUnknownDims(1) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims(1)) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.29: If m2sciUnknownDims([1,2,3]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([1,2,3])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.31: If m2sciUnknownDims([1;2;3]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([1;2;3])) is -π/2 in Scilab instead of +π/2 in Matlab.
+  !! L.33: If m2sciUnknownDims([1,2,3;4,5,6]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([1,2,3;4,5,6])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.35: If %%i is outside [-1,1]
-  !!    real part of output of atan(%%i) will be the opposite of Matlab one.
+  !! L.35: If %%i is imaginary and its module is > 1
+  !!       the real part of atan(%%i) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.37: If [%%i,2*%%i,3*%%i] is outside [-1,1]
-  !!    real part of output of atan([%%i,2*%%i,3*%%i]) will be the opposite of Matlab one.
+  !! L.37: If [%%i,2*%%i,3*%%i] is imaginary and its module is > 1
+  !!       the real part of atan([%%i,2*%%i,3*%%i]) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.39: If [%%i;2*%%i;3*%%i] is outside [-1,1]
-  !!    real part of output of atan([%%i;2*%%i;3*%%i]) will be the opposite of Matlab one.
+  !! L.39: If [%%i;2*%%i;3*%%i] is imaginary and its module is > 1
+  !!       the real part of atan([%%i;2*%%i;3*%%i]) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.41: If [%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i] is outside [-1,1]
-  !!    real part of output of atan([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) will be the opposite of Matlab one.
+  !! L.41: If [%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i] is imaginary and its module is > 1
+  !!       the real part of atan([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.43: If mtlb_double(m2sciUnknownType(%%i)) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType(%%i))) will be the opposite of Matlab one.
+  !! L.43: If mtlb_double(m2sciUnknownType(%%i)) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType(%%i))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.45: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i]))) will be the opposite of Matlab one.
+  !! L.45: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.47: If mtlb_double(m2sciUnknownType([%%i;2*%%i;3*%%i])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([%%i;2*%%i;3*%%i]))) will be the opposite of Matlab one.
+  !! L.47: If mtlb_double(m2sciUnknownType([%%i;2*%%i;3*%%i])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([%%i;2*%%i;3*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.49: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) is outside [-1,1]
-  !!    real part of output of atan(mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]))) will be the opposite of Matlab one.
+  !! L.49: If mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) is imaginary and its module is > 1
+  !!       the real part of atan(mtlb_double(m2sciUnknownType([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]))) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.51: If m2sciUnknownDims(%%i) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims(%%i)) will be the opposite of Matlab one.
+  !! L.51: If m2sciUnknownDims(%%i) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims(%%i)) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.53: If m2sciUnknownDims([%%i,2*%%i,3*%%i]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([%%i,2*%%i,3*%%i])) will be the opposite of Matlab one.
+  !! L.53: If m2sciUnknownDims([%%i,2*%%i,3*%%i]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([%%i,2*%%i,3*%%i])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.55: If m2sciUnknownDims([%%i;2*%%i;3*%%i]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([%%i;2*%%i;3*%%i])) will be the opposite of Matlab one.
+  !! L.55: If m2sciUnknownDims([%%i;2*%%i;3*%%i]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([%%i;2*%%i;3*%%i])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Variable i supposed to be the Imaginary unit.
-  !! L.57: If m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) is outside [-1,1]
-  !!    real part of output of atan(m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) will be the opposite of Matlab one.
+  !! L.57: If m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i]) is imaginary and its module is > 1
+  !!       the real part of atan(m2sciUnknownDims([%%i,2*%%i,3*%%i;4*%%i,5*%%i,6*%%i])) is -π/2 in Scilab instead of +π/2 in Matlab.
   Conversion of M-tree: Done
 TESTING M2SCI: creating varslist file...
   Macro to tree conversion: Done