Mercurial > jwe > octave
changeset 28112:d320728d5d06
style fixes for rng; document and mention in NEWS file
* rng.m: Style fixes.
* NEWS: Mention new function.
* stats.txi: Add @DOCSTRING entry.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 19 Feb 2020 10:09:18 -0500 |
parents | c08d7b53f1a2 |
children | 8e8a6e6ddf9c |
files | NEWS doc/interpreter/stats.txi scripts/general/rng.m |
diffstat | 3 files changed, 30 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Wed Feb 19 10:02:09 2020 -0500 +++ b/NEWS Wed Feb 19 10:09:18 2020 -0500 @@ -13,7 +13,7 @@ ### Alphabetical list of new functions added in Octave 7 -* `XXX` +* `rng` ### Deprecated functions and properties
--- a/doc/interpreter/stats.txi Wed Feb 19 10:02:09 2020 -0500 +++ b/doc/interpreter/stats.txi Wed Feb 19 10:09:18 2020 -0500 @@ -284,3 +284,5 @@ @DOCSTRING(discrete_rnd) @DOCSTRING(empirical_rnd) + +@DOCSTRING(rng)
--- a/scripts/general/rng.m Wed Feb 19 10:02:09 2020 -0500 +++ b/scripts/general/rng.m Wed Feb 19 10:09:18 2020 -0500 @@ -75,8 +75,8 @@ function retval = rng (varargin) - if (nargin > 2 || nargout > 1) - print_usage (); + if (nargin > 2) + print_usage (); endif ## Store current settings of random number generator @@ -87,17 +87,21 @@ ## FIXME: rand and randn use different generators - storing both states. ## For older Matlab generators (v4, v5), the settings are stored like this: ## struct ("Type","Legacy", "Seed", "Not applicable", "State",{[],[],...}) - s = struct (... - "Type", "twister",... # generator name - "Seed", "Not applicable",... # seed initialization value - "State", {{rand("state"), randn("state")}}); # internal state of the generator - if (! nargin) + ## Type is the generator name. + ## Seed is the initial seed value. + ## State is a structure describing internal state of the generator. + s = struct ("Type", "twister", + "Seed", "Not applicable", + "State", {{rand("state"), randn("state")}}); + + if (nargin == 0) retval = s; return; endif - if (isscalar (varargin{1}) && isnumeric (varargin{1}) && isreal (varargin{1}) && varargin{1} >= 0) + if (isscalar (varargin{1}) && isnumeric (varargin{1}) + && isreal (varargin{1}) && varargin{1} >= 0) s_rand = s_randn = varargin{1}; generator = check_generator (varargin(2:end)); @@ -106,14 +110,15 @@ s_rand = s_randn = "reset"; # or sum (1000*clock) generator = check_generator (varargin(2:end)); - elseif (ischar (varargin{1}) && strcmpi (varargin{1}, "default") && nargin == 1) - generator = "twister"; + elseif (ischar (varargin{1}) && strcmpi (varargin{1}, "default") + && nargin == 1) + generator = "twister"; s_rand = s_randn = 0; # In Matlab, seed 0 corresponds to 5489 elseif (isstruct (varargin{1}) && isscalar (varargin{1}) && nargin == 1) if (numfields (varargin{1}) != 3 || ! isfield (varargin{1}, "Type") - || ! isfield (varargin{1}, "Seed") || ! isfield (varargin{1}, "State")) - error ("Input structure not compatible with the one returned by rng ()"); + || ! isfield (varargin{1}, "Seed") || ! isfield (varargin{1}, "State")) + error ("input structure not compatible with the one returned by rng ()"); endif ## Only the internal state "State" and generator type "Type" are needed generator = varargin{1}.Type; @@ -140,15 +145,15 @@ rand ("seed", s_rand); randn ("seed", s_randn); - case "v5uniform" + case "v5uniform" rand ("seed", s_rand); case "v5normal" randn ("seed", s_randn); otherwise - error ("Unknown type of random number generator"); - + error ("unknown type of random number generator"); + endswitch if (nargout > 0) @@ -163,13 +168,13 @@ gen = ""; return; elseif (! iscellstr (val)) - error ("Second input must be a type of random number generator"); + error ("second input must be a type of random number generator"); endif gen = tolower (char (val)); if (ismember (gen, {"simdtwister", "combrecursive", "philox", "threefry", "multfibonacci", "v4"})) - error ("This random number generator is not available in Octave"); + error ("random number generator '%s' is not available in Octave", gen); elseif (! ismember (gen, {"twister", "v5uniform", "v5normal"})) - error ("This type of random number generator is unknown"); + error ("unknown random number generator '%s'", gen); endif endfunction @@ -255,7 +260,6 @@ ## Test input validation %!error <Invalid call> rng (1, 2, 3) -%!error <Invalid call> [a, b] = rng () %!error <Invalid call> rng ({}) %!error <Invalid call> rng ("unknown") %!error <Invalid call> rng (eye (2)) @@ -263,7 +267,7 @@ %!error <Invalid call> rng (-1) %!error <Invalid call> rng (struct ("Type",[],"State",[],"Seed",[]), 2) %!error <Invalid call> rng ("default", "twister") -%!error <Second input must be a type of random number generator> rng (0, struct ()) -%!error <This type of random number generator is unknown> rng (0, "unknown") -%!error <Second input must be a type of random number generator> rng ("shuffle", struct ()) -%!error <This type of random number generator is unknown> rng ("shuffle", "unknown") +%!error <second input must be a type of random number generator> rng (0, struct ()) +%!error <unknown random number generator> rng (0, "unknown") +%!error <second input must be a type of random number generator> rng ("shuffle", struct ()) +%!error <unknown random number generator> rng ("shuffle", "unknown")