Re: [Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

2019-11-26 Thread Chin Luh Tan
Hi Samuel,



"But then, even if such a global default value exists, assigned to and 
reachable from what, since ~ can't be a variable name? 

Think we need some x-matlaber to confirm which case.

Right, but case #2 looks quite improbable."



--> i keep mixing up with built-in functions for this case. With user defined 
function, you're totally right.





Antoine,



"Or when you have to write a function following a specific prototype ( graphic 
events, optim, ode, ...)"



--> Right, think this is also the reason why the matlab mlint according to the 
forum suggesting the user to replace the tilde with the unused variable. 





Federico,



"This is only speculation: Could the tilde be used in some cases where some 
arguments that are not the last ones are optional, and the function definition 
includes some way to check if the corresponding argument has or has nor been 
provided?
I've noticed in some cases Scilab allows just to omit the argument keeping the 
commas."


I can't be sure on the first one, whether the argument is really used in the 
user-defined function, but for the second, i assume keep the commas means sth 
like my_fun(a,'','',b), this actually still pass the empty string to the 
function, whether it has been used as empty string, or it is used to indicated 
the use of default value, depending on the function definition.    



rgds,
CL___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

2019-11-26 Thread Federico Miyara


This is only speculation: Could the tilde be used in some cases where 
some arguments that are not the last ones are optional, and the function 
definition includes some way to check if the corresponding argument has 
or has nor been provided?


I've noticed in some cases Scilab allows just to omit the argument 
keeping the commas.


Regards,

Federico Miyara

On 26/11/2019 12:15, Chin Luh Tan wrote:

Hi Samuel,

In fact I've not been using matlab for more than 10 years, so I try to 
understand this as well.


The input tilde is still abit confusing for me as well, I am trying to 
understand its' usage as this page: 
https://octave.org/doc/v4.4.1/Ignoring-Arguments.html


function val = pick2nd (~, arg2)
  val = arg2;
endfunction

I can't see the reason why the input need to ignored in this case, is 
it defined but not being user due to bad user overlooked it? or is it 
neglected and the default value would be used?


Then I find this : 
https://stackoverflow.com/questions/25204074/correct-use-of-tilde-operator-for-input-arguments


*/"The tilde is only for function declaration. Matlab's mlint 
recommends to replace unused arguments by ~. The result is a function 
declared like this function output = MyFunction(a, b, ~, c). This is a 
very bad practice. /**/

/*
*/
/*
*/Since you have a function where the parameters are optional, you 
must call the function with empty arguments 
output=MyFunction(str1,str2,[],[],...,true)."/*


It sound to me that the input tilde is suggested by the matlab mlint 
to improve the code so that the unused variable need not to pass into 
the function, and to improve memory management?


So there are 2 possibilities for the input tilde :

1. used to replace unused variable in the input which defined by user, 
but not being used. So the mlint recomment to replace with tilde, it 
could be be remove possibly due to the project has been calling the 
functions for many time, and changing the 4th to 3rd argument might 
need to change a lot of codes. In this case, the %unused would be good.


2. Tilde used to tell the function to use default value, then 
replacing it with % unused might cause error.


Think we need some x-matlaber to confirm which case.

Thanks again.

rgds,
CL



 On Tue, 26 Nov 2019 20:36:01 +0800 *Samuel Gougeon 
mailto:sgoug...@free.fr>>* wrote 


Hello Chin Luh,

Thanks a lot for your input.

Both cases -- input and output will have to be converted --, since
the converter is also made to convert (sets of) functions
definitions, not only scripts.

About the input case: Steven's answer is still not really clear to
me. Doing some tests on Octave, we must anyway provide some input
at calling time when  ~ is used as default input in the
definition. AFAIU, this ~ could just be to make sure that no
variable name used inside the function matches the name of the
input argument in the function definition, since "~" alone can't
be actually used as variable's name. In this case, for Scilab, any
input ~ could be replaced with an improbable variable name like
"%unused" or "%kwzxq", and that should do it.

Please, correct me if someone understands something else.

Best regards
Samuel

Le 26/11/2019 à 03:33, Chin Luh Tan a écrit :


___
users mailing list
users@lists.scilab.org 
http://lists.scilab.org/mailman/listinfo/users

Hi Samuel,

I think your assumption likely correct on the input and the
output using ~


https://www.mathworks.com/matlabcentral/answers/288016-tilde-doesn-t-work-for-ignoring-my-inputs

"
You *can*use tilde to ignore input arguments when you
*define*the function.
You *cannot*use tilde to ignore input arguments when you
*call*the function.
You *cannot*use tilde to ignore output arguments when you
*define*the function.
You *can*use tilde to ignore output arguments when you
*call*the function.
If you want to be able to specify only the third argument,
there must be some way for your function to disambiguate the
one-input call from a call that specifies only the third
input. Usually in MathWorks function this is done by
specifying [] for the arguments for which the user doesn't
want to specify. In that case the code would use the default
value if either narginis too small or if narginis large enough
and the specified input argument isempty.
"
From what I could think off, mat2sci conversion to replace ~
at the output arguments should always be safe. As for the
input, since the tilde could not be used as input when calling
function, I think there should not be any cases that need to
be implemented in conversion?
Thanks.
Regards,
CL


 On Tue, 26 

Re: [Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

2019-11-26 Thread Antoine ELIAS

Hello,

Or when you have to write a function following a specific prototype ( 
graphic events, optim, ode, ...)


If I would write a function that call another, I have to specify a 
prototype to allow user to call my function.
But in some case, the final user does not need all parameters so he can 
replace unused inputs by ~.

I think that only syntactic sugar.

example:
function for_each(iterable, fn)
    for i=1:size(iterable, "*")
        fn(iterable(i), i, iterable); //item, index, array
    end
endfunction

Users can define fn like this if tthey only need item and don't want to 
use index and whole array

function my_func(a, ~, ~)
    //blabla
end

I don't say that's essential :p
That's my understanding
Antoine
Le 26/11/2019 à 16:15, Chin Luh Tan a écrit :

Hi Samuel,

In fact I've not been using matlab for more than 10 years, so I try to 
understand this as well.


The input tilde is still abit confusing for me as well, I am trying to 
understand its' usage as this page: 
https://octave.org/doc/v4.4.1/Ignoring-Arguments.html


function val = pick2nd (~, arg2)
  val = arg2;
endfunction

I can't see the reason why the input need to ignored in this case, is 
it defined but not being user due to bad user overlooked it? or is it 
neglected and the default value would be used?


Then I find this : 
https://stackoverflow.com/questions/25204074/correct-use-of-tilde-operator-for-input-arguments


*/"The tilde is only for function declaration. Matlab's mlint 
recommends to replace unused arguments by ~. The result is a function 
declared like this function output = MyFunction(a, b, ~, c). This is a 
very bad practice. /**/

/*
*/
/*
*/Since you have a function where the parameters are optional, you 
must call the function with empty arguments 
output=MyFunction(str1,str2,[],[],...,true)."/*


It sound to me that the input tilde is suggested by the matlab mlint 
to improve the code so that the unused variable need not to pass into 
the function, and to improve memory management?


So there are 2 possibilities for the input tilde :

1. used to replace unused variable in the input which defined by user, 
but not being used. So the mlint recomment to replace with tilde, it 
could be be remove possibly due to the project has been calling the 
functions for many time, and changing the 4th to 3rd argument might 
need to change a lot of codes. In this case, the %unused would be good.


2. Tilde used to tell the function to use default value, then 
replacing it with % unused might cause error.


Think we need some x-matlaber to confirm which case.

Thanks again.

rgds,
CL



 On Tue, 26 Nov 2019 20:36:01 +0800 *Samuel Gougeon 
mailto:sgoug...@free.fr>>* wrote 


Hello Chin Luh,

Thanks a lot for your input.

Both cases -- input and output will have to be converted --, since
the converter is also made to convert (sets of) functions
definitions, not only scripts.

About the input case: Steven's answer is still not really clear to
me. Doing some tests on Octave, we must anyway provide some input
at calling time when  ~ is used as default input in the
definition. AFAIU, this ~ could just be to make sure that no
variable name used inside the function matches the name of the
input argument in the function definition, since "~" alone can't
be actually used as variable's name. In this case, for Scilab, any
input ~ could be replaced with an improbable variable name like
"%unused" or "%kwzxq", and that should do it.

Please, correct me if someone understands something else.

Best regards
Samuel

Le 26/11/2019 à 03:33, Chin Luh Tan a écrit :


___
users mailing list
users@lists.scilab.org 
http://lists.scilab.org/mailman/listinfo/users

Hi Samuel,

I think your assumption likely correct on the input and the
output using ~


https://www.mathworks.com/matlabcentral/answers/288016-tilde-doesn-t-work-for-ignoring-my-inputs

"
You *can*use tilde to ignore input arguments when you
*define*the function.
You *cannot*use tilde to ignore input arguments when you
*call*the function.
You *cannot*use tilde to ignore output arguments when you
*define*the function.
You *can*use tilde to ignore output arguments when you
*call*the function.
If you want to be able to specify only the third argument,
there must be some way for your function to disambiguate the
one-input call from a call that specifies only the third
input. Usually in MathWorks function this is done by
specifying [] for the arguments for which the user doesn't
want to specify. In that case the code would use the default
value if either narginis too small or if narginis large enough
and the specified input argument isempty.
"
From wha

Re: [Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

2019-11-26 Thread Samuel Gougeon

Le 26/11/2019 à 16:15, Chin Luh Tan a écrit :
2. Tilde used to tell the function to use default value, then 
replacing it with % unused might cause error.



But then, even if such a global default value exists, assigned to and 
reachable from what, since ~ can't be a variable name?




Think we need some x-matlaber to confirm which case.



Right, but case #2 looks quite improbable.

Regards
Samuel


___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

2019-11-26 Thread Chin Luh Tan
Hi Samuel, 



In fact I've not been using matlab for more than 10 years, so I try to 
understand this as well. 



The input tilde is still abit confusing for me as well, I am trying to 
understand its' usage as this page: 
https://octave.org/doc/v4.4.1/Ignoring-Arguments.html



function val = pick2nd (~, arg2) 

  val = arg2;

endfunction



I can't see the reason why the input need to ignored in this case, is it 
defined but not being user due to bad user overlooked it? or is it neglected 
and the default value would be used?



Then I find this : 
https://stackoverflow.com/questions/25204074/correct-use-of-tilde-operator-for-input-arguments



"The tilde is only for function declaration. Matlab's mlint recommends to 
replace unused arguments by ~. The result is a function declared like this 
function output = MyFunction(a, b, ~, c). This is a very bad practice. 



Since you have a function where the parameters are optional, you must call the 
function with empty arguments output=MyFunction(str1,str2,[],[],...,true)."


It sound to me that the input tilde is suggested by the matlab  mlint to 
improve the code so that the unused variable need not to pass into the 
function, and to improve memory management? 

So there are 2 possibilities for the input tilde :

1. used to replace unused variable in the input which defined by user, but not 
being used. So the mlint recomment to replace with tilde, it could be be remove 
possibly due to the project has been calling the functions for many time, and 
changing the 4th to 3rd argument might need to change a lot of codes. In this 
case, the %unused would be good. 

2. Tilde used to tell the function to use default value, then replacing it with 
% unused might cause error. 

Think we need some x-matlaber to confirm which case. 

Thanks again.

rgds,
CL 



 On Tue, 26 Nov 2019 20:36:01 +0800 Samuel Gougeon 
 wrote 


Hello Chin Luh,



Thanks a lot for your input.



Both cases -- input and output will
  have to be converted --, since the converter is also made to
  convert (sets of) functions definitions, not only scripts.



About the input case: Steven's answer
  is still not really clear to me. Doing some tests on Octave, we
  must anyway provide some input at calling time when  ~ is used as
  default input in the definition. AFAIU, this ~ could just be to
  make sure that no variable name used inside the function matches
  the name of the input argument in the function definition, since
  "~" alone can't be actually used as variable's name. In this case,
  for Scilab, any input ~ could be replaced with an improbable
  variable name like "%unused" or "%kwzxq", and that should do it.



Please, correct me if someone
  understands something else.
 
 Best regards
 Samuel


Le 26/11/2019 à 03:33, Chin Luh Tan a écrit :
 




___
users mailing list 
mailto:users@lists.scilab.org 
http://lists.scilab.org/mailman/listinfo/users 
Hi Samuel, 



I think your assumption likely correct on the input and the
  output using ~



https://www.mathworks.com/matlabcentral/answers/288016-tilde-doesn-t-work-for-ignoring-my-inputs



"

You can use tilde to ignore input arguments when you define the function.

You cannot use tilde to ignore input arguments when you call the function.

You cannot use tilde to ignore output arguments when you define the function.

You can use tilde to ignore output arguments when you call the function.

If you want to be able to specify only the third argument, there must be some 
way for your function to disambiguate the one-input call from a call that 
specifies only the third input. Usually in MathWorks function this is done by 
specifying [] for the arguments for which the user doesn't want to specify. In 
that case the code would use the default value if either nargin is too small or 
if nargin is large enough and the specified input argument isempty.

"

>From what I could think off, mat2sci conversion to replace ~ at the output 
>arguments should always be safe. As for the input, since the tilde could not 
>be used as input when calling function, I think there should not be any cases 
>that need to be implemented in conversion?

Thanks.

Regards,

CL





 On Tue, 26 Nov 2019 04:20:52 +0800 Samuel Gougeon mailto:sgoug...@free.fr 
wrote 



Le 23/11/2019 à
15:35, Samuel Gougeon a écrit :

Hello Philipp,
and to all (former ;-) matlabers,



Le
  16/10/2019 à 11:46, P M a écrit :

Dear experts,



trying to convert a matlab code to scilab I
  come across following line:

[~,~,Minstances_hat] = unique(B(:));



How to replace the "~" symbol?



B is the blue channel of a RGB image...hence a m x n matrix of integers 
(type(B) = 8 )








This issue is now reported as http://bugzilla.scilab.org/show_bug.cgi?id=16254.

Solving this issue w

Re: [Scilab-users] sparse() to build a block-diagonal matrix?

2019-11-26 Thread Samuel Gougeon

Le 26/11/2019 à 03:43, Chin Luh Tan a écrit :

Hi,

from the first glance on the documentation you show:

"Beside this function, you can also use sparse() primitive to build a 
block diagonal sparse matrix."


it sound to me that this statement said the sparse could be used to 
create block diagonal matrix with the similar inputs to sysdiag.



But after a trying to stare at it again... I think it might mean:

" to convert the *block diagonal matrix* to *block diagonal /sparse 
/matrix "*


which likely is the one shown in the example:
S=sysdiag([1  2;  3  4],  [5  6;  7  8],  [9  10;  11  12],  [13  14;  15  16])
S=sparse  (S)
which simply to say that we could use sparse to convert the full 
matrix created by sysdiag to sparse?




Chin Luh,

You are right.

Yesterday evening i posted awish to improve sysdiag 
(), and also to rename 
it /blockdiag/() (but both aspects are distinct). I have rewritten 
sysdiag() as indicated in the wish, and made an additional improvement, 
that is: When at least one input is sparse, the result is built as a 
sparse/from the beginning/, instead of only when the first sparse input 
is met and included in the result. Hence, the probability of a memory 
issue is decreased.


Best regards
Samuel

___
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users


Re: [Scilab-users] How to convert the ~ input placeholder <= Re: convert matlab code to scilab

2019-11-26 Thread Samuel Gougeon

Hello Chin Luh,

Thanks a lot for your input.

Both cases -- input and output will have to be converted --, since the 
converter is also made to convert (sets of) functions definitions, not 
only scripts.


About the input case: Steven's answer is still not really clear to me. 
Doing some tests on Octave, we must anyway provide some input at calling 
time when  ~ is used as default input in the definition. AFAIU, this ~ 
could just be to make sure that no variable name used inside the 
function matches the name of the input argument in the function 
definition, since "~" alone can't be actually used as variable's name. 
In this case, for Scilab, any input ~ could be replaced with an 
improbable variable name like "%unused" or "%kwzxq", and that should do it.


Please, correct me if someone understands something else.

Best regards
Samuel

Le 26/11/2019 à 03:33, Chin Luh Tan a écrit :

Hi Samuel,

I think your assumption likely correct on the input and the output using ~

https://www.mathworks.com/matlabcentral/answers/288016-tilde-doesn-t-work-for-ignoring-my-inputs

"
Youcanuse tilde to ignore input arguments when youdefinethe function.
Youcannotuse tilde to ignore input arguments when youcallthe function.
Youcannotuse tilde to ignore output arguments when youdefinethe function.
Youcanuse tilde to ignore output arguments when youcallthe function.
If you want to be able to specify only the third argument, there must 
be some way for your function to disambiguate the one-input call from 
a call that specifies only the third input. Usually in MathWorks 
function this is done by specifying [] for the arguments for which the 
user doesn't want to specify. In that case the code would use the 
default value if eithernarginis too small or ifnarginis large enough 
and the specified input argumentisempty.

"
From what I could think off, mat2sci conversion to replace ~ at the 
output arguments should always be safe. As for the input, since the 
tilde could not be used as input when calling function, I think there 
should not be any cases that need to be implemented in conversion?

Thanks.
Regards,
CL


 On Tue, 26 Nov 2019 04:20:52 +0800 *Samuel Gougeon 
* wrote 


Le 23/11/2019 à 15:35, Samuel Gougeon a écrit :

HelloPhilipp, and to all (former ;-) matlabers,

Le 16/10/2019 à 11:46, P M a écrit :

Dear experts,

trying to convert a matlab code to scilab I come across
following line:

[~,~,Minstances_hat]  =  unique(B(:));

How to replace the "~" symbol?

B is the blue channel of a RGB image...hence a m x n
matrix of integers (type(B) = 8 )


This issue is now reported as bug 16250
.

Solving this issue would improve the converter.
I may contribute to solve it. However, I do not use to use
Matlab or Octave. So i don't know how the ~ placeholder set in
the list of /inputs/ is processed inside the called function.
This message is a call for information about this topic.

Ignoring an output is trivial. As suggested by Stéphane, the
ans variable is a good candidate as replacement for ~,
just as a fake recipient, as in "[~, ia] = unique(A)"   => 
"[ans, ia] = unique(A)"

The meaning of ignoring an input is a priori completely
different, at least from a Scilab point of view.

This leads to the fact that, on the "function ..." line, the
converter will have to distinguish the list of inputs from the
list of outputs, and then process the same ~ character in 2
different ways.
This processing would have to run also when the "function ..."
line is split on several rows with the "..." continuation marks.

First, i will need an actual example of function call with ~
in the input list, runnable in Octave.
Any compact suggestion is welcome.
At least 2 use cases are expected: one calling a function
written in Octave/Matlab language (improperly called "macros"
in Scilab), the other one calling a hard-coded function.

Let's consider the first case, with a "macro":

  * What does  the ~ sent placeholder pass to the function?
How is it detected/detectable inside the macro ?
  * How is it processed by the function? Is there a generic
default processing, as replacing it with the empty matrix
[], or whatever else?

Where is the crowd of matlabers?

The page describing this

feature:https://fr.mathworks.com/help/matlab/matlab_prog/ignore-function-inputs.html
But i do not clearly understand it.
Apparently, "canceling" an input is done (only?) at the function
definition, not when calling it, unlike for the outputs.
If so, then /ans/ could also be used as a replacement, meaning
that anyway this in