Mercurial > octave
annotate libinterp/corefcn/dot.cc @ 26599:5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
* dot.cc (Fdot): #include "builtin-defun-decls.h" for prototypes of Octave
functions. Update docstring to warn about incorrect results when using integer
arrays. Add FIXME note to else branch which calculates integer results
suggesting a warning or error might be appropriate. Replace feval call with
direct call to Fsum. Update BIST tests to use commas in matrix definitions.
Add BIST test for an int8 object which clearly calculates the wrong result.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 22 Jan 2019 13:45:45 -0800 |
parents | bc6237a189e1 |
children | b442ec6dda5c |
rev | line source |
---|---|
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
1 /* |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
2 |
26376
00f796120a6d
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
25606
diff
changeset
|
3 Copyright (C) 2009-2019 VZLU Prague |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
4 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
5 This file is part of Octave. |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
6 |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23592
diff
changeset
|
7 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23592
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
10 (at your option) any later version. |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22737
diff
changeset
|
15 GNU General Public License for more details. |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
16 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
18 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23592
diff
changeset
|
19 <https://www.gnu.org/licenses/>. |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
20 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
21 */ |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
22 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21660
diff
changeset
|
23 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
24 # include "config.h" |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
25 #endif |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
26 |
22322
93b3cdd36854
move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents:
22135
diff
changeset
|
27 #include "lo-blas-proto.h" |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
28 #include "mx-base.h" |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
29 |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
30 #include "builtin-defun-decls.h" |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
31 #include "defun.h" |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
32 #include "error.h" |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
33 #include "parse.h" |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
34 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11553
diff
changeset
|
35 static void |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
36 get_red_dims (const dim_vector& x, const dim_vector& y, int dim, |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
37 dim_vector& z, F77_INT& m, F77_INT& n, F77_INT& k) |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
38 { |
21660
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
39 int nd = x.ndims (); |
53728df3e4c9
maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
40 assert (nd == y.ndims ()); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
41 z = dim_vector::alloc (nd); |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
42 octave_idx_type tmp_m = 1; |
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
43 octave_idx_type tmp_n = 1; |
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
44 octave_idx_type tmp_k = 1; |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
45 for (int i = 0; i < nd; i++) |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
46 { |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
47 if (i < dim) |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
48 { |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
49 z(i) = x(i); |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
50 tmp_m *= x(i); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
51 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
52 else if (i > dim) |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
53 { |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
54 z(i) = x(i); |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
55 tmp_n *= x(i); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
56 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
57 else |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
58 { |
26493
bc6237a189e1
dot.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
59 z(i) = 1; |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
60 tmp_k = x(i); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
61 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
62 } |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
63 |
22988
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22980
diff
changeset
|
64 m = octave::to_f77_int (tmp_m); |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22980
diff
changeset
|
65 n = octave::to_f77_int (tmp_n); |
cd33c785e80e
put to_f77_int inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
22980
diff
changeset
|
66 k = octave::to_f77_int (tmp_k); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
67 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
68 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
69 DEFUN (dot, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
70 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
71 @deftypefn {} {} dot (@var{x}, @var{y}, @var{dim}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
72 Compute the dot product of two vectors. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
73 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
74 If @var{x} and @var{y} are matrices, calculate the dot products along the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
75 first non-singleton dimension. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
76 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
77 If the optional argument @var{dim} is given, calculate the dot products |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
78 along this dimension. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
79 |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
80 Implementation Note: This is equivalent to |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
81 @code{sum (conj (@var{X}) .* @var{Y}, @var{dim})}, but avoids forming a |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
82 temporary array and is faster. When @var{X} and @var{Y} are column vectors, |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
83 the result is equivalent to @code{@var{X}' * @var{Y}}. Although, @code{dot} |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
84 is defined for integer arrays, the output may differ from the expected result |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
85 due to the limited range of integer objects. |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
86 @seealso{cross, divergence} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
87 @end deftypefn */) |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
88 { |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
89 int nargin = args.length (); |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
90 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
91 if (nargin < 2 || nargin > 3) |
20802
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
92 print_usage (); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
93 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
94 octave_value retval; |
18100
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
95 octave_value argx = args(0); |
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
96 octave_value argy = args(1); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
97 |
23586
f6c5db0a02e7
maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
98 if (! argx.isnumeric () || ! argy.isnumeric ()) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
99 error ("dot: X and Y must be numeric"); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
100 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
101 dim_vector dimx = argx.dims (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
102 dim_vector dimy = argy.dims (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
103 bool match = dimx == dimy; |
23592
80e3bfb7bd5a
maint: Deprecate is_vector and replace with isvector.
Rik <rik@octave.org>
parents:
23586
diff
changeset
|
104 if (! match && nargin == 2 && dimx.isvector () && dimy.isvector ()) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
105 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
106 // Change to column vectors. |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
107 dimx = dimx.redim (1); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
108 argx = argx.reshape (dimx); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
109 dimy = dimy.redim (1); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
110 argy = argy.reshape (dimy); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
111 match = dimx == dimy; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
112 } |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
113 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
114 if (! match) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
115 error ("dot: sizes of X and Y must match"); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20218
diff
changeset
|
116 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
117 int dim; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
118 if (nargin == 2) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
119 dim = dimx.first_non_singleton (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
120 else |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
121 dim = args(2).int_value (true) - 1; |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20218
diff
changeset
|
122 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
123 if (dim < 0) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
124 error ("dot: DIM must be a valid dimension"); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20218
diff
changeset
|
125 |
22980
b4346e1b5b45
use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
126 F77_INT m, n, k; |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
127 dim_vector dimz; |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
128 if (argx.iscomplex () || argy.iscomplex ()) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
129 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
130 if (argx.is_single_type () || argy.is_single_type ()) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
131 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
132 FloatComplexNDArray x = argx.float_complex_array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
133 FloatComplexNDArray y = argy.float_complex_array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
134 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
135 FloatComplexNDArray z (dimz); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20218
diff
changeset
|
136 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
137 F77_XFCN (cdotc3, CDOTC3, (m, n, k, |
22135
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
138 F77_CONST_CMPLX_ARG (x.data ()), F77_CONST_CMPLX_ARG (y.data ()), |
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
139 F77_CMPLX_ARG (z.fortran_vec ()))); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
140 retval = z; |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
141 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
142 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
143 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
144 ComplexNDArray x = argx.complex_array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
145 ComplexNDArray y = argy.complex_array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
146 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
147 ComplexNDArray z (dimz); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
148 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
149 F77_XFCN (zdotc3, ZDOTC3, (m, n, k, |
22135
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
150 F77_CONST_DBLE_CMPLX_ARG (x.data ()), F77_CONST_DBLE_CMPLX_ARG (y.data ()), |
407c66ae1e20
reduce warnings from GCC's link-time optimization feature (bug #48531)
John W. Eaton <jwe@octave.org>
parents:
22133
diff
changeset
|
151 F77_DBLE_CMPLX_ARG (z.fortran_vec ()))); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
152 retval = z; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
153 } |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
154 } |
23585
570170b6eb09
maint: Deprecate is_float_type and replace with isfloat.
Rik <rik@octave.org>
parents:
23581
diff
changeset
|
155 else if (argx.isfloat () && argy.isfloat ()) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
156 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
157 if (argx.is_single_type () || argy.is_single_type ()) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
158 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
159 FloatNDArray x = argx.float_array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
160 FloatNDArray y = argy.float_array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
161 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
162 FloatNDArray z (dimz); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
163 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
164 F77_XFCN (sdot3, SDOT3, (m, n, k, x.data (), y.data (), |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
165 z.fortran_vec ())); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
166 retval = z; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
167 } |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
168 else |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
169 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
170 NDArray x = argx.array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
171 NDArray y = argy.array_value (); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
172 get_red_dims (dimx, dimy, dim, dimz, m, n, k); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
173 NDArray z (dimz); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
174 |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
175 F77_XFCN (ddot3, DDOT3, (m, n, k, x.data (), y.data (), |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
176 z.fortran_vec ())); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
177 retval = z; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
178 } |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
179 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
180 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
181 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
182 // Non-optimized evaluation. |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
183 // FIXME: This may *not* do what the user expects. |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
184 // It might be more useful to issue a warning, or even an error, instead |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
185 // of calculating possibly garbage results. |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
186 // Think of the dot product of two int8 vectors where the multiplications |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
187 // exceed intmax. |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
188 octave_value_list tmp; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
189 tmp(1) = dim + 1; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
190 tmp(0) = do_binary_op (octave_value::op_el_mul, argx, argy); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
191 |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
192 tmp = Fsum (tmp, 1); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
193 if (! tmp.empty ()) |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
194 retval = tmp(0); |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
195 } |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
196 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
197 return retval; |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
198 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
199 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
200 /* |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
201 %!assert (dot ([1, 2], [2, 3]), 8) |
12788
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
202 |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
203 %!test |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
204 %! x = [2, 1; 2, 1]; |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
205 %! y = [-0.5, 2; 0.5, -2]; |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
206 %! assert (dot (x, y), [0 0]); |
19141
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
207 %! assert (dot (single (x), single (y)), single ([0 0])); |
12788
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
208 |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
209 %!test |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
210 %! x = [1+i, 3-i; 1-i, 3-i]; |
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
211 %! assert (dot (x, x), [4, 20]); |
19141
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
212 %! assert (dot (single (x), single (x)), single ([4, 20])); |
15239
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
213 |
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
214 %!test |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
215 %! x = int8 ([1, 2]); |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
216 %! y = int8 ([2, 3]); |
15239
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
217 %! assert (dot (x, y), 8); |
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
218 |
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
219 %!test |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
220 %! x = int8 ([1, 2; 3, 4]); |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
221 %! y = int8 ([5, 6; 7, 8]); |
15239
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
222 %! assert (dot (x, y), [26 44]); |
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
223 %! assert (dot (x, y, 2), [17; 53]); |
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
224 %! assert (dot (x, y, 3), [5 12; 21 32]); |
a38d5ed5b3d8
dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents:
15195
diff
changeset
|
225 |
26599
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
226 ## This is, perhaps, surprising. Integer maximums and saturation mechanics |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
227 ## prevent accurate value from being calculated. |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
228 %!test |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
229 %! x = int8 ([127]); |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
230 %! assert (dot (x, x), 127); |
5ab12183280d
dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents:
26493
diff
changeset
|
231 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
232 ## Test input validation |
18636
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
233 %!error dot () |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
234 %!error dot (1) |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
235 %!error dot (1,2,3,4) |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
236 %!error <X and Y must be numeric> dot ({1,2}, [3,4]) |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
237 %!error <X and Y must be numeric> dot ([1,2], {3,4}) |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
238 %!error <sizes of X and Y must match> dot ([1 2], [1 2 3]) |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
239 %!error <sizes of X and Y must match> dot ([1 2]', [1 2 3]') |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
240 %!error <sizes of X and Y must match> dot (ones (2,2), ones (2,3)) |
60562e5c8bfb
Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
241 %!error <DIM must be a valid dimension> dot ([1 2], [1 2], 0) |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
242 */ |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
243 |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
244 template <typename T> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
245 void |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
246 blkmm_internal (const T& x, const T& y, T& z, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
247 F77_INT m, F77_INT n, F77_INT k, F77_INT np); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
248 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
249 template <> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
250 void |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
251 blkmm_internal (const FloatComplexNDArray& x, const FloatComplexNDArray& y, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
252 FloatComplexNDArray& z, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
253 F77_INT m, F77_INT n, F77_INT k, F77_INT np) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
254 { |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
255 F77_XFCN (cmatm3, CMATM3, (m, n, k, np, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
256 F77_CONST_CMPLX_ARG (x.data ()), |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
257 F77_CONST_CMPLX_ARG (y.data ()), |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
258 F77_CMPLX_ARG (z.fortran_vec ()))); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
259 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
260 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
261 template <> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
262 void |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
263 blkmm_internal (const ComplexNDArray& x, const ComplexNDArray& y, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
264 ComplexNDArray& z, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
265 F77_INT m, F77_INT n, F77_INT k, F77_INT np) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
266 { |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
267 F77_XFCN (zmatm3, ZMATM3, (m, n, k, np, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
268 F77_CONST_DBLE_CMPLX_ARG (x.data ()), |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
269 F77_CONST_DBLE_CMPLX_ARG (y.data ()), |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
270 F77_DBLE_CMPLX_ARG (z.fortran_vec ()))); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
271 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
272 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
273 template <> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
274 void |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
275 blkmm_internal (const FloatNDArray& x, const FloatNDArray& y, FloatNDArray& z, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
276 F77_INT m, F77_INT n, F77_INT k, F77_INT np) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
277 { |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
278 F77_XFCN (smatm3, SMATM3, (m, n, k, np, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
279 x.data (), y.data (), |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
280 z.fortran_vec ())); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
281 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
282 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
283 template <> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
284 void |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
285 blkmm_internal (const NDArray& x, const NDArray& y, NDArray& z, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
286 F77_INT m, F77_INT n, F77_INT k, F77_INT np) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
287 { |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
288 F77_XFCN (dmatm3, DMATM3, (m, n, k, np, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
289 x.data (), y.data (), |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
290 z.fortran_vec ())); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
291 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
292 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
293 static void |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
294 get_blkmm_dims (const dim_vector& dimx, const dim_vector& dimy, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
295 F77_INT& m, F77_INT& n, F77_INT& k, F77_INT& np, |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
296 dim_vector& dimz) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
297 { |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
298 int nd = dimx.ndims (); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
299 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
300 m = octave::to_f77_int (dimx(0)); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
301 k = octave::to_f77_int (dimx(1)); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
302 n = octave::to_f77_int (dimy(1)); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
303 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
304 octave_idx_type tmp_np = 1; |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
305 |
26493
bc6237a189e1
dot.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
306 bool match = ((dimy(0) == k) && (nd == dimy.ndims ())); |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
307 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
308 dimz = dim_vector::alloc (nd); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
309 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
310 dimz(0) = m; |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
311 dimz(1) = n; |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
312 for (int i = 2; match && i < nd; i++) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
313 { |
26493
bc6237a189e1
dot.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
314 match = (dimx(i) == dimy(i)); |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
315 dimz(i) = dimx(i); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
316 tmp_np *= dimz(i); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
317 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
318 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
319 np = octave::to_f77_int (tmp_np); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
320 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
321 if (! match) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
322 error ("blkmm: A and B dimensions don't match: (%s) and (%s)", |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
323 dimx.str ().c_str (), dimy.str ().c_str ()); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
324 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
325 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
326 template <typename T> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
327 T |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
328 do_blkmm (const octave_value& xov, const octave_value& yov) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
329 { |
25606
959657cab846
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
25567
diff
changeset
|
330 const T x = octave_value_extract<T> (xov); |
959657cab846
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
25567
diff
changeset
|
331 const T y = octave_value_extract<T> (yov); |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
332 F77_INT m, n, k, np; |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
333 dim_vector dimz; |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
334 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
335 get_blkmm_dims (x.dims (), y.dims (), m, n, k, np, dimz); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
336 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
337 T z (dimz); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
338 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
339 if (n != 0 && m != 0) |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
340 blkmm_internal<T> (x, y, z, m, n, k, np); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
341 |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
342 return z; |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
343 } |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
344 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14501
diff
changeset
|
345 DEFUN (blkmm, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
346 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
347 @deftypefn {} {} blkmm (@var{A}, @var{B}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
348 Compute products of matrix blocks. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
349 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
350 The blocks are given as 2-dimensional subarrays of the arrays @var{A}, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
351 @var{B}. The size of @var{A} must have the form @code{[m,k,@dots{}]} and |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
352 size of @var{B} must be @code{[k,n,@dots{}]}. The result is then of size |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
353 @code{[m,n,@dots{}]} and is computed as follows: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
354 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
355 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
356 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
357 for i = 1:prod (size (@var{A})(3:end)) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
358 @var{C}(:,:,i) = @var{A}(:,:,i) * @var{B}(:,:,i) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
359 endfor |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
360 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
361 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
362 @end deftypefn */) |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
363 { |
20819
f428cbe7576f
eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents:
20802
diff
changeset
|
364 if (args.length () != 2) |
20802
8bb38ba1bad6
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20556
diff
changeset
|
365 print_usage (); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
366 |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
367 octave_value retval; |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
368 |
18100
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
369 octave_value argx = args(0); |
6a71e5030df5
Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
370 octave_value argy = args(1); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
371 |
23586
f6c5db0a02e7
maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents:
23585
diff
changeset
|
372 if (! argx.isnumeric () || ! argy.isnumeric ()) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
373 error ("blkmm: A and B must be numeric"); |
20556
4bed806ee3d4
eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20218
diff
changeset
|
374 |
23581
c3075ae020e1
maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
375 if (argx.iscomplex () || argy.iscomplex ()) |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
376 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
377 if (argx.is_single_type () || argy.is_single_type ()) |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
378 retval = do_blkmm<FloatComplexNDArray> (argx, argy); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
379 else |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
380 retval = do_blkmm<ComplexNDArray> (argx, argy); |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
381 } |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
382 else |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
383 { |
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
384 if (argx.is_single_type () || argy.is_single_type ()) |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
385 retval = do_blkmm<FloatNDArray> (argx, argy); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
386 else |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
387 retval = do_blkmm<NDArray> (argx, argy); |
20918
6f0bd96f93c0
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
388 } |
9874
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
389 |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
390 return retval; |
90bc0cc4518f
implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff
changeset
|
391 } |
12788
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
392 |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
393 /* |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
394 %!test |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
395 %! x(:,:,1) = [1 2; 3 4]; |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
396 %! x(:,:,2) = [1 1; 1 1]; |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
397 %! z(:,:,1) = [7 10; 15 22]; |
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
398 %! z(:,:,2) = [2 2; 2 2]; |
14501
60e5cf354d80
Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
399 %! assert (blkmm (x,x), z); |
19141
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
400 %! assert (blkmm (single (x), single (x)), single (z)); |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
401 %! assert (blkmm (x, single (x)), single (z)); |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
402 |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
403 %!test |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
404 %! x(:,:,1) = [1 2; 3 4]; |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
405 %! x(:,:,2) = [1i 1i; 1i 1i]; |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
406 %! z(:,:,1) = [7 10; 15 22]; |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
407 %! z(:,:,2) = [-2 -2; -2 -2]; |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
408 %! assert (blkmm (x,x), z); |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
409 %! assert (blkmm (single (x), single (x)), single (z)); |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
410 %! assert (blkmm (x, single (x)), single (z)); |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
411 |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
412 %!test <*54261> |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
413 %! x = ones (0, 3, 3); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
414 %! y = ones (3, 5, 3); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
415 %! z = blkmm (x,y); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
416 %! assert (size (z), [0, 5, 3]); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
417 %! x = ones (1, 3, 3); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
418 %! y = ones (3, 0, 3); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
419 %! z = blkmm (x,y); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
420 %! assert (size (z), [1, 0, 3]); |
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
421 |
22737
7abc25e6206a
maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
422 ## Test input validation |
19141
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
423 %!error blkmm () |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
424 %!error blkmm (1) |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
425 %!error blkmm (1,2,3) |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
426 %!error <A and B must be numeric> blkmm ({1,2}, [3,4]) |
25ab600d16fd
codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents:
18671
diff
changeset
|
427 %!error <A and B must be numeric> blkmm ([3,4], {1,2}) |
25567
8c0a35040974
Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents:
25054
diff
changeset
|
428 %!error <A and B dimensions don't match> blkmm (ones (2,2), ones (3,3)) |
12788
9f4b48b93f6d
codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
12642
diff
changeset
|
429 */ |