annotate libinterp/corefcn/tril.cc @ 20939:b17fda023ca6

maint: Use new C++ archetype in more files. Place input validation first in files. Move declaration of retval down in function to be closer to point of usage. Eliminate else clause after if () error. Use "return ovl()" where it makes sense. * find.cc, gammainc.cc, gcd.cc, getgrent.cc, getpwent.cc, givens.cc, graphics.cc, help.cc, hess.cc, hex2num.cc, input.cc, kron.cc, load-path.cc, load-save.cc, lookup.cc, mappers.cc, matrix_type.cc, mgorth.cc, nproc.cc, ordschur.cc, pager.cc, pinv.cc, pr-output.cc, profiler.cc, psi.cc, quad.cc, rcond.cc, regexp.cc, schur.cc, sighandlers.cc, sparse.cc, str2double.cc, strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc, symtab.cc, syscalls.cc, sysdep.cc, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc, urlwrite.cc, utils.cc, variables.cc, __delaunayn__.cc, __eigs__.cc, __glpk__.cc, __magick_read__.cc, __osmesa_print__.cc, __voronoi__.cc, amd.cc, audiodevinfo.cc, audioread.cc, chol.cc, colamd.cc, dmperm.cc, fftw.cc, qr.cc, symbfact.cc, symrcm.cc, ov-bool-mat.cc, ov-cell.cc, ov-class.cc, ov-classdef.cc, ov-fcn-handle.cc, ov-fcn-inline.cc, ov-flt-re-mat.cc, ov-java.cc, ov-null-mat.cc, ov-oncleanup.cc, ov-re-mat.cc, ov-struct.cc, ov-typeinfo.cc, ov-usr-fcn.cc, ov.cc, octave.cc: Use new C++ archetype in more files.
author Rik <rik@octave.org>
date Fri, 18 Dec 2015 15:37:22 -0800
parents 1142cf6abc0d
children 48b2ad5ee801
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
1 /*
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
2
19697
4197fc428c7d maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents: 19038
diff changeset
3 Copyright (C) 2004-2015 David Bateman
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
4 Copyright (C) 2009 VZLU Prague
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
5
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
6 This file is part of Octave.
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
7
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
9 under the terms of the GNU General Public License as published by the
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
10 Free Software Foundation; either version 3 of the License, or (at your
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
11 option) any later version.
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
12
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
16 for more details.
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
17
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, see
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
20 <http://www.gnu.org/licenses/>.
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
21
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
22 */
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
23
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
25 #include <config.h>
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
26 #endif
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
27
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
28 #include <algorithm>
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
29 #include "Array.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
30 #include "Sparse.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
31 #include "mx-base.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
32
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
33 #include "ov.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
34 #include "Cell.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
35
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14854
diff changeset
36 #include "defun.h"
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
37 #include "error.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
38 #include "oct-obj.h"
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
39
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
40 // The bulk of the work.
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
41 template <class T>
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
42 static Array<T>
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
43 do_tril (const Array<T>& a, octave_idx_type k, bool pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
44 {
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
45 octave_idx_type nr = a.rows ();
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
46 octave_idx_type nc = a.columns ();
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
47 const T *avec = a.fortran_vec ();
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
48 octave_idx_type zero = 0;
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
49
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
50 if (pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
51 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
52 octave_idx_type j1 = std::min (std::max (zero, k), nc);
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
53 octave_idx_type j2 = std::min (std::max (zero, nr + k), nc);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
54 octave_idx_type n = j1 * nr + ((j2 - j1) * (nr-(j1-k) + nr-(j2-1-k))) / 2;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11553
diff changeset
55 Array<T> r (dim_vector (n, 1));
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
56 T *rvec = r.fortran_vec ();
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
57 for (octave_idx_type j = 0; j < nc; j++)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
58 {
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
59 octave_idx_type ii = std::min (std::max (zero, j - k), nr);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
60 rvec = std::copy (avec + ii, avec + nr, rvec);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
61 avec += nr;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
62 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
63
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
64 return r;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
65 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
66 else
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
67 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
68 Array<T> r (a.dims ());
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
69 T *rvec = r.fortran_vec ();
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
70 for (octave_idx_type j = 0; j < nc; j++)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
71 {
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
72 octave_idx_type ii = std::min (std::max (zero, j - k), nr);
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14501
diff changeset
73 std::fill (rvec, rvec + ii, T ());
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
74 std::copy (avec + ii, avec + nr, rvec + ii);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
75 avec += nr;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
76 rvec += nr;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
77 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
78
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
79 return r;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
80 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
81 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
82
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
83 template <class T>
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
84 static Array<T>
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
85 do_triu (const Array<T>& a, octave_idx_type k, bool pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
86 {
18100
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
87 octave_idx_type nr = a.rows ();
6a71e5030df5 Follow coding convention of defining and initializing only 1 variable per line in liboctinterp.
Rik <rik@octave.org>
parents: 17787
diff changeset
88 octave_idx_type nc = a.columns ();
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
89 const T *avec = a.fortran_vec ();
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
90 octave_idx_type zero = 0;
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
91
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
92 if (pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
93 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
94 octave_idx_type j1 = std::min (std::max (zero, k), nc);
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
95 octave_idx_type j2 = std::min (std::max (zero, nr + k), nc);
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
96 octave_idx_type n
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
97 = ((j2 - j1) * ((j1+1-k) + (j2-k))) / 2 + (nc - j2) * nr;
11570
57632dea2446 attempt better backward compatibility for Array constructors
John W. Eaton <jwe@octave.org>
parents: 11553
diff changeset
98 Array<T> r (dim_vector (n, 1));
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
99 T *rvec = r.fortran_vec ();
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
100 for (octave_idx_type j = 0; j < nc; j++)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
101 {
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
102 octave_idx_type ii = std::min (std::max (zero, j + 1 - k), nr);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
103 rvec = std::copy (avec, avec + ii, rvec);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
104 avec += nr;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
105 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
106
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
107 return r;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
108 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
109 else
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
110 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
111 NoAlias<Array<T> > r (a.dims ());
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
112 T *rvec = r.fortran_vec ();
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
113 for (octave_idx_type j = 0; j < nc; j++)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
114 {
10258
e317791645c4 64-bit fixes
John W. Eaton <jwe@octave.org>
parents: 10155
diff changeset
115 octave_idx_type ii = std::min (std::max (zero, j + 1 - k), nr);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
116 std::copy (avec, avec + ii, rvec);
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14501
diff changeset
117 std::fill (rvec + ii, rvec + nr, T ());
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
118 avec += nr;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
119 rvec += nr;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
120 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
121
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
122 return r;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
123 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
124 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
125
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
126 // These two are by David Bateman.
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
127 // FIXME: optimizations possible. "pack" support missing.
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
128
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
129 template <class T>
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
130 static Sparse<T>
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
131 do_tril (const Sparse<T>& a, octave_idx_type k, bool pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
132 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
133 if (pack) // FIXME
20831
35241c4b696c eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
134 error ("tril: \"pack\" not implemented for sparse matrices");
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
135
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
136 Sparse<T> m = a;
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14501
diff changeset
137 octave_idx_type nc = m.cols ();
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
138
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
139 for (octave_idx_type j = 0; j < nc; j++)
14854
5ae9f0f77635 maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
140 for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
5ae9f0f77635 maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
141 if (m.ridx (i) < j-k)
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
142 m.data(i) = 0.;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
143
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
144 m.maybe_compress (true);
20831
35241c4b696c eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
145
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
146 return m;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
147 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
148
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
149 template <class T>
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
150 static Sparse<T>
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
151 do_triu (const Sparse<T>& a, octave_idx_type k, bool pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
152 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
153 if (pack) // FIXME
20831
35241c4b696c eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents: 20812
diff changeset
154 error ("triu: \"pack\" not implemented for sparse matrices");
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
155
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
156 Sparse<T> m = a;
14846
460a3c6d8bf1 maint: Use Octave coding convention for cuddled parenthis in function calls with empty argument lists.
Rik <octave@nomad.inbox5.com>
parents: 14501
diff changeset
157 octave_idx_type nc = m.cols ();
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
158
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
159 for (octave_idx_type j = 0; j < nc; j++)
14854
5ae9f0f77635 maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
160 for (octave_idx_type i = m.cidx (j); i < m.cidx (j+1); i++)
5ae9f0f77635 maint: Use Octave coding conventions for coddling parenthis is DLD-FUNCTIONS directory
Rik <octave@nomad.inbox5.com>
parents: 14846
diff changeset
161 if (m.ridx (i) > j-k)
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
162 m.data(i) = 0.;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
163
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
164 m.maybe_compress (true);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
165 return m;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
166 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
167
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
168 // Convenience dispatchers.
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
169 template <class T>
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
170 static Array<T>
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
171 do_trilu (const Array<T>& a, octave_idx_type k, bool lower, bool pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
172 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
173 return lower ? do_tril (a, k, pack) : do_triu (a, k, pack);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
174 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
175
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
176 template <class T>
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
177 static Sparse<T>
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
178 do_trilu (const Sparse<T>& a, octave_idx_type k, bool lower, bool pack)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
179 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
180 return lower ? do_tril (a, k, pack) : do_triu (a, k, pack);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
181 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
182
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
183 static octave_value
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
184 do_trilu (const std::string& name,
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
185 const octave_value_list& args)
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
186 {
20812
d9ca869ca124 maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents: 20800
diff changeset
187 bool lower = (name == "tril");
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
188
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
189 int nargin = args.length ();
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
190 bool pack = false;
20812
d9ca869ca124 maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents: 20800
diff changeset
191
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
192 if (nargin >= 2 && args(nargin-1).is_string ())
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
193 {
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
194 pack = (args(nargin-1).string_value () == "pack");
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
195 nargin--;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
196 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
197
20812
d9ca869ca124 maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents: 20800
diff changeset
198 if (nargin < 1 || nargin > 2)
d9ca869ca124 maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents: 20800
diff changeset
199 print_usage ();
d9ca869ca124 maint: Clean-up more instances of print_usage().
Rik <rik@octave.org>
parents: 20800
diff changeset
200
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
201 octave_idx_type k = 0;
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
202 if (nargin == 2)
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20218
diff changeset
203 k = args(1).int_value (true);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
204
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
205 octave_value arg = args(0);
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
206
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
207 dim_vector dims = arg.dims ();
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
208 if (dims.length () != 2)
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
209 error ("%s: need a 2-D matrix", name.c_str ());
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
210 else if (k < -dims(0) || k > dims(1))
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
211 error ("%s: requested diagonal out of range", name.c_str ());
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
212
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
213 octave_value retval;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
214
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
215 switch (arg.builtin_type ())
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
216 {
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
217 case btyp_double:
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
218 if (arg.is_sparse_type ())
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
219 retval = do_trilu (arg.sparse_matrix_value (), k, lower, pack);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
220 else
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
221 retval = do_trilu (arg.array_value (), k, lower, pack);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
222 break;
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
223
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
224 case btyp_complex:
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
225 if (arg.is_sparse_type ())
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
226 retval = do_trilu (arg.sparse_complex_matrix_value (), k, lower,
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
227 pack);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
228 else
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
229 retval = do_trilu (arg.complex_array_value (), k, lower, pack);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
230 break;
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
231
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
232 case btyp_bool:
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
233 if (arg.is_sparse_type ())
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
234 retval = do_trilu (arg.sparse_bool_matrix_value (), k, lower,
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
235 pack);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
236 else
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
237 retval = do_trilu (arg.bool_array_value (), k, lower, pack);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
238 break;
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
239
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
240 #define ARRAYCASE(TYP) \
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
241 case btyp_ ## TYP: \
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
242 retval = do_trilu (arg.TYP ## _array_value (), k, lower, pack); \
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
243 break
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
244
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
245 ARRAYCASE (float);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
246 ARRAYCASE (float_complex);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
247 ARRAYCASE (int8);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
248 ARRAYCASE (int16);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
249 ARRAYCASE (int32);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
250 ARRAYCASE (int64);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
251 ARRAYCASE (uint8);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
252 ARRAYCASE (uint16);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
253 ARRAYCASE (uint32);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
254 ARRAYCASE (uint64);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
255 ARRAYCASE (char);
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
256
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
257 #undef ARRAYCASE
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
258
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
259 default:
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
260 {
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
261 // Generic code that works on octave-values, that is slow
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
262 // but will also work on arbitrary user types
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
263 if (pack) // FIXME
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
264 error ("%s: \"pack\" not implemented for class %s",
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
265 name.c_str (), arg.class_name ().c_str ());
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
266
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
267 octave_value tmp = arg;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
268 if (arg.numel () == 0)
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
269 return arg;
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
270
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
271 octave_idx_type nr = dims(0);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
272 octave_idx_type nc = dims(1);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
273
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
274 // The sole purpose of this code is to force the correct matrix size.
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
275 // This would not be necessary if the octave_value resize function
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
276 // allowed a fill_value. It also allows odd attributes in some user
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
277 // types to be handled. With a fill_value, it should be replaced with
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
278 //
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
279 // octave_value_list ov_idx;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
280 // tmp = tmp.resize(dim_vector (0,0)).resize (dims, fill_value);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
281
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
282 octave_value_list ov_idx;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
283 std::list<octave_value_list> idx_tmp;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
284 ov_idx(1) = static_cast<double> (nc+1);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
285 ov_idx(0) = Range (1, nr);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
286 idx_tmp.push_back (ov_idx);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
287 ov_idx(1) = static_cast<double> (nc);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
288 tmp = tmp.resize (dim_vector (0,0));
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
289 tmp = tmp.subsasgn ("(",idx_tmp, arg.do_index_op (ov_idx));
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
290 tmp = tmp.resize (dims);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
291
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
292 if (lower)
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
293 {
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
294 octave_idx_type st = nc < nr + k ? nc : nr + k;
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
295
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
296 for (octave_idx_type j = 1; j <= st; j++)
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
297 {
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
298 octave_idx_type nr_limit = 1 > j - k ? 1 : j - k;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
299 ov_idx(1) = static_cast<double> (j);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
300 ov_idx(0) = Range (nr_limit, nr);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
301 std::list<octave_value_list> idx;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
302 idx.push_back (ov_idx);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
303
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
304 tmp = tmp.subsasgn ("(", idx, arg.do_index_op (ov_idx));
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
305 }
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
306 }
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
307 else
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
308 {
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
309 octave_idx_type st = k + 1 > 1 ? k + 1 : 1;
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
310
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
311 for (octave_idx_type j = st; j <= nc; j++)
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
312 {
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
313 octave_idx_type nr_limit = nr < j - k ? nr : j - k;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
314 ov_idx(1) = static_cast<double> (j);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
315 ov_idx(0) = Range (1, nr_limit);
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
316 std::list<octave_value_list> idx;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
317 idx.push_back (ov_idx);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
318
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
319 tmp = tmp.subsasgn ("(", idx, arg.do_index_op (ov_idx));
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
320 }
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
321 }
20800
fb128aafc322 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20555
diff changeset
322
20939
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
323 retval = tmp;
b17fda023ca6 maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents: 20853
diff changeset
324 }
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
325 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
326
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
327 return retval;
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
328 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
329
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14854
diff changeset
330 DEFUN (tril, args, ,
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
331 "-*- texinfo -*-\n\
20853
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
332 @deftypefn {} {} tril (@var{A})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
333 @deftypefnx {} {} tril (@var{A}, @var{k})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
334 @deftypefnx {} {} tril (@var{A}, @var{k}, @var{pack})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
335 @deftypefnx {} {} triu (@var{A})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
336 @deftypefnx {} {} triu (@var{A}, @var{k})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
337 @deftypefnx {} {} triu (@var{A}, @var{k}, @var{pack})\n\
11152
39ae406df598 Improve docstrings for functions found in undocumented list.
Rik <octave@nomad.inbox5.com>
parents: 11104
diff changeset
338 Return a new matrix formed by extracting the lower (@code{tril})\n\
11553
01f703952eff Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
339 or upper (@code{triu}) triangular part of the matrix @var{A}, and\n\
20172
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
340 setting all other elements to zero.\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
341 \n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
342 The second argument is optional, and specifies how many diagonals above or\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
343 below the main diagonal should also be set to zero.\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
344 \n\
20172
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
345 The default value of @var{k} is zero, so that @code{triu} and @code{tril}\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
346 normally include the main diagonal as part of the result.\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
347 \n\
20172
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
348 If the value of @var{k} is nonzero integer, the selection of elements starts\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
349 at an offset of @var{k} diagonals above or below the main diagonal; above\n\
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
350 for positive @var{k} and below for negative @var{k}.\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
351 \n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
352 The absolute value of @var{k} must not be greater than the number of\n\
19038
9e3c35d934ab doc: Periodic spell check of documentation.
Rik <rik@octave.org>
parents: 18112
diff changeset
353 subdiagonals or superdiagonals.\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
354 \n\
10840
89f4d7e294cc Grammarcheck .cc files
Rik <octave@nomad.inbox5.com>
parents: 10687
diff changeset
355 For example:\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
356 \n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
357 @example\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
358 @group\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
359 tril (ones (3), -1)\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
360 @result{} 0 0 0\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
361 1 0 0\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
362 1 1 0\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
363 @end group\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
364 @end example\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
365 \n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
366 @noindent\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
367 and\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
368 \n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
369 @example\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
370 @group\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
371 tril (ones (3), 1)\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
372 @result{} 1 1 0\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
373 1 1 1\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
374 1 1 1\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
375 @end group\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
376 @end example\n\
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
377 \n\
17281
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 16816
diff changeset
378 If the option @qcode{\"pack\"} is given as third argument, the extracted\n\
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 16816
diff changeset
379 elements are not inserted into a matrix, but rather stacked column-wise one\n\
bc924baa2c4e doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents: 16816
diff changeset
380 above other.\n\
12639
4d777e05d47c doc: Review and update documentation for "Matrix Manipulation" chapter.
Rik <octave@nomad.inbox5.com>
parents: 12546
diff changeset
381 @seealso{diag}\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
382 @end deftypefn")
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
383 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
384 return do_trilu ("tril", args);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
385 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
386
15039
e753177cde93 maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents: 14854
diff changeset
387 DEFUN (triu, args, ,
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
388 "-*- texinfo -*-\n\
20853
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
389 @deftypefn {} {} triu (@var{A})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
390 @deftypefnx {} {} triu (@var{A}, @var{k})\n\
1142cf6abc0d 2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents: 20831
diff changeset
391 @deftypefnx {} {} triu (@var{A}, @var{k}, @var{pack})\n\
12546
39ca02387a32 Improve docstrings for a number of functions.
Rik <octave@nomad.inbox5.com>
parents: 11586
diff changeset
392 See the documentation for the @code{tril} function (@pxref{tril}).\n\
20172
4f45eaf83908 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19697
diff changeset
393 @seealso{tril}\n\
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
394 @end deftypefn")
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
395 {
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
396 return do_trilu ("triu", args);
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
397 }
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
398
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
399 /*
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
400 %!test
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
401 %! a = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
402 %!
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
403 %! l0 = [1, 0, 0; 4, 5, 0; 7, 8, 9; 10, 11, 12];
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
404 %! l1 = [1, 2, 0; 4, 5, 6; 7, 8, 9; 10, 11, 12];
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
405 %! l2 = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12];
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
406 %! lm1 = [0, 0, 0; 4, 0, 0; 7, 8, 0; 10, 11, 12];
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
407 %! lm2 = [0, 0, 0; 0, 0, 0; 7, 0, 0; 10, 11, 0];
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
408 %! lm3 = [0, 0, 0; 0, 0, 0; 0, 0, 0; 10, 0, 0];
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
409 %! lm4 = [0, 0, 0; 0, 0, 0; 0, 0, 0; 0, 0, 0];
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11570
diff changeset
410 %!
17787
175b392e91fe Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents: 17744
diff changeset
411 %! assert (tril (a, -4), lm4);
14501
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
412 %! assert (tril (a, -3), lm3);
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
413 %! assert (tril (a, -2), lm2);
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
414 %! assert (tril (a, -1), lm1);
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
415 %! assert (tril (a), l0);
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
416 %! assert (tril (a, 1), l1);
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
417 %! assert (tril (a, 2), l2);
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
418
14501
60e5cf354d80 Update %!tests in DLD-FUNCTIONS/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
419 %!error tril ()
9756
b134960cea23 implement built-in tril/triu
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
420 */