Mercurial > hg > octave-nkf
annotate src/OPERATORS/op-sm-m.cc @ 13294:7dce7e110511
make concatenation of class objects work
* data.h: New file.
* src/Makefile.am (octinclude_HEADERS): Add it to the list.
* data.cc (attempt_type_conversion): New static function.
(do_class_concat): New function.
(do_cat): Use it if any elements of the list are objects.
Check whether any elements of the list are objects or cells.
Check whether all elements of the list are complex.
Check whether the first element of the list is a struct.
Maybe convert elements of the list to cells.
New tests for horzcat and vertcat.
* data.h (do_class_concat): Provide decl.
* ov-class.h (octave_class::octave_class): Allow optional parent
list.
* ov.h, ov.h (octave_value::octave_value (const Octave_map&,
const std::string&)): Likewise.
* pt-mat.cc (do_class_concat): New static function.
(tree_matrix::rvalue1): Use it to concatenate objects.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 07 Oct 2011 22:16:07 -0400 |
parents | 12df7854fa7c |
children | 72c96de7a403 |
rev | line source |
---|---|
5164 | 1 /* |
2 | |
11523 | 3 Copyright (C) 2004-2011 David Bateman |
4 Copyright (C) 1998-2004 Andy Adler | |
7016 | 5 |
6 This file is part of Octave. | |
5164 | 7 |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
5164 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
5164 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
28 #include "gripes.h" | |
29 #include "oct-obj.h" | |
30 #include "ov.h" | |
31 #include "ov-typeinfo.h" | |
32 #include "ov-re-mat.h" | |
33 #include "ops.h" | |
34 #include "xdiv.h" | |
35 | |
36 #include "sparse-xpow.h" | |
37 #include "sparse-xdiv.h" | |
38 #include "smx-sm-m.h" | |
39 #include "smx-m-sm.h" | |
40 #include "ov-re-sparse.h" | |
41 | |
42 // sparse matrix by matrix ops. | |
43 | |
44 DEFBINOP_OP (add, sparse_matrix, matrix, +) | |
45 DEFBINOP_OP (sub, sparse_matrix, matrix, -) | |
46 | |
5429 | 47 DEFBINOP_OP (mul, sparse_matrix, matrix, *) |
5164 | 48 |
49 DEFBINOP (div, sparse_matrix, matrix) | |
50 { | |
51 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_matrix&); | |
5785 | 52 MatrixType typ = v2.matrix_type (); |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
53 |
5785 | 54 Matrix ret = xdiv (v1.matrix_value (), v2.matrix_value (), typ); |
55 | |
56 v2.matrix_type (typ); | |
57 return ret; | |
5164 | 58 } |
59 | |
60 DEFBINOPX (pow, sparse_matrix, matrix) | |
61 { | |
62 error ("can't do A ^ B for A and B both matrices"); | |
63 return octave_value (); | |
64 } | |
65 | |
66 DEFBINOP (ldiv, sparse_matrix, matrix) | |
67 { | |
5760 | 68 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_matrix&); |
6221 | 69 |
70 if (v1.rows() == 1 && v1.columns() == 1) | |
71 { | |
72 double d = v1.scalar_value (); | |
73 | |
74 if (d == 0.0) | |
9931
fb6b6fcafa62
untabify files in src/OPERATORS directory
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
75 gripe_divide_by_zero (); |
5322 | 76 |
6221 | 77 return octave_value (v2.array_value () / d); |
78 } | |
79 else | |
80 { | |
81 MatrixType typ = v1.matrix_type (); | |
5322 | 82 |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
83 Matrix ret = xleftdiv (v1.sparse_matrix_value (), |
9931
fb6b6fcafa62
untabify files in src/OPERATORS directory
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
84 v2.matrix_value (), typ); |
6221 | 85 |
86 v1.matrix_type (typ); | |
87 return ret; | |
88 } | |
5164 | 89 } |
90 | |
7802
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
91 DEFBINOP_FN (trans_mul, sparse_matrix, matrix, trans_mul); |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
92 |
5164 | 93 DEFBINOP_FN (lt, sparse_matrix, matrix, mx_el_lt) |
94 DEFBINOP_FN (le, sparse_matrix, matrix, mx_el_le) | |
95 DEFBINOP_FN (eq, sparse_matrix, matrix, mx_el_eq) | |
96 DEFBINOP_FN (ge, sparse_matrix, matrix, mx_el_ge) | |
97 DEFBINOP_FN (gt, sparse_matrix, matrix, mx_el_gt) | |
98 DEFBINOP_FN (ne, sparse_matrix, matrix, mx_el_ne) | |
99 | |
100 DEFBINOP_FN (el_mul, sparse_matrix, matrix, product) | |
101 DEFBINOP_FN (el_div, sparse_matrix, matrix, quotient) | |
102 | |
103 DEFBINOP (el_pow, sparse_matrix, matrix) | |
104 { | |
105 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_matrix&); | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
106 |
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
107 return octave_value (elem_xpow (v1.sparse_matrix_value (), |
9931
fb6b6fcafa62
untabify files in src/OPERATORS directory
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
108 SparseMatrix (v2.matrix_value ()))); |
5164 | 109 } |
110 | |
111 DEFBINOP (el_ldiv, sparse_matrix, matrix) | |
112 { | |
113 CAST_BINOP_ARGS (const octave_sparse_matrix&, const octave_matrix&); | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
114 |
5164 | 115 return octave_value |
116 (quotient (v2.matrix_value (), v1.sparse_matrix_value ())); | |
117 } | |
118 | |
119 DEFBINOP_FN (el_and, sparse_matrix, matrix, mx_el_and) | |
120 DEFBINOP_FN (el_or, sparse_matrix, matrix, mx_el_or) | |
121 | |
122 DEFCATOP (sm_m, sparse_matrix, matrix) | |
123 { | |
124 CAST_BINOP_ARGS (octave_sparse_matrix&, const octave_matrix&); | |
125 SparseMatrix tmp (v2.matrix_value ()); | |
126 return octave_value (v1.sparse_matrix_value (). concat (tmp, ra_idx)); | |
127 } | |
128 | |
129 DEFASSIGNOP (assign, sparse_matrix, matrix) | |
130 { | |
131 CAST_BINOP_ARGS (octave_sparse_matrix&, const octave_matrix&); | |
132 | |
133 SparseMatrix tmp (v2.matrix_value ()); | |
134 v1.assign (idx, tmp); | |
135 return octave_value (); | |
136 } | |
137 | |
138 void | |
139 install_sm_m_ops (void) | |
140 { | |
141 INSTALL_BINOP (op_add, octave_sparse_matrix, octave_matrix, add); | |
142 INSTALL_BINOP (op_sub, octave_sparse_matrix, octave_matrix, sub); | |
143 INSTALL_BINOP (op_mul, octave_sparse_matrix, octave_matrix, mul); | |
144 INSTALL_BINOP (op_div, octave_sparse_matrix, octave_matrix, div); | |
145 INSTALL_BINOP (op_pow, octave_sparse_matrix, octave_matrix, pow); | |
146 INSTALL_BINOP (op_ldiv, octave_sparse_matrix, octave_matrix, ldiv); | |
7802
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
147 INSTALL_BINOP (op_trans_mul, octave_sparse_matrix, octave_matrix, trans_mul); |
1a446f28ce68
implement optimized sparse-dense transposed multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
7017
diff
changeset
|
148 INSTALL_BINOP (op_herm_mul, octave_sparse_matrix, octave_matrix, trans_mul); |
5164 | 149 INSTALL_BINOP (op_lt, octave_sparse_matrix, octave_matrix, lt); |
150 INSTALL_BINOP (op_le, octave_sparse_matrix, octave_matrix, le); | |
151 INSTALL_BINOP (op_eq, octave_sparse_matrix, octave_matrix, eq); | |
152 INSTALL_BINOP (op_ge, octave_sparse_matrix, octave_matrix, ge); | |
153 INSTALL_BINOP (op_gt, octave_sparse_matrix, octave_matrix, gt); | |
154 INSTALL_BINOP (op_ne, octave_sparse_matrix, octave_matrix, ne); | |
155 INSTALL_BINOP (op_el_mul, octave_sparse_matrix, octave_matrix, el_mul); | |
156 INSTALL_BINOP (op_el_div, octave_sparse_matrix, octave_matrix, el_div); | |
157 INSTALL_BINOP (op_el_pow, octave_sparse_matrix, octave_matrix, el_pow); | |
158 INSTALL_BINOP (op_el_ldiv, octave_sparse_matrix, octave_matrix, el_ldiv); | |
159 INSTALL_BINOP (op_el_and, octave_sparse_matrix, octave_matrix, el_and); | |
160 INSTALL_BINOP (op_el_or, octave_sparse_matrix, octave_matrix, el_or); | |
161 | |
162 INSTALL_CATOP (octave_sparse_matrix, octave_matrix, sm_m); | |
163 | |
164 INSTALL_ASSIGNOP (op_asn_eq, octave_sparse_matrix, octave_matrix, assign); | |
165 } |