annotate libinterp/corefcn/dot.cc @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents 58f3f8b086f4
children 08b08b7f05b2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 29997
diff changeset
3 // Copyright (C) 2009-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21660
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
27 # include "config.h"
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
28 #endif
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
29
22322
93b3cdd36854 move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents: 22135
diff changeset
30 #include "lo-blas-proto.h"
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
31 #include "mx-base.h"
26599
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
32
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
33 #include "builtin-defun-decls.h"
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
34 #include "defun.h"
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
35 #include "error.h"
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
36 #include "parse.h"
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
37
29958
32c3a5805893 move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
38 OCTAVE_NAMESPACE_BEGIN
32c3a5805893 move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
39
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11553
diff changeset
40 static void
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
41 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
42 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
43 {
21660
53728df3e4c9 maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents: 21301
diff changeset
44 int nd = x.ndims ();
53728df3e4c9 maint: for clarity, call ndims() rather than length() on dimension vectors.
Rik <rik@octave.org>
parents: 21301
diff changeset
45 assert (nd == y.ndims ());
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
46 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
47 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
48 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
49 octave_idx_type tmp_k = 1;
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
50 for (int i = 0; i < nd; i++)
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 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_m *= 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 if (i > dim)
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
58 {
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
59 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
60 tmp_n *= 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 else
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
63 {
26493
bc6237a189e1 dot.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents: 26376
diff changeset
64 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
65 tmp_k = x(i);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
66 }
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
67 }
22980
b4346e1b5b45 use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
68
29961
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
69 m = to_f77_int (tmp_m);
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
70 n = to_f77_int (tmp_n);
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
71 k = to_f77_int (tmp_k);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
72 }
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
73
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
74 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
75 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
76 @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
77 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
78
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
79 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
80 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
81
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
82 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
83 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
84
26599
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
85 Implementation Note: This is equivalent to
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
86 @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
87 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
88 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
89 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
90 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
91 @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
92 @end deftypefn */)
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
93 {
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
94 int nargin = args.length ();
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
95
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
96 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
97 print_usage ();
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
98
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
99 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
100 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
101 octave_value argy = args(1);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
102
23586
f6c5db0a02e7 maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents: 23585
diff changeset
103 if (! argx.isnumeric () || ! argy.isnumeric ())
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
104 error ("dot: X and Y must be numeric");
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
105
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
106 dim_vector dimx = argx.dims ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
107 dim_vector dimy = argy.dims ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
108 bool match = dimx == dimy;
23592
80e3bfb7bd5a maint: Deprecate is_vector and replace with isvector.
Rik <rik@octave.org>
parents: 23586
diff changeset
109 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
110 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
111 // Change to column vectors.
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
112 dimx = dimx.redim (1);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
113 argx = argx.reshape (dimx);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
114 dimy = dimy.redim (1);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
115 argy = argy.reshape (dimy);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
116 match = dimx == dimy;
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
117 }
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
118
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
119 if (! match)
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
120 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
121
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
122 int dim;
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
123 if (nargin == 2)
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
124 dim = dimx.first_non_singleton ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
125 else
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
126 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
127
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
128 if (dim < 0)
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
129 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
130
22980
b4346e1b5b45 use F77_INT instead of octave_idx_type for libinterp dot function
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
131 F77_INT m, n, k;
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
132 dim_vector dimz;
23581
c3075ae020e1 maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents: 23220
diff changeset
133 if (argx.iscomplex () || argy.iscomplex ())
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
134 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
135 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
136 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
137 FloatComplexNDArray x = argx.float_complex_array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
138 FloatComplexNDArray y = argy.float_complex_array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
139 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
140 FloatComplexNDArray z (dimz);
20556
4bed806ee3d4 eliminate more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20218
diff changeset
141
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
142 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
143 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
144 F77_CMPLX_ARG (z.fortran_vec ())));
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
145 retval = z;
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
146 }
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
147 else
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
148 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
149 ComplexNDArray x = argx.complex_array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
150 ComplexNDArray y = argy.complex_array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
151 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
152 ComplexNDArray z (dimz);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
153
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
154 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
155 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
156 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
157 retval = z;
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 }
23585
570170b6eb09 maint: Deprecate is_float_type and replace with isfloat.
Rik <rik@octave.org>
parents: 23581
diff changeset
160 else if (argx.isfloat () && argy.isfloat ())
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
161 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
162 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
163 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
164 FloatNDArray x = argx.float_array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
165 FloatNDArray y = argy.float_array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
166 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
167 FloatNDArray z (dimz);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
168
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
169 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
170 z.fortran_vec ()));
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
171 retval = z;
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
172 }
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
173 else
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 NDArray x = argx.array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
176 NDArray y = argy.array_value ();
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
177 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
178 NDArray z (dimz);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
179
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
180 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
181 z.fortran_vec ()));
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
182 retval = z;
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
183 }
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
184 }
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
185 else
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
186 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
187 // Non-optimized evaluation.
26599
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
188 // 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
189 // 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
190 // of calculating possibly garbage results.
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
191 // 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
192 // exceed intmax.
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
193 octave_value_list tmp;
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
194 tmp(1) = dim + 1;
29961
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
195 tmp(0) = binary_op (octave_value::op_el_mul, argx, argy);
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
196
26599
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
197 tmp = Fsum (tmp, 1);
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
198 if (! tmp.empty ())
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
199 retval = tmp(0);
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
200 }
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
201
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
202 return retval;
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
203 }
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
204
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
205 /*
14501
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
206 %!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
207
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
208 %!test
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
209 %! x = [2, 1; 2, 1];
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
210 %! 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
211 %! assert (dot (x, y), [0 0]);
19141
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
212 %! 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
213
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
214 %!test
14501
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14360
diff changeset
215 %! 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
216 %! assert (dot (x, x), [4, 20]);
19141
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
217 %! 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
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]);
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
221 %! y = int8 ([2, 3]);
15239
a38d5ed5b3d8 dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents: 15195
diff changeset
222 %! assert (dot (x, y), 8);
a38d5ed5b3d8 dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents: 15195
diff changeset
223
a38d5ed5b3d8 dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents: 15195
diff changeset
224 %!test
26599
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
225 %! x = int8 ([1, 2; 3, 4]);
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
226 %! y = int8 ([5, 6; 7, 8]);
15239
a38d5ed5b3d8 dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents: 15195
diff changeset
227 %! assert (dot (x, y), [26 44]);
a38d5ed5b3d8 dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents: 15195
diff changeset
228 %! assert (dot (x, y, 2), [17; 53]);
a38d5ed5b3d8 dot.cc: Segfault with integers (bug #37199)
Max Brister <max@2bass.com>
parents: 15195
diff changeset
229 %! 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
230
26599
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
231 ## 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
232 ## prevent accurate value from being calculated.
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
233 %!test
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
234 %! x = int8 ([127]);
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
235 %! assert (dot (x, x), 127);
5ab12183280d dot.cc: Call Fsum directly rather than using feval.
Rik <rik@octave.org>
parents: 26493
diff changeset
236
22737
7abc25e6206a maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 22323
diff changeset
237 ## Test input validation
18636
60562e5c8bfb Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents: 17787
diff changeset
238 %!error dot ()
60562e5c8bfb Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents: 17787
diff changeset
239 %!error dot (1)
60562e5c8bfb Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents: 17787
diff changeset
240 %!error dot (1,2,3,4)
60562e5c8bfb Correctly validate arguments to dot function (bug #42061).
Rik <rik@octave.org>
parents: 17787
diff changeset
241 %!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
242 %!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
243 %!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
244 %!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
245 %!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
246 %!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
247 */
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
248
25567
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
249 template <typename T>
29997
58f3f8b086f4 * dot.cc (blkmm_internal): Make internal functions static.
John W. Eaton <jwe@octave.org>
parents: 29961
diff changeset
250 static void
25567
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
251 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
252 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
253
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
254 template <>
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
255 void
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
256 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
257 FloatComplexNDArray& z,
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
258 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
259 {
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
260 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
261 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
262 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
263 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
264 }
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
265
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
266 template <>
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
267 void
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
268 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
269 ComplexNDArray& z,
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
270 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
271 {
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
272 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
273 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
274 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
275 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
276 }
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 template <>
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
279 void
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
280 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
281 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
282 {
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
283 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
284 x.data (), y.data (),
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
285 z.fortran_vec ()));
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
286 }
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 template <>
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
289 void
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
290 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
291 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
292 {
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
293 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
294 x.data (), y.data (),
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
295 z.fortran_vec ()));
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
296 }
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 static void
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
299 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
300 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
301 dim_vector& dimz)
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
302 {
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
303 int nd = dimx.ndims ();
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
304
29961
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
305 m = to_f77_int (dimx(0));
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
306 k = to_f77_int (dimx(1));
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
307 n = to_f77_int (dimy(1));
25567
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
308
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
309 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
310
26493
bc6237a189e1 dot.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents: 26376
diff changeset
311 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
312
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
313 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
314
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
315 dimz(0) = m;
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
316 dimz(1) = n;
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
317 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
318 {
26493
bc6237a189e1 dot.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents: 26376
diff changeset
319 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
320 dimz(i) = dimx(i);
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
321 tmp_np *= dimz(i);
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
322 }
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
323
29961
7d6709900da7 eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
324 np = to_f77_int (tmp_np);
25567
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 if (! match)
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
327 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
328 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
329 }
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
330
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
331 template <typename T>
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
332 T
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
333 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
334 {
25606
959657cab846 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 25567
diff changeset
335 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
336 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
337 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
338 dim_vector dimz;
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
339
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
340 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
341
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
342 T z (dimz);
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 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
345 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
346
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
347 return z;
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
348 }
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
349
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14501
diff changeset
350 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
351 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
352 @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
353 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
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 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
356 @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
357 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
358 @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
359
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
360 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
361 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
362 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
363 @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
364 endfor
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21724
diff changeset
365 @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
366 @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
367 @end deftypefn */)
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
368 {
20819
f428cbe7576f eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents: 20802
diff changeset
369 if (args.length () != 2)
20802
8bb38ba1bad6 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20556
diff changeset
370 print_usage ();
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
371
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
372 octave_value retval;
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
373
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
374 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
375 octave_value argy = args(1);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
376
23586
f6c5db0a02e7 maint: Deprecate is_numeric_type and replace with isnumeric.
Rik <rik@octave.org>
parents: 23585
diff changeset
377 if (! argx.isnumeric () || ! argy.isnumeric ())
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
378 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
379
23581
c3075ae020e1 maint: Deprecate is_complex_type and replace with iscomplex.
Rik <rik@octave.org>
parents: 23220
diff changeset
380 if (argx.iscomplex () || argy.iscomplex ())
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
381 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
382 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
383 retval = do_blkmm<FloatComplexNDArray> (argx, argy);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
384 else
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<ComplexNDArray> (argx, argy);
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
386 }
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
387 else
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
388 {
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
389 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
390 retval = do_blkmm<FloatNDArray> (argx, argy);
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
391 else
25567
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
392 retval = do_blkmm<NDArray> (argx, argy);
20918
6f0bd96f93c0 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
393 }
9874
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
394
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
395 return retval;
90bc0cc4518f implement compiled dot and blkmm
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
396 }
12788
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
397
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
398 /*
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
399 %!test
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
400 %! x(:,:,1) = [1 2; 3 4];
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
401 %! x(:,:,2) = [1 1; 1 1];
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
402 %! z(:,:,1) = [7 10; 15 22];
9f4b48b93f6d codesprint: Write test for dot.cc
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 12642
diff changeset
403 %! 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
404 %! assert (blkmm (x,x), z);
19141
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
405 %! assert (blkmm (single (x), single (x)), single (z));
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
406 %! assert (blkmm (x, single (x)), single (z));
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
407
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
408 %!test
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
409 %! x(:,:,1) = [1 2; 3 4];
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
410 %! x(:,:,2) = [1i 1i; 1i 1i];
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
411 %! z(:,:,1) = [7 10; 15 22];
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
412 %! z(:,:,2) = [-2 -2; -2 -2];
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
413 %! assert (blkmm (x,x), z);
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
414 %! assert (blkmm (single (x), single (x)), single (z));
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
415 %! assert (blkmm (x, single (x)), single (z));
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
416
25567
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
417 %!test <*54261>
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
418 %! 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
419 %! 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
420 %! z = blkmm (x,y);
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
421 %! 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
422 %! 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
423 %! 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
424 %! z = blkmm (x,y);
8c0a35040974 Fix blkmm to work with empty matrices (bug #54261).
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
425 %! 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
426
22737
7abc25e6206a maint: Clean up code base to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 22323
diff changeset
427 ## Test input validation
19141
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
428 %!error blkmm ()
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
429 %!error blkmm (1)
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
430 %!error blkmm (1,2,3)
25ab600d16fd codesprint: Add %!tests for dot.cc file.
Rik <rik@octave.org>
parents: 18671
diff changeset
431 %!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
432 %!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
433 %!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
434 */
29958
32c3a5805893 move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
435
32c3a5805893 move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
436 OCTAVE_NAMESPACE_END