annotate libinterp/parse-tree/pt-tm-const.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 a61e1a0f6024
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: 30390
diff changeset
3 // Copyright (C) 1996-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 ////////////////////////////////////////////////////////////////////////
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #if defined (HAVE_CONFIG_H)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 # include "config.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #endif
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include "oct-locbuf.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
31 #include "quit.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 #include "data.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 #include "defun.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include "error.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 #include "errwarn.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 #include "oct-map.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include "ovl.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 #include "pt-arg-list.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
40 #include "pt-bp.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 #include "pt-eval.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 #include "pt-exp.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 #include "pt-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
44 #include "pt-tm-const.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 #include "utils.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 #include "ov.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47 #include "variables.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49 #include "ov-cx-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 #include "ov-flt-cx-mat.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51 #include "ov-re-sparse.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 #include "ov-cx-sparse.h"
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 OCTAVE_NORETURN static
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 void
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 eval_error (const char *msg, const dim_vector& x, const dim_vector& y)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
58 error ("%s (%s vs %s)", msg, x.str ().c_str (), y.str ().c_str ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
60
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
61 namespace octave
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
62 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
63 void tm_row_const::cellify (void)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
65 bool elt_changed = false;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
66
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
67 for (auto& elt : m_values)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
68 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
69 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
70
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
71 if (! elt.iscell ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
72 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
73 elt_changed = true;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
74
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
75 if (elt.isempty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
76 elt = Cell ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
77 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
78 elt = Cell (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
79 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
80 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
81
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
82 if (! elt_changed)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
83 return;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
84
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
85 bool first_elem = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
86
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
87 for (const auto& val : m_values)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
88 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
89 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
90
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
91 dim_vector this_elt_dv = val.dims ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
92
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
93 if (! this_elt_dv.zero_by_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
94 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
95 if (first_elem)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
96 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
97 first_elem = false;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
98 m_dv = this_elt_dv;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
99 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
100 else if (! m_dv.hvcat (this_elt_dv, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
101 eval_error ("horizontal dimensions mismatch", m_dv, this_elt_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
102 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
103 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
104 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
105
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
106 void tm_row_const::init_element (const octave_value& val, bool& first_elem)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
107 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
108 std::string this_elt_class_name
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
109 = val.isobject () ? "class" : val.class_name ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
110
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
111 m_class_name = get_concat_class (m_class_name, this_elt_class_name);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
112
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
113 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
117 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 {
23584
7ed6b258db91 maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents: 23583
diff changeset
121 if (val.isstruct ())
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
122 m_first_elem_is_struct = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
123
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
124 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
125 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
126 }
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23515
diff changeset
127 else if (val.iscell ())
23515
4d7928872999 Fix concatenation of a struct with an empty cell array (bug #39041)
Mike Miller <mtmiller@octave.org>
parents: 23435
diff changeset
128 first_elem = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
130 m_values.push_back (val);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
132 if (m_all_strings && ! val.is_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
133 m_all_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
134
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
135 if (m_all_sq_strings && ! val.is_sq_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
136 m_all_sq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
138 if (m_all_dq_strings && ! val.is_dq_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
139 m_all_dq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
141 if (! m_some_strings && val.is_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
142 m_some_strings = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
143
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
144 if (m_all_real && ! val.isreal ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
145 m_all_real = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
146
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
147 if (m_all_complex && ! (val.iscomplex () || val.isreal ()))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
148 m_all_complex = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
150 if (! m_any_cell && val.iscell ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
151 m_any_cell = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
152
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
153 if (! m_any_sparse && val.issparse ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
154 m_any_sparse = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
156 if (! m_any_class && val.isobject ())
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
157 m_any_class = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
159 // Special treatment of sparse matrices to avoid out-of-memory error
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
160 m_all_1x1 = m_all_1x1 && ! val.issparse () && val.numel () == 1;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
161 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
162
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
163 void tm_row_const::init (const tree_argument_list& row, tree_evaluator& tw)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
164 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
165 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
166
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
167 for (auto *elt : row)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
168 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
169 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
170
27371
fcaecdbc8d8a don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
171 octave_value tmp = elt->evaluate (tw);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
172
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
173 if (tmp.is_undefined ())
28547
66397e171801 error on undefined elements in matrix lists (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 28542
diff changeset
174 error ("undefined element in matrix list");
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
175
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
176 if (tmp.is_cs_list ())
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
178 octave_value_list tlst = tmp.list_value ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
179
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
180 for (octave_idx_type i = 0; i < tlst.length (); i++)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
181 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
182 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
183
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
184 init_element (tlst(i), first_elem);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
185 }
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
186 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
187 else
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
188 init_element (tmp, first_elem);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
189 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
190
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
191 if (m_any_cell && ! m_any_class && ! m_first_elem_is_struct)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
192 cellify ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
193
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
194 first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
195
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
196 for (const auto& val : m_values)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
197 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
198 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
199
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
200 dim_vector this_elt_dv = val.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
201
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
202 if (! this_elt_dv.zero_by_zero ())
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
203 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
204 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
205
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
206 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
207 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
208 first_elem = false;
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
209 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
210 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
211 else if ((! m_any_class) && (! m_dv.hvcat (this_elt_dv, 1)))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
212 eval_error ("horizontal dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
213 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
214 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
215 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
216
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
217 octave_value tm_const::concat (char string_fill_char) const
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
219 if (m_tm_rows.empty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
220 return Matrix ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
221
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
222 // Try to speed up the common cases.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
223
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
224 std::string result_type = m_class_name;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
225
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
226 if (m_any_class)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
227 return class_concat ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
228 else if (result_type == "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
229 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
230 if (m_any_sparse)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
232 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
233 return sparse_array_concat<SparseMatrix> ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
234 else
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
235 return sparse_array_concat<SparseComplexMatrix> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
236 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
237 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
238 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
239 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
240 return array_concat<NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
241 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
242 return array_concat<ComplexNDArray> ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
243 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
245 else if (result_type == "single")
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
247 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
248 return array_concat<FloatNDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
249 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
250 return array_concat<FloatComplexNDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
251 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
252 else if (result_type == "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
253 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
254 if (! m_all_strings)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
255 warn_implicit_conversion ("Octave:num-to-str",
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
256 "numeric", result_type);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
257 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
258 maybe_warn_string_concat (m_all_dq_strings, m_all_sq_strings);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
259
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
260 return char_array_concat (string_fill_char);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
261 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
262 else if (result_type == "logical")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
263 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
264 if (m_any_sparse)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
265 return sparse_array_concat<SparseBoolMatrix> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
266 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
267 return array_concat<boolNDArray> ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
269 else if (result_type == "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
270 return array_concat<int8NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
271 else if (result_type == "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
272 return array_concat<int16NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
273 else if (result_type == "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
274 return array_concat<int32NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
275 else if (result_type == "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
276 return array_concat<int64NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
277 else if (result_type == "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
278 return array_concat<uint8NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
279 else if (result_type == "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
280 return array_concat<uint16NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
281 else if (result_type == "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
282 return array_concat<uint32NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
283 else if (result_type == "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
284 return array_concat<uint64NDArray> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
285 else if (result_type == "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
286 return array_concat<Cell> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
287 else if (result_type == "struct")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
288 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
289 if (m_all_1x1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
290 return map_concat<octave_scalar_map> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
291 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
292 return map_concat<octave_map> ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
293 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
294 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
295 return generic_concat ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
296 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
297
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
298 void tm_const::init (const tree_matrix& tm)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
299 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
300 bool first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
301 bool first_elem_is_struct = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
302
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
303 // Just eval and figure out if what we have is complex or all strings.
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
304 // We can't check columns until we know that this is a numeric matrix --
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
305 // collections of strings can have elements of different lengths.
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
306
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
307 for (const auto *elt : tm)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
308 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
309 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
310
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
311 tm_row_const row (*elt, m_evaluator);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
312
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
313 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
314 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
315 first_elem_is_struct = row.first_elem_struct_p ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
316
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
317 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
318 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
319
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
320 if (row.empty ())
28542
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
321 continue;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
322
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
323 if (m_all_strings && ! row.all_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
324 m_all_strings = false;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
325
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
326 if (m_all_sq_strings && ! row.all_sq_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
327 m_all_sq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
328
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
329 if (m_all_dq_strings && ! row.all_dq_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
330 m_all_dq_strings = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
331
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
332 if (! m_some_strings && row.some_strings_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
333 m_some_strings = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
334
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
335 if (m_all_real && ! row.all_real_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
336 m_all_real = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
337
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
338 if (m_all_complex && ! row.all_complex_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
339 m_all_complex = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
340
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
341 if (m_all_empty && ! row.all_empty_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
342 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
343
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
344 if (! m_any_cell && row.any_cell_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
345 m_any_cell = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
346
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
347 if (! m_any_sparse && row.any_sparse_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
348 m_any_sparse = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
349
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
350 if (! m_any_class && row.any_class_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
351 m_any_class = true;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
352
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
353 m_all_1x1 = m_all_1x1 && row.all_1x1_p ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
354
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
355 m_tm_rows.push_back (row);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
356 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
357
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
358 if (m_any_cell && ! m_any_class && ! first_elem_is_struct)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
359 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
360 for (auto& elt : m_tm_rows)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
361 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
362 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
363
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
364 elt.cellify ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
365 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
366 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
367
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
368 first_elem = true;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
369
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
370 for (const auto& elt : m_tm_rows)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
371 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
372 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
373
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
374 octave_idx_type this_elt_nr = elt.rows ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
375 octave_idx_type this_elt_nc = elt.cols ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
376
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
377 std::string this_elt_class_name = elt.class_name ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
378 m_class_name = get_concat_class (m_class_name, this_elt_class_name);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
379
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
380 dim_vector this_elt_dv = elt.dims ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
381
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
382 m_all_empty = false;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
383
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
384 if (first_elem)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
385 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
386 first_elem = false;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
387
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
388 m_dv = this_elt_dv;
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
389 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
390 else if (m_all_strings && m_dv.ndims () == 2
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
391 && this_elt_dv.ndims () == 2)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
392 {
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
393 // This is Octave's specialty.
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
394 // Character matrices support rows of unequal length.
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
395 if (m_dv.any_zero ())
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
396 {
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
397 // Empty existing element (bug #52542).
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
398 // Replace empty element with non-empty one.
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
399 m_dv = this_elt_dv;
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
400 }
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
401 else
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
402 {
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
403 if (this_elt_nc > cols ())
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
404 m_dv(1) = this_elt_nc;
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
405 m_dv(0) += this_elt_nr;
24339
648616b26cc6 maint: merge of stable to default.
Rik <rik@octave.org>
parents: 23829
diff changeset
406 }
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
407 }
24846
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
408 else if ((! m_any_class) && (! m_dv.hvcat (this_elt_dv, 0)))
7620f1f5290d use m_ prefix for member variables in parse tree classes
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
409 eval_error ("vertical dimensions mismatch", m_dv, this_elt_dv);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
410 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
411 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
412
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
413 octave_value tm_const::char_array_concat (char string_fill_char) const
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
414 {
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
415 char type = (m_all_dq_strings ? '"' : '\'');
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
416
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
417 charNDArray result (m_dv, string_fill_char);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
418
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
419 array_concat_internal<charNDArray> (result);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
420
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
421 return octave_value (result, type);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
422 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
423
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
424 octave_value tm_const::class_concat (void) const
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
425 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
426 octave_value retval;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
427
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
428 octave_value_list rows (m_tm_rows.size (), octave_value ());
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
429
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
430 octave_idx_type j = 0;
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
431 for (const auto& tmrc : m_tm_rows)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
432 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
433 octave_quit ();
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
434
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
435 if (tmrc.length () == 1)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
436 rows(j++) = *(tmrc.begin ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
437 else
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
438 {
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
439 octave_value_list row (tmrc.length (), octave_value ());
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
440
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
441 octave_idx_type i = 0;
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
442 for (const auto& elt : tmrc)
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
443 row(i++) = elt;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
444
29955
693329e53f25 move do_class_concat function inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29655
diff changeset
445 rows(j++) = do_class_concat (row, "horzcat", 1);
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
446 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
447 }
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
448
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
449 if (rows.length () == 1)
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
450 retval = rows(0);
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
451 else
29955
693329e53f25 move do_class_concat function inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29655
diff changeset
452 retval = do_class_concat (rows, "vertcat", 0);
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
453
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
454 return retval;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
455 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
456
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
457 octave_value tm_const::generic_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
458 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
459 // The line below might seem crazy, since we take a copy of the
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
460 // first argument, resize it to be empty and then resize it to be
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
461 // full. This is done since it means that there is no recopying of
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
462 // data, as would happen if we used a single resize. It should be
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
463 // noted that resize operation is also significantly slower than the
28631
70cdf8de553d move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents: 28579
diff changeset
464 // cat_op function, so it makes sense to have an empty matrix and
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
465 // copy all data.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
466 //
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
467 // We might also start with a empty octave_value using
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
468 //
27102
84ff9953faa1 where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
469 // ctmp = type_info::lookup_type (tmp.begin() -> begin() -> type_name());
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
470 //
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
471 // and then directly resize. However, for some types there might be
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
472 // some additional setup needed, and so this should be avoided.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
473
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
474 octave_value ctmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
475
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
476 // Find the first non-empty object
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
477
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
478 if (m_any_sparse)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
479 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
480 // Start with sparse matrix to avoid issues memory issues with
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
481 // things like [ones(1,4),sprandn(1e8,4,1e-4)]
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
482
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
483 if (m_all_real)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
484 ctmp = octave_sparse_matrix ().resize (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
485 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
486 ctmp = octave_sparse_complex_matrix ().resize (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
487 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
488 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
489 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
490 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
491 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
492 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
493
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
494 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
495 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
496 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
497
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
498 ctmp = elt;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
499
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
500 if (! ctmp.all_zero_dims ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
501 goto found_non_empty;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
502 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
503 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
504
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
505 ctmp = (*(m_tm_rows.begin () -> begin ()));
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
506
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
507 found_non_empty:
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
508
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
509 if (! m_all_empty)
30390
a61e1a0f6024 maint: style check C++ files in libinterp/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 29955
diff changeset
510 ctmp = ctmp.resize (dim_vector (0, 0)).resize (m_dv);
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
511 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
512
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
513 // Now, extract the values from the individual elements and insert
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
514 // them in the result matrix.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
515
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
516 interpreter& interp = m_evaluator.get_interpreter ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
517
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
518 type_info& ti = interp.get_type_info ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
519
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
520 int dv_len = m_dv.ndims ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
521 octave_idx_type ntmp = (dv_len > 1 ? dv_len : 2);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
522 Array<octave_idx_type> ra_idx (dim_vector (ntmp, 1), 0);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
523
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
524 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
525 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
526 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
527
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
528 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
529 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
530 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
531
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
532 if (elt.isempty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
533 continue;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
534
28631
70cdf8de553d move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents: 28579
diff changeset
535 ctmp = cat_op (ti, ctmp, elt, ra_idx);
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
536
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
537 ra_idx (1) += elt.columns ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
538 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
539
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
540 ra_idx (0) += row.rows ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
541 ra_idx (1) = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
542 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
543
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
544 octave_value retval = ctmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
545
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
546 // If some elements are strings, force the result to be a string.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
547
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
548 if (m_some_strings && ! retval.is_string ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
549 retval = retval.convert_to_str ();
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
550
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
551 return retval;
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
552 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
553
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
554 // The result is passed as a parameter to this function so that the
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
555 // char_array_concat function can create the array externally.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
556 // Otherwise, we would need a specialization of this function for
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
557 // character arrays just to handle string_fill_char.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
558
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
559 template <typename TYPE>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
560 void tm_const::array_concat_internal (TYPE& result) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
561 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
562 octave_idx_type r = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
563 octave_idx_type c = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
564
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
565 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
566 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
567 // Skip empty arrays to allow looser rules.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
568 if (row.dims ().any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
569 continue;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
570
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
571 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
572 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
573 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
574
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
575 TYPE ra = octave_value_extract<TYPE> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
576
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
577 // Skip empty arrays to allow looser rules.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
578
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
579 if (! ra.isempty ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
580 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
581 result.insert (ra, r, c);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
582
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
583 c += ra.columns ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
584 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
585 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
586
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
587 r += row.rows ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
588 c = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
589 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
590 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
591
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
592 template <typename TYPE>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
593 TYPE tm_const::array_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
594 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
595 typedef typename TYPE::element_type ELT_T;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
596
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
597 if (m_dv.any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
598 return TYPE (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
599
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
600 if (m_tm_rows.size () == 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
601 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
602 // If possible, forward the operation to liboctave.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
603 // Single row.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
604 const tm_row_const& row = m_tm_rows.front ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
605 if (! (equal_types<ELT_T, char>::value
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
606 || equal_types<ELT_T, octave_value>::value)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
607 && row.all_1x1_p ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
608 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
609 // Optimize all scalars case.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
610 TYPE result (m_dv);
29654
d13d090cb03a use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
611 assert (static_cast<std::size_t> (result.numel ()) == row.length ());
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
612 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
613 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
614 result(i++) = octave_value_extract<ELT_T> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
615
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
616 return result;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
617 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
618
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
619 octave_idx_type ncols = row.length ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
620 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
621 OCTAVE_LOCAL_BUFFER (TYPE, array_list, ncols);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
622
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
623 for (const auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
624 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
625 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
626
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
627 array_list[i++] = octave_value_extract<TYPE> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
628 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
629
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
630 return TYPE::cat (-2, ncols, array_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
631 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
632 else
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
633 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
634 TYPE result (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
635 array_concat_internal<TYPE> (result);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
636 return result;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
637 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
638 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
639
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
640 template <typename TYPE>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
641 TYPE tm_const::sparse_array_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
642 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
643 if (m_dv.any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
644 return TYPE (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
645
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
646 // Sparse matrices require preallocation for efficient indexing; besides,
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
647 // only horizontal concatenation can be efficiently handled by indexing.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
648 // So we just cat all rows through liboctave, then cat the final column.
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
649 octave_idx_type nrows = m_tm_rows.size ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
650 octave_idx_type j = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
651 OCTAVE_LOCAL_BUFFER (TYPE, sparse_row_list, nrows);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
652 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
653 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
654 octave_idx_type ncols = row.length ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
655 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
656 OCTAVE_LOCAL_BUFFER (TYPE, sparse_list, ncols);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
657
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
658 for (auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
659 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
660 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
661
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
662 sparse_list[i] = octave_value_extract<TYPE> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
663 i++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
664 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
665
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
666 TYPE stmp = TYPE::cat (-2, ncols, sparse_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
667 sparse_row_list[j] = stmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
668 j++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
669 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
670
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
671 return TYPE::cat (-1, nrows, sparse_row_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
672 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
673
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
674 template <typename MAP>
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
675 octave_map tm_const::map_concat (void) const
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
676 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
677 if (m_dv.any_zero ())
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
678 return octave_map (m_dv);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
679
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
680 octave_idx_type nrows = m_tm_rows.size ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
681 octave_idx_type j = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
682 OCTAVE_LOCAL_BUFFER (octave_map, map_row_list, nrows);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
683 for (const auto& row : m_tm_rows)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
684 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
685 octave_idx_type ncols = row.length ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
686 octave_idx_type i = 0;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
687 OCTAVE_LOCAL_BUFFER (MAP, map_list, ncols);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
688
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
689 for (auto& elt : row)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
690 {
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
691 octave_quit ();
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
692
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
693 map_list[i] = octave_value_extract<MAP> (elt);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
694 i++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
695 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
696
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
697 octave_map mtmp = octave_map::cat (-2, ncols, map_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
698 map_row_list[j] = mtmp;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
699 j++;
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
700 }
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
701
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
702 return octave_map::cat (-1, nrows, map_row_list);
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
703 }
23435
c452180ab672 begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
diff changeset
704 }
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
705
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
706 /*
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
707 ## test concatenation with all zero matrices
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
708 %!assert ([ "" 65*ones(1,10) ], "AAAAAAAAAA")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
709 %!assert ([ 65*ones(1,10) "" ], "AAAAAAAAAA")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
710
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
711 %!test
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
712 %! c = {"foo"; "bar"; "bazoloa"};
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
713 %! assert ([c; "a"; "bc"; "def"], {"foo"; "bar"; "bazoloa"; "a"; "bc"; "def"});
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
714
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
715 %!assert (class ([int64(1), int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
716 %!assert (class ([int64(1), int32(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
717 %!assert (class ([int64(1), int16(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
718 %!assert (class ([int64(1), int8(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
719 %!assert (class ([int64(1), uint64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
720 %!assert (class ([int64(1), uint32(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
721 %!assert (class ([int64(1), uint16(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
722 %!assert (class ([int64(1), uint8(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
723 %!assert (class ([int64(1), single(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
724 %!assert (class ([int64(1), double(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
725 %!assert (class ([int64(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
726 %!assert (class ([int64(1), true]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
727 %!assert (class ([int64(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
728
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
729 %!assert (class ([int32(1), int64(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
730 %!assert (class ([int32(1), int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
731 %!assert (class ([int32(1), int16(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
732 %!assert (class ([int32(1), int8(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
733 %!assert (class ([int32(1), uint64(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
734 %!assert (class ([int32(1), uint32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
735 %!assert (class ([int32(1), uint16(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
736 %!assert (class ([int32(1), uint8(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
737 %!assert (class ([int32(1), single(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
738 %!assert (class ([int32(1), double(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
739 %!assert (class ([int32(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
740 %!assert (class ([int32(1), true]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
741 %!assert (class ([int32(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
742
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
743 %!assert (class ([int16(1), int64(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
744 %!assert (class ([int16(1), int32(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
745 %!assert (class ([int16(1), int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
746 %!assert (class ([int16(1), int8(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
747 %!assert (class ([int16(1), uint64(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
748 %!assert (class ([int16(1), uint32(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
749 %!assert (class ([int16(1), uint16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
750 %!assert (class ([int16(1), uint8(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
751 %!assert (class ([int16(1), single(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
752 %!assert (class ([int16(1), double(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
753 %!assert (class ([int16(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
754 %!assert (class ([int16(1), true]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
755 %!assert (class ([int16(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
756
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
757 %!assert (class ([int8(1), int64(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
758 %!assert (class ([int8(1), int32(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
759 %!assert (class ([int8(1), int16(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
760 %!assert (class ([int8(1), int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
761 %!assert (class ([int8(1), uint64(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
762 %!assert (class ([int8(1), uint32(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
763 %!assert (class ([int8(1), uint16(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
764 %!assert (class ([int8(1), uint8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
765 %!assert (class ([int8(1), single(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
766 %!assert (class ([int8(1), double(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
767 %!assert (class ([int8(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
768 %!assert (class ([int8(1), true]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
769 %!assert (class ([int8(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
770
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
771 %!assert (class ([uint64(1), int64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
772 %!assert (class ([uint64(1), int32(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
773 %!assert (class ([uint64(1), int16(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
774 %!assert (class ([uint64(1), int8(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
775 %!assert (class ([uint64(1), uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
776 %!assert (class ([uint64(1), uint32(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
777 %!assert (class ([uint64(1), uint16(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
778 %!assert (class ([uint64(1), uint8(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
779 %!assert (class ([uint64(1), single(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
780 %!assert (class ([uint64(1), double(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
781 %!assert (class ([uint64(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
782 %!assert (class ([uint64(1), true]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
783 %!assert (class ([uint64(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
784
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
785 %!assert (class ([uint32(1), int64(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
786 %!assert (class ([uint32(1), int32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
787 %!assert (class ([uint32(1), int16(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
788 %!assert (class ([uint32(1), int8(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
789 %!assert (class ([uint32(1), uint64(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
790 %!assert (class ([uint32(1), uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
791 %!assert (class ([uint32(1), uint16(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
792 %!assert (class ([uint32(1), uint8(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
793 %!assert (class ([uint32(1), single(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
794 %!assert (class ([uint32(1), double(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
795 %!assert (class ([uint32(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
796 %!assert (class ([uint32(1), true]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
797 %!assert (class ([uint32(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
798
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
799 %!assert (class ([uint16(1), int64(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
800 %!assert (class ([uint16(1), int32(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
801 %!assert (class ([uint16(1), int16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
802 %!assert (class ([uint16(1), int8(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
803 %!assert (class ([uint16(1), uint64(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
804 %!assert (class ([uint16(1), uint32(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
805 %!assert (class ([uint16(1), uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
806 %!assert (class ([uint16(1), uint8(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
807 %!assert (class ([uint16(1), single(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
808 %!assert (class ([uint16(1), double(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
809 %!assert (class ([uint16(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
810 %!assert (class ([uint16(1), true]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
811 %!assert (class ([uint16(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
812
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
813 %!assert (class ([uint8(1), int64(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
814 %!assert (class ([uint8(1), int32(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
815 %!assert (class ([uint8(1), int16(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
816 %!assert (class ([uint8(1), int8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
817 %!assert (class ([uint8(1), uint64(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
818 %!assert (class ([uint8(1), uint32(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
819 %!assert (class ([uint8(1), uint16(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
820 %!assert (class ([uint8(1), uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
821 %!assert (class ([uint8(1), single(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
822 %!assert (class ([uint8(1), double(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
823 %!assert (class ([uint8(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
824 %!assert (class ([uint8(1), true]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
825 %!assert (class ([uint8(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
826
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
827 %!assert (class ([single(1), int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
828 %!assert (class ([single(1), int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
829 %!assert (class ([single(1), int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
830 %!assert (class ([single(1), int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
831 %!assert (class ([single(1), uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
832 %!assert (class ([single(1), uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
833 %!assert (class ([single(1), uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
834 %!assert (class ([single(1), uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
835 %!assert (class ([single(1), single(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
836 %!assert (class ([single(1), double(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
837 %!assert (class ([single(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
838 %!assert (class ([single(1), true]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
839 %!assert (class ([single(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
840
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
841 %!assert (class ([double(1), int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
842 %!assert (class ([double(1), int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
843 %!assert (class ([double(1), int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
844 %!assert (class ([double(1), int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
845 %!assert (class ([double(1), uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
846 %!assert (class ([double(1), uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
847 %!assert (class ([double(1), uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
848 %!assert (class ([double(1), uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
849 %!assert (class ([double(1), single(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
850 %!assert (class ([double(1), double(1)]), "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
851 %!assert (class ([double(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
852 %!assert (class ([double(1), true]), "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
853 %!assert (class ([double(1), "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
854
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
855 %!assert (class ([cell(1), int64(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
856 %!assert (class ([cell(1), int32(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
857 %!assert (class ([cell(1), int16(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
858 %!assert (class ([cell(1), int8(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
859 %!assert (class ([cell(1), uint64(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
860 %!assert (class ([cell(1), uint32(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
861 %!assert (class ([cell(1), uint16(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
862 %!assert (class ([cell(1), uint8(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
863 %!assert (class ([cell(1), single(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
864 %!assert (class ([cell(1), double(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
865 %!assert (class ([cell(1), cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
866 %!assert (class ([cell(1), true]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
867 %!assert (class ([cell(1), "a"]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
868
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
869 %!assert (class ([true, int64(1)]), "int64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
870 %!assert (class ([true, int32(1)]), "int32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
871 %!assert (class ([true, int16(1)]), "int16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
872 %!assert (class ([true, int8(1)]), "int8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
873 %!assert (class ([true, uint64(1)]), "uint64")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
874 %!assert (class ([true, uint32(1)]), "uint32")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
875 %!assert (class ([true, uint16(1)]), "uint16")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
876 %!assert (class ([true, uint8(1)]), "uint8")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
877 %!assert (class ([true, single(1)]), "single")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
878 %!assert (class ([true, double(1)]), "double")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
879 %!assert (class ([true, cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
880 %!assert (class ([true, true]), "logical")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
881 %!assert (class ([true, "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
882
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
883 %!assert (class (["a", int64(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
884 %!assert (class (["a", int32(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
885 %!assert (class (["a", int16(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
886 %!assert (class (["a", int8(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
887 %!assert (class (["a", int64(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
888 %!assert (class (["a", int32(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
889 %!assert (class (["a", int16(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
890 %!assert (class (["a", int8(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
891 %!assert (class (["a", single(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
892 %!assert (class (["a", double(1)]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
893 %!assert (class (["a", cell(1)]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
894 %!assert (class (["a", true]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
895 %!assert (class (["a", "a"]), "char")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
896
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
897 %!assert (class ([cell(1), struct("foo", "bar")]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
898 %!error [struct("foo", "bar"), cell(1)]
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
899
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
900 %!test <*39041> assert (class ([cell(0), struct()]), "cell")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
901 %!test <51086> assert (class ([struct(), cell(0)]), "struct")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
902
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
903 %!assert ([,1], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
904 %!assert ([1,], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
905 %!assert ([,1,], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
906 %!assert ([,1,;;], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
907 %!assert ([,1,;,;], 1)
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
908
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
909 %!assert ([1,1], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
910 %!assert ([,1,1], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
911 %!assert ([1,1,], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
912 %!assert ([,1,1,], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
913 %!assert ([,1,1,;;], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
914 %!assert ([,1,1,;,;], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
915 %!assert ([,;,1,1], ones (1, 2))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
916
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
917 %!assert ([1;1], ones (2, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
918 %!assert ([1,;1], ones (2, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
919 %!assert ([1,;,;1], ones (2, 1))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
920
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
921 %!error eval ("[,,]")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
922 %!error eval ("[,,;,]")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
923 %!error eval ("[,;,,;,]")
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
924
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
925 %!assert (isnull ([,]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
926 %!assert (isnull ([;]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
927 %!assert (isnull ([;;]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
928 %!assert (isnull ([;,;]))
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
929 %!assert (isnull ([,;,;,]))
28542
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
930
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
931 ## Undefined elements.
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
932 %!function my_undef ()
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
933 %!endfunction
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
934 %!
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
935 %!shared es
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
936 %! es = struct ("a", {});
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
937 %!
28579
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
938 %!assert <*58695> ([1; es.a; 3], [1; 3])
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
939 %!test <*58695>
28547
66397e171801 error on undefined elements in matrix lists (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 28542
diff changeset
940 %! fail ("undefined element in matrix list", "[1; my_undef(), 3]");
28542
c318254c9f01 accept and ignore undefined elements in matrix concatentation (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 27923
diff changeset
941 %!
28579
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
942 %!assert <*58695> ([es.a; es.a; 3], 3)
713398d4a3c3 update bug status of tests marked with bug numbers
John W. Eaton <jwe@octave.org>
parents: 28547
diff changeset
943 %!test <*58695>
28547
66397e171801 error on undefined elements in matrix lists (bug #58695)
John W. Eaton <jwe@octave.org>
parents: 28542
diff changeset
944 %! fail ("undefined element in matrix list", "[my_undef(); my_undef(); 3]")
25393
b860a7e526cf refactor evaluation of tree_matrix object
John W. Eaton <jwe@octave.org>
parents: 25383
diff changeset
945 */