annotate scripts/set/uniquetol.m @ 31551:fd29c7a50a78 stable

maint: use commas, semicolons consistently with Octave conventions. * makeValidName.m: Remove %!test and move BIST %!asserts to column 1. * base64decode.m, base64encode.m, which.m, logm.m, uniquetol.m, perms.m: Delete semicolon (';') at end of %!assert BIST. * lin2mu.m, interp2.m, interpn.m, lsqnonneg.m, pqpnonneg.m, uniquetol.m, betainc.m, normalize.m: Add semicolon (';') to end of assert statement within %!test BIST. * __memoize__.m, tar_is_bsd.m, publish.m: Add semicolon (';') to line with keyword "persistent". * stft.m: Use comma (',') after "case" keyword when code immediately follows. * gallery.m: Align commas used in case statements in massive switch block. Remove unnecessary parentheses around a numeric case argument. * ranks.m: Remove semicolon (';') from case statemnt argument.
author Rik <rik@octave.org>
date Sat, 26 Nov 2022 06:32:08 -0800
parents 4581402b1c5b
children 597f3ee61a48
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
1 ########################################################################
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
2 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30383
diff changeset
3 ## Copyright (C) 2020-2022 The Octave Project Developers
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
4 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
7 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
8 ## This file is part of Octave.
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
9 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
11 ## under the terms of the GNU General Public License as published by
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
13 ## (at your option) any later version.
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
14 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
18 ## GNU General Public License for more details.
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
19 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
22 ## <https://www.gnu.org/licenses/>.
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
23 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
24 ########################################################################
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
25
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
26 ## -*- texinfo -*-
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
27 ## @deftypefn {} {@var{c} =} uniquetol (@var{A})
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
28 ## @deftypefnx {} {@var{c} =} uniquetol (@var{A}, @var{tol})
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
29 ## @deftypefnx {} {@var{c} =} uniquetol (@dots{}, @var{property}, @var{value})
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
30 ## @deftypefnx {} {[@var{c}, @var{ia}, @var{ic}] =} uniquetol (@dots{})
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
31 ## Return the unique elements of @var{A} within tolerance @var{tol}.
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
32 ##
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
33 ## Two values, @var{x} and @var{y}, are within relative tolerance if
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
34 ## @code{abs (@var{x} - @var{y}) <= @var{tol} * max (abs (@var{A}(:)))}.
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
35 ##
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
36 ## The input @var{A} must be a real (non-complex) floating point type (double
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
37 ## or single).
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
38 ##
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
39 ## If @var{tol} is unspecified, the default tolerance is 1e-12 for double
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
40 ## precision input or 1e-6 for single precision input.
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
41 ##
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
42 ## The function may also be called with the following optional property/value
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
43 ## pairs. Property/value pairs must be passed after other input arguments:
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
44 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
45 ## @table @asis
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
46 ## @item @qcode{"ByRows"} (default: @code{false})
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
47 ## When true, return the unique rows of @var{A}. @var{A} must be a 2-D array
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
48 ## to use this option. For rows, the criteria for uniqueness is changed to
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
49 ## @code{all (abs (@var{x} - @var{y}) <= @var{tol}*max (abs (@var{A}),[],1))}
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
50 ## which compares each column component of a row against a column-specific
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
51 ## tolerance.
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
52 ##
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
53 ## @item @qcode{"DataScale"}
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
54 ## The tolerance test is changed to
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
55 ## @code{abs (@var{x} - @var{y}) <= @var{tol}*@var{DS}} where @var{DS} is a
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
56 ## scalar unless the property @qcode{"ByRows"} is true. In that case, @var{DS}
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
57 ## can either be a scalar or a vector with a length equal to the number of
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
58 ## columns in @var{A}. Using a value of @code{1.0} for @var{DS} will change
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
59 ## the tolerance from a relative one to an absolute tolerance. Using a value
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
60 ## of @code{Inf} will disable testing.
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
61 ##
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
62 ## @item @qcode{"OutputAllIndices"} (default: @code{false})
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
63 ## When true, @var{ia} is a cell array (not a vector) that contains the indices
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
64 ## for @emph{all} elements in @var{A} that are within tolerance of a value in
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
65 ## @var{C}. That is, each cell in @var{ia} corresponds to a single unique
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
66 ## value in @var{C}, and the values in each cell correspond to locations in
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
67 ## @var{A}.
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
68 ## @end table
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
69 ##
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
70 ## The output @var{c} is a row vector if the input @var{A} is a row vector.
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
71 ## For all other cases, a column vector is returned.
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
72 ##
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
73 ## The optional output @var{ia} is a column index vector such that
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
74 ## @code{@var{c} = @var{A}(@var{ia})}. If the @qcode{"ByRows"} property is
29312
875d799ab0b3 uniquetol.m: Fix texinfo syntax errors (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29311
diff changeset
75 ## true, the condition is @code{@var{c} = @var{A}(@var{ia}, :)}. If the
875d799ab0b3 uniquetol.m: Fix texinfo syntax errors (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29311
diff changeset
76 ## @qcode{"OutputAllIndices"} property is true, then the values
875d799ab0b3 uniquetol.m: Fix texinfo syntax errors (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29311
diff changeset
77 ## @code{@var{A}(@var{ia}@{@var{i}@})} are all within tolerance of the unique
875d799ab0b3 uniquetol.m: Fix texinfo syntax errors (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29311
diff changeset
78 ## value @code{@var{c}(@var{i})}.
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
79 ##
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
80 ## The optional output @var{ic} is a column index vector such that
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
81 ## @code{@var{A} = @var{c}(@var{ic})} when @var{A} is a vector. When @var{A}
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
82 ## is a matrix, @code{@var{A}(:) = @var{c}(@var{ic})}. If the @qcode{"ByRows"}
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
83 ## property is true then @code{@var{A} = @var{c}(@var{ic},:)}.
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
84 ##
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
85 ## Example: small round-off errors require @code{uniquetol}, not @code{unique}
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
86 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
87 ## @example
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
88 ## @group
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
89 ## x = [1:5];
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
90 ## ## Inverse_Function (Function (x)) should return exactly x
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
91 ## y = exp (log (x));
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
92 ## D = unique ([x, y])
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
93 ## @result{} [1 2 3 3 4 5 5]
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
94 ## C = uniquetol ([x, y])
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
95 ## @result{} [1 2 3 4 5]
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
96 ## @end group
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
97 ## @end example
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
98 ##
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
99 ## @seealso{unique, union, intersect, setdiff, setxor, ismember}
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
100 ## @end deftypefn
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
101
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
102 function [c, ia, ic] = uniquetol (A, varargin)
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
103
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
104 if (nargin < 1)
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
105 print_usage ();
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
106 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
107
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
108 if (! (isfloat (A) && isreal (A)))
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
109 error ("Octave:uniquetol:unsupported-type",
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
110 "uniquetol: A must be a real floating point array");
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
111 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
112
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
113 if (nargin == 1 || ischar (varargin{1}))
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
114 tol = ifelse (isa (A, "double"), 1e-12, 1e-6);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
115 else
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
116 tol = varargin{1};
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
117 varargin(1) = [];
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
118 if (! (isfloat (tol) && isreal (tol) && isscalar (tol)))
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
119 error ("Octave:uniquetol:unsupported-type",
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
120 "uniquetol: TOL must be a real floating point scalar");
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
121 endif
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
122 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
123
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
124 if (mod (numel (varargin), 2))
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
125 error ("uniquetol: PROPERTY/VALUE arguments must occur in pairs");
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
126 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
127
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
128 by_rows = false;
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
129 output_all_indices = false;
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
130 data_scale = [];
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
131 calc_indices = nargout > 1;
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
132
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
133 for k = 1:2:numel (varargin)
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
134 if (! ischar (varargin{k}))
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
135 error ("uniquetol: PROPERTY must be a string");
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
136 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
137
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
138 if (strcmpi (varargin{k}, "ByRows"))
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
139 by_rows = logical (varargin{k+1});
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
140 if (by_rows && ndims (A) > 2)
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
141 error ('uniquetol: A must be a 2-D array when "ByRows" is true');
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
142 endif
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
143 elseif (strcmpi (varargin{k}, "OutputAllIndices"))
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
144 output_all_indices = logical (varargin{k+1}) & calc_indices;
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
145 elseif (strcmpi (varargin{k}, "DataScale"))
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
146 data_scale = varargin{k+1}(:).';
30296
d6415c931759 uniquetol.m: Check for complex input (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29463
diff changeset
147 if (! isfloat (data_scale) || iscomplex (data_scale)
d6415c931759 uniquetol.m: Check for complex input (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29463
diff changeset
148 || any (data_scale(:) < 0) || any (isnan (data_scale(:))))
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
149 error ("uniquetol: DataScale must be a positive floating point scalar or vector, without NaNs");
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
150 endif
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
151 cols_data_scale = columns (data_scale);
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
152 if (cols_data_scale != 1 && cols_data_scale != columns (A))
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
153 error ("uniquetol: invalid DataScale size");
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
154 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
155 else
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
156 error ("uniquetol: unknown property '%s'", varargin{k});
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
157 endif
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
158 endfor
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
159
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
160 if (isempty (A))
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
161 ## hack for Matlab empty input compatibility
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
162 sz_A = size (A);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
163 if (by_rows)
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
164 c = A;
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
165 sz_A(2) = 1;
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
166 ia = ones (sz_A);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
167 ic = ones (sz_A);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
168 else
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
169 c = ones (0, 1, class (A));
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
170 if (sz_A(1) == 1)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
171 c = c.';
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
172 endif
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
173 ia = ones (0, 1);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
174 ic = ones (0, 1);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
175 endif
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
176 return;
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
177 endif
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
178
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
179 if (isempty (data_scale))
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
180 data_scale = max (abs (A(! isinf (A))(:)));
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
181 endif
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
182
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
183 tol *= data_scale;
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
184
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
185 if (by_rows)
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
186 ## Start matrix in sorted order, retain sorting and inverting indices.
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
187 if (calc_indices)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
188 [A, srtA] = sortrows (A);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
189 [~, inv_srtA] = sort (srtA);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
190 else
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
191 A = sortrows (A);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
192 endif
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
193
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
194 [nr, nc] = size (A);
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
195 I = zeros (nr, 1);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
196 ia = {};
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
197 J = zeros (nr, 1);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
198 j = 1;
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
199
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
200 for i = 1:nr
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
201 if (J(i))
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
202 continue; # row previously compared equal
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
203 endif
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
204
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
205 Arow_i = A(i,:);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
206 eq_rows = all (abs (A - Arow_i) <= tol, 2);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
207 eq_rows(i,1) = eq_rows(i,1) || any (! isfinite (Arow_i), 2);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
208 if (output_all_indices)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
209 ia_tmp = find (eq_rows);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
210 ia{end+1,1} = sort (srtA(ia_tmp));
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
211 else
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
212 ia_tmp = find (eq_rows, 1);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
213 endif
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
214 I(j) = ia_tmp(1);
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
215 J(eq_rows) = j;
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
216 j += 1;
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
217 endfor
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
218
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
219 I = I(1:j-1);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
220 c = A(I,:);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
221
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
222 if (calc_indices)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
223 if (! output_all_indices)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
224 ia = srtA(I(1:j-1));
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
225 endif
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
226 ic = J(inv_srtA);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
227 endif
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
228
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
229 else
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
230 isrowvec = isrow (A);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
231 A = A(:);
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
232 nr = rows (A);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
233 isnanA = isnan (A);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
234 anyisnanA = any (isnanA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
235 [sortA, sAi] = sort (A);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
236 diffsortA = diff (sortA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
237 isinfsortA = isinf (sortA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
238 isnansortA = isnan (sortA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
239 numnan = sum (isnansortA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
240 if (any (isinfsortA))
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
241 sAnin = sortA(! (isinfsortA | isnansortA));
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
242 diffsortA(isinf (diffsortA)) = abs (sAnin(end) - sAnin(1)) + 10;
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
243 endif
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
244 csdx = cumsum (diffsortA);
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
245 ue = [true; diff([0; csdx-mod(csdx,tol)]) > eps(max(csdx))];
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
246 ueold = NaN;
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
247 while (any (ueold != ue))
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
248 ueold = ue;
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
249 belowtol = [false; diff(sortA(ue)) < tol];
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
250 if (any (belowtol))
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
251 needstomove = find (ue)(belowtol);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
252 ue(needstomove) = false;
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
253 needstomove(needstomove >= nr-numnan) = [];
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
254 ue(needstomove+1) = true;
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
255 endif
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
256 endwhile
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
257 c = sortA(ue);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
258 [~, sortsAi] = sort (sAi);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
259 cumsumue = cumsum (ue);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
260 ic = cumsumue(sortsAi);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
261 if (anyisnanA)
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
262 findisnanA = find (isnanA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
263 else
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
264 findisnanA = [];
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
265 endif
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
266 if (output_all_indices)
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
267 nu = cumsumue(end);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
268 ia = cell (nu, 1);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
269 for k = 1:nu
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
270 ia{k} = setdiff (sAi(cumsumue==k), findisnanA);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
271 endfor
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
272 else
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
273 ia = sAi(ue);
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
274 endif
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
275
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
276 if (anyisnanA)
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
277 rowsc1 = [1:sum(isnanA(:))]';
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
278 if (! all (isnanA))
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
279 rowsc1 += rows (c);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
280 endif
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
281 c(rowsc1) = NaN;
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
282 ic(isnanA) = rowsc1;
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
283 if (output_all_indices)
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
284 ia(rowsc1) = num2cell (findisnanA);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
285 else
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
286 ia(rowsc1) = findisnanA;
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
287 endif
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
288
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
289 ## if numel (c) was 1, appending NaNs creates a row vector instead of
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
290 ## expected column vector.
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
291 if (isrow (c))
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
292 c = c.';
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
293 endif
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
294 endif
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
295
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
296 ## Matlab compatibility: Outputs are column vectors unless the input
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
297 ## is a row vector, in which case the output c is also a row vector.
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
298 ## ia and ic are always column vectors. (verified Matlab 2022a)
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
299 if (isrowvec)
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
300 c = c.';
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
301 endif
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
302 endif
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
303
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
304 endfunction
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
305
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
306
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
307 %!assert (uniquetol ([1 1 2; 1 2 1; 1 1 2+10*eps]), [1;2])
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
308 %!assert (uniquetol ([1 1 2; 1 0 1; 1 1 2+10*eps], "byrows", true),
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
309 %! [1 0 1; 1 1 2])
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
310 %!assert (uniquetol ([1]), [1])
31551
fd29c7a50a78 maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents: 31120
diff changeset
311 %!assert (uniquetol ([2, 1]), [1, 2])
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
312 %!assert (uniquetol ([1; 2]), [1; 2])
31551
fd29c7a50a78 maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents: 31120
diff changeset
313 %!assert (uniquetol ([-Inf, 1, NaN, Inf, NaN, Inf]), [-Inf, 1, Inf, NaN, NaN])
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
314 %!assert (uniquetol ([1,2,2,3,2,4], "byrows", true), [1,2,2,3,2,4])
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
315 %!assert (uniquetol ([1,2,2,3,2,4]), [1,2,3,4])
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
316 %!assert (uniquetol ([1,2,2,3,2,4].', "byrows", true), [1;2;3;4])
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
317 %!assert (uniquetol (sparse ([2,0;2,0])), sparse ([0;2]))
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
318 %!assert (uniquetol (sparse ([1,2;2,3])), sparse ([1;2;3]))
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
319 %!assert (uniquetol (single ([1,2,2,3,2,4]), "byrows", true),
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
320 %! single ([1,2,2,3,2,4]))
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
321 %!assert (uniquetol (single ([1,2,2,3,2,4])), single ([1,2,3,4]))
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
322 %!assert (uniquetol (single ([1,2,2,3,2,4].'), "byrows", true),
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
323 %! single ([1;2;3;4]))
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
324
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
325 ## Test 2D array sorting
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
326 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
327 %! a = [magic(3); 2 * magic(3)];
31551
fd29c7a50a78 maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents: 31120
diff changeset
328 %! assert (uniquetol (a), [1:10,12,14,16,18]');
fd29c7a50a78 maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents: 31120
diff changeset
329 %! assert (uniquetol (a, "byrows", true), sortrows (a));
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
330
29463
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
331 ## Matlab compatibility of output
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
332 %!test
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
333 %! x = 1:0.045:3;
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
334 %! y = uniquetol (x, 0.1, "datascale", 1);
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
335 %! assert (y(1:4), [1, 1.135, 1.27, 1.405]);
09767c20dec9 uniquetol.m: variable naming cleanup and addition of BIST test.
Rik <rik@octave.org>
parents: 29461
diff changeset
336
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
337 ## Test index vector return arguments
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
338 %!test
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
339 %! [c, ia, ic] = uniquetol ([1,1,2,3,3,3,4]);
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
340 %! assert (c, [1,2,3,4]);
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
341 %! assert (ia, [1;3;4;7]);
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
342 %! assert (ic, [1;1;2;3;3;3;4]);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
343
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
344 ## Test index vector return arguments with "ByRows"
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
345 %!test
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
346 %! A = [2, 3, 4; 2, 3, 4];
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
347 %! [c, ia, ic] = uniquetol (A, "byrows", true);
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
348 %! assert (c, [2, 3, 4]);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
349 %! assert (ia, 1);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
350 %! assert (ic, [1;1]);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
351
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
352 %!test
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
353 %! x = (2:7)'*pi;
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
354 %! y = exp (log (x));
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
355 %! C = uniquetol ([x; y]);
29461
df641f946202 uniquetol.m: Improve performance when "byrows" is false (bug #59850).
Steven <steven.waldrip@gmail.com>
parents: 29359
diff changeset
356 %! assert (C, x, 1e-12);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
357
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
358 ## Test "ByRows" Property
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
359 %!test
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
360 %! A = [0.06, 0.21, 0.38; 0.38, 0.21, 0.39; 0.54, 0.56, 0.41; 0.46, 0.52, 0.95];
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
361 %! B = log (exp (A));
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
362 %! C = uniquetol ([A; B], "ByRows", true);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
363 %! assert (C, sortrows(A), 10*eps);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
364
29311
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
365 ## Test "DataScale" Property
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
366 %!test
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
367 %! x = 10^11;
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
368 %! C = uniquetol ([x, exp(log(x))], 1e-6, "DataScale", 1);
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
369 %! assert (C, [x, exp(log(x))]);
2d26113ddf57 uniquetol.m: Update documentation and BIST tests (bug #59850).
Rik <rik@octave.org>
parents: 29309
diff changeset
370
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
371 ## Test "OutputAllIndices" Property
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
372 %!test
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
373 %! A = [.1 .2 .3 10];
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
374 %! [C, ia, ic] = uniquetol (A, .1, "OutputAllIndices", true);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
375 %! assert (C, [.1, 10]);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
376 %! assert (ia, {(1:3)'; 4});
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
377 %! assert (ic, [1; 1; 1; 2]);
29308
f3272029d42c uniquetol.m: Add new function (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents:
diff changeset
378
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
379 ## Test NaN inputs
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
380 %!assert (uniquetol (NaN), NaN)
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
381 %!assert (uniquetol ([NaN NaN]), [NaN NaN])
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
382 %!assert (uniquetol ([NaN NaN]'), [NaN NaN]')
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
383 %!assert (uniquetol (NaN(2,2)), NaN(4,1))
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
384
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
385 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
386 %! a = [magic(3); 2 * magic(3)];
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
387 %! a(4:5) = NaN;
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
388 %! [c, ia, ic] = uniquetol (a);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
389 %! assert (c, [1:10,12,14,18, NaN, NaN]');
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
390 %! assert (ia, [7,10,2,3,8,13,14,1,9,11,16,17,12,4,5]');
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
391 %! assert (ic, [8,3,4,14,15,8,1,5,9,2,10,13,6,7,2,11,12,4]');
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
392 %! [c, ia, ic] = uniquetol (single (a));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
393 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
394 %! assert (class (ia), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
395 %! assert (class (ic), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
396 %! [c, ia, ic] = uniquetol (a, "ByRows", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
397 %! assert (c, sortrows (a));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
398 %! assert (ia, [2,3,1,6,4,5]');
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
399 %! assert (ic, [3,1,2,5,6,4]');
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
400 %! [c, ia, ic] = uniquetol (single (a), "ByRows", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
401 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
402 %! assert (class (ia), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
403 %! assert (class (ic), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
404 %! [c, ia, ic] = uniquetol (a, "OutputAllIndices", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
405 %! assert (ia, {7;[10;15];2;[3;18];8;13;14;[1;6];9;11;16;17;12;4;5});
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
406 %! [c, ia, ic] = uniquetol (single (a), "OutputAllIndices", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
407 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
408 %! assert (class (ia{1}), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
409 %! assert (class (ic), "double");
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
410 %! [c, ia, ic] = uniquetol (a, "OutputAllIndices", true, "ByRows", true);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
411 %! assert (ia, {2;3;1;6;4;5});
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
412 %! [c, ia, ic] = uniquetol (single (a),
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
413 %! "OutputAllIndices", true, "ByRows", true);
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
414 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
415 %! assert (class (ia{1}), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
416 %! assert (class (ic), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
417
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
418 ## Test empty input compatibility
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
419 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
420 %! [c, ia, ic] = uniquetol ([]);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
421 %! assert (c, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
422 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
423 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
424 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
425 %! [c, ia, ic] = uniquetol ([], "byrows", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
426 %! assert (c, []);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
427 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
428 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
429 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
430 %! [c, ia, ic] = uniquetol (ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
431 %! assert (c, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
432 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
433 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
434 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
435 %! [c, ia, ic] = uniquetol (ones (0,1), "byrows", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
436 %! assert (c, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
437 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
438 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
439 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
440 %! [c, ia, ic] = uniquetol (ones (1,0));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
441 %! assert (c, ones (1,0));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
442 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
443 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
444 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
445 %! [c, ia, ic] = uniquetol (ones (1,0), "byrows", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
446 %! assert (c, ones (1,0));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
447 %! assert (ia, 1);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
448 %! assert (ic, 1);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
449 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
450 %! [c, ia, ic] = uniquetol (ones (1,0,2));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
451 %! assert (c, ones (1,0));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
452 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
453 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
454 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
455 %! [c, ia, ic] = uniquetol (ones (0,1,2));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
456 %! assert (c, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
457 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
458 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
459 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
460 %! [c, ia, ic] = uniquetol (ones (1,2,0));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
461 %! assert (c, ones (1,0));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
462 %! assert (ia, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
463 %! assert (ic, ones (0,1));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
464 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
465 %! [c, ia, ic] = uniquetol (single ([]));
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
466 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
467 %! assert (class (ia), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
468 %! assert (class (ic), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
469 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
470 %! [c, ia, ic] = uniquetol (single ([]), "byrows", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
471 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
472 %! assert (class (ia), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
473 %! assert (class (ic), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
474 %!test
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
475 %! [c, ia, ic] = uniquetol (single ([]), "OutputAllIndices", true);
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
476 %! assert (class (c), "single");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
477 %! assert (class (ia), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
478 %! assert (class (ic), "double");
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
479
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
480
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
481 ## Test input validation
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
482 %!error <Invalid call> uniquetol ()
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
483 %!error <A must be a real floating point array> uniquetol (int8 (1))
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
484 %!error <A must be a real floating point array> uniquetol (1i)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
485 %!error <TOL must be a real floating point scalar> uniquetol (1, int8 (1))
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
486 %!error <TOL must be a real floating point scalar> uniquetol (1, [1, 2])
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
487 %!error <TOL must be a real floating point scalar> uniquetol (1, 1i)
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
488 %!error <arguments must occur in pairs> uniquetol (1, 2, "byrows")
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
489 %!error <PROPERTY must be a string> uniquetol (1, 2, 3, "bar")
30383
8afdeac24ba4 maint: Use space after function name and before opening parenthesis.
Rik <rik@octave.org>
parents: 30296
diff changeset
490 %!error <A must be a 2-D array> uniquetol (ones (2,2,2), "byrows", true)
31119
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
491 %!error <A must be a 2-D array> uniquetol (ones (0,1,2), "byrows", true)
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
492 %!error <A must be a 2-D array> uniquetol (ones (1,0,2), "byrows", true)
df030ac26390 uniquetol.m: improve matlab compatibility and add byrows sorting (bug #59850)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 30564
diff changeset
493 %!error <A must be a 2-D array> uniquetol (ones (1,2,0), "byrows", true)
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
494 %!error <DataScale must be a .* floating point> uniquetol (1, "DataScale", '1')
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
495 %!error <DataScale must be .* positive> uniquetol (1, "DataScale", 1i)
30296
d6415c931759 uniquetol.m: Check for complex input (bug #59850).
Markus Mützel <markus.muetzel@gmx.de>
parents: 29463
diff changeset
496 %!error <DataScale must be .* positive> uniquetol (1, "DataScale", -1)
31120
4581402b1c5b uniquetol.m: Simplify code for "ByRows" option (bug #59850).
Rik <rik@octave.org>
parents: 31119
diff changeset
497 %!error <DataScale must be .* without NaNs> uniquetol (1, "DataScale", NaN)
29309
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
498 %!error <invalid DataScale size> uniquetol (1, "DataScale", [1 2])
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
499 %!error <unknown property 'foo'> uniquetol (1, "foo", "bar")
83fe13ca9ce3 uniquetol.m: Update to use more Octave conventions (bug #59850).
Rik <rik@octave.org>
parents: 29308
diff changeset
500 %!error <unknown property 'foo'> uniquetol (1, 2, "foo", "bar")